Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Record mit TBitmap in Stream speichern (https://www.delphipraxis.net/26799-record-mit-tbitmap-stream-speichern.html)

Stephan 29. Jul 2004 15:24


Record mit TBitmap in Stream speichern
 
Hi,

Ich habe einen Record:

Code:
  TJoinRecord = packed Record
    Name : String;
    bild : TBitmap;
  end;

  var
  JoinRec : TJoinRecord;


procedure TForm1.Button5Click(Sender: TObject); //Button um Bild zu laden
begin
 JoinRec.Name := edit2.text;
 JoinRec.bild.Free;
 JoinRec.bild := TBitmap.Create;
 JoinRec.bild.LoadFromFile('C:\IMGP0445.bmp'); //Bild laden
end;


procedure TForm1.Button6Click(Sender: TObject);
var
  Stream, f: TFileStream;
  frEdit2: string;
  count: integer;
begin
  Stream:=TFileStream.Create('C:\test.dat',fmCreate);
  try
   Stream.Position := 0;
   
   //EDIT SPEICHERN
   frEdit2 := edit2.text;
   count := Length(frEdit2);
   Stream.Writebuffer(count,SizeOf(Integer));
   Stream.WriteBuffer(frEdit2[1],count);
   //ENDE EDIT SPEICHERN

   //BILD SPEICHERN
   count := SizeOf(JoinRec.bild);            <-- funktioniert nicht. Wie kann ich die Größe des Bildes ermitteln?
   Stream.Writebuffer(count,SizeOf(Integer));
   Stream.WriteBuffer(JoinRec,count);        <-- wie kann ich das Bild dann über den Stream speichern?
   //ENDE BILD SPEICHERN

  finally
   Stream.Free;
  end;
end;
Mein Problem liegt beim Speichern des TBitmap im Stream.

Luckie 29. Jul 2004 15:27

Re: Record mit TBitmap in Stream speichern
 
Also mit
Delphi-Quellcode:
SizeOf(JoinRec.bild)
Bekommst du nur die Größe des Datentyps, aber nicht die größe des Bitmaps an sich. Lösung wäre die Größe noch mal separat abzuspeichern.

Stephan 29. Jul 2004 15:32

Re: Record mit TBitmap in Stream speichern
 
Hi Luckie,

Du meinst ich kann einfach die Größe der Datei ermitteln und diese dann Count zuweisen?

Luckie 29. Jul 2004 15:33

Re: Record mit TBitmap in Stream speichern
 
Das ginge auch. Abzüglich deines Strings natürlich. Und da würd eich auch einen ShortString nehmen, da String eigentlich nur ein Zeiger auf einen Adressbereich ist.

Stephan 29. Jul 2004 15:36

Re: Record mit TBitmap in Stream speichern
 
Hi Luckie,

Könnte ich die Datei nicht einfach in einem anderen Stream öffnen und dadurch die Größe bestimmen?
Wenn ja wie? Geht das mit SizeOf?

Stephan 29. Jul 2004 15:42

Re: Record mit TBitmap in Stream speichern
 
Hi,

über:

count := f.Seek(0, soFromEnd); komme ich jetzt an die Größe (f ist ein FileStream in dem ich das Bild geladen habe)

Allerdings bekomme ich beim Versuch das Bild zu Speichern einen Stream-Schreibfehler.

Stephan 29. Jul 2004 15:44

Re: Record mit TBitmap in Stream speichern
 
Hi,

Ok, hat sich erledigt. Über Stream.CopyFrom(f, 0) funktionierts.

Muetze1 29. Jul 2004 16:25

Re: Record mit TBitmap in Stream speichern
 
Moin!

Zitat:

Zitat von Stephan
Hi,

über:

count := f.Seek(0, soFromEnd); komme ich jetzt an die Größe (f ist ein FileStream in dem ich das Bild geladen habe)

Allerdings bekomme ich beim Versuch das Bild zu Speichern einen Stream-Schreibfehler.

Das geht auch einfacher, wenn man einfach die Eigenschaft Size eines TStreams Objektes nutzt.

MfG
Muetze1


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