图片格式转换自己轻松搞定
来源:互联网 发布:工业控制中的软件编程 编辑:程序博客网 时间:2024/04/29 19:59
之前上传过一个资源,关于任意格式转换为Bmp格式的。今天发现很多反馈都是代码看不明白。先在专门详细给大家讲解一下。
BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF, and EMF这里面的任何两种格式都可以用介绍的方法任意转换。
该转换方案要得益于GDI+的Image类,提供的按照图片编码方式保存图片的功能。记得很久以前查过资料,对于以上所说的图片格式,在系统注册表中是保存有对应格式的编码方式的,不然操作系统如何去认识如上的图片格式的了?
知道如上这点,我们的解决方案就很简单了,因为我们只需要从系统中找到对应格式图片的编码方式,然后调用Image类的保存功能,即能实现我们的图片格式转换需求。
1.加载GDI+库
评论中反馈没有GDI+库,工程中是有加载的,具体的GDI+库,如果电脑上没有,需要自己去加载了。GDI+加载释放分别在app的InitInstance和ExitInstance函数中。
2.获取图片格式的编码信息
BOOL CJpgToBmpDlg::GetImageCLSID(const WCHAR *format, CLSID *pCLSID){UINT num = 0;UINT size = 0;ImageCodecInfo* pImageCodecInfo = NULL;GetImageEncodersSize(&num,&size);if(size == 0)return FALSE;//编码信息不可用//分配内存pImageCodecInfo = (ImageCodecInfo*)(malloc(size));if(pImageCodecInfo == NULL)return FALSE;//分配失败//获取系统中可用的编码方式的所有信息GetImageEncoders(num,size,pImageCodecInfo);//在可用编码信息中查找format格式是否被支持for(UINT i = 0;i<num;++i){//编码方式的具体描述if(wcscmp(pImageCodecInfo[i].MimeType,format)==0){*pCLSID = pImageCodecInfo[i].Clsid;free(pImageCodecInfo);return TRUE;}}free(pImageCodecInfo);return FALSE;}如上代码,我想细心看,还是能够看懂,就是为了获取给定图片格式的编码方式。从系统中提取到所有图片格式列表,然后逐个的去找与查找的图片格式匹配的格式编码。
3.按照图片编码,保存图片
Graphics graphics(NULL);Image image(L"c:\\test.xxx");CLSID clsid;if (GetImageCLSID(L"image/xxx",&clsid)){image.Save(L"c\\dst.xxx",&clsid,NULL);}这里的xxx,即为所需的图片格式。
- 图片格式转换自己轻松搞定
- 自己写的图片格式转换工具
- 转换图片格式
- 转换图片格式
- 图片格式转换
- 图片格式转换
- 图片格式转换
- 图片格式转换
- 图片格式转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页简繁转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页的简繁转换
- 几行代码轻松搞定网页的简繁转换
- 对 Android 开发者有益的 40 条优化建议
- STL中map的erase操作
- yii gridview 添加表格序号
- 打印机 双面打印
- http://lxr.linux.no/#linux+v3.11/Documentation/watchdog/wdt.txt
- 图片格式转换自己轻松搞定
- 小米2013校园招聘笔试题
- 【初学】UITableView控件-实现复选框功能(不需要第三方库)
- IE浏览器兼容出现servlet/servlet/XXXservlet 的404 问题
- C++分析淹没EIP
- maximo75 附件配置
- Android Studio 0.2.10 发布
- OCP-1Z0-051-V9.02-156题
- java 设计模式积累之 代理设计模式