C++,CImage类的建立方法(可以打开图像和保存)

article/2025/10/16 8:05:33

建立CImage类(以vs2015为例)
一, 新建一个MFC项目:名字为 image3
在这里插入图片描述
二, 单个文档,MFC标准,然后完成。
在这里插入图片描述
三,打开应用程序的 stdafx.h 文件添加 CImage 类的包含文件:
#include <atlimage.h>
在这里插入图片描述
四,在 view 类中添加成员变量 CImage m_Image;即在类视图—Cimage3View—右键—添加—变量。
变量类型 填CImage,变量名 填m_Image。
在这里插入图片描述

五,还是上一步中的,类视图—Cimage3View—右键—类向导—搜索命令ID_FILE_OPEN—双击COMMAND—点击确定—会自动跳到让你输入程序
在这里插入图片描述

六,输入代码:
程序代码:

// TODO: 在此添加命令处理程序代码CString strFilter;CSimpleArray<GUID> aguidFileTypes;HRESULT hResult;// 获取 CImage 支持的图像文件的过滤字符串hResult = m_Image.GetExporterFilterString(strFilter, aguidFileTypes, _T("All Image Files"));if (FAILED(hResult)) {MessageBox(_T("GetExporterFilter 调用失败!"));return;} CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);if (IDOK != dlg.DoModal())return;m_Image.Destroy();// 将外部图像文件装载到 CImage 对象中 hResult = m_Image.Load(dlg.GetPathName());if (FAILED(hResult)) {MessageBox(_T("调用图像文件失败!"));return;} // 设置主窗口标题栏内容 CString str;str.LoadString(AFX_IDS_APP_TITLE);AfxGetMainWnd()->SetWindowText(str + _T(" - ") + dlg.GetFileName());Invalidate(); // 强制调用 OnDraw

七,把上一段代码输入后,往上拉,定位到 Cimage3View::OnDraw(CDC* /pDC/) 函数处,修改成下列代码:

    Cimage3Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!m_Image.IsNull()){m_Image.Draw(pDC->m_hDC, 0, 0);}

八,将图片用其它格式保存
类视图—Cimage3View—右键—类向导—搜索命令 ID_FILE_SAVE_AS–双击COMMAND—点击确定—会自动跳到让你输入程序
程序代码:

// TODO: 在此添加命令处理程序代码 
if (m_Image.IsNull()) { 
MessageBox(_T("你还没有打开一个要保存的图像文件!")); 
return; 
} 
CString strFilter; 
strFilter ="位图文件|*.bmp|JPEG 图像文件|*.jpg| \ 
GIF 图像文件|*.gif|PNG 图像文件|*.png||"; 
CFileDialog dlg(FALSE,NULL,NULL,NULL,strFilter); 
if ( IDOK != dlg.DoModal()) 
return; 
// 如果用户没有指定文件扩展名,则为其添加一个 
CString strFileName; 
CString strExtension; 
strFileName = dlg.m_ofn.lpstrFile; 
if(dlg.m_ofn.nFileExtension == 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 + _T(".") + strExtension; 
} 
// 图像保存 
HRESULT hResult = m_Image.Save(strFileName); 
if (FAILED(hResult)) 
{ 
MessageBox(_T("保存图像文件失败!")); 
}

完成了


http://chatgpt.dhexx.cn/article/3c6pmVY6.shtml

相关文章

VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解

目录 一、代码背景 二、主要工具 三、函数解析 1、FindWindow&#xff1a; 2、 FindWindowEx&#xff1a; 3、SendMessage&#xff1a; 四、具体代码示例&#xff1a; 1、第一部分功能&#xff1a; A、接收端&#xff1a; B、发送端 C、运行测试 2.第二部分功能&…

C#-FindWindow的用法

C# FindWindow用法 函数功能&#xff1a;该函数获得一个顶层窗口的句柄&#xff0c;该窗口的类名和窗口名与给定的字符串相匹配。 这个函数不查找子窗口。在查找时不区分大小写。 函数型&#xff1a;HWND FindWindow&#xff08;LPCTSTR IpClassName&#xff0c;LPCTSTR IpWi…

vb.net中FindWindow方法的使用

问题描述 遇到的问题是&#xff0c;需要判断MsgBox是否已经弹出&#xff0c;如果已经弹出就不要重复弹出了。 解决方案&#xff1a; 利用FindWindow方法判断MsgBox是否已经出现 MsgBox的本质就是一个窗体&#xff0c;有标题和内容&#xff0c;可以使用FindWindow这个API函数去…

C# FindWindow的用法

找了一大堆C#怎么用FindWindowAPI函数不多说,请看步骤. 创建好WinForm窗口,如果不会创建的话,在图下面有. 项目名字和位置这个自己设置,下面那个框架,目前现在出5.0了,为了演示实例,就4.6吧. 创建完成后,把自己窗口设置一下

FindWindow ,GetWindowThreadProcessId , OpenProcess 和ReadProcessMemory

文章目录 FindWindow函数功能&#xff1a;函数声明&#xff1a;第一个参数第二个参数返回值注意&#xff1a;GetWindowThreadProcessId函数功能函数声明第一个参数&#xff1a;第二个参数&#xff1a;返回值代码实现OpenProcess函数功能&#xff1a;函数声明&#xff1a;第一个…

【CV系列】主动轮廓模型snake及其应用

DATE: 2019.5.30 前言 主动轮廓模型(Active Contour Model)&#xff0c;又被称为Snake&#xff0c;是由Andrew Blake教授提出的一种目标轮廓描述方法&#xff0c;主要应用于基于形状的目标分割。该模型的优越之处在于它对于范围广泛的一系列视觉问题给出了统一的解决方法,在最…

