Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Timages Ladezeiten (https://www.delphipraxis.net/151486-timages-ladezeiten.html)

Behemoph 19. Mai 2010 22:16


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

Tryer 19. Mai 2010 22:31

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

Behemoph 19. Mai 2010 22:40

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

s.h.a.r.k 19. Mai 2010 22:49

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.

Behemoph 19. Mai 2010 23:14

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?

s.h.a.r.k 19. Mai 2010 23:22

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.

Behemoph 19. Mai 2010 23:46

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:
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;
a[i] ist ein array of tbitmap.

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.

s.h.a.r.k 19. Mai 2010 23:50

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;

Behemoph 20. Mai 2010 00:57

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:
stretch:=true
irgendwie nicht mehr gültig ist.

Jedenfalls wird nur ein kleiner Teil des viel zu großen Bildes angezeigt :/

mfg Behemoph

BUG 20. Mai 2010 05:30

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.
Seite 1 von 2  1 2      

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