调整图片亮度

// 功能说明:使用EasyX图形库实现图片变暗和变亮效果。通过调整每个像素的RGB值来实现亮度变化。
// 变暗效果:将每个像素的RGB值按比例减小(乘以小于1的系数)。
// 变亮效果:将每个像素的RGB值按比例增大(乘以大于1的系数),并确保值不超过255。
// 注意:EasyX图形库适用于Windows平台,本代码假设在Windows环境下编译运行。
// 改进建议:可以添加更复杂的亮度调整算法,如Gamma校正,或支持用户交互调整亮度级别。

#include <graphics.h>
#include <conio.h>

// 函数:调整图片亮度
// 参数:brightnessFactor - 亮度调整系数,大于1变亮,小于1变暗
void ChangeBrightness(float brightnessFactor,RECT r)
{
    // 遍历每个像素点
    for (int x = r.left; x < r.right; x++) {
        for (int y = r.top; y < r.bottom; y++) {
            // 获取当前像素的颜色
            COLORREF color = getpixel(x, y);

            // 提取RGB分量
            int r = GetRValue(color);
            int g = GetGValue(color);
            int b = GetBValue(color);

            // 调整亮度:将每个分量乘以系数,并确保值在0-255范围内
            r = static_cast<int>(r * brightnessFactor);
            g = static_cast<int>(g * brightnessFactor);
            b = static_cast<int>(b * brightnessFactor);

            // 限制RGB值在0-255之间
            r = (r > 255) ? 255 : (r < 0 ? 0 : r);
            g = (g > 255) ? 255 : (g < 0 ? 0 : g);
            b = (b > 255) ? 255 : (b < 0 ? 0 : b);

            // 设置调整后的像素颜色
            putpixel(x, y, RGB(r, g, b));
        }
    }
}

int main() {
    
    initgraph(640, 480);
    // 加载一张图片绘制在平铺在窗口上
    // 方便改变亮度之后进行对比
    IMAGE img;
    loadimage(&img, "01.png");
    putimage(0, 0, &img);
    putimage(img.getwidth(), 0, &img);
    putimage(2 * img.getwidth(), 0, &img);
    // 调整亮度:变暗效果,系数0.5
    ChangeBrightness(0.5, { 0,0,img.getwidth(),img.getheight() });
    // 调整亮度:变亮效果,系数1.5
    ChangeBrightness(1.5, { 2 * img.getwidth(),0,3 * img.getwidth(),img.getheight() });
    while (1);
    // 关闭图形窗口
    closegraph();
    return 0;
}
posted @ 2026-01-27 17:07  让泪化作相思雨  阅读(4)  评论(0)    收藏  举报