图片格式转换自己轻松搞定

来源:互联网 发布:工业控制中的软件编程 编辑:程序博客网 时间: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,即为所需的图片格式。

原创粉丝点击