像素的颜色空间决定了像素数值的解读方式。这与像素格式不同,像素格式指定不同通道及其位在内存中的排列方式。
线性颜色空间与 sRGB 颜色空间
我们将重点关注两种颜色空间:线性颜色空间和 sRGB 颜色空间。两者可以采用相同的像素格式,例如 BGRA32,这意味着每个蓝色通道、绿色通道和 alpha 通道都有 8 位。不过,这些位的解译方式可能会有所不同。
在线性颜色空间中,值加倍会导致强度加倍。将两种颜色加在一起就变得非常简单,只需将每个通道的值相加即可。
另一方面,sRGB 是非线性的,这意味着将任何值加倍不会使该值的强度加倍。
理由
非线性颜色空间也非常直观,为什么还要使用呢?
答案很简单,人眼并不会以线性方式感知光线。例如,相比明亮的环境,它能够更好地辨别光线在弱光环境中的差异。因此,sRGB 等非线性颜色空间能够更好地表现图像,就像我们在现实生活中看到的那样。
对您的影响
屏幕截图协议会以 sRGB 颜色空间输出图片。这意味着,如果您要将其用于非饱和像素比较测试,则应将屏幕截图从 sRGB 转换为线性颜色空间。非饱和像素表示一个或多个通道为非 0 或非 1 通道。
但是,如果您使用图片创建 GPU 资源,则无需进行这种转换,您可以将输出用作 VK_FORMAT_*_SRGB。