Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi mehrere TImages im Voraus laden (https://www.delphipraxis.net/49192-mehrere-timages-im-voraus-laden.html)

dioony 6. Jul 2005 20:16


mehrere TImages im Voraus laden
 
Servus!

Ich weiß, dass jeder hier gleich rummeckern wwill, wegen dem betreff, aber mir viel nichts passenders ein...

Nun zu meinem Problem:

Ich lade mehrere Jpegs in während der laufzeit erstellten TImages... Diese haben als parent eine Scrollbox. Das ist auch schön und gut... Nun ist es so, dass nicht alle images geladen werden, sondern nur die, die man gerade in der scrollbox sieht. wenn man nach unten scroll werden erst die anderen images nachgeladen. Hat da jemand ne idee, wie man sie quasi voraus laden kann?


das erstellen sieht wie folgt aus:

Delphi-Quellcode:

var PictureThumb: array of TImage;

(....)

  for i:=0 to ListBox4.Count-1 do
  begin
    PictureThumb[i]:=TImage.Create(self);
    PictureThumb[i].Parent:=ScrollBox1;
    PictureThumb[i].Left:=(left*131);
    PictureThumb[i].Height:=130;
    PictureThumb[i].Width:=130;
    PictureThumb[i].Top:=top;
    PictureThumb[i].Picture.Create;
    PictureThumb[i].Picture.LoadFromFile(ListBox4.Items[i]);
    PictureThumb[i].Picture.
    PictureThumb[i].Stretch:=true;
    PictureThumb[i].Proportional:=true;
    PictureThumb[i].Show;
  end;
* in der ListBox4 stehen die ganzen dateinamen der bilder...

Hab es auch schon mit der graphics32 komponente versucht, aber da lädt er die bilder ziemlich langsam rein. die obige ist die schnellste methode zum bilder laden, die ich bisher rausgefunden habe. alle images vorher zu verkleiner oder so bringt auch keine bessere performance...
falls jemand da noch andere kennt wäre es auch nicht schlecht, wenn da jemand ein tipp hätte!

Danke im voraus!

bis dann dioony

Khabarakh 6. Jul 2005 20:26

Re: mehrere TImages im Voraus laden
 
GR32 ist IMO schonmal der richtige Weg :wink: .
Nimm am Besten ein TImgView32 und lade alle Bilder in dessen Bitmap (also nicht mehrere, sondern nur ein großes), dann sollte es besser gehen.

dioony 6. Jul 2005 20:33

Re: mehrere TImages im Voraus laden
 
ich weiß jetzt nicht genau wie du das meinst,

soll ich jetzt quasi auch mehrere TImgView32s erstellen und dann in jedes die Bilder laden?!

wie schon gesagt,haben meine tests ergeben, dass die GR32 ziemlich langsam ist, vor allem beim laden von ca. 100 bildern a 300 kb...

Khabarakh 6. Jul 2005 20:44

Re: mehrere TImages im Voraus laden
 
Wie sind deine Bilder in der Scrollbox angeordnet?
Wenn sie halbwegs nebeneinander liegen, würde ich ein großes TImgView32 benutzen, das die gesamte Scrollbox ausfüllt, und auf dessen Bitmap alle Bilder zeichnen. Dass die GR32-Lib langsam ist, wäre mir neu :zwinker: .

dioony 6. Jul 2005 21:17

Re: mehrere TImages im Voraus laden
 
Die bilder liegen halt 4 stück nebeneinander und dann entsprechend dynamisch die reihen nach unten hin weg...

das mit einem großen bitmap wäre nicht gegangen, weil ich jedes bild im nachhinein einzeld ansprechen muss und das wäre dann viel zu aufwendig...

hab jetzt den code von axelf aus der codelibrary genommen. dieser zeichnet ziemlich schnell die bilder und das problem mit dem scrollen ist dadurch auch behoben...

aber trotzdem danke...

DGL-luke 6. Jul 2005 21:55

Re: mehrere TImages im Voraus laden
 
großes bitmap?!

versteh ich nicht....

Delphi-Quellcode:
type Tstringarray = array of string;

function thumbs(bitmaps:Tstringarray; size:TPoint; spacing, cols:integer;):TBitMap32;
var temp:TBitmap32;
    i:integer;
    r:TRect;
begin
result:=TBitMap32.create;
temp:=TBitMap32.create;


result.width:= cols * (spacing + size.X) + spacing;
result.height := length(bitmaps) * (spacing + size.Y) + spacing;

for i:= 0 to high(bitmaps) do
 begin
  temp.loadfromfile(bitmaps[i]);
  r:=rect((spacing + size.X) * i mod cols,(spacing + size.X) * i mod cols + size.X, i div cols * (size.Y+spacing), i div cols * (size.Y+spacing) + size.Y); //Diese Zeile ist überprüfungswürdig....
  result.draw(r,r,temp);
 end;
end;
Diese Funktion sollte dir aus einem array von Dateinamen, Skalierungsmaßen, Abstand und anzahl der Spalten ein großes Thumb-Bitmap liefern.

NICHT getestet, und die oben markierte zeile muss überprüft werden, weil ich die Berechnungen nur einmal durchdacht habe.
Also selber überlegen, wo genau das einzelne bild hinmuss!

(Werde mir vielleicht morgen eine kleine Demo rundrum bauen.)


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