Windowsビットマップ (.bmp)
Microsoft 標準Bitmap Image File (BMP) は、Microsoft社の基本的なデバイス非依存ラスターグラフィックス形式であり、非圧縮またはRLE圧縮されたスキャンラインをハードウェアのフレームバッファと直接互換性のある形式で格納します。
BMP を PNG に変換
無料のブラウザ内 BMP から PNG へのコンバーター。お使いのデバイスでファイルを即座に変換します。
調査とメタデータ
オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してBMPファイルを識別します:
バイトレベルのヘッダーシグネチャ (マジックバイト)
オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してBMPファイルを識別します:
16進数シグネチャ(オフセット0):
42 4DASCII表現: BM
標準化: Microsoft Windows Device-Independent Bitmap(DIB)アーキテクチャ
技術仕様
| コンテナアーキテクチャ | BITMAPFILEHEADERに続いてBITMAPINFOHEADER(DIB)とラスターピクセル配列を格納 |
| 圧縮 | 非圧縮の生走査線、またはオプションのBI_RLE8 / BI_RLE4ランレングス符号化 |
| バイトエンディアン | リトルエンディアン(Intel x86のバイト順) |
| 色空間 | デバイス依存RGB, sRGB(BITMAPV5HEADERに埋め込み) |
| チャンネルと構造 | 1ビットモノクロ、4/8ビットパレット、16ビット、24ビットRGB、または32ビットRGBA |
| 最大寸法 | 2,147,483,647 x 2,147,483,647ピクセル(符号付き32ビット整数) |
| 透過性 | 最新のBITMAPV3HEADERおよびV5HEADER形式では32ビットBGRAアルファマスクに対応 |
| ストリーミングとプログレッシブ | ストリーミング不可。高さが負の場合を除き、走査線は上下逆(下から上)に格納 |
技術比較表:BMPと競合製品
| 技術属性 | BMP (現在) | PNG | TIFF | JPG |
|---|---|---|---|---|
| 圧縮モード | 非圧縮 / 最小限のRLE | 可逆のDeflate圧縮。ファイルサイズの削減量は画像内容によって異なる | 非圧縮 / LZW / Zip | 非可逆DCT(約90%小型) |
| デコード速度 | 瞬時のメモリコピー | Deflate解凍が必要 | LZW/ZIP解凍が必要 | IDCT計算が必要 |
| スキャンライン順序 | 下から上(反転) | 上から下 | 上から下 / ストリップ | 上から下 MCUブロック |
| ウェブ適性 | 非常に不向き(ペイロードが肥大化) | グラフィックスに最適 | 不向き(デスクトップパブリッシング) | 写真に最適 |
一般的な破損モードと16進数リカバリガイド
画像が斜めに剪断(シアー)されたり、角度が歪んだりして描画される。
根本原因: 行パディングの計算が誤っている(各スキャンラインを4バイト境界にパディングし忘れている)。
復旧: File2File.app Image Converterを使用して再エンコードし、正しい32ビットスキャンラインストライドを強制する。
セキュリティ分析とパーサー攻撃ベクトル
BMPデコーダーは、信頼できないDIBヘッダーの寸法に基づいてバッファを割り当てる際、バッファオーバーリードの脆弱性を抱えがちです。
既知の攻撃ベクター
- width * height * bpp の計算における整数オーバーフローにより、小さなヒープ割当と範囲外書き込みを引き起こす。
- 破損したRLE8/RLE4ランレングスエスケープシーケンスにより、割り当てられたバッファを超えたメモリ書き込みが発生する。
- 巧妙に細工されたヘッダー寸法によって引き起こされる、マルチギガバイトのメモリ割り当てを介したサービス拒否(DoS)。
防御的ベストプラクティス: 宛先メモリを割り当てる前に、DIBヘッダーの幅、高さ、およびビット深度の境界を厳格に検証します。
歴史的背景とマイルストーン
主なメリット
- 圧縮劣化ゼロ:圧縮アーティファクトなしで、100%ビット完全なピクセルストレージを実現。
- WindowsにはBMP用のネイティブコーデックがありますが、他のOSやアプリでの対応状況は異なります。
- 極めてシンプルなデコード複雑性により、組み込みマイクロコントローラーやグラフィックスプログラミング教育に最適。
技術的な制限とデメリット
- DEFLATEやハフマン符号化のような現代のエントロピー圧縮がないため、ファイルサイズが非常に巨大になる。
- ウェブ転送やモバイルネットワーク配信には非効率。
- ボトムアップ方式のスキャンライン順序のため、現代のトップダウン式グラフィックスパイプラインでは垂直方向の行反転が必要。
興味深い技術トリビア
- BMPは、OS/2で使用されている数学的デカルト座標系のため、デフォルトで画像の走査線を上下逆(下から上)に格納します。
- BMPヘッダーの高さ値に負数を設定すると、画像は正立(上から下)でデコードされます。
- BMPファイルのすべてのスキャンラインは、4バイトの倍数(32ビット境界アライメント)になるようにゼロパディングする必要があります。
よくある技術的な質問
BMP ファイルのサイズが非常に大きいのはなぜですか?
BMP ファイルは、すべてのピクセルに対して未圧縮の生の色値を格納するためです。一方、PNG などのフォーマットは、画質を一切落とさずにデータを圧縮します。
BMP は透明度をサポートしていますか?
はい。32 ビット BMP ファイル(BITMAPV3HEADER 以降を使用)は 8 ビットのアルファチャンネルを格納できますが、古いソフトウェアではサポート状況が異なる場合があります。
BMP ファイルのサイズを小さくするにはどうすればよいですか?
BMPファイルをPNGに変換すると、ピクセル値を保ったままファイルサイズを縮小できる場合がありますが、結果は画像内容とBMPのエンコード方式によって異なります。