我的设计师指定了要绘制的颜色。当我尝试在 Cocoa 应用程序中绘制该颜色时,得到的颜色与 Sketch.app 显示的引用图像明显不同。
我制作了一个小的 Cocoa 应用程序来绘制自定义 View 。这是代码中有趣的部分。请注意,我正在初始化 SRGB 空间中的颜色。
class View: NSView {
override func drawRect(dirtyRect: NSRect) {
let components : [CGFloat] = [156.0/255.0, 0, 254.0/255.0, 1]
let color = NSColor.init(SRGBRed: components[0], green: components[1], blue: components[2], alpha: components[3])
color.setFill()
NSRectFill(self.bounds)
}
}
这是它绘制的内容。 (不用介意有关光标的部分。我删除了窗口阴影,这样可以更轻松地与其他窗口并排查看它。)
这是 Sketch 文件部分:
将所有内容放在一起,这是 Sketch 文件和自定义 View 的并排,以及显示鼠标光标下颜色值的 Xscope 放大镜。
将鼠标悬停在 Sketch 文件上时,我看到以下内容:
将鼠标悬停在自定义 View 上时,我看到以下内容:
您可以看到,Xscope 读取的黑色鼠标光标下像素的颜色值明显不同。在我的 Retina Macbook Pro 显示屏上,颜色看起来也有很大不同,但有趣的是,在捕获的 PNG 屏幕截图中并没有那么不同。
但是:到目前为止,这一切都是使用默认显示设置和颜色配置文件“彩色 LCD”完成的(硬件是带有内置显示屏的 Retina Macbook Pro)。当我在 OSX 设置应用程序中手动将显示配置文件更改为“sRGB IEC61966-2.1”,然后使用 Xscope 再次采样颜色时,您可以看到这些采样值:
在对自定义 View 进行采样时:
最有趣的是,您可以看到 Xscope 在我的自定义 View 上采样的值与指定值完全匹配,并且颜色在视觉上也是正确的。但当然,我不能让我的用户更改他们的显示配置文件。
我的问题:如何使用默认彩色 LCD 显示配置文件使我的自定义 View 颜色与 Sketch 中的颜色完全匹配(用于目视检查和使用 Xscope 放大镜采样时)?
最佳答案
我自己刚刚解决了这个问题。这是我的过程。刚刚在 Retina Macbook Pro 上进行了测试。
- 打开草图。
- 打开数字色度计(安装在 OSX 上)
- 切换到“以通用 RGB 显示”
- 在菜单中,确保“查看 -> 显示值 -> 作为十进制”
- 将鼠标悬停在草图中图稿的颜色上并记下值(例如 0、150、200)
在 Cocoa 中使用该值:
-(void)drawRect:(NSRect)dirtyRect {
[[NSColor colorWithCalibratedRed:0/255.0 green:150/255.0 blue:200/255.0 alpha:1] set];
NSRectFill(self.bounds);
}
这应该可行,因为“通用 RGB”是一个与设备无关的空间,相当于 Cocoa 中的“校准”色彩空间。
关于cocoa - 如何让我的 Cocoa 应用程序准确绘制设计师在 Sketch 中指定的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745378/