【发布时间】:2016-10-11 11:25:10
【问题描述】:
我需要使用 c# 降低图片的亮度。经过一些分析,我找到了一种通过调整其每个像素颜色 RGB 值来降低图像亮度的解决方案。请从下面找到代码:
Bitmap bmp = new Bitmap(Picture);
Reduce the picture color brightness
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
color = ChangeColorBrightness(color, 0.80f);
bmp.SetPixel(i, j, color);
}
}
降低特定颜色RGB值的方法:
private Color ChangeColorBrightness(Color color, float correctionFactor)
{
float red = (float)color.R;
float green = (float)color.G;
float blue = (float)color.B;
if (correctionFactor < 0)
{
correctionFactor = 1 + correctionFactor;
red *= correctionFactor;
green *= correctionFactor;
blue *= correctionFactor;
}
else
{
red = (255 - red) * correctionFactor + red;
green = (255 - green) * correctionFactor + green;
blue = (255 - blue) * correctionFactor + blue;
}
return Color.FromArgb(color.A, (int)red, (int)green, (int)blue);
}
这些代码可以很好地满足我的要求,但是当我执行大量具有更大宽度和高度的图像时,它会花费大量时间。 是否有其他可能实现这一要求?
【问题讨论】:
-
与其设置每个像素,不如通过您需要的调整将图像重新绘制到新的像素上。 This answer 展示了如何在一张照片中调整亮度、对比度和伽玛。
-
感谢您的建议。但我不喜欢在我的实现中使用 Graphics 对象。所以我忽略了使用颜色矩阵的方式。