BOOL SaveimageToFile(HBITMAP hBitmap,const TCHAR *szFile,const TCHAR* imgtype)
{
if(hBitmap == NULL || szFile == NULL) return FALSE;
C22 tszfile(szFile);
CLSID pngClsid;
CStringW fmt(L"image/");
fmt += imgtype;
int nRet = GetEncoderClsid(fmt, &pngClsid);
if(nRet == -1) return FALSE;
Gdiplus::Bitmap bitmap(hBitmap,NULL);
if (bitmap.GetLastStatus() != Gdiplus::Ok) return FALSE;
return bitmap.Save(tszfile,&pngClsid) == Gdiplus::Ok;
}
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
Gdiplus::GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (Gdiplus::ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
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; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
{
if(hBitmap == NULL || szFile == NULL) return FALSE;
C22 tszfile(szFile);
CLSID pngClsid;
CStringW fmt(L"image/");
fmt += imgtype;
int nRet = GetEncoderClsid(fmt, &pngClsid);
if(nRet == -1) return FALSE;
Gdiplus::Bitmap bitmap(hBitmap,NULL);
if (bitmap.GetLastStatus() != Gdiplus::Ok) return FALSE;
return bitmap.Save(tszfile,&pngClsid) == Gdiplus::Ok;
}
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
Gdiplus::GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (Gdiplus::ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
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; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}