Возможно, вы могли бы сделать что-то подобное, хотя я не уверен, будет ли это работать
unsafe public static void Main()
{
var height = 2;
var width = 2;
var output = new byte[4] { 1, 2, 3, 4};
using (var bitmap = new Bitmap(width, height, PixelFormat.Format8bppIndexed))
{
var data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);
Marshal.Copy(data.Scan0, output, 0, 4);
bitmap.UnlockBits(data);
bitmap.Save(@"D:\blah.bmp");
}
}
Метод Bitmap.LockBits
Bitmap.LockBitsМетод
Блокирует растровое изображение в системной памяти.
Marshal.Copy Метод
Копирует данные из управляемого массива вуказатель неуправляемой памяти или указатель неуправляемой памяти на управляемый массив.
Как уже отмечалось, просто работайте в 32bpp и упростите свою жизнь
public static void Main()
{
var height = 2;
var width = 2;
var c = Color.White.ToArgb();
var output = new int[4] { c, c, c, c };
using (var bitmap = new Bitmap(width, height, PixelFormat.Format8bppIndexed))
{
var data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb);
Marshal.Copy(output, 0, data.Scan0, 4);
bitmap.UnlockBits(data);
bitmap.Save(@"D:\trdy.bmp");
}
}