Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild laden mit Progressbar zu langsam (https://www.delphipraxis.net/56765-bild-laden-mit-progressbar-zu-langsam.html)

Neutral General 10. Nov 2005 18:32


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:
  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;
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
Delphi-Quellcode:
   Progress.Position := Zahl;
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 -.-
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

Luckie 10. Nov 2005 18:35

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.

Neutral General 10. Nov 2005 18:40

Re: Bild laden mit Progressbar zu langsam
 
Zitat:

Zitat von Luckie
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.

Danke :)
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..

Der_Unwissende 10. Nov 2005 20:47

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

Nicolai1234 10. Nov 2005 21:38

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 22:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz