Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bilder verwatlen (https://www.delphipraxis.net/87356-bilder-verwatlen.html)

RecDuc 27. Feb 2007 15:02


Bilder verwatlen
 
Erstmal hey (erste Post) ;)

Ich habe ein kleines Problem, und war möchte ich mir einen schlanken ResourcenManager schreiben,
bin mir aber nicht sicher, wie ich die Bilder geeignet "preloaden" also vorladen kann.

Derzeit versuche ich, alle Bilder in eine ImageList zu laden, bin mir aber nicht so sicher, ob dass die richtige vorgehensweise ist, da ich mich mit dieser Komponente nicht so auskenne ...

Meine Absicht ist es später, recht große Bilder schnell umschalten zu können und in diesen scrollen zu können.
Das Scrollen sollte sich über TBitmap verwirklichen lassen ( da gibt es schon ein ähnnliches Feature ) weshalb die Kompatibilität zu TImageList auch gegeben ist.

Habt ihr einen Tipp für mich - also gibt es einen besseren Weg als TImageList ?
Z.B. eine Lösung durch die sich auch der Ladefortschritt anzeigen lässt !?

PS: Ich habe mal gehört, dass alle Bilder in einer ImageList gleich groß sein müssen, stimmt das ?

Danke vorweg ;)

arbu man 27. Feb 2007 15:09

Re: Bilder verwatlen
 
Guck dir mal die Typen Delphi-Referenz durchsuchenTObjectList und Delphi-Referenz durchsuchenTBitmap an.

Das kann so aussehen:

Code:
  progressbar.max := anzazhl_bilder
  for i:= 0 to anzazhl_bilder do begin
    bild in bitmap laden
    objectlist.add(bitmap)
    progressbar erhöhen
  end
Herzlich Willkommen in der DP :party:

mfg, Björn

RecDuc 27. Feb 2007 15:16

Re: Bilder verwatlen
 
Stimmt, einen Ladebalken nach jedem Bild zu erhöhen wäre schonmal eine gute Idee.

Ich habe bisher ein wenig kompliziert gedacht (2Threads die parralel laufen, damit der Balken eine schöne konstante laufgeschwindigkeit besitzt, wäre mir für den Effekt aber doch zuviel Arbeit, vorallem weil ich unter Delphi noch nie mit Threads gearbeitet habe).

EDIT: Birgt TObjectList vorteile gegenüber TImageList ?

arbu man 27. Feb 2007 15:25

Re: Bilder verwatlen
 
TImageList ist mehr für Bilder die auf Buttons kommen, ich glaub da muss man auch für die Bilder Größen einstellen, praktisch wenn man mit einen Laden 10 Symbole laden kann, aber für große Bilder ungeeignet...
Bei der TObjectList kannst du auch andere Klassen speichern, beispielsweise Instanzen vom Type TPicture solltest du mit Bildern arbeiten die nicht im BMP-Format sind auch sehr nützlich...

mfg, Björn

RecDuc 27. Feb 2007 20:49

Re: Bilder verwatlen
 
Muss mal eine ganz dumme Frage zu ObjectList stellen:

Wie bekomme ich die Bitmap wieder aus der Liste raus ?
Ich kann doch nicht einfach eine Typkonvertierung von TObject zu TBitmap durchführen, damit das Format weiter gereicht werden kann...

hmm komme da nicht drauf!

Phoenix 27. Feb 2007 20:58

Re: Bilder verwatlen
 
Doch, kannst Du. Es bleibt ja ein TBitmap wenn Du das da reinpackst.

RecDuc 27. Feb 2007 21:50

Re: Bilder verwatlen
 
Das hat jetzt alles gut funktioniert ;) - Danke.

Mit der erreichten Performance bin ich aber ziemlich unzufrieden!

Ich habe jetzt eine TObjectList die TPictures speichert.
Beim starten werden zunächst alle später verwendeten Bilder per LoadFromFile geladen und der Liste gespeichert:
Delphi-Quellcode:
   Picture.LoadFromFile(Path);
  _ImageList.Add(Picture); // TObjectList Instanz
Wenn ich nun ein Bild lade, gibt es kaum einen Geschwindigkeitsvorteil wenn ich schon vorher LoadFromFile für das Picture benutzt haben

Hier zwei Methoden im Vergleich:
Delphi-Quellcode:
MainWindow.Viewport.Picture.LoadFromFile(Raum.get3DPicture());
Delphi-Quellcode:
MainWindow.Viewport.Picture := ResourceManager.getImageByPath(Raum.get3DPicture());
Beide sind nahezu gleich schnell, obwohl Methode 1 das Bild komplett neu laden lässt, und Methode 2 auf den ResourcenManager, also auf die TObjectList ( _ImageList ) zurückgreift.

Gibt es noch möglichkeiten den Ladevorgang zu beschleunigen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 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