English
PROGRAMMER'S GUIDE圧縮伸張ライブラリ
■   | 進む
圧縮伸張ライブラリ

1.ガイド


1.1 適用

 この圧縮伸張ライブラリは、別途提供しているランレングス圧縮ツールで圧縮したデータを伸張するためのものです。

 ランレングス圧縮ツール  CMPRUN.EXE

1.2 圧縮方式

 独自の、不一致系列処理を付加しています。単純なランレングスのアルゴリズムでは、不一致系列が圧縮率を悪化させるので、不一致系列をまとめて処理します。 一致系列は、連長及び値で表現します。不一致系列は、不一致系列長及び不一致系列値(非圧縮データ)で表現します。
 一致系列を表す符号と不一致系列を表す符号を識別するために、不一致系列長は負の値(2の補数)で記述します。
 短い連長の入力は、不一致系列を分断しかえって圧縮率を悪化させるので、不一致系列の終了条件を工夫しています。

 [不一致系列の定義]
 不一致系列は、次の開始条件と終了条件で定義しています。

<不一致系列の開始条件>

連長1の記号(文字)の入力。

 [不一致系列の例]
 次の図は、不一致系列の例です。

<不一致系列の終了条件>

連長3以上の一致系列の入力。
または、
不一致系列長が、処理単位バイト数で表現できる限界になった場合。

図1.1 不一致系列の例
        開始
・・・A A A  C C C C D D D ・・・・・・
         終了

         開始
・・・A A A B C D E F G G G ・・・・・・
                 終了

         開始
・・・A A A B C C D D E E E ・・・・・・
                 終了

         開始
・・・A A A B C C D D D E F F ・・・・
                      終了

 [処理単位]
 処理単位は次の表に示す3とおりから選択します。先頭から、処理単位境界ごとに区切って、1つの文字(記号)の入力とします。

表1.1 処理単位
処理単位入力データに対する圧縮処理単位のイメージ
BYTE
(1バイト)
WORD
(2バイト)
DWORD
(4バイト)

 数値は16進数で、は、1バイトに相当します。

 [連長の表現]
 通常の連長(一致系列長)を正の数で、不一致系列長を負の数で表します。連長(一致系列長)は常に2以上なので、2を引いた値で記述します。
 連長を表現するために使用するバイト数は、処理単位バイト数と同じものです。
 連長に対する実際のデータの量は、処理単位で解釈します。つまり、処理単位がWORDで連長が5の場合は、10バイトのデータに対する符号化処理を意味します。
 次の表は、表現できる連長の値の範囲です。

表1.2 連長幅と連長表現
 
 
処理単位
連長(一致系列長)
不一致系列長
表現(記述)
表現(記述)
BYTE1バイト
WORD2バイト
DWORD4バイト

[処理イメージ図]

 次の図は、ランレングス/不一致系列処理による圧縮アルゴリズムの処理イメージです。

図1.2 ランレングス/不一致系列処理

・・・・一致系列値、または不一致系列値(非圧縮データ)
・・・・処理単位。BYTE,WORD,DWORDのいずれか。
・・・・連長、または、不一致系列長。
・・・・連長幅。処理単位と等しい。


■   | 進む
PROGRAMMER'S GUIDE圧縮伸張ライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997