// 显示GDI+所支持的图像编码器 void ShowGdiPlusEncoder() { UINT num = 0; UINT size = 0; ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); GetImageEncoders(num, size, pImageCodecInfo); USES_CONVERSION; for ( UINT n = 0; n < num; ++n ) { AfxMessageBox(W2A(pImageCodecInfo[n].MimeType)); } free(pImageCodecInfo); } // 获取指定图像编码器的CLSID /* format: L"image/bmp" L"image/jpeg" L"image/gif" L"image/tiff" L"image/png" */ int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { if ( NULL == format || NULL == pClsid ) { return -1; } int iIndex = -1; UINT num = 0; UINT size = 0; ImageCodecInfo* pImageCodecInfo = NULL; if ( Ok == GetImageEncodersSize(&num, &size) ) { pImageCodecInfo = (ImageCodecInfo*)malloc(size); if ( pImageCodecInfo ) { if ( Ok == GetImageEncoders(num, size, pImageCodecInfo) ) { for (UINT j=0; j<num; ++j) { if ( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; iIndex = j; } } } } } if ( pImageCodecInfo ) { free(pImageCodecInfo); pImageCodecInfo = NULL; } return iIndex; }