AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bilder verwatlen

Ein Thema von RecDuc · begonnen am 27. Feb 2007 · letzter Beitrag vom 27. Feb 2007
Antwort Antwort
RecDuc

Registriert seit: 27. Feb 2007
8 Beiträge
 
#1

Bilder verwatlen

  Alt 27. Feb 2007, 15:02
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
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#2

Re: Bilder verwatlen

  Alt 27. Feb 2007, 15:09
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

mfg, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
RecDuc

Registriert seit: 27. Feb 2007
8 Beiträge
 
#3

Re: Bilder verwatlen

  Alt 27. Feb 2007, 15:16
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: Bilder verwatlen

  Alt 27. Feb 2007, 15:25
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
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
RecDuc

Registriert seit: 27. Feb 2007
8 Beiträge
 
#5

Re: Bilder verwatlen

  Alt 27. Feb 2007, 20:49
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!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.613 Beiträge
 
#6

Re: Bilder verwatlen

  Alt 27. Feb 2007, 20:58
Doch, kannst Du. Es bleibt ja ein TBitmap wenn Du das da reinpackst.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
RecDuc

Registriert seit: 27. Feb 2007
8 Beiträge
 
#7

Re: Bilder verwatlen

  Alt 27. Feb 2007, 21:50
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:
MainWindow.Viewport.Picture.LoadFromFile(Raum.get3DPicture()); 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 ?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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