本文主要是介绍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);
- }
这篇关于MFC中将所画图像保存到图像文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!