Entwickler-Ecke
Multimedia / Grafik - Ladezeit von TImage verringern
Mashalla - So 27.12.09 16:09
Titel: Ladezeit von TImage verringern
Hey,
ich programmiere zur Zeit an einem Bildbetrachter. Dazu verwende ich die TImage-Komponente in Verbindung mit GraphicEx. Nun besteht aber das Problem, dass Bilder ab 7 MP ungefähr schon knapp eine Sekunde zum Laden brauchen. Die Bilder liegen auf der Festplatte und werden mittels LoadFromFile(...) in die Image-Komponente gepackt. Ich habe auch eine Diashowfunktion realisiert, welche allerdings beim 2 Sekunden Intervall an ihre Grenzen gerät, da das aktuell geladene Bild fast zeitgleich vom schwarzen Bildschirm der Image-Komponente, welcher andeutet, dass das nächste Bild geladen wird, ersetzt wird. Es dauert einfach zu lange, die Bilder zu laden.
Jetzt ist meine Frage, wie ich den Vorgang beschleunigen kann?
Ich dachte daran, die nächsten Bilder vorzuladen, während das Programm gerade im Leerlauf ist. Weiß allerdings nicht genau, wie ich da vorgehen sollte und wo ich die Bilder speichern sollte, damit sie möglichst flott ins TImage eingefügt werden können. Ansatz war, 3 Images zu verwenden. Vorheriges Bild <> Aktuelles Bild <> Nächstes Bild und diese dann einfach mit Image.Visible entsprechend zu benutzen...
Najo, Tipps? :)
jaenicke - So 27.12.09 18:03
Das Problem ist ja, dass das Laden im Hintergrund eigentlich nur in einem Thread Sinn macht. Gleichzeitig kannst du dort aber die Grafikkomponenten nicht ansprechen.
Möglichkeiten:
Im Hintergrund im Thread die Dateien in einen MemoryStream einlesen und dann aus diesem laden, das bringt vermutlich schon etwas Zeitvorteil.
Im Thread auch ein verkleinertes Vorschaubild direkt erzeugen, dafür dann mit Synchronize arbeiten. Nachteil: Die Oberfläche hängt dafür dann immer kurz.
Mashalla - So 27.12.09 19:26
Ich weiß jetzt nicht, was bei der Operation die meiste Zeit verbraucht, aber wenn es das Laden der Daten ist, dann würde der MemoryStream sinnvoll sein, sofern das Laden aus dem Stream schneller geht als direkt von der Festplatte (wovon ich stark ausgehe nach deiner Antwort). Kann ich vielleicht als Zusatz oder Alternative irgendwie das Bild in verringerter Qualität oder schrittweise laden, also eine Art Interlacing? Oder große Bilder runterskalieren?
Die Sache mit der nicht reagierenden Oberfläche ist auch etwas unschön, werde mich aber morgen mal mit dem MemoryStream befassen ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!