如何获取显示器正在使用的颜色配置文件



我想让颜色在不同的环境中看起来一致。我想知道是否有一种方法可以知道系统或显示器当前使用的颜色配置文件,这样我就可以将颜色转换为系统渲染的正确颜色空间。

感谢Brendan解释Windows上的解决方案。但是有人知道Mac是什么样子的吗?

我想知道是否有一种方法可以知道系统或显示器当前使用的颜色配置文件,这样我就可以将颜色转换为正确的颜色空间,供系统渲染。

有一种方法(例如IDXGIOutput6::GetDesc1方法-请参阅https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_6/nf-dxgi1_6-idxgioutput6-getdesc1(。

不幸的是,这不是很方便。原始信息似乎不包括伽马的任何信息;并且将原始信息(RedPrimary、GreenPrimary、BluePrimary、WhitePoint(转换为颜色转换矩阵所需的数学很难找到。

更糟的是;当同一图形/窗口在具有不同颜色配置文件的多个显示器上拉伸时,它无法工作;当最终用户重新配置监视器设置时,可能会中断(因为这没有反映在Windows从监视器获得的值中(,并且监视器可能会随着时间的推移而更改。这些事情给最终用户带来了负担(确保所有显示器匹配,定期进行显示器校准以获得准确的颜色等(,而大多数用户(不包括专业的图形设计师(不会这样做。

注意:理想情况下;OS将提供标准的宽色域线性颜色空间(例如,可能是CIE XYZ(,并对所有软件进行颜色空间转换(例如,在后台使用GPU,对每个监视器单独进行(;但Window的API很旧(在20世纪90年代可能会很昂贵(,向后兼容性使得很难对其进行改造,所以它们大多只是采用了";假设sRGB,即使它是错误的";对于需要准确颜色的软件开发人员来说,这简直是一团糟

由于您正在询问Windows颜色属性,Win API的监视器配置函数部分可用,可用于获取(和设置(颜色属性。以下只是几个例子:

  • GetMonitorColorTemperature
  • GetMonitorRedGreenOrBlueDrive
  • GetMonitorRedGreenOrBlueGain
  • GetMonitorBrightness

每个链接中都列出了构建和运行应用程序所需的每个函数的特定组件。例如

highlevelmonitorconfigurationapi.h
Dxva2.lib
Dxva2.dll

最新更新