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

标签 cocoa appkit nscolorspace

我的设计师指定了要绘制的颜色。当我尝试在 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)
    }    
}

这是它绘制的内容。 (不用介意有关光标的部分。我删除了窗口阴影,这样可以更轻松地与其他窗口并排查看它。)

enter image description here

这是 Sketch 文件部分:

enter image description here

将所有内容放在一起,这是 Sketch 文件和自定义 View 的并排,以及显示鼠标光标下颜色值的 Xscope 放大镜。

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

enter image description here

将鼠标悬停在自定义 View 上时,我看到以下内容:

enter image description here

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

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

enter image description here

在对自定义 View 进行采样时:

enter image description here

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

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

最佳答案

我自己刚刚解决了这个问题。这是我的过程。刚刚在 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);
}

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

关于cocoa - 如何让我的 Cocoa 应用程序准确绘制设计师在 Sketch 中指定的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745378/

相关文章:

cocoa - Hillegass : Cocoa Prog 3rd Ed: Ch. 33 在 OpenGL : Where's the torus? 上

regex - 在cocoa中解析URL

objective-c - 如何实现图标单选组?

swift - 如何将 NSColorPanel 正确连接到服务器以避免过载

macos - UISwitch,Mac 上有类似的东西吗?

ios - 比较 OSX 和 iOS 两个节点的 SKColor?

cocoa - 使用 OS X NSColorspace 切换颜色同步配置文件

macos - 使用 NSXPCListener 执行常规任务的帮助程序应用

cocoa - 在 Cocoa 中每帧绘制一次