gpt4 book ai didi

c# - 将 RGB8 byte[] 转换为 Bitmap

转载 作者:太空狗 更新时间:2023-10-29 21:53:59 32 4
gpt4 key购买 nike

我有来自相机的 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);

关于c# - 将 RGB8 byte[] 转换为 Bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161441/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com