BMP

BMPファイルとは

無圧縮の Windows ビットマップ。巨大になりますが、スキャナーや古いソフトは今もこれを吐き出します。

BMP とは何か

BMP はバイナリ形式です。これを知っているプログラムにしか意味を持ちません。 ピクセルの格子を保存するので、自分の解像度を超えて拡大するとぼやけます。 プログラム間のデータ受け渡しのために使われます。

拡張子は .bmp、正式名称は Windows Bitmap です。ただしどちらも、そのファイルが中に何を持てるかほどには多くを語りません。このページの残りは、その中身についての話です。

BMP はどこから来たのか

Microsoft が 1987 年に公開しました。

これだけ長く読まれ続けてきた形式なら、10 年後に取り出したいものを預けても大丈夫です。

仕様は公開されていますが、公開しているのはそれを所有する会社です

文書があり、それに沿って実装できます。それでも、次の版がどうなるかを決めるのはその会社です。実務上、ファイルが開き続けるにはこれで足ります。安心するには足りません。

古い形式です

今もどこでも開けますし、古いプログラムは今もこれを書き出します。ただ、この形式のまわりで新しいものは何も作られていません。残しておきたいものは移してください。そして今日始める仕事には、これを選ばないでください。

捨てられるものはありません

BMP ファイルは中身をそのまま保存します。保存し直しても何も変わらないので、開いて、直して、また保存する——それを何度繰り返しても劣化は積み上がりません。これが、渡すための形式ではなく作業のための形式である理由です。

透明を持てません

BMP ファイルには、透明を記録しておく場所がありません。元のファイルで向こうが透けていた部分は、変換時に単色で塗りつぶされます。指定がなければ白です。

どんな色を表せるか

1 チャンネルあたり最大 8 ビット。 RGBとインデックスカラーで扱えます。

1 チャンネルあたり 8 ビットは、画面が表示するぶんであり、渡すための形式がほぼ例外なく備えているぶんです。

BMP を開けるのは何か

Microsoft Paint、GIMP、IrfanViewが読めますし、同じ種類のプログラムならたいてい読めます。

ファイルが開かないとき、形式が悪いことはめったにありません。たいていはプログラムのほうが形式より古いのです。もっと古い形式に変換してしまうのが確実な逃げ道で、このサイトの残りの部分はそのためにあります。

ブラウザーで開く

これは今のブラウザーならどれでも読めます。

ですからページに置くのも、メッセージに添えて送るのも、安心してできます。相手が何をインストールしているかを考える必要がありません。

渡すための形式です

BMP は渡すために作られたもので、中で作業するためのものではありません。編集は可能ですが、快適だったためしはありません。賢い道は、元のファイルへ戻ってもう一度書き出すほうを通ります。

この形式でよく起きること

繰り返し挙がる不満はこれです。中身のわりにファイルが大きくなる。

どれも、この形式を避ける理由にはなりません。どれかに不意を突かれる前に知っておくべきことがら、というだけです。これは別の主張であり、そして役に立つほうの主張です。

圧縮が一切なく、サイズは単純な計算で決まる

BMP はすべての画素を、順番に、そのままの色の値として保存します。工夫は何もありません。そのためファイルサイズはバイト単位まで予測でき、幅 × 高さ × 1 画素あたりのバイト数に、小さなヘッダーを足すだけです。1920 × 1080、24 ビットの画像なら、写真でも真っ白な四角でも、約 6.2 メガバイトになります。

この一つの性質が、この形式に対するあらゆる不満を説明します。PNG なら 200 キロバイトで済むスクリーンショットが、BMP では数メガバイトになります。スキャンした一ページが数十メガバイトになることもあります。何も壊れているわけではなく、この形式にはもともと何かを小さくする仕組みがなく、1990 年当時はそれが「読み込みが単純」という利点との引き換えとして妥当だっただけです。

行は上下逆さまに格納される

BMP は慣例として、画像の一番下の行から一番上の行へ向かって格納します。理由は歴史的なもので、この形式が設計された当時のグラフィックスハードウェアの座標系に合わせたためです。単純な実装で書かれた BMP が、時々上下反転して見えるのはこのためです。

ヘッダーには、高さの値を負の数にすることで逆順を宣言する方法もあり、一部のソフトはそちらで書き出します。どちらも仕様上は正当です。半日で実装できるほど単純でありながら、細部で実装同士が食い違うという、この形式全体を象徴する話です。

ヘッダーにはいくつかのバージョンがある

