AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 500 images in ein Array einladen
Thema durchsuchen
Ansicht
Themen-Optionen

500 images in ein Array einladen

Ein Thema von alleinherrscher · begonnen am 28. Jan 2005 · letzter Beitrag vom 29. Jan 2005
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

500 images in ein Array einladen

  Alt 28. Jan 2005, 17:37
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:
var bild:array[1..500] of tbitmap;
    
//....

for i:= 1 to bildanzahl do

bild[i].LoadFromFile(bilddateiname[i]);

//....
Liebe Grüße, Alleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: 500 images in ein Array einladen

  Alt 28. Jan 2005, 17:39
Erstmalbild[i] := TBitmap.Create();
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: 500 images in ein Array einladen

  Alt 28. Jan 2005, 17:40
Hallo Alleinherrscher,

zuerst musst du den einzelnen Arrayfeldern eine Instanz von TBitmap zuweisen:

Delphi-Quellcode:
bild[i] := TBitmap.Create;
bild[i].LoadFromFile(...);
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...

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: 500 images in ein Array einladen

  Alt 28. Jan 2005, 17:40
Vielleicht greifst du irgendwie auf einen nil Wert zu oder beispielsweise auf Bild 501, schwer zusagen bei so wenig Text.


Gruß DelphiFreund
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

Re: 500 images in ein Array einladen

  Alt 28. Jan 2005, 17:55
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!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: 500 images in ein Array einladen

  Alt 28. Jan 2005, 17:58
ressourcenschutzblock heißt das du du mit "try"-"except", "try"-"finally" etc. arbeitest.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#7

Re: 500 images in ein Array einladen

  Alt 28. Jan 2005, 19:21
zu try.. except gibts in unserer Tutorialsparte sogar ein kleines Tutorial. Solltest du dir eventuell mal ansehen
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#8

Re: 500 images in ein Array einladen

  Alt 29. Jan 2005, 15:05
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:
bilddauer:=60/strtoint(edit1.text);
bilddauer:=round(bilddauer*1000);
Bild dauer hat also nun die Zeit in Milisekunden gespeichert.


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:
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;
Allerdings habe ich bemerkt, dass der Timer nun viel zu langsam arbeitet, auch wenn bilder nicht vergrößert werden...jemand ne ahnung warum?
Angehängte Dateien
Dateityp: zip bildershow_805.zip (10,6 KB, 10x aufgerufen)
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: 500 images in ein Array einladen

  Alt 29. Jan 2005, 15:44
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 . Wenn ich es richtig verstanden habe, stellst du Inervall auf bilddauer, beim Scrollen wertest du nur jedes zweite Event aus.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#10

Re: 500 images in ein Array einladen

  Alt 29. Jan 2005, 16:28
timer tutorial
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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