如何在没有实际迭代所有图片的像素的情况下减轻C#中的图片?

时间:2013-05-13 12:46:54

标签: c# image drawing pixel raster

我有照亮照片的问题。我知道我可以通过增加/减少像素值来做到这一点,但这不是我想要的。我被告知有一种方法不需要迭代所有像素,而且速度要快得多。这该怎么做?感谢。

3 个答案:

答案 0 :(得分:8)

要使图像变亮,可以在上面涂上白色阴影:

Bitmap bmp = new Bitmap(@"Image.png");
Rectangle r = new Rectangle(0, 0, bmp.Width, bmp.Height);
alpha = 128
using (Graphics g = Graphics.FromImage(bmp)) {
    using (Brush cloud_brush = new SolidBrush(Color.FromArgb(alpha, Color.White))) {
        g.FillRectangle(cloud_brush, r);
    }
}
bmp.Save(@"Light.png");

alpha值的范围为0到255. 0表示效果完全透明,从而产生原始图像。 255表示效果完全不透明,从而产生纯白色矩形。这里,效果以128显示。

Lightened Image (Before and After)

要使图像变暗,可以在其上涂上黑色阴影:

Bitmap bmp = new Bitmap(@"Image.png");
Rectangle r = new Rectangle(0, 0, bmp.Width, bmp.Height);
alpha = 128
using (Graphics g = Graphics.FromImage(bmp)) {
    using (Brush cloud_brush = new SolidBrush(Color.FromArgb(alpha, Color.Black))) {
        g.FillRectangle(cloud_brush, r);
    }
}
bmp.Save(@"Dark.png");

alpha值的范围为0到255. 0表示效果完全透明,从而产生原始图像。 255表示效果完全不透明,从而产生纯黑色矩形。这里,效果以128显示。

Darkened Image (Before and After)

答案 1 :(得分:6)

您可以在System.Drawing代码中使用ColorMatrix类以高度优化的方式应用颜色转换。直接支持亮度和对比度变化等效果。 This web page显示矩阵的外观。

答案 2 :(得分:0)

要更改图片亮度,您必须更改每个像素(如果它不是基于矢量的图形)。迭代遍历所有像素应该是我认为的唯一方式。 也许有一个框架可以为您完成工作。或者你可以寻找一种将像素矩阵与子​​像素组合在一起的快速算法。总而言之,有很多可能性。图像处理是一个复杂的主题。

您可以在此处找到一些示例:http://www.authorcode.com/making-image-editing-tool-in-c-brightness-of-an-image/