[C++/WinApi] Create Bitmap from Buffer

kickerxy123

Erfahrenes Mitglied
Hallo,

zunächst zu meinen Voraussetzungen:
- Dev-Cpp 5.0.0.8 (ja, es gibt eine neue Version aus dem Nov 2011 ;) )
- WinXp 32
- Winapi soll verwendet werden


Nun zu meinem Problem:

Ich möchte aus einem Byte Array heraus eine gültige HBITMAP erstellen.

Mein Ansatz:
C++:
//buf  ist ein BYTE array
//bi ist vom Typ BITMAPINFO
HDC hMem = CreateCompatibleDC(GetDC(NULL));
HBITMAP hBitmap = CreateCompatibleBitmap(hMem, bi.bmiHeader.biWidth, bi.bmiHeader.biHeight);
SetDIBits(hMem, hImage, 0, bi.bmiHeader.biHeight, buf, &bi, DIB_RGB_COLORS);

Leider ist die erstellte HBITMAP komplett schwarz. O.g. Aufrufe liefern alle ERROR_SUCCESS.
An den übergebenen Infos (Byte Array, BI) kann es nicht liegen, da folgender Aufruf problemlos geht:
C++:
HANDLE hFile=CreateFile("abc.bmp", GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0);
WriteFile(hFile, &bfh, sizeof(bfh), &written, NULL);
WriteFile(hFile, &bi.bmiHeader, sizeof(BITMAPINFOHEADER), &written, NULL);
WriteFile(hFile, buf, bi.bmiHeader.biSizeImage, &written, NULL);
CloseHandle(hFile);
HBITMAP hImage = (HBITMAP)LoadImage(NULL,"abc.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);


Die Anzeige realisiere ich so:
C++:
SendMessage(bmpHwnd, STM_SETIMAGE, IMAGE_BITMAP, hImage);

Wie gesagt, erscheint im ersten Fall nur ein schwarzer Bildschirm; im zweiten Fall läuft alles korrekt ab. Allerdings ist es natürlich unschön und unperformant alles auf einer Festplatte zwischenzuspeichern.
Kann mir wer helfen?



Vielen Dank,
kickerxy123
 
Du hast vergessen dem DC die Bitmap zuzuordnen.

Code:
HDC hMem = CreateCompatibleDC(GetDC(NULL));
HBITMAP hBitmap = CreateCompatibleBitmap(hMem, bi.bmiHeader.biWidth, bi.bmiHeader.biHeight);
HBITMAP hbmOld = (HBITMAP)SelectObject(hMem,hBitmap);
 
Zuletzt bearbeitet:
Zurück