您的位置:首页 > 其它

GDI+实现图片格式转换(bmp、jpeg、gif、tiff、png)

2013-06-18 13:33 579 查看
通过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+资源。

示例:

[cpp] view
plaincopyprint?

#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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: