Im пытается использовать 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 секунды, когда вы нажимаете numericupdown. – user3117033
Насколько велика изображение? – Dweeberly