1

C++ コードでナンバー プレートを分析しようとしています。私はこの C++ コードを自分で作成し、その方法を学習するプロセスに進みたいので、そこに早く到達する方法がポイントではありません。

問題:

ビットマップ ファイルのバイトが合計されません。ビットマップ ファイル: ここに画像の説明を入力 http://ictmdeklerk.nl/cor.bmp

加算しない理由:

24 ビットのビットマップ イメージ (*.BMP ファイル) を使用しています。ビットマップが BMPFILEHEADER と BMPINFOHEADER で構成されていることはわかっていますが、これらは合わせて 54 バイトを消費します。

現在、画像は幅 1350 ピクセル、高さ 740 ピクセルで、999000 ピクセルになります。

ファイルは 24 ビットなので、1 ピクセルあたり 3 バイトです。999000 * 3 = 2997000 バイトがイメージに必要です。しかし、BMPINFOHEADER の画像サイズ (biSizeImage) は、画像が 2998480 バイトであることを示しています。ファイル サイズは 2.998.534 バイト - 54 ヘッダー バイト = 2.998.480 です。したがって、ヘッダーはまだ 54 バイトです。余分なメタデータはありません。2.998.480 / ピクセルあたり 3 バイトを割ると、999493,33 ピクセルになります。ラウンド数でもありません!

それは私を狂気に駆り立てています。ウィンドウは、ピクセルや色などをシフトせずにこの画像を表示する方法をどのように知っていますか?

これらの余分なピクセル/バイトがどこから来たのか誰か説明できますか? そして、それらにどう対処するのですか?

前もって感謝します!

4

1 に答える 1

6

BMP ファイルは、各行を 4 バイト境界まで埋めます。

あなたのイメージは

(幅 1350px) x (ピクセルあたり 3 バイト) = 行あたり 4050 バイト。4050 は 4 で割り切れませんが、40521 行ごとに 2 バイト (2 * 740 = 1480 バイト) がパディングとして画像に追加されます。

したがって、ファイル サイズは 2997000 画像バイト + 54 バイトのヘッダー + 1480 バイトの行パディング = 2998534 バイトであり、これが実際のファイル サイズです。

于 2011-09-08T14:38:52.347 に答える