【Colum】


ビットマップのフォーマット
 ビットマップのフォーマットは、簡単そうに見えてかなりややこしくて やっかいな保存形式です。ここでは、ビットマップフォーマットの形式の 1つを紹介してします。


★ビットマップとは★

 ビットマップは、Windows標準の画像フォーマットで、2色,16色,256色,1677万色 の色数のものがあります。通常圧縮されていない ので、画像ファイルの大きさはかなり大きいですが、標準で壁紙に設定できたり 多くのペイントソフトで編集・加工をすることができます。最近は、 インターネットの普及でJPEG,GIFといった圧縮形式の画像も取り扱われるよう になってきましたが、これらは圧縮・展開,保存を繰り返すことで、画質が 劣化してしまうので、Windows上ではビットマップが一番重要であることに かわりありません。  また、ビットマップはフォーマットも比較的簡単でプログラムも組みやすいの で、Visual Basicから利用するにしても、このフォーマットが適していると思い ます。


★フォーマットの概要★

ビットマップのフォーマットは、大きく分けて次のものから成り立っています。

BITMAPFILEHEADER 14バイト
BITMAPINFOHEADER 40バイト
パレット 色数により異なる
ピクセルデータ 色数により異なる

 このように、BITMAPFILEHEADERとBITMAPINFOHEADERは保存される色数が、 どれであってもそのサイズにかわりありません。しかし、色数が増えるにつれ て、当然ですがパレットの数や色データが多くなるので、それらの保存のされ 方が違ってきますし、サイズも大きくなります。それでは、色数によっても 共通なBITMAPFILEHEADERとBITMAPINFOHEADERから見ていきましょう。


★BITMAPFILEHEADER★

BITMAPFILEHEADERは、次のような情報が格納されています。

情報名 内容 サイズ
Type 認識文字 2バイト
Size ファイルサイズ 4バイト
Reserved1 予約 2バイト
Reserved2 予約 2バイト
OffBits ピクセルデータまでのバイト数 4バイト


★BITMAPINFOHEADER★

BITMAPINFOHEADERは、次のような情報が格納されています。

情報名 内容 サイズ
Size BITMAPINFOHEADERのサイズ=40バイト 4バイト
Width ピクセルデータの幅 4バイト
Height ピクセルデータの高さ 4バイト
Planes カラープレーン数 2バイト
BitCounts 色数(ビット単位) 2バイト
Compression 圧縮形式 4バイト
Sizeimage ピクセルデータのサイズ 4バイト
XPelsPerMeter 水平解像度 4バイト
YPelsPerMeter 垂直解像度 4バイト
ColorUsed 使用カラー数 4バイト
ColorImportant 重要なカラー数 4バイト

 次に、16,256色のカラーパレットについて見ていきます。 なお1677万色についてはパレットは、ありません。


★パレット★

(16色)

 R値,G値,B値,予約値がそれぞれ1バイトずつあるので、16×4=64バイト の大きさです。このパレットの保存のされ方は、B値,G値,R値,予約値の順に 保存されます。通常システムカラー16色が使われます。

(256色)

 R値,G値,B値,予約値がそれぞれ1バイトずつあるので、256×4=1024バイト の大きさです。このパレットの保存のされ方は、B値,G値,R値,予約値の順に 保存されます。

 続いて16色,256色,1677万色のピクセルデータの保存形式についてです。


★ピクセルデータ★

(16色)

 色数が16であるので、1バイトで2つのピクセルデータが保存できます。 ピクセルデータの先頭は、画像の左下隅の座標で、横方向1ラインずつピクセルデータが 保存されます。この時、上位4ビットに 偶数ピクセル,下位4ビットに奇数ピクセルの情報が格納されます。 横方向のデータが4バイト単位になるように保存されるので、
(Width \ 2) Mod 4 <> 0
であれば、1ラインごとに0が追加され、 1ラインごとのピクセルデータのバイト数が4バイトの倍数にあわされます。

(256色)

 色数が256であるので、1バイトで1つのピクセルデータが保存できます。 ピクセルデータの先頭は、画像の左下隅の座標で、横方向1ラインずつピクセルデータが 保存されます。 横方向のデータが4バイト単位になるように保存されるので、
Width Mod 4 <> 0
であれば、1ラインごとに0が追加され、 1ラインごとのピクセルデータのバイト数が4バイトの倍数にあわされます。

(1677万色)

 色数が1677万色であるので、3バイトで1つのピクセルデータが保存できます。 ピクセルデータの先頭は、画像の左下隅の座標で、横方向1ラインずつピクセルデータが 保存されます。


 ビットマップのフォーマットについては、通常こんな感じのものだと思います。 他の保存形式については、あまりよく知らないので他のサイトで調べてみて下さい。