加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:28:08 所属栏目:百科 来源:网络整理
导读:使用c调整图像亮度/对比度,而不使用任何其他第三方库或依赖性 解决方法 图像亮度为 here(死链接) – 使用RGB值的平均值并移动它们. 对比度为here(死链接),也提供其他语言解决方案. 编辑链接已死: Jerry Coffin在下面给出的答案涵盖了相同的主题,并且链接仍
使用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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读