天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 9|回复: 0

MFC在Picture控件上显示图像、保存图像

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    //选择图片
        CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("image Files(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*||"), this);
        //打开文件选择窗体
        if (fileDlg.DoModal() == IDCANCEL) return; //如果点击“取消”按钮,直接退出
        //获取图片路径(包含名称)
        CString strFilePath = fileDlg.GetPathName();//既有路径又有文件名,如D:/lena.jpg
        //CString strFileName = fileDlg.GetFileName();//只获取文件名,如lena.jpg
        //判断路径不为空
        if (strFilePath == _T(""))
        {
            return;
        }
        //使用CImage的Load、Draw函数显示图像
        CImage image;
        image.Load(strFilePath);

        //int x = image.GetWidth(); //学习下CImage的属性,无其他意义
        //int y = image.GetHeight();

        //获取控件的矩形
        CRect rectControl;  //控件矩形对象
        CWnd  *pWnd = GetDlgItem(IDC_IMAGE); //Picture Control的ID为IDC_IMAGE
        pWnd->GetClientRect(&rectControl);

        //以控件为画布,在其上画图
        CDC *pDc = GetDlgItem(IDC_IMAGE)->GetDC();
        SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);//绘图前必须调用此函数(设置缩放模式),否则失真严重

        //画图(以下两种方法都可)
        //image.StretchBlt(pDc->m_hDC, rectPicture, SRCCOPY); //将图片绘制到Picture控件表示的矩形区域
        image.Draw(pDc->m_hDC, rectControl);                //将图片绘制到Picture控件表示的矩形区域

        image.Destroy();
        pWnd->ReleaseDC(pDc);
    复制代码
    显示与保存(显示与上述一样),m_PictureControl是PictureControl控件对应的变量。

    显示

    复制代码
        // **************** 获取图片
        CFileDialog fileDlg(TRUE, _T("bmp"), NULL, 0, _T("image Files(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*||"), this);
        fileDlg.DoModal();
        //获取图片路径和图片名称
        CString strFilePath = fileDlg.GetPathName(); //"D:\1.jpg"
        //CString strFileName = fileDlg.GetFileName(); //"1.jpg"
        //判断路径是否为空
        if (strFilePath == _T(""))
        {
            return;
        }
        //CImage image; //使用图片类,已放到头文件中(全局变量)
        if(!image.IsNull())
            image.Destroy(); //如果已有,先清空。否则重新加载会报错。
        image.Load(strFilePath); //装载路径下图片信息到图片类
        //******************* 图片缩放适应控件大小
        CRect rectControl;                        //控件矩形对象   
        m_PictureControl.GetClientRect(&rectControl);//控件区域
        //图片不缩放
        //int imageWidth = image.GetWidth();
        //int imageHeight = image.GetHeight();
        //rectControl = CRect(rectControl.TopLeft(), CSize(imageWidth, imageHeight)); //显示未缩放原图,超出控件区域不显示
       
        //显示
        CDC *pDc = m_PictureControl.GetWindowDC();//获得显示控件的DC
        SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE); //设置缩放,否则图片显示会失真
        image.Draw(pDc->m_hDC, rectControl);   //将图片绘制到Picture控件表示的矩形区域

        //释放资源
        ReleaseDC(pDc);
    复制代码
    保存

    复制代码
        if (image.IsNull())
        {
            MessageBox(_T("你还没有打开一个要保存的图像文件!"));
            return;
        }
        CString strFilter;
        strFilter = _T("位图文件|*.bmp|JPEG 图像文件|*.jpg|PNG 图像文件|*.png||");
        CFileDialog dlg(FALSE,_T("bmp"),_T("untitled.bmp"),NULL,strFilter);
        if ( IDOK != dlg.DoModal())
            return;
       
        // 文件名
        CString strFileName;
        strFileName = dlg.m_ofn.lpstrFile;// 如"D:\1.jpg"

        // 图像保存
        HRESULT hResult = image.Save(strFileName);
        if (FAILED(hResult))
            MessageBox(_T("保存图像文件失败!"));

     

     

     

     

    MFC在Picture控件上显示图像、保存图像
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:47 , Processed in 0.056542 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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