|
本帖最后由 9527 于 2020-5-9 11:05 编辑
static int GetEncoderClsid(const WCHAR* format, GUID* 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].FormatID;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}
static bool SaveIBitmapToFile(IBitmap* bitmap)
{
SStringT sstrFileName;
SStringT strFilter;
CFileDialog saveDlg(FALSE, _T("PNG"), CreateNewFileName(sstrFileName), 6, L"png\0.png\0\0");
if (saveDlg.DoModal() == IDOK)
{
sstrFileName = saveDlg.m_szFileName;
GUID encoderClsid;
if (GetEncoderClsid(L"image/png", &encoderClsid)!=-1) {
HRESULT ret= bitmap->Save(sstrFileName, (LPVOID)&encoderClsid);
return ret==S_OK;
}
}
return false;
}
//关键代码如上,注意不同的编码器第二个参数是不同的。而且不一定支持保存图片。比如libpng则只能保存为png。所以第二个参数是没有用的。
|
|