0

外部コンポーネントに提供するには、バイト配列から 1bpp ビットマップをロードする必要があります。コンポーネントには、ビットマップへのハンドルが必要です。

Bitmapオブジェクトにロードして の結果を提供しようとしましたbitmap.GetHBitmap()が、奇妙な変換が内部で行われているようで、結果のビットマップは 1bpp ではなくなりました (コンポーネントにハンドルを提供すると、ビット深度について不平を言います)。 .

Windows API 関数を使用してファイルからビットマップを直接ロードすると、正常LoadImageに動作しますが、既にイメージがメモリにあるため、ファイルからビットマップを読みたくありません。それらをディスクに書き込んで再度読み取ることは不要な I/O であり、アプリケーションの速度が大幅に低下します。

バイト配列にデータを持つビットマップへのハンドルを取得するにはどうすればよいですか?

編集:

このコードを試しましたが、2 つの異なる画像が表示されます。同一の画像が表示されるはずです。

IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(byte)) * imageData.Length);
try
{
    Marshal.Copy(imageData, 0, ptr, imageData.Length);
    handle = CreateBitmap(imgWidth, imgHeight, 1, 1, ptr);

    ShowImage(Image.FromHbitmap(handle));
    ShowImage(Image.FromStream(new MemoryStream(imageData)));
}
finally
{
    Marshal.FreeHGlobal(ptr);
}
4

0 に答える 0