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:
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:
Die Anzeige realisiere ich so:
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
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