代码之家  ›  专栏  ›  技术社区  ›  Rob Keniger

如何创建与Photoshop UI模型中的NSColor实例完全匹配的NSColor实例?

  •  10
  • Rob Keniger  · 技术社区  · 17 年前

    我的UI设计器为我提供了在Photoshop中创建的很棒的UI模型。我想精确匹配模型中的颜色,但每次我使用 -colorWithCalibratedRed:green:blue:alpha: 使用NSColor方法时,颜色不匹配。

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

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

    我怀疑这一定是因为我正在从屏幕上采样校准过的颜色,因此值不正确,但我不确定如何解决这个问题。

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

    3 回复  |  直到 17 年前
        1
  •  8
  •   Chris Hanson    17 年前

    从一个显示器到下一个显示器,没有“纯”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];
    

        2
  •  2
  •   Ates Goral    17 年前

        3
  •  0
  •   Rob Keniger    17 年前

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

    当我采样PSD(在Photoshop或预览中打开)时,Pixie显示纯值(例如红色为R:255G:0B:0),但当我采样我的应用程序时,它显示非纯颜色,例如[NSColor redColor]为R:253G:2B:30)。如果我使用 [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0] 而不是[NSColor redColor]。