Bitmap in Childframe zeichnen



  • Hallo,
    ich habe eine MDI-Anwendung erstellt, die Targa-Dateien (Bilder) anzeigen können soll (und zwar für jedes Bild ein eigenes Kindfenster).

    Nach dem Laden des Bildes lege ich rufe ich folgenden Code auf:

    // strFileName = Pfad der zu ladenden Datei
    
       // Das Image laden
       CImage *tmpImage = new CImage(strFileName);
    
       // Ein neues Kindfenster anlegen
       CChildFrame *tmpChildFrame = new CChildFrame();
       tmpChildFrame ->SetImageData(tmpImage);
       tmpChildFrame ->Create(NULL, strFileName);
    

    In der Klasse "CImage" werden die Breite und Höhe des interpretierten Bilds, sowie ein Zeiger auf die einzelnen Bytes des RGB-Werte gehalten.

    In der Methode "SetImageData(CImage MyImage)" wird eine BITMAPINFO (global) erstellt. Ausserdem wird das Kindfenster mit SetWindowPos(...) auf die richtige Grösse gesetzt. Mit "OnEraseBkgnd(...)" soll das Bild gezeichnet werden.

    BOOL CChildFrame::OnEraseBkgnd(CDC* pDC){
       // m_pImageData ist ein Zeiger auf unsigned char und
       // beinhaltet die Startadresse der Pixel-Informationen
       // Er wird in SetImageData(...) gesetzt.
    
       if(tmpBitmapInfo != NULL)
          SetDIBitsToDevice(*pDC, 0, 0,
             tmpBitmapInfo->bmiHeader.biWidth,
             tmpBitmapInfo->bmiHeader.biHeight,
             0, 0, 0, tmpBitmapInfo->bmiHeader.biHeight,
             m_pImageData, tmpBitmapInfo, DIB_RGB_COLORS);
    
       return CMDIChildWnd::OnEraseBkgnd(pDC);
    }
    

    Der Code ist jetzt nicht aus dem Projekt kopiert, weil ich es gerade nicht vor mir liegen habe, aber es müsste trotzdem so stimmen.
    Jedenfalls wird fehlerlos kompiliert. Wenn ich dann ein Bild lade, wird das Kindfenster zwar auf die richtige Grösse gesetzt (Maße des geladenen Bilds), jedoch bleibt der Inhalt weiss. Wenn ich das Kindfenster auf Vollbild schalte, sieht man ganz kurz das Bild, jedoch wird es sofort wieder weiss.

    Was mache ich falsch?
    Falls ich die Funktion "SetDIBitsToDevice(...)" mit in "SetImageData(...)" stecken soll, wie bekomme ich dort einen Zeiger auf den CDC?

    Vielen Dank



  • Weiß das wirklich niemand?



  • Arbeitest Du mit Doc/View-Architektur?


Log in to reply