2015-10-06 75 views
3

有没有通过头文件或其他方式从* .bmp文件找到高度和宽度的方法?我目前正在使用Visual Studio 2010.我认识到头文件是54字节。使用C++的图像的高度和宽度

目前,我有这样的:

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); 

有没有一种方法,我可以循环通过提取相关信息?如果可能的话,我会很感激的。

在此先感谢。

+3

我推荐为此使用一个库。 GOOGLE给了我这个:http://easybmp.sourceforge.net/ – Galik

回答

4

BMP文件有一个BITMAPFILEHEADER后跟一个BITMAPINFOHEADERBITMAPCOREINFO

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

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

因此,您可以阅读结构,并读出您关心的部分。我想你可以寻求正确的偏移量,然后从那里读取正确的字节数,但我会读取整个结构。这很简单,无论你如何阅读一个磁盘扇区,所以你不可能获得速度或类似的东西。