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

3.2 仕様

ファイルヘッダ
カラーマップ
(オプション)
ビットマップイメージデータ

XWDファイルは、大きく分けると左図のようなブロックからできています。

(1) ファイルヘッダ

オフセット内容(バイト数)
0ファイルヘッダのサイズ(4)
バイト単位
4ファイルバージョン(4)
固定値7
8イメージ形式(4)
0,1,2
12イメージの深さ(4)
ビット単位
16イメージの横幅(4)
ピクセル単位
20イメージの高さ(4)
ピクセル単位
24イメージのXオフセット(4)
ピクセル単位
28バイトの順番(4)
0,1
32ビットマップユニット(4)
ビット単位(8,16,32)
36ビットの順番(4)
0,1
40スキャンラインのパディング数(4)
ビット単位(8,16,32)
44ピクセルあたりのビット数(4)
ビット単位
48スキャンラインあたりのバイト数(4)
52ビジュアルクラス(4)
0-5
56ZPixmap形式時の赤のマスク(4)
60ZPixmap形式時の緑のマスク(4)
64ZPixmap形式時の青のマスク(4)
68論理ピクセルあたりのビット数(4)
72カラーマップの総エントリ数(4)
76色構造の数(4)
実際のエントリ数
80ウィンドウの横幅(4)
ピクセル単位
84ウィンドウの高さ(4)
ピクセル単位
88ウィンドウの左上角のX座標(4)
ピクセル単位
92ウィンドウの左上角のY座標(4)
ピクセル単位
96ウィンドウの境界線の幅(4)
ピクセル単位
100イメージ名(文字数+1)
ヌル文字で終了する文字列

各フィールドはイメージ名を除いて全て4バイトの整数で、メモリ上のイメージのまま上位バイトが先に保存されます。

1) ファイルヘッダのサイズ(header_size)

ファイルヘッダのサイズをバイト単位で表した値です。 ヘッダはイメージ名の前までは100バイトの固定長ですから、100+(イメージ名+1)となります。 このデータを利用するとアプリケーションプログラムがファイルヘッダ部分をスキップして、カラーマップやイメージデータに直接アクセスすることができます。

2) ファイルバージョン(file_version)

ファイルのバージョン番号で、X11-Windowの場合は常に固定値7です。 このデータはXWDファイルの識別子として利用することができます。

3) イメージ形式(pixmap_format)

ビットマップイメージデータの保存形式を表すもので、次のような種類があります。

・コード0…XYBitmap
ビット 
76543210
P0P1P2P3P4P5P6P7



第1バイト目
P8P9P10P11P12P13P14P15
第2バイト目
P16P17P18P19P20P21P22P23
第3バイト目
P24P25P26P27P28P29P30P31
第4バイト目
::

ピクセルあたり1ビットのモノクロモデルまたは2色カラーモデルのビットマップデータを、ワード単位でパックして保存する形式です。 ワードのビット数はビットマップユニットbitmap_unitの値であり、ワード中のバイトの並び方はバイトの順番byte_orderのコードで、バイト中のビットの並び方はビットの順番bitmap_bit_orderのコードで決められます。

・コード1…XYPixmap
ビット 
76543210
P0P1P2P3P4P5P6P71ビット目

ブロック
:
P0P1P2P3P4P5P6P72ビット目

ブロック
:
P0P1P2P3P4P5P6P73ビット目

ブロック
:

フレームバッファのプレーンごとに別々のビットマップブロックとして保存する、プレーン優先フォーマットのことです。 カラーマップモデルの場合もプレーン優先で保存しますから、例えばピクセルあたり4ビットのカラーマップモデルであれば、4つのブロックとして保存します。

・コード2…ZPixmap
ビット 
76543210
R0R1R2R3R4R5R6R7



赤の値
G0G1G2G3G4G5G6G7
緑の値
B0B1B2B3B4B5B6B7
青の値
00000000
パディング
::

ビットマップデータを、ピクセル優先フォーマットでワード単位にパックして保存する形式です。 ワードのビット数(バイト数)はビットマップユニットbitmap_unitの値であり、ワード中のバイトの並び方はバイトの順番byte_orderのコードで、バイト中のビットの並び方はビットの順番bitmap_bit_orderのコードで決められます。 ワードのビット数がピクセルあたりのビット数の倍数ではない場合は、余りのビットは0がパディングされます。 例えばワードが32ビットでピクセルあたりのビット数が24ビットの場合は、0が8ビット分パディングされます。

ピクセルあたり1ビットの場合は、XYBitmapもXYPixmapもZPixmapも同じものになります。

4) イメージの深さ(pixmap_depth)

フレームバッファの深さをビット単位で表した値です。

5) イメージの横幅と高さ(pixmap_width、pixmap_height)

画像の幅(水平方向)と高さ(垂直方向)をピクセル単位で表した値です。

6) イメージのXオフセット(xoffset)

画像の水平方向の開始位置をピクセル単位で表した値で、通常は0です。 この値はアドレス指定が簡単な位置に画像の境界を配置できるようにするためのものですが、たいていの画像表示ソフトでは無視されるようです。