1990 年のオリジナルのヘッダーは 40 バイトで、寸法や色深度などごく基本的な情報しか持ちません。後のバージョンは 108 バイトや 124 バイトに拡張され、色空間の情報やアルファチャンネルが加わり、それより前のバージョンを書き出すツールもわずかに残っています。

多くの読み込みソフトはよくあるバージョンには対応していますが、拡張版に対応していないこともあります。あるソフトでは開けるのに別のソフトでは拒否される場合、たいていの原因はファイルの破損ではなくヘッダーのバージョンの違いです。科学機器が書き出したファイルが普通の画像ソフトを困らせるのも、これが理由です。

透明度は仕様上は存在する

32 ビットの種類にはアルファチャンネルの領域があり、拡張ヘッダーであればそれを正しく記述できます。しかし実際には対応が不安定で、BMP の透明度は当てにできません。四番目のバイトを完全に無視して不透明として描画する読み込みソフトが多くあります。

透明な背景が必要な画像には BMP は向かず、PNG のほうが適しています。透明度を持っていると主張する BMP を PNG に変換してみることは、その透明度が実際に有効だったのかを確かめる確実な方法でもあります。

ほとんど誰も使わない圧縮方式

BMP には 4 ビットと 8 ビットの画像向けに、同じ画素の連続を圧縮するランレングス方式が定義されていますが、ほとんど使われません。低い色深度にしか使えないうえ、圧縮が重要になる頃には PNG がすでに存在し、あらゆる面でそちらのほうが優れていたためです。

目の前にある BMP は、ほぼ間違いなく非圧縮だと考えて差し支えありません。それを前提にできるからこそ、BMP を PNG に変換すると何も失わずに劇的にサイズが小さくなるのです。

そのファイルはどこから来たのか

スキャナーやスキャン用ソフトウェア、特に古い機種や産業用の機種です。医療機器や実験用の計測機器も、書き出しが単純で誤解釈の余地がない形式を好みます。ある時期の Windows のユーティリティや画面キャプチャーツールもそうです。組み込みシステムや機械視覚では、デコーダーがむしろ負担になり、生の画素データがそのまま利点になります。

そして、1990 年代に書かれてから一度も見直されていないソフトウェアもよくある出どころです。共通しているのは、サイズより単純さを優先する考え方で、ローカルディスクに書き込む機器としては理にかなっていますが、メールで送るファイルとしてはそうではありません。

Windows の内部にはまだ生きている

Windows のクリップボードは画像に BMP 由来の構造を使っているため、アプリケーション間で画像をコピーすると、この形式にかなり近いものが渡されています。アイコンファイルの中にも BMP のデータが入っていて、インターフェースの一部でも今なお内部的に使われています。

この形式が消えずに残っているのはこのためです。今ではファイル形式というより、Windows が非圧縮の画像を表現する方法そのものになっていて、必要なときのためにファイルの入れ物が用意されている、という位置づけです。

何に変換すればよいか

ほとんどの場合 PNG です。可逆なので画素はそのままの状態で届き、しかも圧縮されます。スクリーンショットや図であれば、見た目にまったく変化がないまま BMP のごく一部のサイズに収まることが普通です。1996 年より前のソフトを使っているのでない限り、反対する理由はありません。

写真で、正確さよりもサイズを優先したい場合に限り JPG が選択肢になります。細部を捨てて小さくする形式だからです。スキャンした文書やスクリーンショット、図、線画であれば、PNG のほうが確実に優れていて、JPG は文字の輪郭を悪化させます。

大きなファイルは、端末の中で変換する

BMP を変換したくなる理由は、たいてい移動させるには大きすぎるからです。それをわざわざ変換サービスにアップロードするのは、問題の解決としてはあまり得策ではありません。アップロード自体が一番時間のかかる部分で、多くのサービスは非圧縮の大きなスキャンが超えてしまうサイズ上限を設けています。

ブラウザーで変換すればアップロードそのものが発生しません。何も送信されないので、スキャン画像のフォルダーも待ち行列や一日あたりの上限を気にせず変換できます。それでも上限はあり、無料枠は 1 ファイルあたり 100 MB、一度に 100 個までです。1 画素あたり 3 バイトの 24 ビット BMP であれば、およそ 3,500 万画素で 100 MB に達し、これは A4 を 600 dpi のカラーでスキャンした場合とほぼ同じ規模です。BMP を作る機器がスキャナーや医療機器であることが多い以上、ファイルが端末から出ないという点は、速さと同じくらい重要な意味を持ちます。

基本情報

BMPフォーマットの識別子と出自。
拡張子.bmp, .dib
メディアタイプimage/bmp
公開元Microsoft
初版1987