1

GetDIBitsC++ でビットマップをロードするために使用したいと考えています。私が使用しているコードは次のとおりです。

HBITMAP hBmp = LoadBitmap(hInstance, MAKEINTRESOURCE(id));

BITMAP BM;
GetObject(hBmp, sizeof(BM), &BM);

GLvoid* bits = NULL;

BITMAPINFO bitmap_info;
        memset(&bitmap_info, 0, sizeof(bitmap_info));
        bitmap_info.bmiHeader.biSize = sizeof(bitmap_info.bmiHeader);
        bitmap_info.bmiHeader.biWidth  = BM.bmWidth;
        bitmap_info.bmiHeader.biHeight = BM.bmHeight;
        bitmap_info.bmiHeader.biPlanes = 1;
        bitmap_info.bmiHeader.biBitCount = DM_BITSPERPEL;//bits per pixel
        bitmap_info.bmiHeader.biCompression = BI_RGB;

GetDIBits(device_context,
            hBmp,
            0, BM.bmWidth,
            bits,
            &bitmap_info,
            DIB_RGB_COLORS);

しかし、それbitsNULL何らかの理由があるようです。私のコードに何か問題がありますか? GetBitmapBits以前は使っていましたが、そうでbitsはありませんでしNULLた。

4

1 に答える 1

3

発生している動作は、定義どおりです。

lpvBits [アウト]

ビットマップ データを受け取るバッファーへのポインター。このパラメーターが NULL の場合、関数はビットマップのサイズと形式を、lpbi パラメーターが指す BITMAPINFO 構造体に渡します。

(出典: MSDN )

GetDIBits()要約すると、ビットを埋めたい場合は、ゼロ以外のポインターを提供する必要があります。必要なメモリを割り当てるのはあなたの責任です。

于 2014-04-26T17:11:26.957 に答える