inline BOOL _GetImageCLSID(const WCHAR* format, CLSID* pCLSID)
{
//得到格式为format的图像文件的编码值,访问该格式图像的COM组件的GUID值保存在pCLSID中
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return FALSE; // 编码信息不可用
//分配内存
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return FALSE; // 分配失败
//获得系统中可用的编码方式的所有信息
GetImageEncoders(num, size, pImageCodecInfo);
//在可用编码信息中查找format格式是否被支持
for(UINT i = 0; i < num; ++i)
{
//MimeType:编码方式的具体描述
if( wcscmp(pImageCodecInfo[i].MimeType, format) == 0 )
{
*pCLSID = pImageCodecInfo[i].Clsid;
free(pImageCodecInfo);
return TRUE;
}
}
free(pImageCodecInfo);
return FALSE;
}
bool SaveToPNG(Bitmap* pbmp, CString strFilename)
{
CLSID pngClsid;
if(_GetImageCLSID(L"image/png",&pngClsid) == FALSE)
return false;
Status sr = pbmp->Save(sfilename.AllocSysString(),&pngClsid,NULL);
return sr == OK ? ture : false;
}
Bitmap保存成png文件 保留透明
最新推荐文章于 2024-05-23 14:34:11 发布