bitmap data



  • Fuer euch Freax sicher Kinderfasching:

    Ich benoetige bmp daten aus einer Bmp-Datei.

    So weit bin ich bis jetzt:

    HBITMAP hBitmap = (HBITMAP)LoadImage(thisInstance, "test.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULT_SIZE | LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    
    BITMAP GetObject(hBitmap, sizeof(BITMAP), &bitmap);
    

    Aber wie bekomme ich jetzt einen Pointer der direkt auf die Bilddaten zeigt?

    Danke



  • Wenn du das hier in deinen Code einfügst,

    #include <gl\glaux.h>
    
    #pragma comment( lib, "glaux.lib" )
    
    ...
    
    AUX_RGBImageRec *Bild;
    Bild = auxDIBImageLoad("test.bmp");
    

    dann müßte in Bild->data ein Pointer zu den Bilddaten liegen.



  • Danke, aber glaux wollte ich eigentlich nicht verwenden. Gibts da nicht ne Moeglichkeit das mit der WinAPI zu machen?



  • Du könntest auch ReadFile verwenden.



  • Wenn du den korrekten HBITMAP deines Biles hast, dan geht es damit:

    LONG GetBitmapBits(
    HBITMAP hbmp, // handle to bitmap
    LONG cbBuffer, // number of bytes to copy
    LPVOID lpvBits // pointer to buffer to receive bits
    );

    Du mußt natürlich vorher die korrekte Größe deiner Bilddaten in Bytes ermitteln:

    (Bitttiefe/8) * Breite * Höhe

    und die mußt du dir vorher auch noch besorgen. Ich habe dafür aber bisher keine direkten WINAPI Funktionen gefunden.



  • Hier ist die Struktur von BITMAP:

    typedef struct tagBITMAP {
    LONG bmType;
    LONG bmWidth;
    LONG bmHeight;
    LONG bmWidthBytes;
    WORD bmPlanes;
    WORD bmBitsPixel;
    LPVOID bmBits;
    } BITMAP,*PBITMAP,*LPBITMAP;

    Die Breite und Höhe in Pixel steht also in bitmap.bmWidth und bitmap.bmHeight.
    In bmBitsPixel steht die Anzahl der Bits pro Pixel.

    Daraus ergibt sich diese Formel: (bitmap.bmBitsPixel/8) * bmWidth * bmHeight
    für Größe deiner Bilddaten.

    Jetzt bemerke ich auch, dass in bmBits der Pointer zu den Bilddaten liegt 😡



  • Richtig, in BITMAP stehen alle Infos, aber wie kommt man da ran, wenn man ein HBITMAP hat, ohne weitere Infos. ein GetBitpmap(..) wie in der MFC hab ich als API Befehl bis jetzt noch nicht gefunden.



  • GetObject()



  • Die Daten werden mit

    GetObject(hBitmap, sizeof(BITMAP), &bitmap);
    

    in bitmap geschrieben.



  • Hoch lebe der König! :p

    Danke



  • Danke,

    ich war wohl auch blind und habs einfach uebersehen.


Anmelden zum Antworten