Korrektes löschen von DC, HBITMAP und *CBitmap
-
Hallo,
hab da ein Problem, an dem ich schon längere Zeit rumhänge.
Es geht darum Bitmaps nacheinander anzuzeigen.
Dazu erzeuge ich aus dem imageBuffer ein Bitmap im Device Context m_dcOrig und kopiere dieses mit der neuen Größe, in der es angezeigt werden soll, in m_dcDisplay;
Da die geladenen Bitmaps nicht gleich groß sind, brauche ich jedesmal ein neues CBitmap-Object. Wie und wann kann ich m_hBmpToDelete löschen damit ich:
- kein MemLeak bekomme?
- ich keinerlei asserts in den handles versaue und mir das Programm beim beenden nicht noch abschmiert?Mit anderen Worten: Wie lösche ich hier richtig?
Edit: und wie lösche ich am Ende alle Objekte?Thx für eure Hilfe!
loop // erzeuge neues Array mit Bitmap mit ColorBits/8*width*height Bytes Länge unsigned short *imageBuffer = getNextImage(); drin m_hBmp = Create Bitmap (width, height, 1, ColorBits, imageBuffer); free(imageBuffer); if (m_hBmp != NULL) { dipslayX, displayY =... // Größe des Zielfensters bmpX, bmpY = ... // Größe der Bitmap m_hBmpToDelete = (HBITMAP)SelectObject(m_dcOrig, m_hBmp); if (m_hBmpDisplay == NULL) m_hBmpDisplay = CreateCompatibleBitmap(m_dcOrig, displayX, displayY); m_hBmpToDelete = (HBITMAP)SelectObject(m_dcDispaly, m_hBmpDisplay); SetStretchBltMode(m_dcMemDisplay, HALFTONE); StretchBlt(m_dcDisplay, 0, 0, displayX, displayY, m_dcOrig, 0, 0, bmpX, bmpY, SRCCOPY); offsetx= m_pt.x; offsety=m_pt.y; InvalidateRect(&rectStaticClient); m_st1.ShowWindow(true); }
-
die bitmaps sollen nicht in einem dc selected sein, wenn man sie löschen möchte
beispiel.HBITMAP newbmp = CreateCompatibleBitmap(hdc, ...); // neues bmp erzeugen HBITMAP oldbmp = SelectObject (hdc, newbmp); // neues bmp in dc einsetzen, altes merken ... ... // maloperationen ... SelectObject (hdc, oldbmp); // neues bmp aus dc rausnehmen DeleteObject (newbmp); // jetzt kann's gelöscht werden
-
Ja wenns so einfach ist, dann war es ja klar, daß ich nicht draufgekommen bin.
Zu blöd, wenn man Das CBitmap vom Handle auch noch löschen willViel Dank nochmal.
-
FroIng schrieb:
Zu blöd, wenn man Das CBitmap vom Handle auch noch löschen will
wie das mit 'CBitmap' geht, weiss ich nicht. kann aber gut sein, das da automatisch 'DeleteObject' im destruktor aufgerufen wird