注意这里有一点混乱。通常我们说做一个gamma=c的校正,意思是指做output = input ^ (1/c)的变换。有一个倒数关系。
Gamma校正示意图
对于PC,显示器的Gamma是2.2左右(可能以前更多的是2.5,现在好像趋向2.2了),一般没有内置的校正,所以我们说Adobe Gamma对Windows系统默认的校正系数2.2。对于MAC,显示器的Gamma是2.5,硬件内置了1.4的校正,所以它还需要2.5/1.4~=1.8的校正才成为线性的。下文对各种系统下的gamma校正过程有更详细的说明。
四. Gamma校正可能发生在哪里
4.1. 系统级(硬件、操作系统)
显示器内没有听说过有何补偿,即使有,它们也对外呈现一定的gamma值。
主要的补偿发生在显卡及其驱动程序类。如果显卡硬件不支持,则由驱动程序软件完成。在Windows中,上层通过调用驱动程序的一个接口函数(DrvIcmSetDeviceGammaRamp)向其传递Gamma校正表(LUT),这个表的大小是3*256项(每项16字节),对应于RGB三个通道,每个通道256级。
描述这一细节,可以对有些事情更有把握:
* 这种校正实际上可以是任意函数,而不限于gamma为幂的指数函数。
* 也是因为此,不能通过驱动程序得到系统的gamma值(因为最多只能得到那个表)。
* 这一设置对整个系统有效(任何程序,任意显示的图片都受它影响)。
以前我一直不明白Adobe Gamma和驱动程序的Gamma是什么关系,它们一起出现就不知所措。还有人说它们是共同作用的。现在我完全明白了,没有迭加关系,最后者的设置有效。而且,Adobe Gamma也不必是(实际上也不是)一个驻留程序,它仅在启动时将那个表传给驱动程序就完成了它的任务。
还可以用其它程序来校正/设置gamma,下面是一个方便的小工具:Gamma Panel。(查看本文中的图片,需要经常改变gamma,最好下一个,Free的。)
全部评论