AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Geschwindigkeitsproblem: Screenshots, Bildbearbeitung
Thema durchsuchen
Ansicht
Themen-Optionen

Geschwindigkeitsproblem: Screenshots, Bildbearbeitung

Ein Thema von quetzal1906 · begonnen am 6. Feb 2012 · letzter Beitrag vom 8. Feb 2012
 
quetzal1906

Registriert seit: 6. Feb 2012
3 Beiträge
 
#1

Geschwindigkeitsproblem: Screenshots, Bildbearbeitung

  Alt 6. Feb 2012, 21:19
Hallo,

Ich hab seit langer Zeit mal wieder mein Delphi ausgepackt, und probiere etwas rum. Erst mal eine Beschreibung was das Programm macht:
In einem 50ms Timer wird ein Screenshot eines externen Fensters gemacht und in einem 24bit Bitmap gespeichert. Dann wird mittels BitBlt ein Teil des Screenshots (336*277) in zwei weiter 24bitmap bilder kopiert zur weiteren Verarbeitung. Das eine der neuen Bitmaps wird mit Bitblt und "mergepaint"-Parameter mit einem früheren Bild überlagert (Um unterschiede zum vorherigen Bild zu sehen). Die beiden Bitmaps werden dann jeweils einmal je Timerdurchlauf mit Hilfe von Scanline komplett untersucht und einige Pixelfarben geändert.
Auf Eines der Bilder werden dann noch einige geometrische Figuren gezeichnet (ca. 5 Kreise/Rechtecke) dann in einer Paintbox angezeigt.
Der rest des Programmes sind nur einfache Rechenaufgaben, die eigentlich keine Probleme machen sollten.

Ich schreib das deshalb so genau auf, weil ich keine Idee hab warum folgendes passiert:
Ich starte das Programm, es funktioniert alles, nur nach 5 Minuten merkt man zunehmend, dass sich das Programm verlangsamt, gefühlsmäßig auch das Programm von dem screenshots gemacht werden.. Schließt man jetzt das Delphiprogramm, dauert es ziemlich lange bis Delphi das Programm beendet hat und man den Editor wieder benutzen kann.

Woran könnte das alles wohl liegen? Im Anfang läufts ja flüssig.. Mag Delphi keine unschönen Bitmapgrößen wie 336*277 zur Bearbeitung? Kann Scanline Probleme machen alle 50ms 2mal? BitBlt sollte ja eigentlich recht schnell sein. Vielleicht ein Problem mit den screenshots.. aber wieso gehts im Anfang flüssig?

Hat jemand eine Idee? Für mehr Informationen bitte fragen.
Vielen Dank,
quetzal

PS: Screenshots werden mit dieser Methode gemacht, an deren Quelle ich mich gerade nicht erinnere, vermutlich aus dem Forum kopiert:
Delphi-Quellcode:
function FormularScreenShot(Bmp: TBitmap; h : hWnd): Boolean;
var
  Rec: TRect;
  iWidth, iHeight: Integer;
begin
  with Bmp do try
    GetWindowRect(h, Rec);

    iWidth := Rec.Right - Rec.Left;
    iHeight := Rec.Bottom - Rec.Top;

    Width := iWidth;
    Height := iHeight;

    BitBlt(Canvas.Handle, 0, 0, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY);

    Result := True;
  finally
    ReleaseDC(h, GetWindowDC(h));
  end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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 by Thomas Breitkreuz