CGIF:無圧縮GIF

無圧縮GIFについて


ここでは、無圧縮GIFについて説明したいと思います。

GIFファイルのイメージデータは、決まりさえ守れば、色々な書き方があります。
無圧縮のGIFは、GIFファイルの別な箇所で無圧縮と宣言するわけではなく、イメージデータのみを書き換えることで作成できます。

LZW圧縮法(LZW辞書)でイメージのデータ列
0 -> f -> f -> f -> f -> f -> f -> f -> f
がLZW辞書を使って圧縮されることを説明しました。

それとは別な方法として、データ列を最後まで二つずつ見てゆき、前のデータをprefixに、後のデータをsuffixに代入していけば、無圧縮のイメージデータを作成できます。

具体的には、まず最初の二つのデータ0fを0x102に割り当てます。
prefixが0x0、suffixが0xfとなります。

次に、前回取り出した順列のsuffixから、二つのデータffを0x103に割り当てます。
prefixを0xf、suffixを0xfと代入します。

以下同様に、前回取り出した順列のsuffixから二つずつデータを取り出し、前のデータに対応するカラーインデックスをprefixに、後のデータに対応するカラーインデックスをsuffixに代入してゆきます。

すると、以下のようになります。
コードに割り当てられた内容 コード prefixの中身suffixの中身
カラーテーブルのindex 0x0
0x1
0x2
0xff
クリアコード 0x100
終了コード 0x101
新しく作成されたコード 0x1020x00xf
0x1030xf0xf
0x1040xf0xf
0x1050xf0xf
0x1060xf0xf
0x1070xf0xf
0x1080xf0xf
0x1090xf0xf

後はLZW圧縮法(イメージデータ)で説明しましたように、prefixを登録した順に並べ、最後に登録したsuffixをその後部に付け足した一つのデータあたり9ビットのデータ列
0 -> f -> f -> f -> f -> f -> f -> f -> f
の最初にクリアコード(9ビット)を付け足し、最後に終了コード(9ビット)を付け足しまして、8ビットずつ切ったものをファイルに書き込めば、無圧縮GIFが作成されます。

TOP LZW圧縮について 戻る