目標は、メモリ バッファーに格納されているビットマップを表示することです。メモリ バッファの内容は、ディスクに格納された .bmp ファイルと同じです。パフォーマンス上の理由から、これらのバッファをディスクに書き込んで表示することはできません。GDI+ もオプションではありません。現在、必要に応じて、メモリ バッファーから 1 ピクセルあたり 24 ビットのビットマップを表示できます。しかし、ピクセルあたり 8 ビットのビットマップを表示しようとすると、イメージが間違った色で表示されます (つまり、イメージ内の図は認識できます。スケーリング、方向などは正しいのに、すべてが間違った色になります)。
ビットマップヘッダー構造体を初期化する方法は次のとおりです。
bfh = *(tagBITMAPFILEHEADER*)buf1;
bih = *(tagBITMAPINFOHEADER*)(buf1+sizeof(tagBITMAPFILEHEADER));
rgb = *(RGBQUAD*)(buf1+sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER));
bi.bmiColors[0] = rgb;
bi.bmiHeader = bih;
pPixels = (buf1+bfh.bfOffBits);
次に、HBITMAP を作成するいくつかの異なる方法を試しました。いくつかを次に示します。
g_hBmp = CreateDIBitmap(dcPaint, &bih, CBM_INIT, (VOID *) pPixels, &bi, DIB_RGB_COLORS);
または:
g_hBmp = CreateDIBSection(dcPaint, &bi, DIB_RGB_COLORS, (void**) &ppvBits, NULL, 0);
SetDIBits(dcPaint, g_hBmp, 0, bih.biHeight, pPixels, &bi, DIB_RGB_COLORS);
また、さまざまなパラメーターを試しました。
- CPaintDC オブジェクトの代わりに NULL
- DIB_RGB_COLORS の代わりに DIB_PAL_COLORS
.bmp ファイル構造を格納するメモリ バッファーの内容をダンプし、LoadBitmap() でロードしたときに正しく表示されるディスクに格納された .bmp ファイルと同一であることを確認しました。
強調するために、上記のアプローチは 24 ビット/ピクセルの画像で機能します。ただし、1 ピクセルあたり 8 ビットの画像では機能しません。
前もって感謝します。