C语言实现bmp转gif,图形处理:BMP格式转gif格式

#include  

#include  

#include  

#include  

#include  

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  

{

if(   wcscmp(pImageCodecInfo[j].MimeType,   format)   ==   0   )

{

*pClsid   =   pImageCodecInfo[j].Clsid;

return   j;

}

}

return   -1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值