就像有一个将图像转换为灰度的公式一样,是否有一个公式可以增加图像的亮度并在同一级别降低亮度?我尝试为每个 r、g 和 b 像素添加一个值。它确实增加了亮度,但是当我降低相同的值时,我不会恢复原来的值。
var pixels = context.getImageData(...);
//loop over the pixel data and add a value
p[i] = p[i]+100;
p[i+1] = p[i+1]+100;
p[i+2] = p[i+2]+100;
这会使图像变亮。但是当我从每个像素中减少 100 时,我无法恢复原始图像。
我在网上看到有一些公式可以正确计算。谁能解释一下?同样对于对比度和伽玛?
更新:
谢谢大家的建议。在浏览了下面的一些帖子后,我尝试了这个。
为了增加亮度:
var pixels = context.getImageData(...);
//loop over the pixel data and add a value
p[i] = p[i]+100 < 255 ? p[i]+100 : 255;
p[i+1] = p[i+1]+100 < 255 ? p[i+1]+100 : 255;
p[i+2] = p[i+2]+100 < 255 ? p[i+2]+100 : 255;
对于降低亮度:
var pixels = context.getImageData(...);
//loop over the pixel data and add a value
p[i] = p[i]-100 >= 0 ? p[i]-100 : 0;
p[i+1] = p[i+1]-100 >= 0 ? p[i+1]-100 : 0;
p[i+2] = p[i+2]+100 >= 0 ? p[i+2]-100 : 0;
我可以看到增量工作正常,但是当我减量时,我仍然没有得到原始图像,原始图像和增亮图像之间存在一点差异!
我究竟做错了什么?