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