和将图像转换为灰度图像一样,是否有一种公式可以增加图像的亮度并在同等程度上降低亮度?我尝试为每个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时,就不能恢复原始图像。
我在网上看到有一些公式可以正确地计算这个问题。有人能解释一下吗?类似的还有对比度和gamma吗?
更新:
感谢大家提供的建议。在阅读下面的一些帖子后,我尝试了这个方法。
增加亮度:
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;
我可以看到增量效果很好,但是当我减量时,我仍然没有得到原始图像,原始图像和变亮的图像之间有一点差异!我做错了什么?