2012-01-20 15 views
1

を使用して切り捨てられること:データは、私は次の宣言を持っている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ライブラリを使用しています。

ありがとうございました。

+0

SaveToFileの直前にメモリストリームを閉じるとどうなりますか? – wmercer

+0

ZIPファイルが必要な場合は、TZipFileを使用する必要があります。イメージを圧縮している場合、ZIP/zlibはコンプレッサーの選択肢としては不適切です。 –

答えて

3

残りのバイトをメモリストリームにフラッシュするには、TZCompressionStreamを解放する必要があります。

+0

ありがとうUwe、それは問題でした。 – Tim

関連する問題