c++ - BITMAPFILEHEADER 的问题

标签 c++ winapi bmp

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

相关文章:

winapi - 根据 MSDN ReadFile(),Win32 函数可能会错误地报告读取操作完成情况。什么时候?

php - 如何将 .png 文件转换为 .bmp?

c++ - 写入 BMP 数据变得垃圾

c++ - OpenMP omp_get_num_threads()V.S. omp_get_max_threads()

c++ - VS 2017 & 2019 找不到 WinRT 头文件,即使是在新的解决方案上

.net - 我可以使用 C++/CLI (.NET Winforms/WPF) 为使用 native C 和 C++ 编写的应用程序提供 GUI

c++ - 如何获取内核对象的安全描述符?

c++ - 获得向后插入器并回退到任何插入器的惯用方法是什么?

c++/win32 - LB_GETTEXT 仅返回一个字符

c++ - 在 opengl c++ 中加载 32 位 .bmp 纹理时出现问题