首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NSImage创建NSColor

从NSImage创建NSColor
EN

Stack Overflow用户
提问于 2012-06-27 10:27:31
回答 4查看 7.1K关注 0票数 17

我有一个NSPopUpButton,它包含一个颜色列表。在颜色标题前面,我需要显示一个相同颜色的小框(可能是同一颜色的图像)。因此,我在想,如果我可以使用NSImage (已经存在)创建一个NSColor,那么我可以使用-[NSMenuItem setImage:]方法在弹出按钮的颜色标题前面显示图像。

那么,如何使用NSImage创建NSColor呢?

解决这一问题的任何其他办法也是值得欢迎的。:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-27 11:28:28

一个简单的类别方法就可以做到这一点。

代码语言:javascript
复制
@interface NSImage (ImageAdditions)

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size;


@end

@implementation NSImage (ImageAdditions)

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size
{
    NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease];
    [image lockFocus];
    [color drawSwatchInRect:NSMakeRect(0, 0, size.width, size.height)];
    [image unlockFocus];
   return image;    
}

@end

编辑删除不推荐的API

票数 19
EN

Stack Overflow用户

发布于 2016-11-22 18:16:07

如果您使用的是AppKit,这里有一个Swift 5方便初始化器版本的其他答案。遗憾的是,这在UIKit中行不通

代码语言:javascript
复制
extension NSImage {
    convenience init(color: NSColor, size: NSSize) {
        self.init(size: size)
        lockFocus()
        color.drawSwatch(in: NSRect(origin: .zero, size: size))
        unlockFocus()
    }
}

用法示例:

代码语言:javascript
复制
let redSwatchImage = NSImage(color: .red, size: NSSize(width: 128, height: 128))

如有必要,随时可以更改语义。

票数 14
EN

Stack Overflow用户

发布于 2014-11-01 12:04:03

以及上面的快速扩展变体:

代码语言:javascript
复制
import Cocoa

extension NSImage {
  class func swatchWithColor(color: NSColor, size: NSSize) -> NSImage {
    let image = NSImage(size: size)
    image.lockFocus()
    color.drawSwatchInRect(NSRect(origin: .zero, size: size))
    image.unlockFocus()
    return image
  }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11224131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档