Невозможно построить изображение только из массива данных пикселей. При минимальном формате в пикселях также потребуются информация и размеры изображения. Это означает, что любая попытка создать растровое изображение непосредственно из массива ARGB с использованием потоков потерпит неудачу, оба метода Image.FromStream()
и Bitmap()
требуют, чтобы поток содержал некоторую информацию заголовка для построения изображения.
Тем не менее, учитывая, что вы, похоже, знаете размеры и формат пикселей изображения, которое хотите сохранить, вы можете использовать следующий метод:
public void SaveAsJpeg(int width, int height, byte[] argbData, int sourceStride, string path)
{
using (Bitmap img = new Bitmap(width, height, PixelFormat.Format32bppPArgb))
{
BitmapData data = img.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, img.PixelFormat);
for (int y = 0; y < height; y++)
{
Marshal.Copy(argbData, sourceStride * y, data.Scan0 + data.Stride * y, width * 4);
}
img.UnlockBits(data);
img.Save(path, ImageFormat.Jpeg);
}
}