【问题标题】:How do I create NSColor instances that exactly match those in a Photoshop UI mockup?如何创建与 Photoshop UI 模型中的实例完全匹配的 NSColor 实例?
【发布时间】:2009-01-09 03:27:10
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: cocoa user-interface colors


    【解决方案1】:

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

    【讨论】:

    • 谢谢,克里斯,这似乎是拼图中缺失的部分。
    • 我看过 NSColorList 但它似乎并没有比仅仅创建一个颜色的 NSDictionary 提供任何优势,或者就此而言只是一堆带有颜色定义的#defines。是否有任何理由首选使用 NSColorList 文件?
    • 这是Mac OS X支持的标准格式,可以在任何颜色面板中打开。
    • 这很有帮助!我很好奇为什么 sRGB 不是默认色彩空间?
    【解决方案2】:

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

    【讨论】:

    • 是的,我已经关闭了 Photoshop 中的所有色彩管理。如果我在预览中打开文件,也会出现同样的问题。
    • 抱歉,模型文件是 RGB 颜色空间,而不是 CMYK、Lab 等其他的,对吧?
    • 我建议创建一个带有纯红色、绿色和蓝色像素的测试 PSD,并应用与读取颜色完全相同的方法。您通过受控测试获得的结果可能有助于诊断问题。
    【解决方案3】:

    谢谢,我刚刚尝试使用纯 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],我会得到相同的结果。

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 2017-06-04
      • 2018-07-27
      • 2012-12-11
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多