Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSColor:使用设备着色。。。在第二个监视器上不工作_Objective C_Cocoa_Macos_Color Space_Nscolor - Fatal编程技术网

Objective c NSColor:使用设备着色。。。在第二个监视器上不工作

Objective c NSColor:使用设备着色。。。在第二个监视器上不工作,objective-c,cocoa,macos,color-space,nscolor,Objective C,Cocoa,Macos,Color Space,Nscolor,为了能够校准监视器,我必须能够以设备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]];

为了能够校准监视器,我必须能够以设备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 1.0]放进去,你可能会得到类似[0.2 0.1 1.0]的东西


任何人都知道如何摆脱这种额外的转换。根据我的意见,DeviserGB应该是DeviserGB。为了创建第二个监视器的配置文件,这是必需的。现在我必须将菜单栏移动到第二个监视器,创建配置文件并将其移回。但对于我们的应用程序,客户需要能够进行验证,这需要经常进行。同样的问题也发生在这里。

这听起来像是一个bug。我建议


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

CGContextSEtRGBFillColor:(100,0,0)->(100,12,0),(0,100,0)->(0,100,0),(0,0,100)->(24,0,100)也有同样的问题。只有纯绿色仍然是纯绿色。@user850121:听起来像是我报告的一个bug(7542845),关于使用旧的Apple Studio显示器(LCD)作为我的主显示器。蓝色是最明显的,令人痛苦;我附上了Deus Ex的截图,这是一款蓝色重磅游戏,看起来非常紫色。我仍然建议您自己归档一个bug,并在其中记录您的不同情况(外部显示)。