マネージド プリコンパイル済み DLL からデバイスに依存しないビットマップ (バイトの配列として) を受け取る C# .Net Windows フォーム プロジェクトを継承しました。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 を発生させます。またはサポートされていない形式です。
このシナリオでは、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
BMP 形式は YV12 にも対応していますか? オンラインでサンプル画像が見つかりません。
DrawImage に適した DIB を処理する別の方法はありますか? 上記のコードは、フープを飛び越えているようです。