Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Performance | Screenshots (https://www.delphipraxis.net/17236-performance-%7C-screenshots.html)

RobertS 1. Mär 2004 17:11


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:
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;
ob diese vielen Application.ProcessMessages; was bringen kA :)

wäre für jeden Tipp dankbar.

mfg

[edit=sakura] [code] mit [delphi] ausgetauscht. Mfg, sakura[/edit]

Matze 1. Mär 2004 17:18

Re: Performance | Screenshots
 
Zitat:

Zitat von RobertS
ob diese vielen Application.ProcessMessages; was bringen kA :)

Also mit weniger kommst du gut aus. ;)

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. :?

APP 1. Mär 2004 17:25

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.

RobertS 1. Mär 2004 17:56

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"

Alexander 1. Mär 2004 17:59

Re: Performance | Screenshots
 
Luckie hat mal ein Tutorial über threads geschrieben, schau es dir am besten mal an ;-)

Matze 1. Mär 2004 18:00

Re: Performance | Screenshots
 
Im Delphi-Demo-Ordner ist auch ne kleine Thread-Demo ;)

nailor 1. Mär 2004 18:01

Re: Performance | Screenshots
 
Hier im Forum suchenprogramm screenshot vielleicht wird dich das ein wenig ernüchtern. ;) ganz so leicht scheint es nicht zu sein / bzw. andere hatten auch schon Probleme damit.


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