首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速线性化成sRGB

快速线性化成sRGB
EN

Stack Overflow用户
提问于 2014-12-14 07:26:15
回答 1查看 1.6K关注 0票数 1

以这种方式使用查找表将颜色从0.0到1.0转换为从0到255的sRGB空间是一种很好的方法。

示例,在Java

代码语言:javascript
复制
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) )];
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-29 01:00:06

是的,我觉得挺好的。实际上,您可能可以使用一个较小的表。

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

代码语言:javascript
复制
float Lin = (i+0.5) / (float) (table.length-1);

或通过更改第16行:

代码语言:javascript
复制
return 255 & table[(int)( Linear*(table.length-1) + 0.5 )];

但不是两者都是。要么将舍入错误的中心设置为零。但是,舍入错误仍然存在,而且它非常小,不值得提及,所以我认为您的代码很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27467254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档