Байтовый массив или матрица в Bitmap

в настоящее время у меня есть следующая проблема: я хочу преобразовать массив байтов, который поступает из файла со следующей конфигурацией:

Byte1: R color of pixel 0,0.
Byte2: G color of pixel 0,0.
Byte3: B color of pixel 0,0.
Byte4: R color of pixel 0,1.

...
ByteN: R color of pixel n,n.

Итак, что я хочу сделать, это преобразовать эти байты в растровое изображение без того, чтобы установить пиксель за пикселем с bitmap.setPixel потому что это занимает слишком много времени.

какие предложения? Заранее спасибо!

1 ответов


если у вас byte[] пикселей, а также ширина и высота, то вы можете использовать BitmapData для записи байтов в растровое изображение, так как вы также знаете формат. Вот пример:

//Your actual bytes
byte[] bytes = {255, 0, 0, 0, 0, 255};
var width = 2;
var height = 1;
//Make sure to clean up resources
var bitmap = new Bitmap(width, height);
var data = bitmap.LockBits(new Rectangle(Point.Empty, bitmap.Size), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
Marshal.Copy(bytes, 0, data.Scan0, bytes.Length);
bitmap.UnlockBits(data);

Это очень быстрая операция.

вам нужно, чтобы импортировать эти три пространства имен в верхней части файла c#, как минимум:

using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;