如何在C++中如何读取图片的长与宽,转载了网上一个好例子,仅供学习之用!
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class CImage
{
private:
long m_Width;
long m_Height;
int get_extension(string fname);
public:
CImage()
{
m_Width = 0;
m_Height = 0;
};
void LoadImage(char* fname);
long get_width()
{
return m_Width;
};
long get_height()
{
return m_Height;
};
};
int CImage::get_extension(string fname)
{
char c = fname.at(fname.length()-1);
char c2 = fname.at(fname.length()-3);
if ((c == 'f') && (c2 == 'g')){ // file extension name is gif
return 1;
}else if ((c == 'g') && (c2 == 'j')){ // file extension name is jpg
return 2;
}else if ((c == 'g') && (c2 == 'p')){ // file extension name is png
return 3;
}else if ((c == 'p') && (c2 == 'b')){ // file extension name is bmp
return 4;
}
return 0;
}
void CImage::LoadImage(char *fname)
{
m_Width = m_Height = 0;
ifstream ffin(fname, std::ios::binary);
if (!ffin){
cout<<"Can not open this file."<<endl;
return;
}
int result = get_extension(fname);
char s1[2] = {0}, s2[2] = {0};
switch(result)
{
case 1: // gif
ffin.seekg(6);
ffin.read(s1, 2);
ffin.read(s2, 2);
m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);
m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);
break;
case 2: // jpg
ffin.seekg(164);
ffin.read(s1, 2);
ffin.read(s2, 2);
m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);
m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);
break;
case 3: // png
ffin.seekg(17);
ffin.read(s1, 2);
ffin.seekg(2, std::ios::cur);
ffin.read(s2, 2);
m_Width = (unsigned int)(s1[1])<<8|(unsigned int)(s1[0]);