将线性转换为Apple Display P3色彩空间的公式,反之亦然

时间:2019-01-21 20:03:29

标签: ios image-processing colors shader metal

我正在开发一个进行图像处理的应用程序。 在此应用中,我需要将 Linear应用于Apple Display P3 颜色转换到我的纹理( Linear )。该操作将必须使用着色器完成,我已经使用来自Apple documentation archive的这些方程式创建了一个着色器,这些方程式将 Linear转换为sRGB,反之亦然:

rgb = mix(rgb.0.0774, pow(rgb*0.9479 + 0.05213, 2.4), step(0.04045, rgb))
rgb = mix(rgb12.92, pow(rgb*0.4167) * 1.055 - 0.055, step(0.00313, rgb))

我的问题是将线性转换为Apple Display P3 颜色空间,反之亦然的方程是什么?

1 个答案:

答案 0 :(得分:1)

Display P3颜色空间中线性RGB和编码RGB之间的转换与sRGB相同。

请注意,即使DCI-P3和Display P3使用相同的红色,绿色和蓝色点,它们也不是相同的色彩空间(前者使用简单的幂函数在线性和编码RGB之间进行转换;例如, private (string someVar1, string someVar2) ParseInfo(Info info) { return (someVar1: "test1", someVar2: "test2"); } 转换为线性)。

还请注意,“线性RGB”是对纹理颜色的不完整描述。相反,纹理必须位于某些已知的颜色空间中(例如sRGB或DCI-P3);如果纹理没有嵌入的颜色配置文件,则通常为sRGB。在许多情况下,“线性RGB”只是意味着相应的颜色空间的传递函数并未应用于纹理的RGB颜色。