gpt4 book ai didi

c++ - 快速线性转换为 sRGB

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:38 25 4
gpt4 key购买 nike

这样用Lookup table把颜色从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) )];
}

最佳答案

是的,我觉得这很好。事实上,您或许可以使用较小的 table 。

如果我觉得迂腐,我会说你从 float 到 int 的转换总是使值稍微变暗。您可以通过更改第 6 行来改进它:

float Lin = (i+0.5) / (float) (table.length-1);

或更改第 16 行:

return 255 & table[(int)( Linear*(table.length-1) + 0.5 )];

但不是两者兼而有之。任一修复都将舍入误差居中为零。但是,舍入误差仍然存在,而且小到不值一提,所以我认为你的代码没问题。

关于c++ - 快速线性转换为 sRGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27467254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com