Bitmap のファイル構造 01

Windowsでの標準的な画像フォーマット
基本的に無圧縮なためファイル構造がわかりやすい。

 

ビットマップとは本来画像の表現形式で、
ピクセルの集合によって表現される画像のこと。

ディスプレイやプリンタなど、
多くの画像を扱うハードウェアは左上から処理をするため、
多くの画像フォーマットは原点を左上として、y 軸が下向きの座標系が用いられる。

しかし、Bitmap 形式は
左下が原点で x 軸は右、y 軸は上を正の方向とする座標系を採用している。
つまり、画像内のピクセル情報は下から上に向かって格納されるところが特徴。?
ただし、マルチバイトの解釈トルエンディアンになっている。
そのためトルエンディアン以外の環境では読み書きの際
エンディアンの変換が必要。

 

非圧縮画像の代表例のように思われがちであるが、
カラーパレット形式や、その圧縮形式も定義されている。
しかし、同様の特徴を持つ他の方式に比べ効率が悪く、
圧縮形式には対応していないツールも多い。
実利用上 BMP ファイルはフルカラーの非圧縮形式となっている場合がほとんど。

 

ファイル構造は「ヘッダ部」と「データ部」からなっている。

ヘッダ部
ファイル情報。高さなど。全部で [ 54 ] byte ある。
ファイルヘッダ情報ヘッダで構成されている。

データ部
画像のデータ。各画素値。
パレットデータ ( ない場合もある )・画像データで構成されている。

パレットカラー:インデックスカラー
コンピュータでは通常、
光の三原色 ( RGB ) の各要素の強さの組み合わせで色を表現するが、
インデックスカラー形式では、
この組み合わせのうち必要なものを選んで番号をつけ、
各画素には RGB 形式の色情報ではなく色番号で色を指定していく。
表示や変換を行うときには、
色番号と RGB 形式の対応表 ( カラールックアップテーブル ) を元に、
各画素に実際の色表現が割り付けられていく。

 

 

プログラムで Bitmap ファイルの読み込み

手順

  1. ヘッダ部」の先頭から画像ファイルのフォーマット判別
  2. ヘッダ部」の内容から画像の色数・高さ・幅・圧縮形式などの情報を取得。
  3. 色数・圧縮形式に応じて「データ部」から画像ファイルの各画素値取得
  4. 高さ・幅の情報を元に取得した各画素値を二次元に並べる

ex )
バイナリ ( unsigned char ) でファイルを開き、for 文で 54 サイズ分読み込む。
array [ 54 ] が画像データの先頭。

 

 

 

こちらから。
https://algorithm.joho.info/image-processing/bmp-file-data-header/
http://www.umekkii.jp/data/computer/file_format/bitmap.cgi
http://www.syuhitu.org/other/bmp/bmp.html
インデックスカラー(パレットカラー)とは - IT用語辞典
https://www.mm2d.net/main/prog/c/image_io-04.html

以上。