Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TimageList.getImage zu langsam (https://www.delphipraxis.net/170026-timagelist-getimage-zu-langsam.html)

BR146 26. Aug 2012 16:24

TimageList.getImage zu langsam
 
Hallo zusammen!

Ich möchte eine Paintbox mit Icons (50px*50px) füllen. Das ganze bildet eine Art "Raster" mit 40*20 Feldern.
Wenn ich jetzt aber die Procedure aufrufe, so dauert es fast eine ganze Sekunde, bis die Paintbox fertig geupdated ist.
Kommentiere ich jetzt die Zeile mit
Delphi-Quellcode:
icons.GetBitmap(2,bmp);
aus, dann wird die Paintbox in null-komma-nix gezeichnet...

Merkbar ist's vor allem an den Testweise eingefügten Messages. Mit der Zeile: ca. 1s - Ohne Zeile: kaum merkbare Zeit zwischen den Messages.
Daher vermute ich, dass es wohl an der Imagelist liegt. Kann mir jemand ein Tipp geben, wie ich das Problem lösen kann?
Die Zeit ist nicht tragbar, da durch Userinteraktion sich das Rsater ändert und ne gezeichnet werden muss... :(

Danke schonmal!
Adrian

Delphi-Quellcode:
procedure TmainFormular.Draw;
var X, Y: integer;
    bmp: Tbitmap;
    zwp: TPicture;
begin
   showmessage('Start');
   zwp := TPicture.Create;
   zwp.Bitmap.Width := 50*40;
   zwp.Bitmap.Height := 50*20;
   
   for X:=0 to 40 do begin
      for Y:=0 to 20 do begin

         bmp := Tbitmap.Create;

         icons.GetBitmap(2,bmp);
         //^^ Hier ist meine Problemzeile
         
         zwp.Bitmap.Canvas.Draw(x*50,y*50,bmp);
         bmp.Free;
      end;
   end;

   Paintbox1.Canvas.Draw(0,0,zwp.Graphic);
   zwp.Free;
   showmessage('Ende');
end;
(Prozedur ist auf das nötigste gekürzt worden. So habe ich es auch getestet...)

xaromz 26. Aug 2012 16:38

AW: TimageList.getImage zu langsam
 
Hallo,

warum verwendest Du nicht Delphi-Referenz durchsuchenTImageList.Draw? Momentan erzeugst Du für jedes Bild ein temporäres Bitmap-Objekt, malst da rein und malst das denn erst aufs Ziel. Das kostet natürlich.
Außerdem sind Deine Schleifen immer einen Durchlauf zu lang (0 bis 40 sind 41 Elemente).

Gruß
xaromz

BR146 26. Aug 2012 18:19

AW: TimageList.getImage zu langsam
 
Zitat:

Zitat von xaromz (Beitrag 1179987)
Momentan erzeugst Du für jedes Bild ein temporäres Bitmap-Objekt, malst da rein und malst das denn erst aufs Ziel.

Das hat auch seinen Grund: Ich muss die Icons z.T. noch drehen (in 90°-Schritten) bevor ich sie auf das "große" Mal.

Das ich es erst am schluss dann auf die Paintbox mal ist klar: sonst wirds jedes Mal neu gezeichnet... :stupid:

Warum ich nicht Delphi-Referenz durchsuchenTImageList.Draw verwende? :gruebel: Keine Ahnung.

Und das meine Schleifen zu lang laufen ist mir noch garnet aufgefallen :roll:

Ich probiers mal aus. Danke!

---EDIT---

Ich hab's grad mal im richtigen Programm probiert. Ist subjektiv gleich schnell mit Delphi-Referenz durchsuchenTImageList.Draw wie mit Delphi-Referenz durchsuchenTImageList.getBitmap
Mein Flaschenhals ist jetzt die Drehroutine... :?

Thread hat sich erledigt!


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