- BitmapData bmpData2 = bitmap2.LockBits(rect2, ImageLockMode.ReadOnly,bitmap2.PixelFormat);
- IntPtr ptr2 = bmpData2.Scan0;
- int size2 = bitmap2.Width * bitmap2.Height * 3;
- byte[] rgbvalue2 = new byte[size2];
-        
- System.Runtime.InteropServices.Marshal.Copy(ptr2, rgbvalue2, 0, size2);
复制代码
你这里做的假设有问题,并不是所有图片的存储都是RGB的,你需要根据PixelFormat来判断。
比较常用的是这两个:
PixelFormat24bppRGB:
Specifies that the format is 24 bits per pixel; 8 bits each are used for the red, green, and blue components.
PixelFormat32bppARGB:
Specifies that the format is 32 bits per pixel; 8 bits each are used for the alpha, red, green, and blue components.
按照你的实现,如果图片不是24bits的,那么肯定无法通过Memory Copy的。
你可以试试监视当时的PixelFormat,甚至直接通过内存窗口查看当时的内存情况。 |