![]() |
Bild laden mit Progressbar zu langsam
Hi,
Also ich lade ein eigenes Bildformat in mein Programm rein. Bildformat ist übertrieben. Eigentlich wird in eine Textdatei nur die Größe und jeder einzelne Pixel reingeschrieben. Das laden klappt wunderbar.
Delphi-Quellcode:
Das funktioniert wie gesagt. Natürlich dauert das laden schon etwas länger als bei normalen Bildformaten weil meine Dateien auch um einiges größer sind :mrgreen: Wenn ich die Zeile
Progress.Position:= 0;
Progress.Max := Form.Height * Form.Width; for J:= 0 to StrToInt(Laden.Strings[1]) do begin Application.ProcessMessages; for i:= 0 to StrToInt(Laden.Strings[0]) do begin if Pos('cl',Laden.Strings[Zahl]) = 0 then begin Form.Image321.Canvas.Pixels[i,j] := StringToColor('$00'+Laden.Strings[Zahl]); end else begin Form.Image321.Canvas.Pixels[i,j] := StringToColor(Laden.Strings[Zahl]); end; inc(Zahl); Progress.Position := Zahl; end; end;
Delphi-Quellcode:
weglasse dann ist das um EINIGES schneller. Nur wird halt der Ladefortschritt nicht angezeigt.. Und was bringt mir eine Anzeige vom Ladevorgang wenn dadurch das Laden min 3 mal so lange wenn nicht sogar noch länger dauert -.-
Progress.Position := Zahl;
Kann man das nicht irgendwie schneller machen? Das kann doch nicht sein das diese eine Zuweisung sooo viel Zeit braucht.. PS: Sagt mir nicht das mein Bildformat Schwachsinn ist oder so, das weiß ich auch :mrgreen: aber ich habs immerhin erfunden :D |
Re: Bild laden mit Progressbar zu langsam
Grafische Ausgaben sind das lamgsamste, was es gibt unter Windows und das Zeichnen der Fortschrittsanzeige dauert eben. Ein Lompromis wäre die Fortschrittsanzeige eben nur bei jedem X'ten Durchlauf zu aktualisieren.
|
Re: Bild laden mit Progressbar zu langsam
Zitat:
Eine simple aber geniaaale Idee. Hätte ich eigentlich auch mal draufkommen können :mrgreen: Jetzt aktuallisiere ich nur alle 3 Pixel und es geht wieder richtig schnell.. wobei ich glaube jeder 10. Pixel reicht auch dicke.. |
Re: Bild laden mit Progressbar zu langsam
Ich behaupte hier einfach mal, dass es auch reicht nach einer Zeile zu aktualisieren. Schließlich muss zum neu zeichnen ne Menge an Nachrichten verarbeitet werden oder anders gesagt, es braucht viiiiiiiiiel Rechenzeit. Da Application.ProcessMessages genau diese bereitstellt, könntest du dein Progressbar auch genau vor dessen Aufruf schreiben und es sollte nicht seltener aktualisiert werden als jetzt.
Ansonsten bekommst du das Laden mit ScanLine i.d.R. auch noch um einiges schneller hin. Ist aber auch etwas komplizierter. Musst beim Einsatz von Scanline unbedingt auf das Pixelformat achten. Mit pf32Bit kannst du theoretisch (ein Registerwort) am effizientesten Arbeiten, aber selbst mit pf24Bit ist es schon ordentlich schnell (im Verhältnis zu Pixels). Gruß Der Unwissende |
Re: Bild laden mit Progressbar zu langsam
Die Progressbar ist doch idR in Prozent, oder?
Also reicht es doch bei z.B. einem Megapixel, wenn sich die Anzeige nur alle 10.000 Pixel aktualisiert. Also ein hundertstel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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