0

.bmp ファイル形式についてさらに学び始め、小さな C++ プログラムを作成しました。

これが私のコードの抜粋です:

FILE* imageFile;
fopen_s (&imageFile, this->GetImagePath (), "rb");

fread (&this->bmfh, sizeof(BITMAPFILEHEADER), 1, imageFile);    
std::cout << bmfh.bfSize << " " << bmfh.bfOffBits << " " << std::endl;

MSDN によるとbmfh.bfSize、ビットマップ ファイルのサイズを返す必要があります。

しかし、私の場合、 (54) は(14)bmfh.bfOffBitsより高いですか? bmfh.bfSizeその理由は何ですか?私の考えは、この方法で画像データにメモリを割り当てることだったからです:

this->size = bmfh.bfSize - bmfh.bfOffBits;
pixelData = new BYTE[this->size];
4

1 に答える 1

1

bmfh.bfOffBits (54) - ファイルの先頭から bmp ファイルの実際の RGB データまでのサイズです。これは通常 54 に相当します。

つまり、オフセット 0 (ファイルの先頭から) からオフセット 53 までが bmp ファイルのヘッダーです。したがって、オフセット 54 以降は、画像ファイルの実際の RGB ピクセル データです。

bmfh.bfSize (14) - 画像の実際のサイズです。

この件についてグーグルで検索してみましたが、これが私が見つけた最良の情報源です。

http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html

于 2011-04-08T10:35:53.350 に答える