NSColor, 10.6 and Gamma 2.2

6

随着Snow Leopard的推出,屏幕默认伽玛值从1.8变为2.2。我正在开发一些使用Cocoa提供的非常暗的自定义颜色方案的Mac应用程序。在10.5上看起来很好,但是在新的伽玛值下的10.6上则会变得更加黑暗,对眼睛造成很大的负担。

该颜色方案使用许多[NSColor colorWithCalibratedRed:green:blue:alpha:]对象在主题类中进行定义。

是否有任何方法可以“转换”NSColor对象,以便它在10.6上显示与在10.5上完全相同?

我知道这可以在系统偏好设置中全局实现,但这不是我想要的。


那个API调用与[NSColor colorWithDeviceRed:green:blue:alpha:]有何不同? - fbrereto
2
从文档中可以得知,“通常建议您使用经过校准(或通用的)颜色空间而不是设备颜色空间。设备颜色空间中的颜色可能因设备而异,而校准的颜色空间通常会产生相当精确的颜色。另一方面,设备颜色空间在某些情况下可能会提供更好的性能,因此,如果您确定将呈现或捕获颜色的设备,请使用设备颜色空间。” - Stephen Blinkhorn
2个回答

0

我唯一遇到的问题是在深色渐变方面。10.4仍然是一个有效的目标,因此我已经使用基于CGShading对象的自己的渐变包装类有一段时间了(NSGradient仅适用于10.5+)。

基于以下公式的简单非线性校正曲线可以帮助解决问题:

colour_component = pow(colour_component, 1.0/1.19);

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

如果在运行时(使用Gestalt)检测到10.6,则在计算渐变之前,将该曲线应用于起始和结束颜色的红色、绿色和蓝色组件中。我保留了alpha值不变。

我还添加了一个方便的用户首选项来打开或关闭此功能。


0

最好的做法是将颜色配置文件存储在颜色显示看起来好的显示器上。

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

基本上,你会有:

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

你总是会有四项中的三项 - 你只需要计算出新颜色。

如需更多信息,请阅读以下内容:

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


谢谢,我需要访问红、绿、蓝和透明度颜色组件。据我所知,只有使用colorWithCalibratedRed:...和colorWithDeviceRed:...创建的NSColor对象可以让你自由访问它们。 - Stephen Blinkhorn
实际上不是这样的。一旦你真正深入了解所有细节,你可以做任何你喜欢的事情。尽管有时候你需要意识到,例如,一个RGB颜色可能代表多个CMYK颜色... - ericg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接