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

(2) カラーマップ(XWDColor)

オフセット内容(バイト数)
0カラーマップエントリ番号(4)
0-(ncolors - 1)
4赤の値(2)
0-65535
6緑の値(2)
0-65535
8青の値(2)
0-65535
10表示色のビットマスク(1)
7
11パディング(1)
0
::

カラーマップの内容を保存したブロックで、ビジュアルクラスがGrayScale・PseudoColor・DirectColorの場合に存在し、StaticGray・StaticColor・TrueColorの場合はありません。

1) カラーマップエントリ番号(pixel)

カラーマップのエントリ番号を表すデータです。 カラーマップエントリは必ずしもエントリ番号順に並んでいる必要はありません。 カラーマップのエントリ数はncolorsであり、カラーマップの総エントリ数colormap_entriesより少ない場合もあります。 カラーマップブロック全体のサイズは12×ncolorsバイトとなります。

2) 赤・緑・青の値(red、green、blue)

カラーマップの赤(red)・緑(green)・青(blue)の値で、それぞれの最大輝度が65535(=216-1)になるように正規化されています。 GrayScaleの場合も赤・緑・青の値があり、それらが全て同じ値になります。 このため、事実上、GrayScaleとPseudoColorは同じ構成となります。 現在のディスプレイのカラーマップは最大でも8ビットなので、16ビットあっても実際の輝度は256階調しかありません。

3) 表示色のビットマスク(flags)

赤・緑・青の値のうち、実際に表示する色成分のビットマスクを下位3ビットで定義した値で、通常は全ての色を表示するため 0000 0111=7となります。 しかし、実際にはこのデータは無視されることが多いようです。

4) パディング(pad)

カラーマップエントリのバイト数を4バイトの倍数にするためのパディングバイトで、通常は0が入っています。

(3) ビットマップイメージデータ

フレームバッファの内容を保存したブロックで、ディスプレイ上の画像の一番上の行から下へ1行単位で保存されます。 行中のピクセルは左端から順に保存され、各行はスキャンラインのパディング数bitmap_padの倍数になるように、行の末尾に値0のデータがパディングされます。 各行のバイト数はスキャンラインあたりのバイト数bytes_per_lineになりますから、ビットマップイメージデータブロックのサイズは、

ブロックサイズ=bytes_per_line×pixmap_height バイト

となります。

ビットマップイメージデータの配列は、イメージ形式pixmap_format、バイトの順番byte_order、ビットマップユニットbitmap_unit、ビットの順番bitmap_bit_order、スキャンラインのパディング数bitmap_pad、ピクセルあたりのビット数bits_per_pixelによって様々ですが、次のようなものが代表例です。

1) 1ピクセルあたり1ビットの場合

最上行左端から32ピクセル分
ビット 
76543210
P0P1P2P3P4P5P6P7



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

2) 1ピクセルあたり4ビットの場合

最上行左端から8ピクセル分
ビット 
76543210
P0P1



第1バイト目
P2P3
第2バイト目
P4P5
第3バイト目
P6P7
第4バイト目
::

3) 1ピクセルあたり8ビットの場合

最上行左端から4ピクセル分
ビット 
76543210
P0



第1バイト目
P1
第2バイト目
P2
第3バイト目
P3
第4バイト目
::

4) 1ピクセルあたり24ビットの場合

最上行左端から1ピクセル分
ビット 
76543210
R0R1R2R3R4R5R6R7



第1バイト目
G0G1G2G3G4G5G6G7
第2バイト目
B0B1B2B3B4B5B6B7
第3バイト目
00000000
第4バイト目
::