我正在使用一个LockedBitmap
类来简化 C# 中位图数据的处理。目前它正在将数据复制到本地byte[]
数组中,然后通过其类方法访问该数组以获取/设置像素颜色值。
这比直接通过指针访问锁定的位图数据更快还是更好?是否需要副本?
编辑:我不是在问是否可以直接使用位图数据,我每天都在使用它。我只是要求比较这两种方法,以及是否有必要复制像素数据。
将像素数据复制到临时数组中:
// create byte array to copy pixel values
int step = Depth / 8;
Pixels = new byte[PixelCount * step];
Iptr = bitmapData.Scan0;
// Copy data from pointer to array
Marshal.Copy(Iptr, Pixels, 0, Pixels.Length);
直接读取像素值:
byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
int ws = bmData.Stride;
byte* row = &p[i * ws];
byte Gcolor = row[j];
byte Bcolor = row[j + 1];
byte Rcolor = row[j + 2];