使用查找表以这种方式将色彩从线性空间从0.0转换为1.0到sRGB空间从0到255是很好的方法吗?
例如,在 Java :
byte[] table;
void initializeTable()
{
table = new byte[65536];
for(int i = 0; i < table.length; i++){
float Lin = i / (float) (table.length-1);
if(Lin<=0.0031308f)
table[i] = (byte)(255*(Lin*12.92f));
else
table[i] = (byte)(255*( (1+0.055f)*Math.pow(Lin,1/2.4f)-0.055f) );
}
}
int sRGB(float Linear/*in range 0..1*/) // Will return 0..255 integer sRGB
{
return 255 & table[(int)( Linear*(table.length-1) )];
}
答案 0 :(得分:0)
是的,这看起来很好。实际上,您可以使用较小的表格。
如果我感到迂腐,我会说你从float到int的转换总是会使值变得更暗。您可以通过更改第6行来改进它:
float Lin = (i+0.5) / (float) (table.length-1);
或改变第16行:
return 255 & table[(int)( Linear*(table.length-1) + 0.5 )];
但不是两者兼而有之。要么将舍入误差中心固定为零。但是,舍入错误仍然存在,并且它非常小,不值得一提,所以我认为你的代码很好。