Problem mit BitBlt und CreateBitmapIndirect
-
Hi Leute!
Ich habe ein Problem mit dem anzeigen von Bitmaps, die ich selbst berechne.
Hier ist der Code, der bei WM_PAINT hauptsächlich ausgeführt wird:HDC hDcWnd= GetDC(hWindow); if(!hDcWnd) GT_ERROR_WIN(TEXT("GetDC(hWindow);"), GetLastError()); BITMAP Bitmap; Bitmap.bmType= 0; Bitmap.bmWidth= AmGenerator.GetBmpWidth(); Bitmap.bmHeight= AmGenerator.GetBmpHeight(); Bitmap.bmWidthBytes= sizeof(DWORD) * AmGenerator.GetBmpWidth(); Bitmap.bmPlanes= 1; Bitmap.bmBitsPixel= sizeof(DWORD); Bitmap.bmBits= AmGenerator.GetBitmapData(); HBITMAP hBitmap= CreateBitmapIndirect(&Bitmap); if(!hBitmap) GT_ERROR_WIN(TEXT("CreateBitmapIndirect(&Bitmap);"), GetLastError()); HDC hDcBitmap= CreateCompatibleDC(hDcWnd); if(!hDcBitmap) GT_ERROR_WIN(TEXT("CreateCompatibleDC(hDcWnd);"), GetLastError()); SelectObject(hDcBitmap, hBitmap); BitBlt(hDcWnd, 0, 0, AmGenerator.GetBmpWidth(), AmGenerator.GetBmpHeight(), hDcBitmap, 0, 0, SRCCOPY); DeleteDC(hDcBitmap); DeleteObject(hBitmap); ReleaseDC(hWindow, hDcWnd);Sieht einer von Euch auf Anhieb den Fehler?
-
Hallo,
ich würde CreateCompatibleBitmap vorziehen. Es mit Länge und Breite versehen. Anschließend füttern, so wie Du beschreibst.
Dieses dann mit SelectObject( ... ) in den Gerätekontext einspeisen.Die MSDN weist übrigens ausdrücklich darauf hin, dass man mit CreateBitmapIndirect eher monochrome Bitmaps erzeugen lassen soll und farbige besser mit der og Funktion.
Hast Du geprüft, ob von dem AmGenerator-Object auch tatsächlich brauchbare Daten kommen?
-
Vom AmGenerator kommen die richtigen Daten, der kann die Daten auch direkt in Bitmap-Dateien speichern.

Ich benutze jetzt CreateDibSection, das läuft problemlos.