如何让我的Cocoa应用程序精确绘制我的设计师在Sketch中指定的颜色?

Jaa*_*nus 5 cocoa appkit nscolorspace

我的设计师指定了要绘制的颜色.当我尝试在Cocoa应用程序中绘制该颜色时,我得到的结果颜色与Sketch.app显示的参考图像明显不同.

我制作了一个小型Cocoa应用程序,可以绘制自定义视图.这是代码中有趣的部分.请注意,我正在初始化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)
    }    
}
Run Code Online (Sandbox Code Playgroud)

这是它绘制的内容.(没关系光标的部分.我删除了窗口阴影,这样就可以更容易地与其他窗口并排查看.)

在此输入图像描述

这是Sketch文件部分:

在此输入图像描述

将它们放在一起,这里是Sketch文件和自定义视图的并排,以及显示鼠标光标下的颜色值的Xscope放大镜.

将鼠标悬停在Sketch文件上时,我看到:

在此输入图像描述

将鼠标悬停在我的自定义视图上时,我会看到:

在此输入图像描述

您可以看到Xscope读取的黑色鼠标光标下的像素颜色值明显不同.我的Retina Macbook Pro显示器的颜色也有很大不同,但有趣的是,在捕获的屏幕截图PNG中没有那么不同.

但是:到目前为止,这一切都是通过默认显示设置和颜色配置文件"Color LCD"完成的(硬件是Retina Macbook Pro及其内置显示屏).当我在OSX设置应用程序中手动将显示配置文件更改为"sRGB IEC61966-2.1",然后使用Xscope再次采样颜色时,您可以看到这些采样值:

在此输入图像描述

在对自定义视图进行采样时:

在此输入图像描述

最有趣的是,您可以看到Xscope在我的自定义视图上采样的值与指定的值完全匹配,并且颜色在视觉上也是正确的.但是,当然,我不能让我的用户更改他们的显示配置文件.

我的问题:如何使我的自定义视图颜色与Sketch中的颜色(用于目视检查和使用Xscope放大镜采样时)与默认的彩色LCD显示配置文件完全匹配?

Dan*_*ick 0

我自己刚刚解决了这个问题。这是我的过程。刚刚在 Retina Macbook Pro 上进行了测试。

  1. 打开草图。
  2. 打开数字色度计(安装在 OSX 上)
  3. 切换到“以通用 RGB 显示”
  4. 在菜单中,确保“查看 -> 显示值 -> 作为十进制”
  5. 将鼠标悬停在草图中图稿的颜色上并记下值(例如 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);
}
Run Code Online (Sandbox Code Playgroud)

这应该可行,因为“通用 RGB”是一个独立于设备的空间,相当于 Cocoa 中的“校准”色彩空间。