我想从Bitmap
获取原始颜色/像素数据,格式如下:
byte[] data = { A, R, G, B, A, R, G, B, A, R, G, B... };
,其中A
,R
,G
和B
是从0到255的数字。
我正在使用以下代码来做到这一点:
public static byte[] GetPixelData(this Bitmap bmp)
{
var rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
var bitmapData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var length = bitmapData.Stride * bitmapData.Height;
byte[] bytes = new byte[length];
Marshal.Copy(bitmapData.Scan0, bytes, 0, length);
bmp.UnlockBits(bitmapData);
return bytes;
}
此方法有效,但是这种方法的运行速度非常慢,单个4000x3000 JPEG图像最多需要30秒。
我已经进行了一些搜索,我只能找到涉及Marshal.Copy
和/或Bitmap.LockBits
的解决方案。
有什么更快的方法吗?
编辑:我尝试了重复问题中的DirectBitmap
类,但它仍然非常非常慢。有没有更好的解决方案?