9

我有减轻图片的问题。我知道我可以通过增加/减少像素值来做到这一点,但这不是我想要的。有人告诉我,有一种方法不需要遍历所有像素,而且速度要快得多。这个怎么做?谢谢。

4

3 回答 3

9

要使图像变亮,您可以在其上应用白雾:

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 显示。

变亮的图像(之前和之后)

要使图像变暗,您可以在其上应用黑色雾霾:

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 显示。

变暗的图像(之前和之后)

于 2015-08-02T15:14:42.720 回答
7

您使用 System.Drawing 代码中的 ColorMatrix 类以高度优化的方式应用颜色转换。直接支持亮度和对比度变化等效果。 该网页向您展示了矩阵的外观。

于 2013-05-13T13:43:53.267 回答
0

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

你可以在这里找到一些例子:http ://www.authorcode.com/making-image-editing-tool-in-c-brightness-of-an-image/

于 2013-05-13T13:02:43.167 回答