我的UI设计器为我提供了在Photoshop中创建的优秀UI模型.我希望与模型中的颜色完全匹配,但每次使用-colorWithCalibratedRed:green:blue:alpha:
NSColor方法创建颜色时,颜色都不匹配.
我尝试使用/ Developer/Applications/Graphics Tools /中的Pixie应用程序对Photoshop模型中的颜色进行采样,并将NSColor定义复制到剪贴板,但是当我构建和运行应用程序时,这些颜色不正确.
如果我使用Photoshop颜色选择器提供的值,它们也不正确.
我怀疑这必须与我从屏幕上采样校准颜色的事实有关,因此值不正确,但我不知道如何解决这个问题.
如果我使用-colorWithDeviceRed:green:blue:alpha:
并传递它看起来正确的值,但是其他系统上的颜色不一致.
有没有办法可靠地做到这一点?
从一个显示器到另一个显示器,没有"纯"RGB颜色这样的东西是一致的.除非您在标准化的色彩空间中工作,否则在一个显示器上显示颜色的数字可能会在另一个显示器上略有不同.
让您的设计师将您的模型转换为标准色彩空间,例如sRGB.然后你可以使用NSColor上的方法,它们不仅包含组件值,还包含组件所在的颜色空间; 这将为您提供在任何显示器上看起来相似的颜色.
换句话说,使用sRGB在Photoshop中使用(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中,然后在运行时从应用程序的资源加载.