1. 程式人生 > >GDI+實現的圖片相互轉換程式,可以通過命令列引數來呼叫

GDI+實現的圖片相互轉換程式,可以通過命令列引數來呼叫

#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; //失敗 }
可以通過命令列引數來呼叫這個EXE,實現圖片格式的轉換,如argv[1]=image\png 時,則可以將圖片轉換成PNG格式,
encoderClsid