Самый быстрый способ получить растровые данные о цвете - PullRequest
0 голосов
/ 25 января 2019

Я хочу получить необработанные данные цвета / пикселя из 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;
}

Это работает, однако это ужасно медленно, занимает около 30 секунд для одного4000x3000 JPEG.

Я немного обыскал и нашел только решения, которые включают Marshal.Copy и / или Bitmap.LockBits.

Есть ли более быстрый способ сделать это?


Редактировать : я попробовал класс DirectBitmap из дублирующего вопроса, но он все еще очень, очень медленный.Разве нет лучшего решения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...