我試圖使用LockBits從位圖中讀取像素,但每次只需要2-4秒。爲什麼這種方法很慢?
這是方法:
public static Bitmap LockBits(Bitmap bmp)
{
PixelFormat pxf = PixelFormat.Format24bppRgb;
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData =
bmp.LockBits(rect, ImageLockMode.ReadWrite, pxf);
IntPtr ptr = bmpData.Scan0;
int numBytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[numBytes];
Marshal.Copy(ptr, rgbValues, 0, numBytes);
for (int counter = 0; counter < rgbValues.Length; counter += 6)
rgbValues[counter] = (byte)tolerancenumeric;
Marshal.Copy(rgbValues, 0, ptr, numBytes);
bmp.UnlockBits(bmpData);
bmp.Save(@"d:\testbmplockbits.bmp");
return bmp;
}
此:(字節)tolerancenumeric爲值10之前,我改變它,這樣我可以改變從Form1中的NumericUpDown此值:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
CloudEnteringAlert.tolerancenum = (int)numericUpDown1.Value;
pictureBox1.Image = CloudEnteringAlert.LockBits(bitmapwithclouds);
}
我想用LockBits會使速度更快,但是當我點擊numericupdown來更改程序運行時的值時,它需要2-4秒,直到值更改並且圖片框中的圖像正在更新。
該方法有什麼問題?
'bmp.Save(@ 「d:\ testbmplockbits.bmp」);'看起來像一個漂亮慢打給我。 –
刪除保存現在我認爲它的速度稍快一點點,當點擊數字下拉時,延遲1-1.5秒。 – user3117033
圖像有多大? – Dweeberly