【问题标题】:NSColor: colorWithDeviceRed... is not working on second monitorNSColor: colorWithDeviceRed... 在第二台显示器上不起作用
【发布时间】:2011-07-18 13:55:58
【问题描述】:

为了能够校准显示器,我必须能够以设备 RGB 值驱动它。

为了做到这一点,我通过以下方式创建了一个 NSColor:

[NSColor colorWithDeviceRed:(colorsPtr[cnt]/255.0f) green:(colorsPtr[cnt+1]/255.0f)
blue:(colorsPtr[cnt+2]/255.0f) alpha:1.0]

然后我把这个颜色放在视图上。

[colorView setColor:[colorsForMeasuring objectAtIndex:index]];

当我使用“DigitalColor Meter”时,仅当主显示器上显示视图时才应用此设备颜色而无需任何转换。所以只能在有菜单栏的显示器上。

如果您将视图放在第二台显示器上,看起来好像发生了从主显示器的 RGB 到第二显示器的 RGB 的转换。只有在两个显示器的色域之间存在很大差异时,您才会看到这一点。例如,我有一台配备 Eizo ColorEdge CG 245 的 MacBook Pro。如果你然后输入 [0 0 1.0],你可能会得到类似 [0.2 0.1 1.0] 的东西。

任何人知道如何摆脱这种额外的转换。在我看来,deviceRGB 应该是 deviceRGB。为了为第二台显示器制作配置文件,这是强制性的。现在我必须将菜单栏移动到第二台显示器,创建配置文件并将其移回。但是对于我们的应用程序,客户需要能够进行验证,并且需要经常进行。同样的问题也会出现在这里。

【问题讨论】:

    标签: objective-c cocoa macos color-space nscolor


    【解决方案1】:

    这对我来说听起来像是一个错误。我建议reporting it。

    作为一种解决方法,您可以尝试实现一个自定义视图,通过调用CGContextSetRGBFillColor 和CGContextFillRect 来响应drawRect:。 (你可以从the current NSGraphicsContextget the CGContext。)

    【讨论】:

    • CGContextSEtRGBFillColor 有同样的问题:(100, 0, 0) -> (100, 12, 0), (0, 100, 0) -> (0, 100, 0), (0, 0, 100) -> (24, 0, 100)。只有纯净的绿色保持纯净。
    • @user850121:听起来像是我报告的一个错误 (7542845),关于使用旧的 Apple Studio 显示器 (LCD) 作为我的主显示器。蓝色使它最明显,痛苦地如此;我附上了Deus Ex的截图,这是一款蓝色重的游戏,看起来很紫色。我仍然建议您提交自己的错误,并在其中注明您的不同情况(外部显示)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多