1

最初に私の英語で申し訳ありません。

私の目的は、ビットマップから RGB 配列をロードすることです。しかし、画像のサイズと高さ * 幅 * 3 の積には違いがあります。bmp 形式について読むと、幅 %4 が != 0 の場合、幅にいくつかの桁を追加して平衡にする必要があることに気付きます。(width%4==1 は 3 を追加する必要があり、width%4==2 は 2 を追加する必要があるなど。) 画像のサイズは 1 442 454 バイト、高さは 601、幅は 801 です。804 * 600 * 3 == 1 441 800 で、画像のサイズよりも大きいです。801 * 600 * 3 == 1441800 画像のサイズよりも小さくする必要があります (54 ビットのヘッダーを追加した場合でも)。正しく読むにはどうすればいいですか?(ヘッダーは正しくロードされます)

4

1 に答える 1

4

各行は 4バイトの倍数(ピクセルではありません) にパディングされることに注意してください。

したがって、行ごとに 801 ピクセルがあり、各ピクセルが 3 バイト (RGB) の場合、行ごとに 801*3=2403 バイトがあり、これに 1 バイトが追加されて 2404 バイトになります。したがって、ビットマップのサイズは 601*2404=1444804 バイトになります。

ただし、行幅が 800 ピクセルしかない場合、1 行あたり 800*3=2440 バイトがあり、これは既に 4 バイトの倍数であるため、追加のパッド バイトはなく、ビットマップ サイズは 601*2400=1442400 バイトになります。54 バイトのヘッダーを使用すると、1442454 バイトになります。

結論: 画像サイズは実際には 801 x 601 ではなく 801 x 600 です。

于 2012-07-22T21:24:04.717 に答える