HBitmap zu Struct Bitmap
-
Hallo
Ist es möglich eine Bitmap Structur zu füllen, mit Hilfe eines Handles von einem Bitmap.
Wenn das nicht möglich sein sollte, ist es dann möglich über diesen Handle die Breite und Höhe des Bitmaps zu bestimmen?MfG
Compufreak
-
Compufreak[C++] schrieb:
...ist es dann möglich über diesen Handle die Breite und Höhe des Bitmaps zu bestimmen?
Wie meinst du das ? Die Größe des Pic's kannst du doch mit BitBlt bestimmen ...
Mit
CBitmap bitmap; BITMAP bm; bitmap.GetBitmap(&bm);
kann man die Width und Height des Bitmap's herausfinden ...
Gruß
:: NoName ::
-
Hallo
mein Code sieht bisher folgerndermaßen aus:void CLandscapeDlg::SetLandscape(HBITMAP hBitmap) { SIZE window; m_bmpLandscape.SetBitmap(hBitmap); SetBitmapDimensionEx(hBitmap, 674+13, 209+40, NULL); /*2. und 3. Parameter sollen ersetzt werden durch die Größe des Bitmaps*/ if (GetBitmapDimensionEx(hBitmap, &window)) { CString str; str.Format("x: %d, y: %d", window.cx, window.cy); CWnd::MessageBox(str); } SetWindowPos(GetParent(), 0, 0, window.cx, window.cy, SWP_SHOWWINDOW); }
Ich habe also nur ein HBitmap und daraus wollte ich die Größe bestimmen.
Ist es möglich über dieses HANDLE ein CBitmap zu erzeugen?
Compufreak
-
Hmm, also möchtest du die Größe herausfinden um dann das Bitmap zu verändern. Ich würde erstmal eine BITMAP-Struktur privat anlegen, da du dann Zugang von überall aus auf die Variable hast. Dann hätte ich nach dem Laden des Bitmap's die Größe in die Struktur geladen und dann in der Funktion SetLandscape() die Höhe und Breite benutzt.
... private: BITMAP bm;
Dann die Größe des Bitmaps in die Struktur laden :
void CTestDlg::Test() { .... CBitmap bitmap; bitmap.LoadBitmap(...); bitmap.GetBitmap(&bm); // Hier die Größe in die Struktur laden ...... }
Und dann die Größe benutzen :
void CLandscapeDlg::SetLandscape(HBITMAP hBitmap) { int nWidth = bm.bmWidth; // Breite laden int nHeight = bm.bmHeight; // Höhe laden SIZE window; m_bmpLandscape.SetBitmap(hBitmap); SetBitmapDimensionEx(hBitmap, 674+13, 209+40, NULL);
Jetzt sind in den Variablen nWidth und nHeight die Breite und Höhe des Bitmaps
vorhanden.Jetzt kannste damit machen was du willst !
Gruß
:: NoName ::
-
Ich glaube, es gibt nur ein Problem, das Bitmap muss doch als Ressource vorhanden sein, oder? Ich wollte es eigentlich so machen, dass man jedes beliebige Bitmap laden kann. Geht das mit CBitmap?
Danke für die Hilfe bis hierher.MfG
Compufreak
-
Zum Bsp. so :
CFileDialog dlg(true,"",NULL,OFN_HIDEREADONLY,"Bitmap (*.bmp)|*.bmp||"); if(dlg.DoModal() == TRUE) { CBitmap bitmap; BITMAP bm; CDC dc; CDC* pDC = GetDC(); HBITMAP hPixel = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), dlg.GetFileName(), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); bitmap.Attach(hPixel); bitmap.GetBitmap(&bm); dc.CreateCompatibleDC(pDC); dc.SelectObject(&bitmap); pDC->BitBlt(80,20,1000,1000, &dc, 0,0, SRCCOPY); }
Gruß
:: NoName ::
-
Danke :: NoName :: deine Vorschläge waren alle sehr hilfreich. Jetzt klappt es so wie ich es wollte.
Danke nochmalsMfG
Compufreak