图像分割之Snake主动轮廓模型(Matlab代码)

示例演示 如果在中文搜索的话&#xff0c;一般会找到《数字图像处理-图像分割&#xff1a;Snake主动轮廓模型 Matlab代码及运行结果》。里面有句代码&#xff0c;千万别用&#xff0c;否则出不来效果。&#xff08;别问我怎么知道的&#xff09; % 转化为双精度型 %I im2doub…

Snake活动轮廓模型Matlab实现

1. Snake模型 人为地在图像感兴趣的区域&#xff08;ROI&#xff09;上给出初始轮廓曲线&#xff0c;最小化一个能量函数&#xff0c;使轮廓曲线在图像中运动&#xff08;变形&#xff09;&#xff0c;最终逼近该区域的边界。 设v(s)[x(s),y(s)]为活动轮廓线&#xff0c;s∈[0,…

snake主动轮廓模型

模型&#xff1a;一条可变形的参数曲线及相应的能量函数&#xff0c;以最小化能量函数为目标&#xff0c;控制参数曲线变形&#xff0c;具有最小能量的闭合曲线即是目标轮廓。 snake模型调和了上层知识和底层图像特征矛盾。 上层知识指物体形状。表示内部力。 底层图像特征是局…

Snake活动轮廓模型

1. Snake模型 人为地在图像感兴趣的区域&#xff08;ROI&#xff09;上给出初始轮廓曲线&#xff0c;最小化一个能量函数&#xff0c;使轮廓曲线在图像中运动&#xff08;变形&#xff09;&#xff0c;最终逼近该区域的边界。 设v(s)[x(s),y(s)]为活动轮廓线&#xff0c;s∈[0,…

基于边缘的主动轮廓模型——从零到一用python实现snake

从零到一实现snake算法 1、Snake算法原理2、基于曲线演化的实现方法2.1演化方程推导2.2离散化过程2.3 代码实现 3、基于水平集的实现方法4、讨论与分析源码地址[snake](https://github.com/woshimami/snake) 1、Snake算法原理 Kass等人1最早于1988年提出了主动轮廓模型&#x…

主动轮廓模型snake

原理概述 snake模型将图像分割问题转换为求解能量泛函最小值的问题。主要思路是构造能量函数进行迭代后&#xff0c;轮廓曲线由初始位置逐渐向使能量函数最小&#xff08;局部极小&#xff09;的图像边缘逼近&#xff0c;最终分割出目标。 曲线理论 假设一条光滑封闭曲线 C …

腾讯电脑管家,vs安装文件报成木马,还能信吗?

今天在公司安装vs2013&#xff0c;安装过程中腾讯公司的产品“电脑管家”提示有新版本&#xff0c;没有犹豫的点了升级&#xff0c;完成后直接在管家主界面上点了“全面体检”按钮&#xff0c;这一点不要紧&#xff0c;报告有一个木马&#xff0c;看紧看一下“详情”&#xff0…

计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决

有些win8系统用户在开机的时候&#xff0c;遇到了黑屏的情况&#xff0c; 整个屏幕上面只有一个闪烁的鼠标光标&#xff0c;导致无法进入到系统桌面&#xff0c;遇到这样的情况该怎么解决呢&#xff1f;现在给大家分享一下Win8电脑开机黑屏只有鼠标光标的具体解决方法吧。 Win8…

解决ValueError: Cannot run multiple SparkContexts at once; existing SparkContext

一、问题描述 创建sparkcontext和SparkSession&#xff0c;连接spark集群时报错&#xff0c;如题ValueError: Cannot run multiple SparkContexts at once; existing SparkContext。 from pyspark.sql import SparkSession from pyspark.sql import functions as F from pysp…

1、Qt线程(二):继承QThread,重写run

一、功能说明 1、通过继承QThread&#xff0c;重写run的方式实现多线程 2、点击“开始”按钮启动子线程&#xff0c;同时通过信号槽的方式给子线程发送“开始”字符串&#xff1b; 3、子线程每隔1秒向主线程发送累加数&#xff1b; 4、点击"停止"按钮&#xff0c…

诡异的RunOnce病毒启动项和神奇的URL Protocol

整理磁盘发现之前有个有趣的流氓招数忘记分享了,每次看到新鲜的东东都感慨黑暗势力的层出不穷的招数,比某些安全厂商是不是自相残杀好多了.电脑日常使用过程中我们经常输入开头为http ftp,点击诸如ed2k的链接,每个链接的背后都会执行相应的功能.如http 通过iexplore.exe,ed2k通…

如何创建水晶报表

开发工具与关键技术&#xff1a;VS与MVC 作者&#xff1a;刘华叶 撰写时间&#xff1a;2019年4月29日 MVC是软件工程中的一种软件架构模式&#xff0c;涉及到的知识点也是相当广泛&#xff0c;而我们在做项目的过程中&#xff0c;总会遇到要制作一些报表&#xff0c;水晶报表就…

java 水晶报表教程_水晶报表 (Crystal Reports 2008)的配置

概要&#xff1a; Crystal Reports(水晶报表)是一款商务智能(BI)软件&#xff0c;主要用于设计及产生报表。水晶报表是业内最专业、功能最强的报表系统&#xff0c;它除了强大的报表功能外。最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台做过报表开发的…

水晶报表教程:手把手教你制作基本报表

ASP.NET水晶报表的学习 这篇文章教你如何在.Net Web应用中使用水晶报表&#xff0c;也可以让你在学习过程中少走一些弯路。为了得到最好的效果&#xff0c;读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。 简介 水晶报表可以由很多的方法得到&a…