NSColor,10.6和Gamma 2.2

时间:2010-05-11 00:11:50

标签: objective-c cocoa macos

使用Snow Leopard,默认伽玛值从1.8变为2.2。我碰巧正在研究一些使用Cocoa提供的非常暗的自定义配色方案的Mac应用程序。在10.5它看起来很好,但在新的伽玛10.6,它更黑暗,真的很难看。

使用主题类中的众多[NSColor colorWithCalibratedRed:green:blue:alpha:]对象定义颜色方案。

有没有办法'转换'NSColor对象,使其在10.6上显示与在10.5上完全一样?

我知道这可以在“系统偏好设置”中全局实现,但这不是我追求的目标。

2 个答案:

答案 0 :(得分:0)

最好的办法是存储颜色看起来不错的显示器的颜色配置文件。

然后,使用当前使用的显示器的颜色配置文件来转换颜色。

基本上,你将拥有的是:

(带原始配置文件的原始颜色)转换为(带有当前颜色配置文件的新颜色)。

您将始终拥有四个项目中的三个 - 您只需要计算新颜色。

有关更多信息,我建议阅读:

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/DrawColor/DrawColor.html

答案 1 :(得分:0)

我唯一真正的问题是暗色渐变。 10.4仍然是一个有效的目标,所以我一直在使用我自己的基于CGShading对象的渐变包装类一段时间(NSGradient只有10.5+)。

基于以下公式的简单非线性校正曲线可以提供帮助:

colour_component = pow(colour_component, 1.0/1.19);

可以调整1.19值以创建不同的校正曲线。

如果在运行时检测到10.6(使用Gestalt),则在计算梯度之前,曲线将应用于开始和结束颜色的每个红色,绿色和蓝色分量。我没有触及alpha值。

我还添加了一个方便的用户首选项来打开和关闭它。