![]() |
500 images in ein Array einladen
Hi! Habe folgendes Problem...
Möchte ca. 300-500 bilder nacheinander (per timer) auf dem bildschirm ausgeben. also so eine Art "Diashow" ganz wichtig ist jedoch, dass die bilder keine ladezeit oder so benötigen, jedenfalls nicht während der timer läuft, da sie auf die milisekunde genau angezeigt werden müssen. Habe versucht, ein Array von TBitmaps zu erstellen und die Bilder direkt beim Start einzulesen, damit keine Zeit beim Einlesen der Bilder von der Festplatte zur Laufzeit des Timers entsteht, also praktisch alle Bilder schon in einem Array im Arbeitsspeicher vorliegen...bekomme aber immer eine Zugriffsverletzung im Speicher: Jemand ne Idee?
Delphi-Quellcode:
Liebe Grüße, Alleinherrscher
var bild:array[1..500] of tbitmap;
//.... for i:= 1 to bildanzahl do bild[i].LoadFromFile(bilddateiname[i]); //.... |
Re: 500 images in ein Array einladen
Erstmal
Delphi-Quellcode:
;-)
bild[i] := TBitmap.Create();
|
Re: 500 images in ein Array einladen
Hallo Alleinherrscher,
zuerst musst du den einzelnen Arrayfeldern eine Instanz von TBitmap zuweisen:
Delphi-Quellcode:
Du solltest das Ganze natuerlich noch in einen Resourcenschutzblock setzen, da die 500 Bilder viel Platz benoetigen, und wenn irgendwas crasht dann gibt das ein schoenes Speicherleck...
bild[i] := TBitmap.Create;
bild[i].LoadFromFile(...); Greetz alcaeus |
Re: 500 images in ein Array einladen
Vielleicht greifst du irgendwie auf einen nil Wert zu oder beispielsweise auf Bild 501, schwer zusagen bei so wenig Text.
Gruß DelphiFreund |
Re: 500 images in ein Array einladen
Danke leute, ich bin echt doof :-( da hätte man auch selber drauf kommen können!
Was muss ich jetzt noch genau beachten,damit es bei 500 bildern keine überlastung gibt? was ist ein "Resourcenschutzblock"@alcaeus nochmals liebe Grüße! |
Re: 500 images in ein Array einladen
ressourcenschutzblock heißt das du du mit "try"-"except", "try"-"finally" etc. arbeitest.
|
Re: 500 images in ein Array einladen
zu try.. except gibts in unserer Tutorialsparte sogar ein kleines Tutorial. Solltest du dir eventuell mal ansehen ;)
|
Re: 500 images in ein Array einladen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke Leute! Soweit klappt alles, leider verstehe ich jetzt etwas beim timer nicht...
(ich hoffe, das darf noch in diesen Thread) Also: Der Timer soll 2 Funktionen haben: 1: Es sollen pro Minute 100 Bilder angezeigt werden. 2: Es sollen optional diese Bilder "eingeblendet werden" also immer weiter vergrößert werden Hierzu habe ich folgendes überlegt: Ich benutzte einen Timer mit dem Intervall "1" also eine Milisekunde Zunächst wird die Dauer ermittelt, wie lange ein Bild angezeigt werden soll:
Delphi-Quellcode:
Bild dauer hat also nun die Zeit in Milisekunden gespeichert.
bilddauer:=60/strtoint(edit1.text);
bilddauer:=round(bilddauer*1000); In dem Timer wird nun eine Variable hochgezählt:
Delphi-Quellcode:
inc(sleeper);
If sleeper=bilddauer then begin inc(nummer); image1.Picture.Graphic :=form1.bild[nummer]; end; Ich könnte natürlich das Interval des Timers direkt auf Bilddauer setzten, allerdings habe ich dann ein problem mit dem einblenden von den bildern... dieses Einblenden soll genau 2*bilddauer entsprechen, das bild wird mit 50 Schritten immer weiter vergrößert:
Delphi-Quellcode:
Allerdings habe ich bemerkt, dass der Timer nun viel zu langsam arbeitet, auch wenn bilder nicht vergrößert werden...jemand ne ahnung warum?
if scrollen=True then
begin image1.left:=round(image1.Left-form2.Width /strtoint(form1.edit3.text)); image1.Top:=round(image1.Top-form2.height /strtoint(form1.edit3.text)); image1.width:=round(image1.width+form2.Width / strtoint(form1.edit3.text) *2); image1.Height:=round(image1.Height+form2.Height / strtoint(form1.edit3.text)*2); image1.refresh; end; |
Re: 500 images in ein Array einladen
Du wirst nie einen Timer mit einem Intervall kleiner 15 (oder warens noch mehr ?) zum Laufen bringen, jede Millisekunde ein Aufruf brauchst du sicher nicht :wink: . Wenn ich es richtig verstanden habe, stellst du Inervall auf bilddauer, beim Scrollen wertest du nur jedes zweite Event aus.
|
Re: 500 images in ein Array einladen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 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-2025 by Thomas Breitkreuz