MFC中将所画图像保存到图像文件

void CmyPaintView::OnBmpSave() 

{

         CClientDC dc(this);    

         CRect rect; 

         BOOL  showMsgTag;                  //是否要弹出”图像保存成功对话框" 

         GetClientRect(&rect);                  //获取画布大小

         HBITMAP hbitmap = CreateCompatibleBitmap(dc, rect.right-rect.left, rect. bottom-rect.top);     

                                        //创建兼容位图

         HDC hdc = CreateCompatibleDC(dc);      //创建兼容DC,以便将图像保存为不同的格式

         HBITMAP hOldMap = (HBITMAP)SelectObject(hdc,hbitmap); 

                                        //将位图选入DC,并保存返回值 

         BitBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,dc,0,0,SRCCOPY); 

                                        //将屏幕DC的图像复制到内存DC中

 

         CImage image;

         image.Attach(hbitmap);                //将位图转化为一般图像

 

         if (!saveTag)                          //如果图像是第一次被写入,则打开对话框

         {

                   saveTag = TRUE;

                   showMsgTag = TRUE;

                   CString  strFilter = _T("位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg|

                           GIF图像文件|*.gif|PNG图像文件|*.png|

                           其他格式(*.*)|*.*||");

                   CFileDialog dlg(FALSE,_T("bmp"),_T("iPaint1.bmp"),NULL,strFilter);

                   if (dlg.DoModal() != IDOK)

                            return;

 

                   CString strFileName;          //如果用户没有指定文件扩展名,则为其添加一个

                   CString strExtension;

                   strFileName = dlg.m_ofn.lpstrFile;

                   if (dlg.m_ofn.nFileExtension = 0)               //扩展名项目为0

                   {

                            switch (dlg.m_ofn.nFilterIndex)

                            {

                            case 1:

                                     strExtension = "bmp";break;

                            case 2:

                                     strExtension = "jpg";break;

                            case 3:

                                     strExtension = "gif";break;

                            case 4:

                                     strExtension = "png";break;

                            default:

                                     break;

                            }

                            strFileName = strFileName + "." + strExtension;  

                   }

                   saveFilePath = strFileName;     //saveFilePath为视类中的全局变量,类型为CString

         } 

         else

         {

                   showMsgTag = FALSE;

         }

 

         //AfxMessageBox(saveFilePath);               //显示图像保存的全路径(包含文件名)

         HRESULT hResult = image.Save(saveFilePath);     //保存图像

         if (FAILED(hResult))

         {

                   MessageBox(_T("保存图像文件失败!"));

         }

         else

         {

                   if(showMsgTag)

                            MessageBox(_T("文件保存成功!"));

         }

         image.Detach();

         SelectObject(hdc,hOldMap);

}

 


 

  • 13
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值