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

2023-12-15 13:08

本文主要是介绍MFC中将所画图像保存到图像文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[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. }  

这篇关于MFC中将所画图像保存到图像文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496556

相关文章

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

控制台和MFC中内存泄露工具vld的使用

最近想检测下项目中内存泄露的情况,选中了vld这款。在查找使用方法的时候,大都是控制台下的示例,添加到main函数所在的源文件上。换成MFC就纠结了,不知道添加到哪里去。本文记录控制台和MFC中的使用vld过程。    vld资源:    1)、大家可以移步下边的网址下载:     http://vld.codeplex.com/releases/view/82311    2

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD