Posted on 2006-12-04 18:44
原色 閱讀(988)
評論(0) 編輯 收藏 引用
#include?? <Stdio.h>??
#include?? <Objbase.h>??
#include?? <Windows.h>??
#include?? <Gdiplus.h>??
#include?? <GdiPlusEnums.h>??
using?? namespace?? Gdiplus;??
#pragma?? comment(lib,"gdiplus")??
int?? GetCodecClsid(const?? WCHAR*,?? CLSID*);??
HRESULT?? __fastcall?? AnsiToUnicode(LPCSTR?? pszA,?? LPOLESTR*?? ppszW)??
{??
?ULONG?? cCharacters;??
?DWORD?? dwError;??
?if?? (NULL?? ==?? pszA)??
?{??
??*ppszW?? =?? NULL;??
??return?? NOERROR;??
?}??
?cCharacters?? =???? strlen(pszA)+1;??
?*ppszW?? =?? (LPOLESTR)?? CoTaskMemAlloc(cCharacters*2);??
?if?? (NULL?? ==?? *ppszW)??
??return?? E_OUTOFMEMORY;??
?if?? (0?? ==?? MultiByteToWideChar(CP_ACP,?? 0,?? pszA,?? cCharacters,*ppszW,?? cCharacters))??
?{??
??dwError?? =?? GetLastError();??
??CoTaskMemFree(*ppszW);??
??*ppszW?? =?? NULL;??
??return?? HRESULT_FROM_WIN32(dwError);??
?}??
?return?? NOERROR;??
}??
int?? main()
{??
?int?? n_ret=0;??
?
?char *pic[2]={NULL,NULL};
?pic[0]=new char [128];
?pic[1]=new char[128];
?sprintf(pic[0],"ok.gif");
?sprintf(pic[1],"shangcheng_1.bmp");//"default.gif");
?GdiplusStartupInput?? gdiplusStartupInput;????
?ULONG?? gdiplusToken;????
?GdiplusStartup(&gdiplusToken,?? &gdiplusStartupInput,?? NULL);????
?{??
??CLSID???????????????????????????? codecClsid;??
??Status?????????????????????????? stat;??
??EncoderParameters???? encoderParameters;??
??GetCodecClsid(L"image/gif",?? &codecClsid);??
??encoderParameters.Count?? =?? 0;??
??LPOLESTR?? bstr_src_img;??
??LPOLESTR?? bstr_dst_fn;??
??AnsiToUnicode(pic[0],&bstr_dst_fn);??
??AnsiToUnicode(pic[1],&bstr_src_img);??
??Image?? image(bstr_src_img);??
??stat?? =image.Save(bstr_dst_fn,?? &codecClsid,?? &encoderParameters);??
??if(stat?? ==?? Ok)??
??{??
???n_ret=0;??
???wprintf(L"%s?? saved?? successfully.\n",bstr_dst_fn);??
??}??
??else??
??{??
???n_ret=-2;??
???wprintf(L"%d???? Attempt?? to?? save?? %s?? failed.\n",?? stat,?? bstr_dst_fn);??
??}??
??CoTaskMemFree(bstr_dst_fn);??
??CoTaskMemFree(bstr_src_img);??
?}??
?GdiplusShutdown(gdiplusToken);??
?return?? 0;??
}
int?? GetCodecClsid(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;??
???return?? j;?
???}??????????
?}?
?return?? -1;?
}