【发布时间】:2014-06-29 00:03:44
【问题描述】:
目前,我正在使用SetPixel() 方法来更改位图中每个像素的颜色。这适用于小尺寸的小图像,但是当我在大图像上测试它时确实需要一段时间。
我以前没有在 VB.Net 中处理过图像,所以我可能只是忽略了一些明显的东西。我这样做是为了制作一个将图像转换为灰度的程序。这会产生正确的结果,但速度很慢,并且在此期间 UI 会冻结,因此我渴望最大限度地提高转换速度。
这是我目前的代码:
Dim tmpImg As New Bitmap(img) '"img" is a reference to the original image
For x As Integer = 0 To tmpImg.Width - 1
For y As Integer = 0 To tmpImg.Height - 1
Dim clr As Byte
With tmpImg.GetPixel(x, y)
clr = ConvertToGrey(.R, .G, .B)
End With
tmpImg.SetPixel(x, y, Color.FromArgb(clr, clr, clr))
Next
Next
Private Function ConvertToGrey(ByVal R As Byte, ByVal G As Byte, ByVal B As Byte) As Byte
Return (0.2126 * R) + (0.7152 * B) + (0.0722 * G)
End Function
【问题讨论】:
-
使用 ColorMatrix 或 AForge 之类的库可能会更快
-
@Plutonix 谢谢,我会研究 ColorMatrix 但我对使用库犹豫不决。
-
这个问题似乎是题外话,因为它是关于优化工作代码。试试codereview.stackexchange.com
标签: vb.net performance bitmap processing-efficiency