![]() |
Timages Ladezeiten
Hallöchen Leute,
ich bräuchte dringend eure Hilfe :> Mein Problem ist das folgende: Und zwar möchte ich gerne jede Sekunde, nach einiger Zeit sogar in noch kleineren Intervallen, die Bilder von 55 dynamischen TImages gleichzeitig ändern. Meine Überlegungen waren folgende:
Delphi-Quellcode:
for i:= 1 to 55 do
begin if animation[i]=true then begin if i <= 11 then a[i].picture.loadfromfile('Bilder\invader1.jpg') else if i <= 33 then a[i].picture.loadfromfile('Bilder\invader5.jpg') else if i <= 55 then a[i].picture.loadfromfile('Bilder\invader3.jpg'); animation[i]:=false; end else begin if i <= 11 then a[i].picture.loadfromfile('Bilder\invader2.jpg') else if i <= 33 then a[i].picture.loadfromfile('Bilder\invader6.jpg') else if i <= 55 then a[i].picture.loadfromfile('Bilder\invader4.jpg'); animation[i]:=true; end; end; Das funktioniert zwar, jedoch bleibt die gesamte Anwendung, beim Laden der Bilder, für den Bruchteil einer Sekunde stehen, was sehr unschön ist :/ Könnt ihr mir verraten, wie ich die Ladezeiten verkürzen kann? Oder das Problem vielleicht ganz anders lösen kann? :) mfg Behemoph |
Re: Timages Ladezeiten
Alle Bilder von vornherein in eine ImageList? Geht natürlich nur bei gleicher Größe.Sonst trotzdem vorher laden und in Liste/Array of TBitmap o.ä. ablegen.
Grüsse, Dirk |
Re: Timages Ladezeiten
Danke für die schnelle Antwort. Die Bilder sind größtenteils gleich groß. Vllt geht es auch mit 2 Imagelists.. Dazu müsste ich nur wissen, wie ich das realisieren kann, wenn du meinst, dass das was ausmachen würde ;)
mfg Behemoph |
Re: Timages Ladezeiten
Du kannst Threads nutzen, die die Bilder im Hintergrund laden. Dabei bleibt deine Anwendung bedienbar. Ist aber etwas komplexer.
Was ich mir noch vorstellen könnte, wäre das vorherige Laden aller Bilder, wie schon angesprochen. Oder auch, wie im Web ab und zu verwendet, dass man alle Bilder in ein Bild wirft und somit nicht 55 Bilder laden muss, sondern nur eines, welches man dann entsprechend zu verarbeiten hat. |
Re: Timages Ladezeiten
Auch dir ein Dankeschön :)
Werde dann wohl zur Timagelist-Methode greifen. Nur.. Wie bekomme ich die 110 Bilder(jpegs) da in solche listen rein und wie rufe ich die richtigen zum richtigen zeitpunkt auf? |
Re: Timages Ladezeiten
Du kannst diese schon zur Entwicklungszeit ins Programm laden, wenn du willst. Setze eine TImageList auf die Form und mache einen Doppelklick darauf.
|
Re: Timages Ladezeiten
Aaaaah, alles klar, danke dir ;)
also.. hab jetzt mal zu testzwecken ne imagelist1 aufs formular gesetzt und bei formcreate reingeschrieben:
Delphi-Quellcode:
a[i] ist ein array of tbitmap.
for i:= 1 to 55 do
begin a[i]:=tbitmap.create; a[i].LoadFromFile('bilder\invader1.bmp'); imagelist1.Add(a[i],nil); a[i].free; end; Es lässt sich soweit schonmal ohne Fehler kompilieren.. stellt sich mir nurnoch die Frage, wie ich dann die Bilder da wieder rauskriege :> Also mein Ziel war es ja, die Bilder, mit Hilfe eines Timers, abwechselnd darzustellen. |
Re: Timages Ladezeiten
*autsch* was schreibst du denn für Code? :zwinker: erzeug doch einfach nur einmal ein image und lade da jedes mal das bitmap rein.
Delphi-Quellcode:
image := TBitmap.Create();
try for i:= 1 to 55 do begin image.LoadFromFile('bilder\invader1.bmp'); Imagelist1.Add(image, nil); end; finally FreeAndNil(image); end; // so kann es es in einem image anzeigen var image : TBitmap; begin image := TBitmap.Create(); try if (ImageList1.GetBitmap(0, image) ) then Image1.Picture.Bitmap.Assign(image); finally FreeAndNil(image); end; end; |
Re: Timages Ladezeiten
Okidoki, es läuft.. glaub ich :)
Das letzte Problem ist jetzt allerdings, dass die Bilder viel zu groß sind und mein vorheriges
Delphi-Quellcode:
irgendwie nicht mehr gültig ist.
stretch:=true
Jedenfalls wird nur ein kleiner Teil des viel zu großen Bildes angezeigt :/ mfg Behemoph |
Re: Timages Ladezeiten
Es gibt einen dummen Fehler, der mir immer passiert wenn ich eine Imagelist benutze :mrgreen:
Sind die Eigenschaften height und width der Imagelist auf die richtige Größe eingestellt? |
Re: Timages Ladezeiten
Hallo,
noch ne Anmerkung. Neben LoadFromFile gibt es auch LoadFromStream. Damit kann ich auch verschieden grosse Bilder verwalten. Heiko |
Re: Timages Ladezeiten
Guten Morgen..
Hab es jetzt mal mit loadfromstream versucht.. das bild sieht ein wenig anders aus, ist jedoch trotzdem nicht in der richtigen größe :( Hab es so gemacht:
Delphi-Quellcode:
und dann im timer zum aufrufen:
ms:TMemoryStream;
... ms := TMemoryStream.Create; try for i:= 1 to 55 do begin image.LoadFromFile('bilder\invader1.bmp'); image.SaveToStream(ms); end; finally FreeAndNil(image); end;
Delphi-Quellcode:
Und kann es sein, dass .stretch bei bitmaps nicht funktioniert? Hmm.. verzweifle hier noch :/
for i:= 1 to 11 do
begin image := TBitmap.Create(); try a[i].Picture.Bitmap.LoadFromStream(ms); finally FreeAndNil(image); end; end; /edit Ok, weiß nicht was da schief gelaufen ist.. es funktioniert doch nicht :x. Es kommt zwar kein Fehler, allerdings ist kein Bild zu sehen.. :( :cry: |
Re: Timages Ladezeiten
Erstmal ein Sry wegen des doppelpostes, aber habs jetzt einigermaßen hinbekommen :oops:..
Habe die verschiedenen Bilder schon zur entwicklungszeit in die imagelist geladen und rufe sie dann per timer ab. Die Bilder haben alle die richtige größe aber.. Irgendwie verunstaltet die Imagelist meine Bilder total. Wenn ich die Imagelist doppelklicke und da dann ein Bmp reinlade, sieht das auch schon in der Vorschau total anders aus. Krumm und schief und total unscharf :/ Kann man dem irgendwie Abhilfe schaffen? :> |
Re: Timages Ladezeiten
Hier habe ich u.a. beschrieben wie man eine Liste von Bildern laden kann:
![]() Die Bilder können dann jederzeit irgend einem Image zugewiesen werden.
Delphi-Quellcode:
Image.Picture.Assign(TPicture(FBilder[i]))
|
Re: Timages Ladezeiten
Hallo,
Zitat:
2. Wie sind Height und Width der ImageList gesetzt ? 3. Wie sind Height und Width der TImages gesetzt ? Heiko |
Re: Timages Ladezeiten
Danke an Euch alle :)
Habs nun hinbekommen.. Das Problem war, dass Höhe und Breite der Imagelist einfach zu klein waren für die Bilder :> Jetzt läuft alles, kein ruckeln mehr und ja.. Thread kann wohl geschlossen werden :) Danke schööön mfg Behemoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 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 by Thomas Breitkreuz