C++中读取图片长度和宽度
来源:互联网 发布:aegisub下载mac 编辑:程序博客网 时间:2024/05/01 18:24
看到一个用ASP写的读取图片文件的长度、宽度的程序,感觉有点意思,于是用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]);
m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);
break;
case 4: // bmp
ffin.seekg(18);
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]);
m_Height = (unsigned int)(s2[1])<<8|(unsigned int)(s2[0]);
break;
default:
cout<<"NO"<<endl;
break;
}
ffin.close();
};
int main(int argc, char *argv[])
{
if (argc < 2){
printf("usage: program imagefilename/n");
return 0;
}
CImage test;
test.LoadImage(argv[1]);
cout<<"width:"<<test.get_width()<<endl;
cout<<"height:"<<test.get_height()<<endl;
return 0;
}
- C++中读取图片长度和宽度
- C++中读取图片长度和宽度 ( zz zhaoweikid)
- Adodb.Stream 对象 读取图片长度和宽度
- android 获取图片的长度和宽度
- 【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
- 动态获取缩放图片的长度、宽度和显示比例
- android 固定图片长度和宽度的方法
- js读取图片,获取并获取图片高度和宽度
- Java读取图片文件的宽度和高度
- 页面中在上传之前获取上传文件的路径(例子:获取上传图片的路径,获得上传图片的大小:长度和宽度)
- 页面中在上传之前获取上传文件的路径(例子:获取上传图片的路径,获得上传图片的大小:长度和宽度)
- 最新Javascript按比例压缩图片,解决onload无法读取图片的高度和宽度问题
- ASP中取得图片宽度和高度的类
- 网页中限制图片的最大宽度和高度
- CSS中设置图片的宽度和高度
- Android中获取字符串长度、宽度
- 长度、宽度
- C语言读取数组长度
- ut_star 商务平台
- 高级 DAO 编程 作者:Sean C. Sullivan
- QQ也能做你的木马
- 在Windows下的python2.3中安装 pyGTK
- D3DXVec4Cross 函数
- C++中读取图片长度和宽度
- We’re Just Beginning 一切刚开始
- 动网论坛灌水机
- 用lex统计文本文件字符数
- 配置JBoss 4 JDBC连接JDBC
- Interview with Danny Thorpe about Diamondback
- Stateful UI Transactions
- [原创]仿Bindows的登陆渐变滚动条(1)---单向滚动
- JAVA中用动态代理类实现记忆功能