0

我继承了一个 C# .Net Windows Forms 项目,该项目从托管的预编译 DLL 接收设备独立位图(作为字节数组)。C# 代码从 DIB 创建一个虚拟 BMP 文件,以便它可以创建一个位图,然后可以使用 System.Drawing.Graphics.DrawImage 绘制该位图。

using (MemoryStream ms = new MemoryStream())
{
    ms.Write(fileHeader, 0, fileHeader.Length);
    ms.Write(dibBuffer, 0, dibBuffer.Length);
    Bitmap img = (Bitmap)Image.FromStream(ms);
    g.DrawImage(img, 0, 0, width, height);
}

这适用于 DIB 包含未压缩的像素数据但在某些硬件上,像素数据为 YV12 格式并且 Image.FromStream 引发 System.ArgumentException 我认为表明底层代码(GDI+?)认为 BMP 无效或不支持的格式。

在这种情况下,DIB 的 BITMAPINFOHEADER(前 40 个字节)具有以下值:

biSize: 40
biWidth:640
biHeight: 480
biPlanes: 1
biBitCount: 12
biCompression: 'YV12'
biSizeImage: 460800
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant: 0
  1. BMP格式甚至支持YV12吗?我在网上找不到任何示例图像。

  2. 是否有不同的方式来处理 DIB 以使其适用于 DrawImage?上面的代码似乎跳过了箍。

4

0 回答 0