を使用して切り捨てられること:データは、私は次の宣言を持っているTZCompressionStream
stmCompressor: TZCompressionStream;
stmCompressed: TMemoryStream;
stmBlob: TStream;
私は次のコードを持っている:
stmBlob := qry.CreateBlobStream(qry.FieldByName(sFieldName), bmRead);
stmCompressed := TMemoryStream.Create;
stmCompressor := TZCompressionStream.Create(stmCompressed);
stmBlob.Position := 0;
stmCompressor.CopyFrom(stmBlob, stmBlob.Size);
stmCompressed.Position := 0;
stmCompressed.SaveToFile('C:\Temp\CompressedData2.zip');
を、私は、データベースから画像データを圧縮し、中に結果を配置しようとしていますメモリストリームstmCompressed。私は結果を確認できるようにstmCompressedをファイルに保存しています。結果は、それがすべきであるものの切り詰められた形のように見えます。圧縮データが80000Hより大きい場合、ファイルはこのサイズに切り捨てられます。データがB0000Hより大きい場合、ファイルはこのサイズに切り捨てられます。
私はstmCompressedをTMemoryStreamからTFileStreamに変更すると、それは完全に機能します(コードはまったく同じではありません - 役立つ場合は投稿できます)。
私は結果がメモリストリームに存在する必要があるので、誰でも提供できるヘルプをいただければ幸いです。私はXE2に付属の標準ZLibライブラリを使用しています。
ありがとうございました。
SaveToFileの直前にメモリストリームを閉じるとどうなりますか? – wmercer
ZIPファイルが必要な場合は、TZipFileを使用する必要があります。イメージを圧縮している場合、ZIP/zlibはコンプレッサーの選択肢としては不適切です。 –