调整图片亮度
// 功能说明:使用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;
}

浙公网安备 33010602011771号