使用C++调整图像的亮度/对比度,而不需要使用任何其他第三方库或依赖项。
图像亮度在这里 - 使用RGB值的平均值并进行偏移。
对比度在这里,还提供其他语言的解决方案。
如果上述链接失效,请编辑:
Jerry Coffin下面给出的答案涵盖了同一主题,并且链接仍然有效。
但是,要调整亮度,需要为图像的R、G、B字段添加一个常数值。确保使用饱和数学-不要允许值低于0或高于您的位深度所允许的最大值(24位颜色的8位)。
RGB_struct color = GetPixelColor(x, y);
size_t newRed = truncate(color.red + brightAdjust);
size_t newGreen = truncate(color.green + brightAdjust);
size_t newBlue = truncate(color.blue + brightAdjust);
为了对比,我从这个网站获取了代码并进行了微调:
float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));
RGB_struct color = GetPixelColor(x, y);
size_t newRed = truncate((size_t)(factor * (color.red - 128) + 128));
size_t newGreen = truncate((size_t)(factor * (color.green - 128) + 128));
size_t newBlue = truncate((size_t)(factor * (color.blue - 128) + 128));
truncate(int value)
保证8位颜色的值在0到255之间。需要注意的是,许多CPU都有内建函数可以在一个时钟周期内完成此操作。
size_t truncate(size_t value)
{
if(value < 0) return 0;
if(value > 255) return 255;
return value;
}
C++
编写。 - ereOn