bestimmten Fensterinhalt als BMP speichern

Martin Schroeder

Erfahrenes Mitglied
Hallo Leute!
Ich habe mir ein Programm ausdem Internet geholt, dass ein Apfelmännchen(Mandelbrotmenge) malt.
Es kann aber das Bild nicht speichern und das finde ich schade.
Kann ich irgendwie einen bestimmten Teil vom Fenster als Bitmap oder sonstwas speichern?
Danke für viele Antworten!
 
Generell in Windows:

Alt-PrintScreen -> aktuelles Fenster ist im Clipboard
PrintScreen -> Desktop ist im Clipboard

Einfach irgendein Malprogramm öffnen (Paint reicht), Einfügen, Speichern
 
falls du mit PrintScreen nichts anfangen kannst, das ist die Taste 'Druck', irgendwo zwischen Tastatur- und Nummernblock
 
Eine vielleicht bessere Alternative wäre es, in einen Buffer zu zeichnen, der dann als bmp leicht gespeichert werden kann. Denn Buffer gibt man dann auch noch auf dem Bildschirm aus, bzw. man malt parallel auf dem Bildschirm.
 
Du brauchst eigentlich nur irgendwie das HWND des betreffenden Fenster. Dann holst du dir davon einen DC, erstellst dir selbst am besten eine DIB-Section (CreateDIBSection), holst davon auch einen DC, ein Blt und dann müsstest du Zugriff auf die Pixel haben.
 
Das Kopieren läuft etwa so:

Code:
  HWND  hwndDesktop;
  HDC   hdcDesktop,
        hdcMainWindow;

  hwndDesktop = GetDesktopWindow();
  hdcDesktop = GetDC( hwndDesktop );
  hdcMainWindow = GetDC( hwndMain );
  StretchBlt( hdcMainWindow, 0, 0, dwFullWidth, dwFullHeight, hdcDesktop, 0, 0, dwFullWidth, dwFullHeight, SRCCOPY );

  ReleaseDC( hwndDesktop, hdcDesktop );
  ReleaseDC( hwndMain, hdcMainWindow );


Statt StretchBlt evtl. auf Blt ausweichen. Du kannst dir auch über GetObject mit einem BITMAP-struct die Bits holen (glaube ich).
 
Und wenn ich nun Fensterausgabebereich haben möchte geht das auch mit HWND von meinem Fenster?
Und kann ich das dann irgendwie in eine Datei kopieren?
 
Zurück