8.

BMP(.bmp)画像形式の完全ガイド — Windows ビットマップ・DIB ヘッダ・無圧縮の仕様

編集
この記事の要点
  • BMP (Bitmap、Windows Bitmap) は 1987 年に Microsoft / IBM が OS/2 と Windows のために定義した 無圧縮主体の単純な 画像形式
  • 構造が FileHeader + DIBHeader + 画素データ と極めて単純で、自作プログラムから読み書きしやすい教材的存在
  • 画素は通常 下から上 (ボトムアップ) に並んでおり、行は 4 バイト境界にパディングされる
  • RLE 圧縮 (4bit / 8bit パレット時のみ) と BI_BITFIELDS (32bit α 対応) という拡張はあるが、実用上は無圧縮 BMP がほとんど
  • ファイルサイズが 非常に大きい ため、ウェブ配信や写真保管には全く向かない。1920×1080 24bit で約 6MB
  • ICO (Windows のアイコン) や CUR (カーソル) は内部的に BMP の派生 形式である
  • ペイントの既定保存、リソースとして組み込まれる UI 素材、組み込み機器の画面表示など、用途は限定的だが今も生きている

概要

BMP (Bitmap、正式には Device-Independent Bitmap = DIB) は、1987 年に Microsoft と IBM が OS/2 1.x のために定義し、その後 Windows でも採用された画像形式である。拡張子は .bmp。「とにかく単純」がコンセプトで、画素データをほぼそのままディスクに置く設計のため、デコーダがほぼ無くてもパースできる教材的な形式として広く知られる。

その単純さの代償として圧縮はほぼ効かず、1920×1080 ピクセルの 24bit カラー画像はおよそ 6MB、4K (3840×2160) では 24MB に達する。ウェブ配信には全く不向きで、現代では「Windows のペイントで保存」「組み込み機器の画面リソース」「Win32 リソースに埋め込むダイアログ画像」など、Microsoft プラットフォームのレガシー用途と局所的なツール内交換に限られる。

内部構造とマジックナンバー

場所HEX / ASCII意味
先頭 2 バイト42 4D = BMBMP のシグネチャ (Bitmap)
3-6 バイト4 バイト LEファイル全体のサイズ
7-10 バイト予約通常 0
11-14 バイト4 バイト LE画素データへのオフセット
15-18 バイト4 バイト LEDIB ヘッダのサイズ (40 なら BITMAPINFOHEADER、124 なら V5)
その後DIB ヘッダ本体幅・高さ・ビット深度・圧縮種別・色数
必要ならカラーパレット1/4/8 bit のとき RGBA の表
末尾画素データ下から上、行は 4 バイト境界

DIB ヘッダはいくつもバージョンがあり、Windows 3.0 時代の BITMAPINFOHEADER (40 バイト) と、最近の BITMAPV5HEADER (124 バイト、ICC プロファイル対応) では機能差が大きい。多くの実装は BITMAPINFOHEADER までしかサポートしない。

主な用途

  • Windows のペイントの既定保存形式 (旧来): 現在の Windows 11 ペイントは PNG 既定だが、過去のバージョンは BMP だった。
  • Win32 リソース (.rc ファイルから埋め込む画像): ダイアログのビットマップ、ツールバーアイコンなど。
  • 組み込み機器の画面表示: マイコン搭載の液晶表示で、デコーダを書く手間が惜しいときに BMP を直に流し込む。
  • スキャナ・古い業務アプリの出力: 「とりあえず無劣化で保存」する用途で生き残っている。
  • クリップボードの内部表現: Windows のクリップボードでビットマップを受け渡すときの主要形式 (CF_DIB / CF_BITMAP)。

関連形式との比較

形式圧縮透過1920×1080 24bit のサイズ得意分野
BMP基本なし (RLE は限定的)32bit BMP のみ約 6MBWindows レガシー・教材
PNG可逆 Deflate8bit α1-3MBUI・スクリーンショット
TIFF可逆 LZW/ZIP / 非可逆あり1-6MB印刷・スキャナ
JPEG非可逆なし0.2-0.5MB写真
WebP lossless可逆あり1-2MBウェブ無劣化

同じ無劣化用途なら BMP より PNG / WebP lossless / TIFF の方が圧倒的にファイルサイズが小さく、特別な理由がない限り BMP を選ぶ必然性はない。

編集・閲覧ツール

  • Windows ペイント / フォト: 開く・保存とも標準対応。
  • IrfanView / XnView: 大量変換に強い軽量ビューア。BMP → PNG の一括変換に向く。
  • GIMP / Photoshop: 編集の主力。GIMP は DIB ヘッダ種別を選んで書き出せる。
  • ImageMagick: magick in.bmp out.png で変換。逆もできる。
  • Visual Studio リソースエディタ: .rc ファイルへの BMP 埋め込みに使う。

注意点・落とし穴

  • 巨大化: 4K 解像度の BMP は数十 MB に達する。メール添付やチャットでの共有には PNG / JPEG に変換してから渡す。
  • 行が下から上に並ぶ: 自作デコーダを書くときに最頻出のミス。height が 正なら下→上 (ボトムアップ)、負なら上→下 (トップダウン)
  • 4 バイト境界パディング: 行のバイト数は必ず 4 の倍数で、足りないバイトはゼロパディング。これを忘れて画像が右に流れていく不具合は定番。
  • 32bit BMP の α の扱い: ヘッダで BI_BITFIELDS と RGBA マスクを正しく指定しないと、アルファが無視されて全部不透明として描画される実装が多い。
  • ブラウザ表示: BMP を <img> で参照すれば主要ブラウザは表示できるが、無圧縮ゆえ転送量が悲惨。ウェブ用途では絶対に避ける。
  • ICO ファイルとの関係: ICO は内部で BMP (もしくは PNG) を複数解像度束ねた形式。BMP の知識がそのまま ICO の理解に繋がる。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. JPEG(.jpg / .jpeg)
  2. PNG(.png)
  3. GIF(.gif)
  4. SVG(.svg)
  5. WebP(.webp)
  6. AVIF(.avif)
  7. HEIC(.heic / .heif)
  8. BMP(.bmp)
  9. TIFF(.tiff / .tif)
  10. ICO(.ico)

最近更新/作成されたページ