Thema: Delphi Stream Lesefehler

Einzelnen Beitrag anzeigen

Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#1

Stream Lesefehler

  Alt 27. Jun 2008, 16:53
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;
  Mit Zitat antworten Zitat