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