誤ったビットマップ。これはどのように可能ですか
-
27-10-2019 - |
質問
C ++コードでナンバープレートを分析しようとしています。ポイントは、このC ++コードを自分で作成し、方法を学習するプロセスに行きたいので、そこに到達する方法ではありません。
問題:
ビットマップファイルのバイトは追加されません!ビットマップファイル:
http://ictmdeklerk.nl/cor.bmp
なぜ彼らが加算しないのか:
24ビットビットマップ画像(*.bmpファイル)を使用しています。ビットマップは、BMPFileHeaderとBMPINFOHEADERで構築されており、Togehterが54バイトを消費しています。
現在、画像は幅1350ピクセル、高さ740ピクセルで、999000ピクセルになります。
ファイルは24ビットであるため、ピクセルあたり3バイトがあります。 999000 * 3 = 2997000イメージのネクサリー。しかし、BMPINFOHEADERの画像サイズ(BisizeImage)は、画像が2998480バイトであると言います!ファイルサイズは2.998.534バイト-54ヘッダーバイト= 2.998.480です。したがって、ヘッダーはまだ54バイトです。追加のメタデータはありません。ピクセルあたり2.998.480 / 3バイトを分割すると、999493,33ピクセルを取得します!それは丸い数でもありません!
それは私を非常識に駆り立てています。 Windowsは、ピクセルや色などをシフトせずにこの画像を表示する方法をどのようにして知ることができますか?
これらの余分なピクセル/バイトがどこから来たのかを誰かが私に説明できますか?そして、それらに対処する方法は?
前もって感謝します!
解決
BMPファイルは、各行を4バイトの境界にパッドします。
あなたのイメージはです
(幅1350px)x(ピクセルあたり3バイト)=行あたり4050バイト。 4050は4ではなく、4052です は そのため、すべての行に2バイト(2 * 740 = 1480バイト)が画像へのパディングとして追加されます。
したがって、ファイルサイズは2997000の画像バイト + 54バイトヘッダー + 1480バイトのrowパディング= 2998534バイトで、実際のファイルサイズです。