![]() |
Performance | Screenshots
Hallo Delphigemeinde.
ich habe ein tool geschrieben was alle 2000ms über ein Timer gesteuert Screenshots von dem kompletten desktop macht und diese in eine Datei speichert. (diese wird immer wieder durch einen neuen Screenshot ersetzt) Nun meine Frage: Ist da performance mäßig noch was rauszuholen, denn es ruckelt schon alles wenn ein Screenshot gemacht wird. Hier die Funktion (ähnlich CL)
Delphi-Quellcode:
ob diese vielen Application.ProcessMessages; was bringen kA :)
procedure TMain.ScreenToFile(aFileName: string);
var Bitmap: TBitmap; JPG : TJPEGImage; Canvas: TCanvas; begin Canvas := TCanvas.Create; try Canvas.Handle := GetWindowDC(0); Application.ProcessMessages; try Bitmap := TBitmap.Create; Application.ProcessMessages; JPG := TJPEGImage.Create; Bitmap.PixelFormat:=pf8bit; Application.ProcessMessages; try Bitmap.Width := Screen.DesktopWidth; Bitmap.Height:= Screen.DesktopHeight; Bitmap.PixelFormat := pfDevice; Application.ProcessMessages; BitBlt(Bitmap.Canvas.Handle, 0, 0, Pred(Screen.DesktopWidth), Pred( Screen.DesktopHeight), Canvas.Handle, Screen.DesktopLeft, Screen.DesktopTop, Bitmap.Canvas.CopyMode); Application.ProcessMessages; JPG.CompressionQuality:=50; JPG.Assign(Bitmap); Application.ProcessMessages; if fileexists(aFileName) then deletefile(aFileName); JPG.SaveToFile(aFileName); finally // resizepictur(aFileName,800,600); Bitmap.Free; JPG.Free; end; finally ReleaseDC(0, Canvas.Handle); Application.ProcessMessages; end; finally Canvas.Free; end; end; wäre für jeden Tipp dankbar. mfg [edit=sakura] [code] mit [delphi] ausgetauscht. Mfg, sakura[/edit] |
Re: Performance | Screenshots
Zitat:
Vielleicht liegt's daran, weil du die JPEGs komprimierst, aber genau weiß ich das auch nicht. Ob es schneller ist, eine größere Datei zu speichern, oder eine kleinere inkl. Kompromieraufwand ist die Frage. :? |
Re: Performance | Screenshots
Hallo RobertS,
wenn es um die Bedienbarkeit Deines Programms geht ("ruckeln"), dann könntest Du Deine Prozedur ja in einen Thread auslagern. |
Re: Performance | Screenshots
danke für den hinweis mit dem thread.
hier mal mein versuch:
Delphi-Quellcode:
ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@ScreenTofile),nil, 0, ThreadID);
SetThreadPriority(ThreadHandle,THREAD_PRIORITY_HIGHEST); CloseHandle(ThreadHandle); • ich merke jetzt das der 1. screenshot ewig braucht • wenn ich das fenster schnell hin un her bewege kommt die meldung "nicht genügend speicher" |
Re: Performance | Screenshots
Luckie hat mal ein Tutorial über threads geschrieben, schau es dir am besten mal an ;-)
|
Re: Performance | Screenshots
Im Delphi-Demo-Ordner ist auch ne kleine Thread-Demo ;)
|
Re: Performance | Screenshots
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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