24ビットのBMPファイルをRAMにロードしていて、このイメージファイルのHBITMAPを作成しようとしています。私が実験してきたいくつかの例を見つけましたが、うまくいかないようです。基本的に、ファイルのHBITMAPが必要です。これにより、ファイルをアンロードし、後でDeleteObject()で破棄できるHBITMAPを保持できます。このビットマップはアプリケーションの非常に早い段階で読み込まれるため、アプリケーションウィンドウがなく、HDCもありません。これは私がこれまでに持っているものです:-
HBITMAP cBitmap; // This should be where my bitmap handle ends up.
mem; // This is a void* pointer to the loaded BMP file
tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)mem;
tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(mem + sizeof(tagBITMAPFILEHEADER));
RGBQUAD rgb = *(RGBQUAD*)(mem + sizeof(tagBITMAPFILEHEADER) + sizeof(tagBITMAPINFOHEADER));
BITMAPINFO bi;
bi.bmiColors[0] = rgb;
bi.bmiHeader = bih;
UINT8* pixels = mem + bfh.bfOffBits;
void* ppv;
HBITMAP hBitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, &ppv, NULL, 0);
SetDIBits(NULL, hBitmap, 0, bih.biHeight, pixels, &bi, DIB_RGB_COLORS);
GetObject(hBitmap, sizeof(BITMAP), &cBitmap);
なんらかの理由で、cBitmapはNULLになってしまいます。そして私を困惑させるもう1つのこと...DIB_RGB_COLORSは、BITMAPINFOがリテラルRGB値へのポインターを持っていることを意味しますが、パレットがない24ビット画像ではどのように機能しますか?