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 daaaaaTschau!
-
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 LoadBitmapwas 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