利用GDI+图片格式转换(例如BMP转PNG)

主要是先探测目标图片的编码器 然后在把数据以相应的编码存储起来。

如下为 BMP转PNG的 做法.

#include <windows.h> #include <gdiplus.h> #include <stdio.h> using namespace Gdiplus; //探测PNG编码器的CLSID 函数 int GetEncoderClsid(const WCHAR* format, CLSID* pClsid); int main() { // 初使化 GDI+. GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; Status stat; Image* image = new Image(L"图片1.bmp"); // 探测PNG编码器的CLSID GetEncoderClsid(L"image/png", &encoderClsid); stat = image->Save(L"图片1.png", &encoderClsid, NULL); if(stat == Ok) printf("成功!/n"); else printf("失败: 错误码: %d/n", stat); delete image; GdiplusShutdown(gdiplusToken); return 0; } int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // 设备拥有的图片编码器数量 UINT size = 0; // 获取所有编码器描述的缓冲区大小 ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if(size == 0) return -1; //失败 pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; // 失败 GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // 成功 } } free(pImageCodecInfo); return -1; //失败 }

你可能感兴趣的:(image,null,delete,存储,GDI+)