#include 
				<windows.h>#include <gdiplus.h>#include <stdio.h>#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid);
INT main()  
  {    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    CLSID   encoderClsid;
    Status   stat;
    Image*   image = new Image(L"test.png");    GetEncoderClsid(L"image/bmp", &encoderClsid);
    stat = image->Save(L"test2.bmp", &encoderClsid, NULL);
    if(stat == Ok)
      printf("test2.png was saved successfully\n");
    else
      printf("Failure: stat = %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;}