将RGB8 byte 转换为Bitmap

我有来自RGB8格式相机的原始像素数据,我需要转换为Bitmap 。 但是, Bitmap PixelFormat似乎只支持RGB Bitmap PixelFormat和48格式。

我试图使用PixelFormat.Format8bppIndexed ,但图像看起来变色和反转。

 public static Bitmap CopyDataToBitmap(byte[] data) { var bmp = new Bitmap(640, 480, PixelFormat.Format8bppIndexed); var bmpData = bmp.LockBits( new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat); Marshal.Copy(data, 0, bmpData.Scan0, data.Length); bmp.UnlockBits(bmpData); return bmp; } 

有没有其他方法可以正确转换此数据类型?

这会在图像中创建线性8位灰度调色板。

 bmp.UnlockBits(bmpData); var pal = bmp.Palette; for (int i = 0; i < 256; i++) pal.Entries[i] = Color.FromArgb(i, i, i); bmp.Palette = pal; return bmp; 

你仍然需要反转扫描线,可能是这样的:

 for (int y = 0; y < bmp.Height; y++) Marshal.Copy(data, y * bmp.Width, bmpData.Scan0 + ((bmp.Height - 1 - y) * bmpData.Stride), bmpData.Stride);