zu Hülf! Ich will doch nur ein Bild ausgeben!!



  • Hallo! Ich habe ein Programm was mir über USB ein DIB von einer Kamera in den Speicher legt. So wie ich den Sourcecode verstanden hab kommt wird da zuerst ein BITMAPINFOHEADER und dann die PixelDaten abgelegt. Ich habe die Zeiger darauf, weiß aber nicht welche Funktion/en ich nun anwenden muss um nun das DIB letztendlich im Fenster auszugeben.
    Kann mir da jemand weiterhelfen? Ich habs mit SetDIBitsToDevice versucht aber das verlangt ein BITMAPINFO und nicht BITMAPINFOHEADER. Ich blick da einfach nich durch, durch diesen ganzen bitmapkram.

    puhhh

    ein frustrierter Hans-Peter





  • Mein Problem is das ich keine struktur BITMAPINFO hab und nich weiß wo ich mir die herzaubern soll? Ich hab quasi nur einen BITMAPINFOHEADER und die Daten und weiß nich was ich damit anfangen soll.



  • Die Bild-Daten musst du natürlich schon haben, wenn du sie ausgeben willst 🙄
    Wie bekommst du denn den BITMAPINFOHEADER?



  • also es liegt so im buffer:

    bitmapinfoheader , rgbquad , pixeldaten

    wobei ja dann die ersten zwei, also BITMAPINFOHEADER + RGBQUAD die Struktur BITMAPINFO ergeben würden. also gut. auf den anfang des buffers gibt es ein HGLOBAL.
    also ich habe

    LPBITMAPINFOHEADER bitmapinfoheader;
    LPBITMAPINFO bitmapinfo;
    void FAR *dibstart;
    LPSTR lpPixelDaten;
    

    und hole mir mit

    dibstart = GlobalLock(hdib);
    

    dann mach ich mir zwei zeiger auf die strukturen die ich ja CreateDIBitmap übergeben muss.

    bitmapinfoheader = (LPBITMAPINFOHEADER)dibstart;
    bitmapinfo = (LPBITMAPINFO)dibstart;
    

    is das prinzipiell erst mal so richtig??
    dann habe ich noch eine funktion die mir sozusagen die startadresse der pixeldaten übergibt:

    LPSTR LPBits(LPBITMAPINFOHEADER lpdib)
    {
       DWORD dwColorTableSize = (DWORD)(DibNumColors(lpdib) * sizeof(RGBQUAD));
       LPSTR lpBits = (LPSTR)lpdib + (WORD)lpdib->biSize + (WORD)dwColorTableSize;
       return lpBits;
    }
    

    wobei DibNumColors wiederrum eine andere funktion ist die aus dem BITMAPINFOHEADER die biClrUsed zurückgibt.
    naja und wenn ich das alles so mache hängt sich die ganze geschichte immer bei:

    lpPixelDaten = (LPSTR)LPBits(bitmapinfoheader);
    

    auf, speicherzugriffsverletzung, trallala...

    hast du ne idee was ich da falsch mache? 😕



  • Warum schreibst du nicht einfach:

    HBITMAP hBitmap;
    
    hBitmap = CreateDIBitmap(hdc,
                             bitmapinfoheader,
                             0,
                             NULL,
                             bitmapinfo,
                             DIB_RGB_COLORS);
    

    ?


Anmelden zum Antworten