Graphics.DrawImage可以绘制YV12 DIB吗?

问题描述

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

using (MemoryStream ms = new MemoryStream())
{
    ms.Write(fileHeader,fileHeader.Length);
    ms.Write(dibBuffer,dibBuffer.Length);
    Bitmap img = (Bitmap)Image.FromStream(ms);
    g.DrawImage(img,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?上面的代码似乎跳过了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)