![]() |
TStream als Teil an einen anderen TStream übergeben
Hallo,
ich glaube ich steht auf dem Schlauch und hoffe, ihr könnt mir helfen. Folgende Problemstellung: Ich möchte eien Grafik einlesen und deren Inhalt mit zusätzlichen Informationen versehen und in einer Binärdatei speichern. Folgender Ansatz:
Delphi-Quellcode:
Beim Auslesen gehe ich so vor:
var
FileStream : TFileStream; PicStream, MyStream: TStream; Len : integer; begin // : // Größe des Streams Len := PicStream.Size; MyStream.Write(Len, SizeOf(Len)); MyStream.Write(PicStream, Len); // : // und dann als Datei speichern FileStream := TFileStream.Create('D:\Temp\test.dat', fmCreate); MyStream.Position := 0; try FileStream.CopyFrom(MyStream, MyStream.Size); finally FileStream.Free; end; end;
Delphi-Quellcode:
Aber irgendwie stimmen die Daten des Streams nicht. An was kann es hängen? Ist schon das Speichern falsch? var FileStream : TFileStream; PicStream : TMemoryStream; sizeInt : integer; TempBuff : String; begin // : sizeInt := 0; FileStream.Read(sizeInt, SizeOf(integer)); If sizeInt > 0 then begin SetLength(TempBuff, sizeInt); FileStream.Read(PChar(TempBuff)^, sizeInt); PicStream.Clear; PicStream.Write(PChar(TempBuff)^, Length(TempBuff)); PicStream.Position := 0; end; // : end; Es wäre schön, wenn mich jemand auf die richtige Fährte führen würde :? Besten Dank. |
AW: TStream als Teil an einen anderen TStream übergeben
Delphi-Quellcode:
speichert den Objekt-Zeiger und nicht den Stream-Inhalt. :warn:
MyStream.Write(PicStream, Len);
Warum nicht einfach CopyFrom, bzw. warum nicht direkt in den FileStream? String = Unicode, seit Delphi 2009 Unicode = 2 Byte pro Zeichen du speicherst und ließt aber nur 1 Byte pro Zeichen ... heißt also zu vergißt die Hälft.
Delphi-Quellcode:
für
Bytes = Length(S) * SizeOf(Char)
![]() Aber in deinem Fall einfach AnsiString oder besser och RawByteString verwenden. |
AW: TStream als Teil an einen anderen TStream übergeben
Hallo,
dank Deiner Tipps habe ich es nun zum Laufen bekommen und kann die Daten wie gewünscht schreiben und lesen. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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