将RGB8字节[]转换为位图
本文关键字:转换 位图 RGB8 字节 | 更新日期: 2023-09-27 18:25:17
我有来自RGB8格式相机的原始像素数据,需要将其转换为Bitmap
。然而,Bitmap PixelFormat
似乎只支持RGB 16、24、32和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);