2005年08月04日

zlibを使用しデータを圧縮/解凍する方法

あなたはムーアの法則をご存知でしょうか?
「半導体の集積密度は18〜24ヶ月で2倍になる」
という法則ですが、
現在では「集積密度」を「性能向上」に
置き換え考えられることが多く、
今後の半導体などの
性能向上を予測する指標となっています。

ムーアの法則に従うがごとく
CPUやBUSの性能が向上する一方で、
我々が扱う情報のデータ量も飛躍的に増加しています。
大量のデータ転送はシステムの顕著なボトルネックとして、
しばしば我々が直面する問題となることでしょう。

今回は、データ転送などの制約やボトルネックの
問題を解決する方法としデータの圧縮を取上げます。
zlibはZip、gzip、画像フォーマットPNGで使われている
圧縮アルゴリズムをライブラリ化したものです。
DelphiではBorland社から
「zlib」ユニットとして提供されています。

サンプルプログラムは、
Delphi標準のzlibユニットを利用し、
入力されたファイルをzlib形式で圧縮する機能と、
zlib形式のファイルを解凍する機能を提供します。

サンプルプログラムをよく理解し、
あなたの問題を解決するために役立ててください。

zlib公式サイトは以下のURLを参照してください。

URL:http://www.zlib.net/


全ソースは【続きを読む】をクリック!

使用例
procedure TForm1.btnCompressClick(Sender: TObject);
var
 lSData,
 lDData: Pointer;
 lSSize,
 lDSize,
 lLevel: Integer;
begin
 lSData := Nil;
 lDData := Nil;
 try
  // ファイルのデータを読込みます
  _ReadFile(edtFileName.Text, lSData, lSSize);
  // ファイルのデータを圧縮します
  case rgCompressMode.ItemIndex of
  0:lLevel := Z_NO_COMPRESSION;
  1:lLevel := Z_BEST_SPEED;
  2:lLevel := Z_BEST_COMPRESSION;
  end;
  CompressBuf(lLevel, lSData, lSSize, lDData, lDSize);
  // 圧縮データをファイルへ書き込みます
  _WriteFile(Format('%s.cmp',
   [edtFileName.Text]), lDData, lDSize);
 finally
  if (lSData <> Nil) then FreeMem(lSData);
  if (lDData <> Nil) then FreeMem(lDData);
 end;
end;


【画面イメージ】

ZLIBTester.gif

関連書籍


Copyright guy@かしらもんじ でぇ〜

続きを読む
posted by guy at 08:13 | データ圧縮編

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。