SOUI官方论坛

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

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

[复制链接]

该用户从未签到

15

主题

29

帖子

371

积分

02:00元婴期

Rank: 3Rank: 3

积分
371
发表于 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的每日心情
    奋斗
    2022-7-4 09:45
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    59

    主题

    588

    帖子

    5491

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5491

    突出贡献优秀版主

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

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 942 天

    [LV.10]以坛为家III

    580

    主题

    1340

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

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

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛

    GMT+8, 2024-5-5 02:47

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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