SOUI官方论坛

 找回密码
 立即注册
查看: 116|回复: 2

使用GDIP解码时,保存IBitmap为图片

[复制链接]

该用户从未签到

14

主题

24

帖子

291

积分

版主

Rank: 7Rank: 7Rank: 7

积分
291
发表于 2020-5-8 17:15:41 | 显示全部楼层 |阅读模式
本帖最后由 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。所以第二个参数是没有用的。

  • TA的每日心情
    开心
    2020-4-15 08:35
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    38

    主题

    397

    帖子

    2428

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2428

    突出贡献优秀版主

    发表于 2020-5-8 21:25:35 | 显示全部楼层
    666
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 22:44
  • 签到天数: 101 天

    [LV.6]常住居民II

    400

    主题

    967

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10655
    发表于 2020-5-8 21:48:59 | 显示全部楼层
    谢谢楼主分享
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛 ( 粤ICP备18103663号-2 )

    GMT+8, 2020-6-4 01:17

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表