gpt4 book ai didi

c++ - 使用 C++ 调整位图图像亮度/对比度

转载 作者:太空狗 更新时间:2023-10-29 20:18:51 31 4
gpt4 key购买 nike

在不使用任何其他第 3 方库或依赖项的情况下使用 C++ 调整图像亮度/对比度

最佳答案

图像亮度为 here - 使用 RGB 值的平均值并移动它们。

对比度为 here也提供其他语言解决方案。


编辑以防上述链接失效:

下面 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);

相比之下,我从 this website 中获取并稍作修改的代码:

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++ - 使用 C++ 调整位图图像亮度/对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2976274/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com