【发布时间】:2020-10-19 09:07:03
【问题描述】:
我想让颜色在不同环境中看起来一致。我想知道有没有办法知道系统或显示器当前正在使用的颜色配置文件,以便我可以将颜色转换为正确的颜色空间供系统渲染。
感谢 Brendan 解释 Windows 上的解决方案。但是有没有人知道它在 Mac 上是什么样子的?
【问题讨论】:
标签: c++ c windows macos color-space
我想让颜色在不同环境中看起来一致。我想知道有没有办法知道系统或显示器当前正在使用的颜色配置文件,以便我可以将颜色转换为正确的颜色空间供系统渲染。
感谢 Brendan 解释 Windows 上的解决方案。但是有没有人知道它在 Mac 上是什么样子的?
【问题讨论】:
标签: c++ c windows macos color-space
我想知道有没有办法知道系统或显示器当前使用的颜色配置文件,以便我可以将颜色转换为正确的颜色空间供系统渲染。
有一种方法(例如 IDXGIOutput6::GetDesc1 方法 - 请参阅 https://docs.microsoft.com/en-us/windows/win32/api/dxgi1_6/nf-dxgi1_6-idxgioutput6-getdesc1 )。
不幸的是,这不是很方便。原始信息似乎不包括伽玛的任何信息;并且很难找到将原始信息(RedPrimary、GreenPrimary、BluePrimary、WhitePoint)转换为颜色转换矩阵所需的数学运算。
使情况变得更糟;当相同的图形/窗口在具有不同颜色配置文件的多台显示器上拉伸时,它无法工作;当最终用户重新配置监视器设置时可能会中断(因为这不会反映在 Windows 从监视器获取的值中),并且监视器会随着时间而改变。这些事情给最终用户带来了负担(确保所有显示器匹配,定期进行显示器校准以获得准确的颜色等),而大多数用户(不包括专业图形设计师)不这样做。
注意:理想情况下;操作系统将提供标准的广域线性色彩空间(例如,可能是 CIE XYZ)并为所有软件进行色彩空间转换(例如,在后台使用 GPU,分别为每个显示器);但是 Window 的 API 很旧(在 1990 年代它会很昂贵),并且向后兼容性使得很难改造类似的东西,所以他们大多只是采用“假设 sRGB,即使它是错误的”,并为软件添加了一个可怕的混乱需要准确颜色的开发人员。
【讨论】:
由于您询问的是 Windows 颜色属性,Win API 的Monitor Configuration Functions 部分可用,可用于获取(和设置)颜色属性。这里只是几个例子:
每个链接中都列出了构建和运行应用程序所需的每个功能的特定组件。例如。
highlevelmonitorconfigurationapi.hDxva2.libDxva2.dll
【讨论】: