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应该返回位图文件的大小。

但在我的情况下bmfh.bfOffBits(54)高于bmfh.bfSize(14)?可能是什么原因?因为我的想法是以这种方式为图像数据分配内存:

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 回答