图形处理:BMP格式转gif格式

#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; 
}

你可能感兴趣的:(图形处理:BMP格式转gif格式)