Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stream Lesefehler (https://www.delphipraxis.net/116380-stream-lesefehler.html)

Cyf 27. Jun 2008 16:53


Stream Lesefehler
 
Hmm ich seh den Fehler nicht, vielleicht weiß wer von euch weiter.
Folgender Code funktioniert einwandfrei, während die Stream-Variante eine Exception bei jedem ReadBuffer auswirft mit der Meldung Stream-Lesefehler.

Delphi-Quellcode:
type
  TTGAFile = record
    iType: byte; // should be 2
     w, h: word; // Width, Height
      bpp: byte; // Byte per Pixel
     data: ^byte; // Pixels, dynamic length
  end;

procedure LoadTGA(const filename: string; var TGAFile: TTGAFile);
var f: file; bytes: longword;
begin
  assign(f, filename);
  reset(f, 1);

  // type
  seek(f, 2);
  blockread(f, TGAFile.iType, 1);

  // w, h, bpp
  seek(f, 12);
  blockread(f, TGAFile.w, 5);
  TGAFile.bpp := TGAFile.bpp div 8;
 
  // data
  bytes := TGAFile.w * TGAFile.h * TGAFile.bpp;
  getmem(TGAFile.data, bytes);
  seek(f, 18);
  blockread(f, TGAFile.data^, bytes);
 
  close(f);
end;
Stream-Variante, TTGAImage ist mit TTGAFile identisch und lediglich umbenannt:

Delphi-Quellcode:
procedure LoadTGA(const filename: string; var TGAImage: TTGAImage);
var
  FStream: TFileStream;
  ImageSize: longword;
begin
  FStream := TFileStream.Create(filename, fmOpenRead);
  try
    //iType
    FStream.Seek(soFromBeginning, 2);
    FStream.ReadBuffer(TGAImage.iType, 1);

    //w, h, bpp
    FStream.Seek(soFromBeginning, 12);
    FStream.ReadBuffer(TGAImage.w, 5);
    TGAImage.bpp := TGAImage.bpp div 8;

    //Data
    ImageSize := TGAImage.w * TGAImage.h * TGAImage.bpp;
    GetMem(TGAImage.data, ImageSize);
    FStream.Seek(soFromBeginning, 18);
    FStream.ReadBuffer(TGAImage.data^, ImageSize);
  finally
    FStream.Free;
  end;
end;

sirius 27. Jun 2008 17:22

Re: Stream Lesefehler
 
Delphi-Quellcode:
FStream.Seek(2, soFromBeginning);

Cyf 27. Jun 2008 17:33

Re: Stream Lesefehler
 
:wall:


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