![]() |
Image aus Image schneiden
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, ich möchte gerne einen Screenshot nur von einem Fenster machen.
Ich drücke auf den Button lasse die Maustaste gedrückt und lasse sie auf einem anderen Fenster los. Die Anwendung nimmt den Screenshot vom ganzen Bildschirm und stellt danach das Fenster frei. Meine Methode funktioniert auch ganz gut, in den beiden Images wird das richtige Bild angezeigt, allerdings kann ich es nur 1x ausführen. Beim 2ten mal gibt es Fehler. Das gleiche Problem gibt es wenn ich es einmal ausgeführt habe und dann die ganze Anwendung schließen will. Scheint ein größerer Fehler zu sein? Fehler: ![]()
Delphi-Quellcode:
Soll:
//Fertigt einen Screenshot vom Desktop an
procedure MakeScreenShot(const ATarget: TBitmap); var DesktopDC: HDC; begin DesktopDC := CreateDC('DISPLAY', nil, nil, nil); try ATarget.PixelFormat := pfDevice; ATarget.Width := Screen.Width; ATarget.Height := Screen.Height; BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY); finally DeleteDC(DesktopDC); end; end; procedure TForm1.Button9MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p:TWindowPlacement ; h :HWND; SourceBitmap : TBitmap; TargetBitmap : TBitmap; Cut : TRect; begin h:=WindowFromPoint(Mouse.CursorPos); p.Length:=SizeOf(TWindowPlacement); GetWindowPlacement(h,@p); MakeScreenShot(Image1.Picture.Bitmap); Image1.Repaint; SourceBitmap:= TBitmap.Create; TargetBitmap:= TBitmap.Create; SourceBitmap:=Image1.Picture.Bitmap; Cut.Left := p.rcNormalPosition.Left; Cut.Top := p.rcNormalPosition.Top; Cut.Right := p.rcNormalPosition.Right; Cut.Bottom := p.rcNormalPosition.Bottom; try TargetBitmap.Width := Cut.Right - Cut.Left; TargetBitmap.Height := Cut.Bottom - Cut.Top; BitBlt(TargetBitmap.Canvas.Handle, 0, 0, Cut.Right, Cut.Bottom, SourceBitmap.Canvas.Handle, Cut.Left, Cut.Top, SRCCOPY); SourceBitmap.Canvas.Refresh; Image2.Picture.Bitmap:=TargetBitmap; Image2.Repaint; JPEG; finally SourceBitmap.Free; TargetBitmap.Free; end; end; ![]() |
AW: Image aus Image schneiden
Wieso hängst Du die Bilder nicht an Deinen Beitrag an? Dann bleiben Sie uns auch erhalten. Und zu Deinem Code: ich würde den Screenshot ja in der SourceBitmap und den Ausschnitt dann in TargetBitmap speichern. Anschließend diese beiden Bitmaps den jeweiligen Images zuordnen, das spart wohl auch die ganzen Refresh-Aufrufe.
|
AW: Image aus Image schneiden
Ich habe es jetzt so geändert
Delphi-Quellcode:
Nun geht es und nimmt das Fenster so auf wie man es sieht. Mit evtl. anderen Fenstern drüber.
SourceBitmap:= TBitmap.Create;
TargetBitmap:= TBitmap.Create; MakeScreenShot(SourceBitmap); Was war den der Fehler? Das refresh von Image1 am Anfang? |
AW: Image aus Image schneiden
Ich vermute, das lag am
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz