Bitmap erstellen



  • Hallo und guten Morgen,

    ich hätta da bitte mal ein Problem: Ich habe RAW-Daten eines Images als RGB! Also sprich, zu jedem pixel 3 char-Werte. Nun möchte ich ein Bitmap-Objekt daraus erstellen und anzeigen! Hier mal Code:

    CBitmap bmp;
    
    	bmp.CreateCompatibleBitmap(pDC,ni,nj);
    	bmp.SetBitmapBits(ni*nj*3,pixel);
    	CDC dcMemory;
    	dcMemory.CreateCompatibleDC(pDC);
    	dcMemory.SelectObject(&bmp);
    	pDC->BitBlt(0, 0, ni, nj, &dcMemory, 0, 0, SRCCOPY);
    

    Im array "pixel" sind die RAW daten, wie gesagt, als RGB (3xChar).
    Wenn ich debugge, und mir den Inhalt von "pixel" anschaue, dann ist auch alles so wie es sein sollte: Bei einem roten Bild 1,4,7,11,.... Char hat den Wert 255.

    Aber irgendwie wird dann auf dem Screen ziemlicher "Müll" ausgegeben. Das kann man auch testen wenn man

    COLORREF col = dcMemory.GetPixel(0,0);
    	col = dcMemory.GetPixel(1,0);
    	col = dcMemory.GetPixel(2,0);
    	col = dcMemory.GetPixel(3,0);
    

    sowas mal testet, dann sieht man, dass, glaube ich, nur jeder 3.Pixel den Wert 255 hat (???).

    Wo ist mein Fehler, oder hat jemand einen guten Tipp für mich.

    Danke schonmal.

    Ciao



  • Naja, Windows muss ja für seinen Framebuffer nicht zwingend die 3 Pixelbytes dicht gepackt im Speicher haben. Wenn du nur den Rotanteil mit GetPixel auf 255 überprüft hast, könnte es ja gut sein, dass Windows die Pixel auf 4-Byte grenzen ausrichtet. Dann würdest du nämlich genau bei jedem dritten deiner Pixel auf deren Rotkanal liegen. Ich fand die Dokumentation zu den Bitmaps in der MSDN immer lausig... Außerdem sind die Funktionen, die du da benutzt, laut MSDN nur aus Kompatibilitätsgründen noch vorhanden...


Anmelden zum Antworten