gpt4 book ai didi

windows - 为什么颜色在 Windows/OS X 上显示不同?

转载 作者:可可西里 更新时间:2023-11-01 10:01:32 24 4
gpt4 key购买 nike

我们正在将一个应用程序从 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

谢谢。

最佳答案

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

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

编辑: CGColorCreateGenericRGB() 在通用 RGB 颜色空间中创建一种颜色,因此它最终会根据您的显示校准而略有变化。对您来说不幸的是,不再可能(从 Mac OS X 10.4 开始)创建一个 CGColor 的实例,该实例依赖于设备(因此不受校准影响)。但是,您可以创建目标绘图上下文的颜色空间中的 CGColor——这将告诉 Quartz 不需要转换。

如果您自己创建了上下文,您应该保留对您使用的颜色空间的引用(CGColorSpaceRef 类型)。如果它在 Cocoa 级别(例如由创建的上下文-[NSImage lockFocus]-[NSView drawRect:] 那么你应该使用相关的 NSColor API 而不是 CGColor API(即 +[NSColor colorWithDeviceRed:green:blue:alpha:]。)

如果您必须使用 Quartz 绘图,您可以调用 CGContextSetRenderingIntent() 来告诉上下文您希望如何转换颜色,但不能保证不会发生转换。

关于windows - 为什么颜色在 Windows/OS X 上显示不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com