开发者社区> 问答> 正文

如何改进getShade方法以考虑sRGB到线性空间的转换?

如何改进getShade方法以考虑sRGB到线性空间的转换?

展开
收起
不吃核桃 2024-08-28 08:11:29 11 0
1 条回答
写回答
取消 提交回答
  • 可以在将颜色值与阴影系数相乘之前,先将颜色值从sRGB空间转换到线性空间,计算阴影后再转换回sRGB空间。由于sRGB到线性空间的转换大致可以通过对颜色值进行2.2次幂运算来近似,而线性空间到sRGB的转换则可以通过对值进行1/2.2次幂运算来近似。因此,改进后的getShade方法如下:
    java
    public static Color getShade(Color color, double shade) {
    double redLinear = Math.pow(color.getRed() / 255.0, 2.2) shade;
    double greenLinear = Math.pow(color.getGreen() / 255.0, 2.2)
    shade;
    double blueLinear = Math.pow(color.getBlue() / 255.0, 2.2) * shade;

    int red = (int) (Math.pow(redLinear, 1 / 2.2) * 255); 
    int green = (int) (Math.pow(greenLinear, 1 / 2.2) * 255); 
    int blue = (int) (Math.pow(blueLinear, 1 / 2.2) * 255); 
    
    return new Color(red, green, blue); 
    }
    

    注意:这里对颜色值进行了归一化处理(除以255.0),并在最后转换回sRGB空间时重新乘以255以得到正确的颜色值范围。

    2024-08-28 13:50:09
    赞同 26 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载