GDI+实现图片格式转换(bmp、jpeg、gif、tiff、png) .
2011-08-12 21:03
393 查看
引言:通过GDI+我们可以很方便的对bmp、jpeg、gif、tiff、png格式的图片进行转换。
步骤:
1) 通过GdiplusStartup初始化GDI+,以便后续的GDI+函数可以成功调用。
2) 通过GetImageEncodersSize获取GDI+支持的图像格式编码器种类数numEncoders以及ImageCodecInfo数组的存放大小size。
3) 通过malloc为ImageCodecInfo数组分配足额空间。
4) 通过GetImageDecoders获取所有的图像编码器信息。
5) 查看ImageCodecInfo.MimeType,查找符合的图像编码器的Clsid。
6) 释放步骤3)分配的内存。
7) 创建Image对象并加载图片。
8) 调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它。
9) 释放Image对象。
10) 通过GdiplusShutdown清理所有GDI+资源。
示例:
#include <windows.h>#include <gdiplus.h>#include <stdio.h>using namespace Gdiplus;#pragma comment(lib,"gdiplus")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}INT main(){ GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; //1.初始化GDI+,以便后续的GDI+函数可以成功调用 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; Status stat; //7.创建Image对象并加载图片 Image* image = new Image(L"f://11.bmp"); // Get the CLSID of the PNG encoder. GetEncoderClsid(L"image/png", &encoderClsid); //8.调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它 stat = image->Save(L"11.png", &encoderClsid, NULL); if(stat == Ok) printf("Bird.png was saved successfully/n"); else printf("Failure: stat = %d/n", stat); //9.释放Image对象 delete image; //10.清理所有GDI+资源 GdiplusShutdown(gdiplusToken); return 0;}
学习资源:
MSDN -> Win32 和 COM开发 -> Graghics and Multimedia -> GDI+ -> Using GDI+ -> Using Image Encoders and Decoders。
来自/article/7982575.html
步骤:
1) 通过GdiplusStartup初始化GDI+,以便后续的GDI+函数可以成功调用。
2) 通过GetImageEncodersSize获取GDI+支持的图像格式编码器种类数numEncoders以及ImageCodecInfo数组的存放大小size。
3) 通过malloc为ImageCodecInfo数组分配足额空间。
4) 通过GetImageDecoders获取所有的图像编码器信息。
5) 查看ImageCodecInfo.MimeType,查找符合的图像编码器的Clsid。
6) 释放步骤3)分配的内存。
7) 创建Image对象并加载图片。
8) 调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它。
9) 释放Image对象。
10) 通过GdiplusShutdown清理所有GDI+资源。
示例:
#include <windows.h>#include <gdiplus.h>#include <stdio.h>using namespace Gdiplus;#pragma comment(lib,"gdiplus")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}INT main(){ GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; //1.初始化GDI+,以便后续的GDI+函数可以成功调用 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; Status stat; //7.创建Image对象并加载图片 Image* image = new Image(L"f://11.bmp"); // Get the CLSID of the PNG encoder. GetEncoderClsid(L"image/png", &encoderClsid); //8.调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它 stat = image->Save(L"11.png", &encoderClsid, NULL); if(stat == Ok) printf("Bird.png was saved successfully/n"); else printf("Failure: stat = %d/n", stat); //9.释放Image对象 delete image; //10.清理所有GDI+资源 GdiplusShutdown(gdiplusToken); return 0;}
学习资源:
MSDN -> Win32 和 COM开发 -> Graghics and Multimedia -> GDI+ -> Using GDI+ -> Using Image Encoders and Decoders。
来自/article/7982575.html
相关文章推荐
- GDI+实现图片格式转换(bmp、jpeg、gif、tiff、png)
- GDI+实现图片格式转换(bmp、jpeg、gif、tiff、png)
- GDI+ 句柄存图,bmp | jpeg | gif | tiff | png
- 通过GDI+我们可以很方便的对bmp、jpeg、gif、tiff、png格式的图片进行转换。
- VB60用 GDI+保存为JPG/TIFF/PNG/GIF/BMP等格式
- VB6.0用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
- AE+C# 导出图片(BMP、JPEG、GIF、PNG、TIFF)
- GDI+我们可以很方便的对bmp、jpeg、gif、tiff、png格式的图片进行转换
- Windows下轻松加载BMP, GIF, JPEG, PNG, and TIFF图片
- HBITMAP另存为JPEG/PNG/TIFF/GIF/BMP
- Windows下OpenGL轻松加载BMP, GIF, JPEG, PNG, and TIFF图片
- SWT图片显示,支持JPEG,GIF(动画),BMP,ICO,PNG和TIFF
- jpg、jpeg、png、gif、bmp、tiff、ai、cdr、eps 图片格式的区别
- VB6.0用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
- easyWeb2Pic -- 在IE浏览器中,将整个网页保存为BMP, JPEG/JPG, GIF, PNG或者TIFF图片
- SWT图片显示,支持JPEG,GIF(动画),BMP,ICO,PNG和TIFF
- Windows下OpenGL轻松加载BMP, GIF, JPEG, PNG, and TIFF图片
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,PDF]
- 图片原理解说(综合版:JPEG,PNG,BMP,GIF)