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

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

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

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

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

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

最佳答案

没有一种“纯” 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中,然后在运行时从应用程序的资源中加载。

关于cocoa - 如何创建与Photoshop UI样机中的实例完全匹配的NSColor实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/426979/

10-13 04:54