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

来源:互联网 发布:安庆市民心声网络问政 编辑:程序博客网 时间:2024/05/15 12:29
[cpp] view plain copy
  1. void CmyPaintView::OnBmpSave()     
  2. {    
  3.          CClientDC dc(this);    
  4.          CRect rect;    
  5.          BOOL  showMsgTag;                  //是否要弹出”图像保存成功对话框"     
  6.          GetClientRect(&rect);                  //获取画布大小    
  7.          HBITMAP hbitmap = CreateCompatibleBitmap(dc, rect.right-rect.left, rect. bottom-rect.top);       //创建兼容位图  
  8.   
  9.          HDC hdc = CreateCompatibleDC(dc);      //创建兼容DC,以便将图像保存为不同的格式    
  10.          HBITMAP hOldMap = (HBITMAP)SelectObject(hdc,hbitmap);  //将位图选入DC,并保存返回值   
  11.   
  12.          BitBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,dc,0,0,SRCCOPY);        //将屏幕DC的图像复制到内存DC中    
  13.    
  14.          CImage image;    
  15.          image.Attach(hbitmap);                //将位图转化为一般图像     
  16.   
  17.          if (!saveTag)                          //如果图像是第一次被写入,则打开对话框   
  18.          {  
  19.                    saveTag = TRUE;   
  20.                    showMsgTag = TRUE;   
  21.                    CString  strFilter = _T("位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg|
  22.                                            GIF图像文件|*.gif|PNG图像文件|*.png|其他格式*.*)|*.*||");  
  23.   
  24.                    CFileDialog dlg(FALSE,_T("bmp"),_T("iPaint1.bmp"),NULL,strFilter);  
  25.   
  26.                    if (dlg.DoModal() != IDOK)    
  27.                             return;    
  28.                    CString strFileName;          //如果用户没有指定文件扩展名,则为其添加一个  
  29.   
  30.                    CString strExtension;  
  31.   
  32.                    strFileName = dlg.m_ofn.lpstrFile;  
  33.   
  34.                    if (dlg.m_ofn.nFileExtension = 0)               //扩展名项目为0    
  35.                    {    
  36.                             switch (dlg.m_ofn.nFilterIndex)    
  37.                             {    
  38.                             case 1:    
  39.                                      strExtension = "bmp";break;    
  40.                             case 2:    
  41.                                      strExtension = "jpg";break;    
  42.                             case 3:    
  43.                                      strExtension = "gif";break;    
  44.                             case 4:    
  45.                                      strExtension = "png";break;    
  46.                             default:    
  47.                                      break;    
  48.                             }    
  49.                             strFileName = strFileName + "." + strExtension;    
  50.                    }    
  51.                    saveFilePath = strFileName;     //saveFilePath为视类中的全局变量,类型为CString    
  52.          }     
  53.          else    
  54.          {    
  55.                    showMsgTag = FALSE;    
  56.          }    
  57.          //AfxMessageBox(saveFilePath);               //显示图像保存的全路径(包含文件名)    
  58.          HRESULT hResult = image.Save(saveFilePath);     //保存图像    
  59.          if (FAILED(hResult))    
  60.          {    
  61.                    MessageBox(_T("保存图像文件失败!"));    
  62.          }    
  63.          else    
  64.          {    
  65.                    if(showMsgTag)    
  66.                             MessageBox(_T("文件保存成功!"));    
  67.          }    
  68.          image.Detach();    
  69.          SelectObject(hdc,hOldMap);    
  70. }  
0 0