我刚刚开始学习有关.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];

最佳答案

bmfh.bfOffBits(54)-是从文件开头到bmp文件的实际RGB数据的大小。通常等于54。

也就是说,从偏移量0(从文件开头)到偏移量53是bmp文件的头。因此,从偏移量54开始是图像文件的实际RGB像素数据。

bmfh.bfSize(14)-是图像的实际大小。

我尝试在这个问题上进行搜索,这是我发现的最佳信息。

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

关于c++ - BITMAPFILEHEADER的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5593383/

10-10 16:09