使用C ++实现图像的高度和宽度

时间:2015-10-06 21:22:42

标签: c++ bitmap height width

有没有办法通过头文件或其他方式从* .bmp文件中查找高度和宽度?我目前正在使用Visual Studio 2010.我发现头文件是54个字节。

我目前有这个:

ifstream image;
image.open("image.bmp",std::ios_base::binary);

if (image.is_open()) 
{
cout<< "function success\n";
} 
else 
{
cout<< "unable to open file";
}
//get length of file:
image.seekg(0, image.end);
int n = image.tellg();
image.seekg (0, image.beg);

//allocate memory:
char* res = new char[n];

//read data as a block:
image.read(res, n);

有没有办法可以循环提取相关信息?如果可能,我会很感激。

提前致谢。

1 个答案:

答案 0 :(得分:4)

BMP文件的BITMAPFILEHEADER后面紧跟BITMAPINFOHEADERBITMAPCOREINFO

后两者包含位图的高度/宽度。

如果你想在Windows中这样做,我会使用windows.h中这些结构的定义。如果您在Linux或其他地方进行此操作,则可以使用MSDN中的定义(并确保设置编译器以确保结构字段之间没有打包)。

有了这个,你可以阅读结构,并读出你关心的作品。我想你可以寻找正确的偏移,然后从那里读取正确的字节数,但我会读取整个结构。这很简单,无论哪种方式你都会读取一个磁盘扇区,所以你不太可能获得速度或类似的东西。