Speicheradresse der Bitmap-Grafikdaten



  • Moin, Moin...

    Ich möchte gerne die Adresse der Grafikdaten einer Bitmap haben. Dafür habe ich mittels GetObject die BITMAP-Struktur einer Speicher-Bitmap füllen lassen. Die Daten wie Höhe, Breite, Farbtiefe, etc. werden korrekt übergeben. Nun gibt es ja auch einen Zeiger auf eben diese Grafikdaten innerhalb der BITMAP-Stuktur. Dummerweise wird aber ein NULL-Zeiger zurückgeliefert. Warum gibt mir die Funktion nicht auch die Adresse?

    HBITMAP hbmJpeg, hbmOld;
      HDC     hdcJpeg;
    
      // Speicher-Bitmap erzeugen, abgeleitet von einer anderen Speicher-Bitmap
      hdcJpeg = CreateCompatibleDC(hdcMem);
      hbmJpeg = CreateCompatibleBitmap(hdcMem, breite, hoehe);
    
      hbmOld = SelectObject(hdcJpeg, hbmJpeg);
    
      // Den Inhalt der "alten" Speicher-Bitmap in die neue kopieren
      BitBlt(hdcJpeg, 0, 0, breite, hoehe, hdcMem, 0, 0, SRCCOPY);
    
      // BITMAP-Stuktur der neuen Bitmap holen
      GetObject(hbmJpeg, sizeof(BITMAP), &bmp);
    
      // Liefert leider nicht die Adresse der Bilddaten!!!
    
      // Aufräumen
      SelectObject(hdcJpeg, hbmOld);
      DeleteObject(hbmJpeg);
      DeleteDC(hdcJpeg);
    

    Danke im voraus...

    [ Dieser Beitrag wurde am 14.02.2003 um 11:34 Uhr von Kal El editiert. ]



  • GetDIBits() sollte dein Stichwort sein...



  • @WebFritzi:

    Jo, das isses...

    Danke



  • Dabei noch eine Anmerkung: die einzelnen Pixel-Zeilen werden im Speicher nach DWORD-Grenzen ausgerichtet, d.h., die Länge einer Zeile ist immer teilbar durch 4. Schau dich mal im Forum nach sowas wie "DWORD_ALIGN" um. -King- hat dazu mal ein schönes Makro geschrieben.



  • Vielleicht hilft dir GetDIBits weiter?!
    Oups, ich sollte wohl öfters auf aktualisieren klicken 🙄

    [ Dieser Beitrag wurde am 14.02.2003 um 11:53 Uhr von flenders editiert. ]


Anmelden zum Antworten