Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi EReadError: Stream-Read-Fehler (https://www.delphipraxis.net/165796-ereaderror-stream-read-fehler.html)

Johannes013 16. Jan 2012 19:20

EReadError: Stream-Read-Fehler
 
Hi Leute, :)

ich lade in einer Schleife Bitmaps in ein Bitmap-Array. In dieser Schleife tritt dann der Stream-Fehler auf, die Datei ist immer die gleiche, existiert aber garnicht.

Code:
for nLauf := tStart to tEnd do
  begin
    TexPic[nLauf] := TBitmap.Create();
    if (FileExists(TexPath[nLauf])) then
      TexPic[nLauf].LoadFromFile(TexPath[nLauf])
    else
      TexPic[nLauf].LoadFromFile(sGUIDir + sMissing);
  end;
TexPic ist ein Array of TBitmap
TexPath enthält alles Texturpfade
tStart,tEnd,nLauf sind vom Typ, TTexture

Ich gehe für jede Textur mit dem zugehörigen Pfad durch, ob sie existiert. Wenn ja wird sie geladen, wenn nicht eine andere Datei.
Doch die Textur für fehlende Bilder, lade ich vorher schon öfter...

Was kann das sein?

mfg Johannes

Sir Rufo 16. Jan 2012 19:38

AW: EReadError: Stream-Read-Fehler
 
Wenn ich sGUIDir lese, würde ich mal vermuten, dass da ein PathDelimiter fehlt, denn sonst würde die Variable ja sGUIPath heißen :)

shmia 17. Jan 2012 10:55

AW: EReadError: Stream-Read-Fehler
 
Delphi-Quellcode:
var
  filename:string;
...
for nLauf := tStart to tEnd do
begin
  // es ist immer ein gute Idee einen Dateinamen KOMPLETT
  // in einer Stringvariablen zu halten...
  if (FileExists(TexPath[nLauf])) then
     filename := TexPath[nLauf]
  else
     filename := sGUIDir + sMissing;
  TexPic[nLauf] := TBitmap.Create();
  // Hier kann man dann einen Breakpoint setzen und nachschauen
  // welcher Dateiname denn konkret geladen wird
  TexPic[nLauf].LoadFromFile(filename);
end;

Johannes013 17. Jan 2012 16:23

AW: EReadError: Stream-Read-Fehler
 
Ok danke für eure Lösungsvorschläge! :)
sGUIDir ist das Verzeichnis und sMissing ist der Dateiname, das hätte ich vllt schreiben sollen.

Das tritt bei einem Bild mit 2560x1440 Pixeln auf, wenn ich das Bild auf 1920x1080 Pixel verkleinere, läuft alles super...
Aber ich brauche diese Auflösung

Gruß Johannes

himitsu 17. Jan 2012 16:40

AW: EReadError: Stream-Read-Fehler
 
Zitat:

Zitat von Johannes013 (Beitrag 1146333)
sGUIDir ist das Verzeichnis und sMissing ist der Dateiname, das hätte ich vllt schreiben sollen.

Das war uns schon soweit klar.

Aber
Dir = das Verzeichnis selber (also ohne ein \ am Ende)
Path = der Pfad-Anteil einer Datei oder eines Unterverzeiczhnisses (mit \ am Ende)

Da
Delphi-Quellcode:
Datei = sGUIDir + sMissing
, wäre hier also ein "Path" nötig.

Aber egal wie der Name aussieht ... Hat dein sGUIDir denn nun ein \ em Ende?




Nunja, wenn es abhängig von der Bildgröße geht, dann scheint der Pfad ja OK zu sein.

Johannes013 17. Jan 2012 17:01

AW: EReadError: Stream-Read-Fehler
 
es hat ein \ am Ende.
Momentan funktioniert alles ohne Exception. :)

Aber gibt es eine Lösung größere Bilder zu laden?

himitsu 17. Jan 2012 19:16

AW: EReadError: Stream-Read-Fehler
 
TBitmap schafft auch größere Bilder (mit genügend freiem RAM locker auch mal 10000x10000x24).

Wie genau lautet denn die Fehlermeldung und an welcher Stelle tritt sie auf?
Und sind deine Arrays auch groß genug?

Johannes013 6. Feb 2012 11:52

AW: EReadError: Stream-Read-Fehler
 
Das Array ist groß genug!

Aber die Bilder sind 24-Bit...
Ist das so wichtig?

Gruß Johannes

Bernhard Geyer 6. Feb 2012 12:42

AW: EReadError: Stream-Read-Fehler
 
Zitat:

Zitat von himitsu (Beitrag 1146359)
TBitmap schafft auch größere Bilder (mit genügend freiem RAM locker auch mal 10000x10000x24).

Nicht als 32-Bit Anwendung selbst mit /3GB-Schalter

Das Problem wird sein das du ab weniger geladener Bilder keinen durchgehenden Adressraum mehr frei hast der deiner Bildgröße (2560x1440*32Bit = 117 MB durchgehender Adressraum nötig). Die ersten Bilder können geladen werden und dann gibts nur noch frei Ram "krümel" wo dazwischen System/Windws-DLL's oder Delphi-Objekt liegen.

p80286 6. Feb 2012 12:52

AW: EReadError: Stream-Read-Fehler
 
Zitat:

Zitat von himitsu (Beitrag 1146359)
Wie genau lautet denn die Fehlermeldung und an welcher Stelle tritt sie auf?

Dem kann ich mich nur anschließen!
(vor allem wenn er beim Lesen einer Datei auftritt, die es gar nicht gibt. Dann gibt's den fehler vielleich auch nicht?)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Seite 1 von 2  1 2      

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