为什么Windows / OS X上的颜色显示不同?

时间:2011-01-17 20:05:56

标签: windows macos colors

我们正在将应用程序从Windows移植到Mac OS,并且两种平台上的颜色显示不同。这是一个例子:

Mysterious color difference

在这种情况下,我们告诉应用程序使用绿色0,140,​​0和蓝色25,0,75。在Windows上,这很好用(顶部图像)。在Mac上,显然OS X决定“重新解释”颜色并以不同方式显示它们(底部图像)。

我们可以做些什么来告诉操作系统停止使用我们的颜色定义进行创作?如果mac任意改变我们的颜色定义约10%,那么在两个平台上都很难看起来很好。

编辑:以下是我们用于设置上面使用的蓝色的代码的示例:

    m_colour = CGColorCreateGenericRGB(25 / 255.0, //r
                                       0 / 255.0,  //g
                                       75 / 255.0, //b
                                       1.0);       //a

感谢。

1 个答案:

答案 0 :(得分:4)

Mac使用名为ColorSync的复杂色彩空间系统来确保不同设备上的颜色相同。因此,RGB空间中的颜色有时可能会略微偏移,因此在正确校准的显示器,打印机等上,它们看起来相同。

如果您向我们展示了用于生成绿色阴影的代码,我们可以向您展示如何修改它以避免这种颜色校正。但是,除非有一个迫切的理由要避免它,否则通常最好让它发生,因为你没有广泛的显示模型可供测试。

编辑: CGColorCreateGenericRGB()在通用RGB颜色空间中创建一种颜色,因此根据您的显示器校准,它最终会稍微移位。不幸的是,不再可能(从Mac OS X 10.4开始)创建一个与设备相关的CGColor实例(因此不需要校准)。但是,您可以创建一个{{ 1}}在目标绘图上下文的颜色空间中 - 这将告诉Quartz不需要转换。

如果您自己创建了上下文,则应该保留对所使用的颜色空间的引用(类型为CGColor。)如果它位于Cocoa级别(例如由{{1创建的上下文)或者CGColorSpaceRef,您应该使用相关的-[NSImage lockFocus] API而不是-[NSView drawRect:] API(即NSColor。)

如果必须使用Quartz绘图,可以调用CGColor告诉上下文如何转换颜色,但无法保证不会进行转换。