![]() |
Bilder schneller laden
Hi,
Wollte einen kleinen ImageViewer bauen. Nichts großes und auch nur zum privaten Gebrauch. Habe mir die ![]() Was ich mir mal überlegt hatte, ist das vorherige und nächste Bild schon im Hintergrund zu laden, während man ein Bild anschaut. Das Problem ist aber, dass das nur bedingt helfen würde denn ein Problem wäre z.B. wenn ein mein Viewer mit einem großen Bild gestartet wird. Ich kann ja nicht vorladen, bevor mein Programm überhaupt gestartet ist.... Die Frage ist halt, wie ich das am geschicktesten anstelle, bzw obs eine Wundergraphikbibliothek gibt :mrgreen: Ansonsten gibts ja noch den Trick, die gefühlte Ladezeit künstlich zu verkürzen. Aber ich denke, damit kann man auch keine 500ms rausholen. Gruß Neutral General |
Re: Bilder schneller laden
5 Sekunden Splashscreen und Animationen beim Bildwechsel und der Anwender merkt nichts vom Bilderladen :mrgreen:
|
Re: Bilder schneller laden
Zitat:
Da ist was dran^^ Allerdings will ich zumindest relativ schnell durchblättern können, bzw die Animationen ausschalten können und dann muss es auch noch akzeptabel schnell gehn ;) Das mit dem Splashscreen könnte man sich ja sogar mal überlegen, wenn auch 5 Sekunden etwas übertrieben wären für nen PictureViewer :lol: (ok für ein PictureViewer ist es theoretisch generell unnötig, aber egal :stupid: ) |
Re: Bilder schneller laden
Ich denke für das erste Bild musst du die Ladezeit in kaufnehmen. Die folgenden Bilder kannst du dann ja in MemoryStrams laden, während das erste noch angezeigt wird*. Ein anderer Faktor dürfte die Darstellung auf der Komponente sein. Was passiert denn, wenn du während des Laden die Eigenschaft Visisble der Komponente auf False setzt oder wenn du das Bild erst in ein Bitmap im Speicher lädst und dann auf den Canvas der Komponete blittest?
') Da musst du aber mal testen, ob MemorySreams und Lo0adfromStream was bringen. |
Re: Bilder schneller laden
Zitat:
Delphi-Quellcode:
Und TPicture hat ein OnChange Event, indem ich folgendes tue:
TImageEx = class(TCustomControl)
private FBitmap: TBitmap; FPicture: TPicture; // etc published property Picture: TPicture read FPicture write SetPicture; // etc end;
Delphi-Quellcode:
Im OnPaint meiner Komponente blitte ich dann mein Bitmap (gestretcht oder/und zentriert, oder....) auf den DC meiner Komponente.
procedure TImageEx.PicChanged(Sender: TObject);
begin with FBitmap do begin Width := FPicture.Graphic.Width; Height := FPicture.Graphic.Height; Canvas.Draw(0,0,FPicture.Graphic); end; Repaint; end; Das mit dem Visible auf false setzen hab ich nicht so ganz verstanden, bzw was wäre der Nutzen? |
Re: Bilder schneller laden
Zitat:
|
Re: Bilder schneller laden
Ja wird doch sowieso oder nicht? :gruebel:
|
Re: Bilder schneller laden
z.B. einige jPegs bieten doch die Möglichkeit schon angezeigt zu werden, wenn sie noch nicht ganz geladen sind ... könnte man dieses nicht irgendwie ausnutzen und es somit schon früher (nur etwas unschärfer) anzuzeigen?
Aber bezüglich des Schnell Durchblätterns... wie wäre es wenn wenn du nicht nur das nächste und vorherrige bild vorlädst, sondern dir sowas wie diese Thumbs.db anlegst (kannst'e ja nach dem Programmende wieder löschen) In einem Thread die Cache verwalten ... alle Bilder nacheinander abarbeiten und sofort benötigte Bilder vorrangig bearbeiten lassen. |
Re: Bilder schneller laden
Bei progressiven Jpegs würde das gut funktionieren
|
Re: Bilder schneller laden
Bei der JPEG-Lib von Delphi kannst du ja auch das Bild vorerst halb, viertel- oder ein-achtel so groß laden.
Er liest das nur jede x-te Zeile. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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