获取位图颜色数据的最快方法

时间:2019-01-25 17:36:11

标签: c# .net winforms

我想从Bitmap获取原始颜色/像素数据,格式如下:
byte[] data = { A, R, G, B, A, R, G, B, A, R, G, B... };,其中ARGB是从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类,但它仍然非常非常慢。有没有更好的解决方案?

0 个答案:

没有答案