Benutzer mit den meisten Antworten
Built Compatible Bitmap

Frage
-
Guten Abend alle zusammen,
ich bin gerade dabei einen Screenshot Saver zu programmieren. Das Abspeichern macht keine Probleme. Ich möchte jedoch nun auch eine kleine Vorschau geben, die in einem Teilstück meines Fensters zu sehen sein soll.
HDC hDC_Screen = GetDC(NULL); hBitmap = CreateCompatibleBitmap(hDC_Screen, GetSystemMetrics (SM_CXSCREEN), GetSystemMetrics (SM_CYSCREEN)); // Die hBitmap wird bei mir als File abgespeichert // Als nächstes möchte ich die Bitmap auf meinem // Bildschirm darstellen case WM_PAINT: { PAINTSTRUCT PS; HDC hDC = BeginPaint(hWnd, &PS); HDC hDC_Bmp = CreateCompatibleDC(hDC); SelectObject(hDC_Bmp, hBmpPreview); StretchBlt(hDC, 180, 40, 150, 90, hDC_Bmp, 0, 0, GetSystemMetrics (SM_CXSCREEN), GetSystemMetrics (SM_CYSCREEN), SRCCOPY); DeleteDC(hDC_Bmp); EndPaint(hWnd, &PS); }
Im richtigen Programm ist der Quellcode in eine Funktion ausgelagert und wird auch nur aufgerufen, wenn die hBitmap wirklich existiert. Das Abspeichern klappt ja auch, allerdings hab ich hier wohl irgend einen verständnis Fehler drinne. Ich hoffe ihr könntet mir eventuell weiterhelfen ;)
Mit Grüßen Armenius
Antworten
-
Hallo Martin,
danke für deine Hilfe. Ich hab mal geschaut wegen der Bitmap und da stand immer was drinne. Ich hatte die hBitmap in einer CPP erzeugt und sie mir in einer anderen CPP über eine GetFunktion geholt. Dann hab ich sie dort in einen kombatiblen Device Kontext geschmissen und versucht zu zeichnen. Das hat anscheindend den Fehler verursacht.
Gelöst habe ich das ganze indem ich mir statt der hBitmap über die GetFunktion nun den kompatiblen Device Kontext in der ich den Screenshot gezeichnet habe direkt geholt habe anstatt nur das hBitmap. Dann hats geklappt :)
Das Speicherleck hab ich nun auch behoben, glaub auf die sorgfältige verwaltung meiner Ressourcen muss ich in Zukunft besser acht geben ;)
- Als Antwort markiert Ionut DumaModerator Donnerstag, 11. April 2013 14:51
Alle Antworten
-
Und was geht nicht?
Der Code erscheint mir richtig, bis auf, dass er ein Speicherleck erzeugt und Deine Bitmap blockiert.Und die Bitmap existiert wirklich und ist nicht NULL?
PAINTSTRUCT PS; HDC hDC = BeginPaint(hWnd, &PS); HDC hDC_Bmp = CreateCompatibleDC(hDC); HGDIOBJECT hOldBitmap = SelectObject(hDC_Bmp, hBmpPreview); StretchBlt(hDC, 180, 40, 150, 90, hDC_Bmp, 0, 0, GetSystemMetrics (SM_CXSCREEN), GetSystemMetrics (SM_CYSCREEN), SRCCOPY); SelectObject(hDC_Bmp, hOldBitmap); DeleteDC(hDC_Bmp); EndPaint(hWnd, &PS);
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 9. April 2013 07:25
-
Hallo Martin,
danke für deine Hilfe. Ich hab mal geschaut wegen der Bitmap und da stand immer was drinne. Ich hatte die hBitmap in einer CPP erzeugt und sie mir in einer anderen CPP über eine GetFunktion geholt. Dann hab ich sie dort in einen kombatiblen Device Kontext geschmissen und versucht zu zeichnen. Das hat anscheindend den Fehler verursacht.
Gelöst habe ich das ganze indem ich mir statt der hBitmap über die GetFunktion nun den kompatiblen Device Kontext in der ich den Screenshot gezeichnet habe direkt geholt habe anstatt nur das hBitmap. Dann hats geklappt :)
Das Speicherleck hab ich nun auch behoben, glaub auf die sorgfältige verwaltung meiner Ressourcen muss ich in Zukunft besser acht geben ;)
- Als Antwort markiert Ionut DumaModerator Donnerstag, 11. April 2013 14:51