玄関コンピュータの部屋各種解説コーナーCGファイル概説

(5) イメージデータブロック

イメージデータブロックはイメージデータに関する各種パラメターを保存したイメージ記述子と、イメージごとに異なったカラーテーブルを使用する場合にだけ存在するオプションのローカルカラーマップ、そしてビットマップイメージデータを保存したイメージデータから構成されていて、1つのGIFファイル中にいくつでも存在することができます。 このブロックは特殊ブロックと違い、どのバージョンでも使用できます。

1) イメージ記述子

オフセット内容(バイト数)
0イメージ記述子識別子(1)
固定値2CH
1イメージの左端座標(2)
ピクセル単位
3イメージの上端座標(2)
ピクセル単位
5イメージの横幅(2)
ピクセル単位
7イメージの高さ(2)
ピクセル単位
9色構造パラメター(1)

(i) イメージ記述子識別子(Image Separator)

イメージ記述子の開始を表す識別子で、常に固定値2CH(10進数では44)です。

(ii) イメージの左端座標(Image Left Position)

論理画面の左端を基準とした時の、画像の左端をピクセル単位で表した値です。 通常は0ですが、0でない場合は画像が論理画面の左右にずれて表示されます。

(iii) イメージの上端座標(Image Top Position)

論理画面の上端を基準とした時の、画像の上端をピクセル単位で表した値です。 通常は0ですが、0でない場合は画像が論理画面の上下にずれて表示されます。

(vi) イメージの横幅と高さ(Image Width、Image Height)

画像の横幅と高さをピクセル単位で表した値です。 通常は論理画面と同じ値ですが、常に同じ値になるとは限りません。

(v) 色構造パラメター(Packed Fields)

ビット
76543210
Local
Color
Table
Flag
(1)
Interlace
Flag(1)
Sort
Flag
(1)
予約済み
(2)
Size of
Local
Color
Table
(3)

色構造に関するローカルデータをビット単位でバイトにパックした領域で、左図のような構造をしています。

i) Local Color Table Flag

ローカルカラーテーブルの有無を示すビットで、ビットが1の場合には論理画面記述子のすぐ後にローカルカラーテーブルが存在し、0の場合にはローカルカラーテーブルは存在しません。

ii) Interlace Flag

行番号インタレースパス
01   
1   4
2  3 
3   4
4 2  
5   4
6  3 
7   4
81   
9   4
10  3 
11   4
12 2  
13   4
14  3 
15   4
::

画像がインタレースされているかどうかを表すビットで、ビットが0の場合はインタレースされておらず、1の場合はされています。 インタレースとは画像を上から順番に表示するのではなく、すだれ状に表示する方法で、昔からTV画像で用いられている表示法です。 この表示法ですと最初は全体像がぼんやりと表示され、それが次第にはっきりとしてきますので、データを転送しながら同時に表示するオンライン転送や、残像効果を利用したTV画像に向いています。

GIFのインタレース表示は次のように4パスで行われますので、画像データもその順番で保存されています。

iii) Sort Flag

ローカルカラーテーブルがソートされているがどうかを表すビットで、ビットが1の場合、ローカルカラーテーブルは使用頻度の高い色順にソートされており、0の場合は特にソートされていません。 このデータはLocal Color Table Flagが1の時しか意味を持ちません。

iv) 予約済み

将来の拡張用予約領域で、通常は2ビットとも0になっています。

v) Size of Local Color Table

ローカルカラーテーブルのエントリ数を計算するためのデータで、この値に1を足した値で2をべき乗するとローカルカラーテーブルのエントリ数になります。 例えばこの値が7の場合、

ローカルカラーテーブルのエントリ数=2(7+1)=28=256

となります。

このデータはLocal Color Table Flagが1の時しか意味を持たず、領域が3ビットしかありませんので0(=2色)から7(=256色)までの値しか表すことができません。

2) ローカルカラーテーブル

オフセット内容(バイト数)
0カラーテーブルエントリ0番の赤の値(1)
0-255
1カラーテーブルエントリ0番の緑の値(1)
0-255
2カラーテーブルエントリ0番の青の値(1)
0-255
::

画像ごとに独自で使用するカラーマップの内容を保存したブロックで、イメージ記述子中のLocal Color Table Flagが1の時だけイメージ記述子の直後に1つだけ存在します。 カラーテーブルエントリ数Nは2(Size of Local Color Table + 1)であり、ブロック全体のバイト数は3×Nとなります。 ローカルカラーテーブルを持っていない画像データは、グローバルカラーテーブルを使用します。

3) イメージデータ

オフセット内容(バイト数)
0LZW圧縮法の最小コードサイズ(1)
ビット単位
1ブロックのバイト数(1)
1-255
2ビットマップイメージデータ(255以内)
圧縮データ
::
 ブロック終了識別子(1)
固定値0

ビットマップイメージデータを保存したブロックで、GIFファイルの大部分を占めます。

(i) LZW圧縮法の最小コードサイズ(LZW Minimum Code Size)

可変長コードLZW圧縮における最小コードのビット数(初期コードサイズ)を表します。 GIFではビットマップイメージデータを非圧縮で保存することはできません。 通常、このデータはカラービット数(Color Resolusion+1)と同じ値ですが、カラービット数が1である2色カラー画像データの場合にはアルゴリズム上の制約により2となります。 このため、2色カラー画像の場合は固定長コードLZW圧縮法に比べて圧縮効率が若干悪くなります。

(ii) サブブロックのバイト数(Block Size)

直後に続くビットマップイメージデータのバイト数で、1から255の間の任意の値です。

(iii) ビットマップイメージデータ(Image Data)

255バイト以内の、可変長コードLZW圧縮されたビットマップイメージデータです。 サブブロックバイト数とビットマップイメージデータからなるサブブロックは、イメージデータブロック中に必要な数だけ存在します。

(iv) ブロック終了識別子(Block Terminator)

イメージデータブロックの終了を表す識別子で、常に固定値0です。

(6) トレーラブロック

オフセット内容(バイト数)
0GIFトレーラ(1)
固定値3BH

1) GIFトレーラ(GIF Trailer)

GIFデータストリームの終わりを表す識別子で、常に固定値3BH(10進数では59)です。