![]() |
Bilder zur Laufzeit generieren -> Fehler: EOutOfResources
In meinem Programm sollen zu jeder Bilddatei, deren Adressen in der Stringliste Dateien gespeichert sind Vorschaubilder erzeugt werden. Bei wenigen Bildern geht das so wie es untem im Quellcode steht auch gut, wenn es jetzt aber mehr Bilder werden, bleibt das Programm irgendwann mit der Fehlermeldung "Project Project1.exe raised exception class EOutOfResources with message 'Der Parameter stimmt nicht.'.". hängen. Wie muss ich das mit den Bildern machen damit es funktioniert?
Delphi-Quellcode:
for n:= 0 to Dateien.Count - 1 do begin
listbox1.items.add(extractfilename(Dateien[n])); if (n MOD 8 = 0) AND (n<>0) then begin reihe:=reihe+1; bildnummer:=0; end; Image[n] := TImage.Create(Frame21); Image[n].Left := bildnummer*95+8; Image[n].Top := reihe*90+8; Image[n].Height := 72; Image[n].width := 87; Image[n].Parent := Frame21; Image[n].Stretch := true; Image[n].Proportional := true; Image[n].Picture.LoadFromFile(Dateien[n]); bildnummer:=bildnummer+1; end; |
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
Wie Gross ist eingentlich "Dateien.Count" ? Und wenn es um "Vorschaubilder" geht, warum nicht gleich auf Vorschaugrösse schrinken?(z.B. 20x20, oder 40x40..)
|
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
Delphi-Quellcode:
Hasst du das drin?
private
image: Array of TImage; Und dann noch
Delphi-Quellcode:
Image ist ein Array und SetLength legt die Länge fest. Bau das mal ein.
SetLength(image, Dateien.Count - 1)
|
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
20x20 bzw. 40x40 halt ich für einiges zu klein, auf den Bildern soll man schon noch was erkennen.
Mit dem Array hab ich es bisher so gelöst, werde es jetzt umändern, so wie du es geschrieben hast:
Delphi-Quellcode:
Der Wert von Dateien.Count ist variabel, je nachdem welcher Ordner ausgewählt ist, enthält Dateien verschiedene Werte.
Image : array [0..10000] of TImage;
|
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
ich hab den source nicht angeschaut aber ich hatte das problem mal als ich die höhe/breite kleiner 0 hatte.
|
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
Welches Betriebssystem? Unter Windows 9x können schon mal recht schnell die Ressourcen knapp werden.
|
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
Liste der Anhänge anzeigen (Anzahl: 1)
Windows 98 SE.
Nochmal das Problem: Der Benutzer wählt einen Ordner aus. Dann soll für jedes Bild in dem Ordner ein Vorschaubild generiert werden. Wenn es jetzt zu viele Bilder sind und die Bilder auch noch relativ groß sind, bekomme ich, nachdem einige Vorschaubilder erzeugt wurden die Fehlermeldung. Die Höhe/Breite der Bilder ist auf jeden Fall größer als 0. |
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
Moin!
WIndows 98 SE hat einen beschränkten GDI Handle Pool von 128 KB - daher kann das OS maximal (128 * 1024 / 4) 32768 Handles für GDI Objekte vergeben. (oder waren die 128 KB erst ab ME?). Zumindest braucht eine TImage Instanz vom System schon allein derer 6 (mem dc, bitmap handle, bitmap canvas dc, bitmap canvas pen, bitmap canvas font, bitmap canvas brush) wodurch du sehr schnell in bredouille kommst. (der GDI Handle Pool ist global, also alle Applikation GDI + System GDI Handles).. Empfehlung: Nimm eine TImageList und setze dort die Höhe/Weite der gewünschten Vorschaubilder. Darin dann die !verkleinerten! Bilder ablegen und in der Dateianzeige keine TImage mehr instanziieren - selber malen. Einfach das Bild aus der TImageList holen und direkt dahin malen. Ich habe mal eine klasse geschrieben die dieses Manko nach dem selben Prinzip wie eine TImageList (intern ein Bild) behebt und damit konnte ich eine Anwendung schreiben die dann mehrere Tausend Bitmaps laden und handeln konnte (bis 23.000 Bitmaps ausprobiert), da die Anwendung dies immer machen musste. Diese Klasse werde ich hier aber nicht veröffentlichen, daher nutze die TImageList oder bau dir nach dem selben Prinzip eine solche Klasse... MfG Muetze1 |
Re: Bilder zur Laufzeit generieren -> Fehler: EOutOfResou
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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