大图像的图像亮度C#



我使用此链接添加程序来调整图像的亮度。此代码还可以,但需要时间来调整亮度(图像文件大小1.8MB)。当我尝试较低质量的图像时,它会立即调整图像(图像文件大小100KB)。是否有任何有效的方法来调整图像的亮度。

代码似乎在常规Bitmaps上使用GetPixelSetPixel。这是一个坏主意,因为它太慢了。

要操纵Bitmap的单个像素,必须锁定(即/setpixel在幕后进行/setpixel)并按像素在像素上进行像素,这意味着对于1000x1000尺寸的图像必须执行1000x1000尺寸的图像,必须执行。这会创建一个巨大的开销。

方法一个

避免这种情况的一种方法是使用LockBits函数锁定整个位图。现在我们可以循环循环像素并修改它们。

有关此方法的两个注释:

  • 我们现在访问的是每个像素的原始字节,即每个通道分别:BGR或BGRA,具体取决于像素格式。这意味着从通常的RGB/argb格式的颜色方法的物理反转。

  • 要在物理位图像素行上循环,我们还需要向每行添加一些stride,将行粘贴到4个字节的倍数中。另请参阅此处

有关一些示例,您可能想浏览其中一些帖子。特别注意,使用委托允许灵活操作的这一方法!

(请注意,其中几个帖子使用2个甚至3个锁定位图,因为它们旨在组合图像。)

方法两个

另一种方法是锁定像素的开销,这是一个现成的位图类别,可以通过锁定整体来帮助您。这是我没有尝试过的例子。

方法三

最后,有一种非常优雅的图像操纵方法,这既简单又非常快。还专业制作以获得最佳效果:您可以设置ColorMatrix

它将让您更改亮度,伽玛,色调,然后再改变一些。这是一个非常不错的介绍。

唯一的缺点是,这仅限于某些固定的操作,因此您无法为其他精美的东西创建自定义过滤器,例如Photoshop-Type层模式或其他方式,尤其是那些需要处理相邻像素的人,例如。对于模糊..

但是,如果您想要的只是改变亮度,这就是我建议的!

最新更新