Delphi データ圧縮処理(2)
バッファ: PChar;
カウント: 整数。
始める
file://圧縮画像ストリームから元の画像サイズを読み取ります
ComPRessedStream.ReadBuffer(Count, SizeOf(Count));
file://画像サイズに基づいて、元の画像ストリームを読み取るためのメモリ ブロックを割り当てます。
GetMem(バッファ, カウント);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
試す
file:// 圧縮された画像ストリームを解凍し、バッファ メモリ ブロックに保存します
SourceStream.ReadBuffer(Buffer^, Count);
file://元の画像ストリームを DestStream ストリームに保存します
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;//ストリームポインタをリセット
//DestStream ストリームから元の画像ストリームを読み込みます
Bmp.LoadFromStream(DestStream);
ついに
FreeMem(バッファ);
DestStream.Free;
終わり;
終わり;
4.圧縮ボタンの OnClick イベント
プロシージャ TForm1.Button1Click(送信者: TObject);
変数
Bmp:TBitmap;
圧縮ストリーム: TMemoryStream;
始める
Bmp := TBitmap.Create;
CompressedStream := TMemoryStream.Create;
試す
file://現在の画面全体をキャプチャし、画像を Bmp オブジェクトに保存します GetScreen(Bmp);
file:// は、Bmp オブジェクト内の画像をメモリ ストリームに保存します
Bmp.SaveToStream(CompressedStream);
file://デフォルトの圧縮率に従って元の画像ストリームを圧縮します
CompressBitmap(CompressedStream, clDefault);
file://圧縮された画像ストリームをカスタム形式のファイルとして保存します
CompressedStream.SaveToFile(' C:cj.dat' );
ついに
Bmp.無料;
CompressedStream.Free;
終わり;
終わり;
5.解凍ボタンの OnClick イベント
プロシージャ TForm1.Button2Click(送信者: TObject);
変数
圧縮ストリーム: TFileStream;
Bmp:TBitmap;
始める
Bmp := TBitmap.Create;
file://ファイル ストリームの読み取り専用モードでカスタム圧縮形式ファイルを開きます
CompressedStream := TFileStream.Create(' C:cj.dat' , fmOpenRead);
試す
file://圧縮された画像ストリームを解凍します
UnCompressBitmap(CompressedStream, Bmp);
file://元の画像ストリームを指定された BMP ファイルに復元します
Bmp.SaveToFile(' C:cj.bmp' );
ついに
Bmp.無料;
CompressedStream.Free;
終わり;
終わり;
さらに、TCompressionStream オブジェクトには、元のデータの圧縮後の圧縮率を記述するために使用される CompressionRate プロパティも用意されており、開発者はこのイベントに進行状況を表示するコードを書き込むことができます。 。
上記のコードはデバッグに合格し、Delphi 5.0 で実行されます。