BMP 形式とは — Windows ビットマップファイルの構造と用途
Windows のビットマップ形式 BMP のファイル構造、ほぼ無圧縮で容量が大きい理由、下から上へ保存する方式と行のパディング規則、今も BMP が必要な場面を解説します。
BMP は、Microsoft Windows と OS/2 で使われていた デバイス独立ビットマップ(DIB) をファイルとして保存する形式です。国際標準化機関が定めた規格ではなく、Microsoft の開発者向けドキュメントが事実上の仕様の役割を果たしています。構造が単純で、どんなソフトでも簡単に読み書きできることが最大の特徴です。
ファイル構造
Microsoft Learn の「Bitmap Storage」によると、BMP ファイルは次の順序で構成されています。
| 順序 | 構成要素 | 内容 |
|---|---|---|
| 1 | BITMAPFILEHEADER | ファイル識別子(BM)、ファイルサイズ、ピクセルデータの開始位置 |
| 2 | BITMAPINFOHEADER(または V4・V5 ヘッダー) | 幅・高さのピクセル数、ピクセルあたりのビット数、圧縮方式、解像度 |
| 3 | カラーテーブル(RGBQUAD 配列) | パレットを使う 1・4・8 ビット画像で使用 |
| 4 | ピクセル配列 | 実際の画像データ |
ファイルの最初の 2 バイトは ASCII の BM(16 進数 42 4D)なので、拡張子が変わったファイルでもこのシグネチャで BMP かどうかを確認できます。情報ヘッダーには印刷用の解像度(1 メートルあたりのピクセル数)を記す欄もあります。
下から上へ保存する
一般的な BMP は、下の行から上の行の順に(bottom-up)ピクセルを保存します。ヘッダーの高さの値が負なら、上から下へ(top-down)保存されています。また、各行のバイト数が 4 の倍数になるよう、末尾に埋め草バイト(パディング)を入れます。BMP を直接解析するプログラムを作るときに、よく間違えるポイントです。
行サイズの計算例
BMP の 1 行は 4 バイト単位にそろえる必要があります。24 ビット画像の幅が 101 ピクセルなら、1 行の実データは 101 × 3 = 303 バイトですが、4 の倍数になるよう 1 バイトを足して 304 バイトで保存します。したがってピクセルデータ全体のサイズは (行のバイト数)× 高さのピクセル数 で、これにヘッダー(通常 54 バイト)を加えたものがファイルサイズになります。この規則のため、幅が 4 の倍数でない画像を直接扱うと、1 行ずつずれて見えるエラーがよく起こります。
容量が大きい理由
BMP はほとんどの場合、圧縮しない 生のピクセルをそのまま保存します。24 ビット BMP はピクセルあたり 3 バイトなので、1920×1080 の画像は約 6.2MB、4032×3024 のスマートフォン写真は約 36.6MB になります。8 ビット以下のパレット画像には RLE(ランレングス符号化)圧縮を選べますが、写真にはほとんど効果がありません。MDN も容量の問題から、Web コンテンツには BMP を避けるよう勧めています。
透過
従来の 24 ビット BMP にはアルファチャンネルがありません。V4・V5 ヘッダーを使う 32 ビット BMP はアルファマスクを定義できますが、これを透過として正しく解釈しないソフトが多いため、透過画像のやり取りには PNG が安全です。
今も BMP を使う場面
- 古い産業用機器、組み込み機器、レシートプリンター、一部の社内ソフトが BMP しか受け付けない場合
- 圧縮・展開の処理なしでピクセルをそのまま扱う必要がある簡単なプログラムや学習用のサンプル
- Windows アイコン(ICO)内部の小さな画像の保存方式
変換するときの注意点
- BMP → PNG:可逆のまま容量が大きく減ります。保存・共有用に最もおすすめの変換です。
- BMP → JPG:写真なら容量が数十分の 1 になりますが、非可逆圧縮がかかります。
- 他の形式 → BMP:機器が求めるビット数(24 ビットまたは 8 ビット)を確認してください。透明な部分は背景色で埋められます。画像形式の変換 ツールで BMP として保存できます。
今すぐ試す