| ファイルヘッダ |
| カラーマップ (オプション) |
| ビットマップイメージデータ |
XWDファイルは、大きく分けると左図のようなブロックからできています。
| オフセット | 内容(バイト数) |
|---|---|
| 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 |
| 56 | ZPixmap形式時の赤のマスク(4) |
| 60 | ZPixmap形式時の緑のマスク(4) |
| 64 | ZPixmap形式時の青のマスク(4) |
| 68 | 論理ピクセルあたりのビット数(4) |
| 72 | カラーマップの総エントリ数(4) |
| 76 | 色構造の数(4) 実際のエントリ数 |
| 80 | ウィンドウの横幅(4) ピクセル単位 |
| 84 | ウィンドウの高さ(4) ピクセル単位 |
| 88 | ウィンドウの左上角のX座標(4) ピクセル単位 |
| 92 | ウィンドウの左上角のY座標(4) ピクセル単位 |
| 96 | ウィンドウの境界線の幅(4) ピクセル単位 |
| 100 | イメージ名(文字数+1) ヌル文字で終了する文字列 |
各フィールドはイメージ名を除いて全て4バイトの整数で、メモリ上のイメージのまま上位バイトが先に保存されます。
ファイルヘッダのサイズをバイト単位で表した値です。 ヘッダはイメージ名の前までは100バイトの固定長ですから、100+(イメージ名+1)となります。 このデータを利用するとアプリケーションプログラムがファイルヘッダ部分をスキップして、カラーマップやイメージデータに直接アクセスすることができます。
ファイルのバージョン番号で、X11-Windowの場合は常に固定値7です。
このデータはXWDファイルの識別子として利用することができます。
ビットマップイメージデータの保存形式を表すもので、次のような種類があります。
| ビット | ||||||||
|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| P0 | P1 | P2 | P3 | P4 | P5 | P6 | P7 | ワ | ド |
| 第1バイト目 | ||||||||
| P8 | P9 | P10 | P11 | P12 | P13 | P14 | P15 | |
| 第2バイト目 | ||||||||
| P16 | P17 | P18 | P19 | P20 | P21 | P22 | P23 | |
| 第3バイト目 | ||||||||
| P24 | P25 | P26 | P27 | P28 | P29 | P30 | P31 | |
| 第4バイト目 | ||||||||
| : | : | |||||||
ピクセルあたり1ビットのモノクロモデルまたは2色カラーモデルのビットマップデータを、ワード単位でパックして保存する形式です。
ワードのビット数はビットマップユニットbitmap_unitの値であり、ワード中のバイトの並び方はバイトの順番byte_orderのコードで、バイト中のビットの並び方はビットの順番bitmap_bit_orderのコードで決められます。
| ビット | ||||||||
|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| P0 | P1 | P2 | P3 | P4 | P5 | P6 | P7 | 1ビット目 の ブロック |
| : | ||||||||
| P0 | P1 | P2 | P3 | P4 | P5 | P6 | P7 | 2ビット目 の ブロック |
| : | ||||||||
| P0 | P1 | P2 | P3 | P4 | P5 | P6 | P7 | 3ビット目 の ブロック |
| : | ||||||||
フレームバッファのプレーンごとに別々のビットマップブロックとして保存する、プレーン優先フォーマットのことです。
カラーマップモデルの場合もプレーン優先で保存しますから、例えばピクセルあたり4ビットのカラーマップモデルであれば、4つのブロックとして保存します。
| ビット | ||||||||
|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | ワ | ド |
| 赤の値 | ||||||||
| G0 | G1 | G2 | G3 | G4 | G5 | G6 | G7 | |
| 緑の値 | ||||||||
| B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | |
| 青の値 | ||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| パディング | ||||||||
| : | : | |||||||
ビットマップデータを、ピクセル優先フォーマットでワード単位にパックして保存する形式です。
ワードのビット数(バイト数)はビットマップユニットbitmap_unitの値であり、ワード中のバイトの並び方はバイトの順番byte_orderのコードで、バイト中のビットの並び方はビットの順番bitmap_bit_orderのコードで決められます。
ワードのビット数がピクセルあたりのビット数の倍数ではない場合は、余りのビットは0がパディングされます。
例えばワードが32ビットでピクセルあたりのビット数が24ビットの場合は、0が8ビット分パディングされます。
ピクセルあたり1ビットの場合は、XYBitmapもXYPixmapもZPixmapも同じものになります。
フレームバッファの深さをビット単位で表した値です。
画像の幅(水平方向)と高さ(垂直方向)をピクセル単位で表した値です。
画像の水平方向の開始位置をピクセル単位で表した値で、通常は0です。 この値はアドレス指定が簡単な位置に画像の境界を配置できるようにするためのものですが、たいていの画像表示ソフトでは無視されるようです。