Dimension eines CBitmap



  • Ich möchte eine *.bmp Datei von der Festplatte einlesen und auf ein CDC ausgeben.

    dazu benutze ich die Funktion

    LoadBMPImage((LPCTSTR)csFileName, DrawMeBmp, NULL );
    

    aus http://www.codeguru.com/cpp/g-m/bitmap/article.php/c1681/

    um das Bitmap zu laden. Danach möchte ich dieses Bitmap auf das DC ausgeben, und benötige dazu die Dimensionen. Probiert habe ich es mit

    CRect BitmapRect(0,0,0,0);
    	BitmapRect.right = DrawMeBmp.GetBitmapDimension().cx;
    	BitmapRect.bottom = DrawMeBmp.GetBitmapDimension().cy;
    

    was mir aber nur 0 als Wert zurückliefert.

    Sind die Aufrufe GetBitmapDimension().cx nicht richtig, oder wird das CBitmap nicht richtig initialisiert?

    Die ganze Funktion sieht übrigens wie folgt aus, wobei Sie mir nur ein weißes Bild ohne Inhalt liefert.

    CPaintDC dc(this); 
    	CRect (rc);
    	GetClientRect(rc);
    	CMemDC pDC(&dc,&rc);
    
    	CDC SourceDC;
    	SourceDC.CreateCompatibleDC(NULL);
    
    	CBitmap DrawMeBmp;
    	CPalette *pPal;
    
    	BOOL Result = BitmapOperations.LoadBMPImage((LPCTSTR)csFileName, DrawMeBmp, NULL );
    
    	CBitmap* pOldBitmap = SourceDC.SelectObject(&DrawMeBmp);
    
    	CRect BitmapRect(0,0,0,0);
    	BitmapRect.right = DrawMeBmp.GetBitmapDimension().cx;
    	BitmapRect.bottom = DrawMeBmp.GetBitmapDimension().cy;
    	pDC->BitBlt(0,0, BitmapRect.Width(), BitmapRect.Height(), &SourceDC, 0, 0, SRCCOPY );
            //clean up...
    	SourceDC.SelectObject(pOldBitmap);
    	SourceDC.DeleteDC();
    

    Matthias



  • Ich habe gerade herausgefunden, dass es mit

    BITMAP bmpInfo;
        DrawMeBmp.GetBitmap(&bmpInfo);
        CRect BitmapRect(0,0,0,0);
        BitmapRect.right = bmpInfo.bmWidth;
        BitmapRect.bottom = bmpInfo.bmHeight;
    

    Trotzdem wird in das überladene CStatic kein Bild eingefügt.

    Matthias



  • Hallo,
    die Daten stehen in den Variablen biWidth, biHeight der Struktur BTMAPINFOHEADER.

    Konkret, der Link, den du gepostet hast, guck mal unter Step 2: Drawing the bitmap.

    BITMAP bm;
    bitmap.GetBitmap( &bm );

    bm.bmWidth <-- daaaaaa
    bm.bmHeight <-- und daaaaa

    Tschau!



  • Warum du allerdings nicht LoadImage nimmst und dann LR_FROMFILE angibst, ist mir ein Rätsel ...



  • (D)Evil schrieb:

    Warum du allerdings nicht LoadImage nimmst und dann LR_FROMFILE angibst, ist mir ein Rätsel ...

    Naja, weil ich kein MFC/Win32API Guru bin und nur das nutzen kann was man zu dem Thema findet. 'LoadImage' gehörte nicht zu den Aufrufen die ich gefunden habe.

    Bei der Suche nach LoadImage bin ich dann auf folgenden Quellcode gestoßen

    HANDLE hBitMap = ::LoadImage(0, "c:\\mybmp.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
    CBitmap bmp;
    bmp.Attach((HBITMAP)hBitMap); // handle you got from LoadBitmap
    

    was mir den Aufruf von

    BOOL Result = BitmapOperations.LoadBMPImage((LPCTSTR)csFileName, DrawMeBmp, NULL );
    

    erspart bzw ersetzt.

    proggingmania schrieb:

    Konkret, der Link, den du gepostet hast, guck mal unter Step 2: Drawing the bitmap.

    Ups, das habe ich wohl übersehen. Vielen Dank, ich werde es ausprobieren.

    Matthias


Anmelden zum Antworten