Delphi-Quellcode:
procedure SchreibeBilderListeInDB;
var BildNr:integer; Writer: TWriter; Stream : TFileStream;
begin
Try
Stream := TFileStream.Create(Dateiname,fmCreate);
Except
exit;
End;
Writer := TWriter.Create(Stream,4096);
Try
Writer.WriteListBegin;
// Anzahl Datensätze
Writer.WriteInteger(Bilderliste.Count);
For BildNr := 1 to BilderListe.Count do
WriteBitmapToWriter(Bilderliste[BildNr - 1].VSB,Writer);
Writer.WriteListEnd;
Writer.FlushBuffer;
Finally
Stream.Free;
Writer.Free;
End;
end;
procedure WriteBitmapToWriter(Bmp: TBitmap; Writer: TWriter);
var Stream: TMemoryStream;
//-----------------------------------------------------------------------------------------------------------------------------
procedure WriteStreamToWriter(Stream: TMemoryStream; Writer: TWriter);
const
BufBytes = 1024*16; // 16 Kb
var
ReadBytes: Integer;
Buf: array [0..BufBytes-1] of Byte;
begin
Stream.Position := 0;
Writer.WriteInteger(Int64(Stream.Size));
while Stream.Position < Stream.Size do
begin
ReadBytes := Stream.Read(Buf, BufBytes);
Writer.Write(Buf, ReadBytes);
end;
end;
//-----------------------------------------------------------------------------------------------------------------------------
begin
Stream := TMemoryStream.Create;
try
Bmp.SaveToStream(Stream);
WriteStreamToWriter(Stream, Writer);
finally
Stream.Free;
end;
end;
Die exakte Größe der Bitmap im Speicher müsste nach
GetDIBSizes(Bmp.Handle, InfoHeaderSize, ImageSize);
InfoHeaderSize + ImageSize sein. Ich stelle mir also vor, diese Anzahl Bytes ab Addr(Bilderliste[BildNr - 1].VSB) auszulesen und in eine Datei zu schreiben. Lesen kann auch kein Problem sein. Aber wie schreibe ich die Bytes in den Speicher? Speicher reservieren, Bytes reinschreiben, und dann den Pointer von Bilderliste[BildNr - 1].VSB auf diese Adresse setzen oder wie?