Farbformat für BITMAT festlegen
-
Ich habe inzwischen ein recht komplexes Projekt zusammengebaut und stehe nun vor einem kleinen Problem, welches ich gerne elegant lösen möchte.
Gegeben ist ein Puffer über den alles wichtige bekannt ist (Breite, Höhe, Farbformat: X8R8G8B8). Bisher habe ich folgende Funktionen verwendet, um diesen Puffer in einem gleich großen Windows Fenster zu zeichnen:
HDC hDeviceContext, hDCMemory; PAINTSTRUCT PaintStruct; BITMAP Bitmap; HBITMAP hBitmap; DWORD dwPixel, dwPixelSize; Bitmap.bmType = 0; Bitmap.bmWidth = 640; Bitmap.bmHeight = 480; Bitmap.bmBitsPixel = 32; Bitmap.bmWidthBytes = 2560; // 640 * 32 / 8 Bitmap.bmPlanes = 1; Bitmap.bmBits = pBuffer; hBitmap = CreateBitmapIndirect(&Bitmap); hDeviceContext = BeginPaint(hWindow, &PaintStruct); hDCMemory = CreateCompatibleDC(hDeviceContext); SelectObject(hDCMemory, hBitmap); BitBlt(hDeviceContext, 0, 0, 640, 480, hDCMemory, 0, 0, SRCCOPY); DeleteDC(hDCMemory); EndPaint(hWindow, &PaintStruct);Ich habe mir mal erlaubt in den hier gezeigten Code Konstanten einzusetzen, damit das ganze nicht zu unübersichtlich wird.
pBuffer wird der Funktion als Parameter übergeben und enthält Bilddaten im Format X8R8G8B8. Die Ausgabe ist auch soweit zufriedenstellend, abgesehen davon, das sämliche Blauanteile fehlen. Mit anderen Worten: das ausgegebene Bild ist quitsche-Gelb. Anscheinend interpretiert Windows den Puffer im einem anderen Format. Augenblicklich habe ich eine weitere Funktion davorgeschaltet, welchen den Puffer aufbereitet und die Farbanteile entsprechend neu anordnet. Dies kostet jedoch wieder Zeit und zusätzlich Speicherplatz.
Nach langer erklärung also meine Frage: Wie kann ich Windows mitteilen, in welchen Format die Bilddaten vorliegen? Ich möchte es UNBEDINGT vermeiden, die Farbanteile im Puffer nochmal neu anordnen zu müssen!