使用GDI+转换图片格式
2013-09-07 12:41
483 查看
调用ImageConvert函数即可,测试代码在http://download.csdn.net/detail/qq1134993111/6227899
ImageConverter.h
ImageConverter.cpp
ImageConverter.h
/* 转换图片格式 GDI+支持的格式 */ #pragma once #include <wtypes.h> #include <guiddef.h> #include <string> using namespace std; #include <GdiPlus.h> using namespace Gdiplus; #pragma comment(lib,"gdiplus") //获取format对应类型的图片解码器的CLSID int GetEncoderClsid(const WCHAR* format, CLSID* pClsid); /* wstrImageSrcPath 源图片文件全路径(包括扩展名) wstrImageDesPath 转换后文件存放全路径(包括括展名) wstrFormatType 转换参数,例如:L"image/png" 、L"image/bmp" 等等。要和wstrImageDesPath路径中的图像格式一样 返回值为true表示成功 */ bool ImageConvert(wstring wstrImageSrcPath,wstring wstrImageDesPath,wstring wstrFormatType);
ImageConverter.cpp
#include "ImageConverter.h" int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; //2.获取GDI+支持的图像格式编码器种类数以及ImageCodecInfo数组的存放大小 GetImageEncodersSize(&num, &size); if(size == 0) return -1; // Failure //3.为ImageCodecInfo数组分配足额空间 pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; // Failure //4.获取所有的图像编码器信息 GetImageEncoders(num, size, pImageCodecInfo); //5.查找符合的图像编码器的Clsid for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } } //6.释放步骤3分配的内存 free(pImageCodecInfo); return -1; // Failure } bool ImageConvert(wstring wstrImageSrcPath,wstring wstrImageDesPath,wstring wstrFormatType) { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; //1.初始化GDI+,以便后续的GDI+函数可以成功调用 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; Status stat; //7.创建Image对象并加载图片 Image* image = new Image(wstrImageSrcPath.c_str()); // Get the CLSID of the wstrFormatType Corresponding picture type encoder. 获取wstrFormatType对应类型的图片解码器的CLSID GetEncoderClsid(wstrFormatType.c_str(), &encoderClsid); //8.调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它 stat = image->Save(wstrImageDesPath.c_str(), &encoderClsid, NULL); bool bRet; if(stat == Ok) bRet=true; else bRet=false; //9.释放Image对象 delete image; //10.清理所有GDI+资源 GdiplusShutdown(gdiplusToken); return bRet; }
相关文章推荐
- windows 使用GDI+来转换图片格式
- 使用GDI+在内存中转换图片类型
- Android中使用python将图片格式转换为webp格式
- 使用WIC组件转换图片格式
- 使用FFmpeg把视频转换成JPG格式的图片
- 使用GDI+在内存中转换图片类型
- mac使用创建服务转换图片格式(所有图片转换为jpg)
- 创建支持更多图片格式的按钮 使用VC6和GDI+
- VC中使用GDI+在内存转换图片类型
- VC中使用GDI+在内存转换图片类型
- 使用cygwin转换图片格式
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- QTP中使用DotNetFactory转换图片格式
- 使用cygwin转换图片格式
- 使用GDI+ 将索引格式的图片导入内存
- 使用IStream和GDI+在内存中实现图像格式转换
- 在VC中使用CImage转换图片格式以及显示
- windows mobile平台中使用C#将byte数组转换为Format24bppRgb格式的图片
- 使用ffmpeg来将mp4视频转换成gif格式图片
- 使用FFmpeg将任意格式图片转换成任意格式图片