同一のBMP画像がバイナリ比較すると一致しない件

posted in: etc | 0

こんにちは。阿部です。

不思議な現象が発生しました。
ピクセル単位で同一の二つの画像ファイルで、保存形式も、作成したアプリケーションも同一のはずなのに、ファイルが不一致となるのです。

再現手順

Windowsのペイントを使用します。(Windows 7 32bitで本現象を確認)
1. ペイントで適当な画像を作成します。
2. 「名前を付けて保存」し、一旦ペイントを閉じます。
3. 保存したファイルを、再びペイントで開きます。
4. 「名前を付けて保存」を選択し、先ほどとは別名で保存します。

これで、2つのBMPファイルができました。
同一に見える画像ファイル

結果

バイナリ比較できる適当なソフトで比較してみてください。
なぜか、不一致となります。
比較すると不一致

画像本体ではなく、BMPのヘッダ部分が異なるようです。ペイントでは、何か画像に変更がある場合(新規作成を含む)と、何も変更しないで保存する場合で、異なるヘッダが生成されるようです。

どちらのファイルも問題なく使えているので、ペイントのバグというわけではなさそうですが、ちょっと不思議な仕様です。

追記

変化している値は、ビットマップ情報ヘッダのbiSizeImage(画像データサイズ)で、
BITMAPINFOHEADER 構造体の説明によると、

イメージのサイズを指定する (バイト単位)。非圧縮 RGB ビットマップの場合は、0 に設定できる。

とありました。
ビットマップの仕様としてはどちらの状態も正しいみたいですが、新規か編集かでどうして動作が変わるんでしょうね。

LINEで送る
Pocket