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
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (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
}
使用示例:
Bitmap* m_pBackBmp = ::new Bitmap((HBITMAP)::GetCurrentObject(GetDC()->m_hDC, OBJ_BITMAP),NULL);
CLSID pngClsid;
GetEncoderClsid(_T("image/png"), &pngClsid);
m_pBackBmp->Save(_T("bk.png"),&pngClsid,NULL);
可支持的图片格式:
CLSID encoderClsid
GetEncoderClsid(L"image/png", &encoderClsid); //png
GetEncoderClsid(L"image/bmp", &encoderClsid);
GetEncoderClsid(L"image/gif", &encoderClsid);
GetEncoderClsid(L"image/jpeg", &encoderClsid);
GetEncoderClsid(L"image/tiff", &encoderClsid);
主要是最近在学习GDI+编程过程中遇到了关于GetEncoderClsid函数的问题,这个函数原来是要自己去实现的。现在在这里把这个函数的一个实现示例记录下来,方便以后查找和参考。