我正在使用lockbit
方法来处理图片,但我注意到在使用save
类型的Bitmap
方法保存图片后,我的数据在字节数组中操作我从锁定位出来,被操纵。
例如假设以下方法:
Bitmap bmp = new Bitmap(fs);
BitmapData bits = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
IntPtr ptr = bits.Scan0;
int arraySize = Math.Abs(bits.Stride) * bmp.Height;
Byte[] rgbValues = new Byte[arraySize];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, arraySize);
当我尝试通过使用例如:
将数组中的所有值设置为0来测试它时 for(int x = 0; x < arraySize; x++){
rgbValues[x] = (Byte) (rgbValues[x] % 2 == 0 ? 0 : 1);
}
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, arraySize);
bmp.UnlockBits(bits);
bmp.Save("somewhere");
现在,当我使用相同的技术回读保存的图像时,我会在锁定位中看到所获得的字节数组中的值为10,20或其他奇怪值。
我不认为这可能是正常行为,因为当使用较慢的GetPixel
方法时,我没有注意到这种突变。