GDI+實現的圖片相互轉換程式,可以通過命令列引數來呼叫
阿新 • • 發佈:2018-11-11
可以通過命令列引數來呼叫這個EXE,實現圖片格式的轉換,如argv[1]=image\png 時,則可以將圖片轉換成PNG格式,#include <gdiplus.h> #include <stdio.h> using namespace Gdiplus; #include "stdafx.h" #pragma comment(lib, "gdiplus.lib") //探測PNG編碼器的CLSID 函式 int GetEncoderClsid(const WCHAR* format, CLSID* pClsid); int _tmain(int argc, WCHAR* argv[]) { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; Status stat; Image* image = new Image(argv[2]
); // 探測PNG編碼器的CLSID GetEncoderClsid(argv[1], &encoderClsid); // stat = image->Save(L"1.png", &encoderClsid, NULL); stat = image->Save(_T("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; //失敗 }
encoderClsid