11

我的 UI 设计师为我提供了在 Photoshop 中创建的出色 UI 模型。我想完全匹配模型中的颜色,但是每次我使用-colorWithCalibratedRed:green:blue:alpha:NSColor 的方法创建颜色时,颜色都不匹配。

我尝试使用 /Developer/Applications/Graphics Tools/ 中的 Pixie 应用程序从 Photoshop 模型中采样颜色,并将 NSColor 定义复制到剪贴板,但是当我构建和运行应用程序时这些颜色不正确。

如果我使用 Photoshop 颜色选择器提供的值,它们也不正确。

我怀疑这一定与我从屏幕上采样校准颜色的事实有关,因此值不正确,但我不知道如何解决这个问题。

如果我使用-colorWithDeviceRed:green:blue:alpha:并传递它看起来正确的值,但是颜色在其他系统上并不一致。

有没有办法可靠地做到这一点?

4

3 回答 3

8

不存在从一个显示器到另一个显示器一致的“纯”RGB 颜色。除非您在标准化的色彩空间中工作,否则在一个显示器上显示的颜色数字可能会在另一个显示器上呈现略有不同。

让您的设计师将您的模型转换为标准色彩空间,例如 sRGB。然后,您可以使用 NSColor 上的方法,这些方法不仅采用组件值,还采用组件所在的颜色空间;这将为您提供在任何显示器上看起来都应该相似的颜色。

换句话说,在 Photoshop 中使用 sRGB 由 (R, G, B) = (1.0, 1.0, 1.0) 制成的色板看起来应该与使用通过以下方式绘制的颜色绘制的色板几乎相同:

NSColorSpace *sRGB = [NSColorSpace sRGBColorSpace];

CGFloat components[3] = { 1.0, 1.0, 1.0 };
NSColor *sRGBRed = [NSColor colorWithColorSpace:sRGB components:&components count:3];

请注意,这+[NSColorSpace sRGBColorSpace]仅适用于 Mac OS X 10.5 Leopard 及更高版本。如果您仍需要在 Tiger 上运行,您可以编写一个在 10.5 上运行的小实用程序应用程序,并将规范的 sRGB 颜色转换为校准的 RGB 空间:

NSColor *calibratedColor = [sRGBRed colorUsingColorSpaceName:NSCalibratedRGBColorSpace];

无论您是使用 sRGB 还是校准空间,一旦您拥有一组颜色,您就可以将它们放在您写入文件的 NSColorList 中,然后在运行时从应用程序的资源中加载。

于 2009-01-09T08:06:27.977 回答
2

您是否尝试过在 Photoshop 中关闭色彩管理?启用色彩管理后,实际显示的 RGB 像素值与 Photoshop 报告的像素值可能不同。

于 2009-01-09T03:34:45.497 回答
0

谢谢,我刚刚尝试使用纯 RGB 值创建测试 PSD,并且还创建了一个简单的应用程序,其视图显示 [NSColor redColor]、[NSColor greenColor] 和 [NSColor blueColor]。

当我对 PSD 进行采样(在 Photoshop 或 Preview 中打开)时,Pixie 向我显示纯值(例如红色的 R:255 G:0 B:0),但是当我对我的应用程序采样时它显示非纯色,例如(R:253 G :2 B:30) 用于 [NSColor redColor]。如果我使用[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0]而不是 [NSColor redColor],我会得到相同的结果。

于 2009-01-09T05:52:39.087 回答