ブログ

4.BMPファイルの画像データについて[4bitBMP]

こんにちは、カルチスタッフです。

 

前回に引き続き、Windowsで標準的に使われる画像ファイルである、ビットマップファイルについて説明します。

まず、BMPファイルの構成についておさらいしていきたいと思います。

BMPファイルは、次の4つの領域で構成されています。

 

①ファイルヘッダ

②情報ヘッダ

③カラーパレット

④画像データ

 

BMPファイルは汎用性があるフォーマットですが、ここでは、カルチで使用するBMPファイルのフォーマットに限定して説明します。

BMPファイルは、【④画像データ】の形式によってフォーマットが異なるため、【④画像データ】のの種類毎に説明を進めたいと思います。

カルチで扱う【④画像データ】の形式は、大きく分けて5種類あります。

これは、【②情報ヘッダ】の【ビットカウント】の種類によって分けられます。

 

【ビットカウント】は1ドットを表現するために使用するデータサイズを格納します。つまり、使用する色数を表します。

ビットカウントの値

1ドットを表す値の範囲

色数

1

0x00~0x01

2色

4

0x00~0x0F

16色

8

0x00~0xFF

256色

24

0x000000~0xFFFFFF

1677万色

32

0x00000000~0xFFFFFF00

1677万色

 

前回は、ビットカウントが1の場合のフォーマットについて説明しました。今回は、ビットカウントが4の場合について、1文字1ファイルのフォントファイルを例にして、BMPフォーマットを説明したいと思います。

 

例として、前回同様、16x16の「永」の文字をBMPファイルフォーマットで表すことを考えます。Unicodeは0x6C38です。Windowsの標準アプリ「フォト」でbmpを見てみるとこのようになります。

 

アプリで開いた状態は、ビットカウントが1の場合と変わりません。

まず始めに、イメージを持ちやすいよう、BMPファイルの4つの構成のうちの【④画像データ】から説明します。

ビットカウントが4の場合、1ドットを表すのに使用できる領域は4bit、使用できる値は、0~15までの16個になります。

画像データを指定する時のポイントを示します。

●黒ドットを0x0、白ドットを0xFで指定します。

 【③カラーパレット】に対応しています。カルチではビットカウントが4の場合、カラーパレットの値は以下のように指定しますが、色は任意に指定可能です。

カラーパレット

0

0x00000000[黒色]

1

0x00008000

2

0x00800000

3

0x00808000

4

0x80000000

5

0x80008000

6

0x80800000

7

0x80808000

8

0xC0C0C000

9

0x0000FF00

10

0x00FF0000

11

0x00FFFF00

12

0xFF000000

13

0xFF00FF00

14

0xFFFF0000

15

0xFFFFFF00[白色]

フォントデータは白黒で使用することがほとんどなので、16個のカラーテーブルの内、使用するのは0x00と0x0Fの2つだけ、という場合が多いです。

 

このパレットの値を調整することで、なめらかな曲線をもつ他階調フォントを作成することも可能です。他階調フォントについてはこちらをご覧ください。

 

●ボトムアップ形式で指定します。

【②情報ヘッダ】の【画像の高さ】に対応しています。ここに負数を設定するとトップダウン形式で格納することが可能です。トップダウンとは、左上から順番に、右下に向かってドットデータを格納していく方式です。

 

ボトムアップとは、左下から順番に、右上に向かってドットデータを格納していく方式です。

https://www.culti.co.jp/wp-content/uploads/2023_BMP_03_02.png

●画像の各行のバイト数を4の倍数に合わせる必要があります。

1行のデータのバイト数は以下の式で求めることが出来ます。

 (横ドット数+1)/2

16×16のフォントデータの場合、

 (16+1)/2=8

になり、4の倍数になっているため、各行のバイト数を調整する必要はありません。

 

以上のポイントを踏まえて、画像データを作成すると以下のようになります。

 

 

では、BMPファイルの先頭から順番に値を見ていきます。

 

①ファイルヘッダ

項目

サイズ

内容

タイプ

2

0x4D42

固定値

サイズ

4

0x000000F6

ファイルサイズ(byte)

予約領域

2

0x0000

0

予約領域

2

0x0000

0

オフセットビット

4

0x00000076

画像データ先頭までのオフセット

 

●サイズ:

ファイルヘッダサイズ[14byte]+

情報ヘッダサイズ[40byte]+

カラーテーブルサイズ[4byte*16]+

画像データサイズ[(横byte数)8byte*(縦byte数)16byte]=128

14byte+40byte+64byte+128byte=246=0xF6

 

●オフセットビット:

ファイルヘッダサイズ[14byte]+

情報ヘッダサイズ[40byte]+

カラーテーブルサイズ[4byte*16]+

 14byte+40byte+64byte =118byte=0x76

 

②情報ヘッダ

項目

サイズ

内容

情報ヘッダのサイズ

4

0x00000028

固定値:40

画像の幅

4

0x00000010

ピクセルで指定

画像の高さ

4

0x00000010

ピクセルで指定

プレーン数

2

0x0001

固定値:1

ビットカウント

2

0x0004

4:16色

圧縮形式

4

0x00000000

固定値:0(無圧縮)

画像データのサイズ

4

0x00000080

【④画像データ】のByte数

横解像度

4

0x00000EC4

固定値:3780(96dpi)

縦解像度

4

0x00000EC4

固定値:3780(96dpi)

パレット数

4

0x00000000

固定値:0

パレットインデックス

4

0x00000000

固定値:0

●画像データのサイズ

横byte数×縦byte数=8byte×16byte=128byte=0x80

 

③カラーパレット

項目

サイズ

内容

カラーパレット0

4

0x00000000

0x0の時は黒色

カラーパレット1

4

0x00008000

 

カラーパレット14

4

0xFFFF0000

 

カラーパレット15

4

0xFFFFFF00

0xFの時は白色

 

ここまで、ビットカウントが4の場合のBMPフォーマットについて具体例を用いて説明しました。

ビットマップフォントのフォーマットについてご質問・ご相談などございましたら、お気軽にお問い合わせください。

 

カルチスタッフ

 

 

関連記事

カルチ発行書籍

  1. KEISコードブック_表紙
    2016年1月15日にKEISコードブックを発売しました。
ページ上部へ戻る