Sorry, dass ich mich erst so spät zurück melde
Beim ersten Post ist mir leider ein Flüchtigkeitsfehler unterlaufen.
Wie du schon bemerkt hast, musst du MemoryStream.CopyFrom(Entzipper, Groeße); nehmen.
Soweit ich das beurteilen kann müsste es theoretisch gehen.
Der Umweg über einen temporären Stream (MemoryStream) musst leider bei Verwendung
einen ZStreams gehen, da du eben nur immer kleine Stückchen aus dem gesammten liest.
Ich versuche nachher nochmal dein Problem bei mir im Delphi zu lösen,
wenn ich das weiterhin aus dem Kopf heraus versuche, könnte es kompliziert werden
[EDIT]
OK, das hat mich jetzt nicht losgelassen ^^
Ich hatte jetzt leider nur die Borland
zLib, du musst also ab und zu die Parameter etwas angleichen.
Folgender Code funktioniert bei mir.
Delphi-Quellcode:
var MemStream: TMemoryStream; // oder FileStream, etc - zum Speichern & Lesen
tmpMemStream: TMemoryStream; // zum arbeiten
comStream: TCompressionStream;
decomStream: TDecompressionStream;
bmp: TBitmap; // Test-Bitmap
Groesse: integer;
begin
MemStream := TMemoryStream.Create;
try
bmp := TBitmap.Create;
try
bmp.Width := 250;
bmp.Height := 250;
// packen
tmpMemStream := TMemoryStream.Create;
try
bmp.SaveToStream(tmpMemStream);
Groesse := tmpMemStream.Size;
comStream := TCompressionStream.Create(clDefault, MemStream);
try
comStream.Write(Groesse,sizeof(Groesse)); // Größe speichern
comStream.CopyFrom(tmpMemStream,0); // Bitmap speichern
finally
comStream.Free; // Unbedingt nötig, bevor man weiterarbeitet! (Damit der Puffer des Streams 100%ig gespeichert)
end;
finally
tmpMemStream.Free;
end;
finally
bmp.Free;
end;
bmp := TBitmap.Create;
try
// entpacken
MemStream.Position := 0;
tmpMemStream := TMemoryStream.Create;
try
decomStream := TDecompressionStream.Create(MemStream);
try
decomStream.Read(Groesse,sizeof(Groesse)); // Größe lesen
tmpMemStream.CopyFrom(decomStream,Groesse); // Bitmap entpacken
tmpMemStream.Position := 0;
bmp.LoadFromStream(tmpMemStream); // Bitmap laden
finally
decomStream.Free;
end;
finally
tmpMemStream.Free;
end;
finally
bmp.Free;
end;
finally
MemStream.Free;
end;