MFC流的形式读取图片
1.基于对话框布置控件

2.给控件绑定变量

3.给按钮控件添加响应函数
void CMFC流的形式读取图片Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画图//CRect Rect;//m_picture.GetClientRect(Rect);//mECGRect = *(LPCRECT)Rect; // 在该矩形区域内画图//mECGDC = ::GetDC(m_picture.m_hWnd); // 获取心电波形句柄//读取图像文件FILE* fp = fopen("test.bmp", "rb");//读入的文件if (!fp){//cout << "文件未打开!\n";exit(0);}long width, height;BITMAPFILEHEADER fileHead;//位图文件头fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);//从fp中读取BITMAPFILEHEADER信息到fileHead中,同时fp的指针移动BITMAPINFOHEADER infoHead;//位图信息头fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fp);//从fp中读取BITMAPINFOHEADER信息到infoHead中,同时fp的指针移动width = infoHead.biWidth;//图像的宽height = infoHead.biHeight;//图像的高//cout << "width = " << width << endl << "height = " << height << endl;char* bmpBuf = new char[width * height * 3];//下边此语句不需要也可以//fseek(fp, long(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)), 0);//定位到起始位置fread(bmpBuf, sizeof(char), width * height * 3, fp);fclose(fp);//显示图像//HWND hwnd = GetForegroundWindow();//窗口句柄//HDC hdc = GetDC(hwnd);//绘图句柄HDC mECGDC; // 设备描述表句柄// RECT mECGRect; // 在该矩形区域内画图//CRect Rect;//m_picture.GetClientRect(Rect);//mECGRect = *(LPCRECT)Rect; // 在该矩形区域内画图mECGDC = ::GetDC(m_picture.m_hWnd);//mECGDC = GetDC(m_picture.m_hWnd);BYTE b, g, r, rgb;char*tmp = bmpBuf;for (int j = 0; j < height; j++){for (int i = 0; i < width; i++){b = *tmp++;g = *tmp++;r = *tmp++;SetPixel(mECGDC, i, height - j, RGB(r, g, b));}}}
4.运行结果

主要代码
// MFC流的形式读取图片Dlg.h : 头文件
//#pragma once
#include "afxwin.h"// CMFC流的形式读取图片Dlg 对话框
class CMFC流的形式读取图片Dlg : public CDialogEx
{
// 构造
public:CMFC流的形式读取图片Dlg(CWnd* pParent = NULL); // 标准构造函数// 对话框数据enum { IDD = IDD_MFC_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:afx_msg void OnBnClickedButton1();CStatic m_picture;
};
// MFC流的形式读取图片Dlg.cpp : 实现文件
//#include "stdafx.h"
#include "MFC流的形式读取图片.h"
#include "MFC流的形式读取图片Dlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CMFC流的形式读取图片Dlg 对话框CMFC流的形式读取图片Dlg::CMFC流的形式读取图片Dlg(CWnd* pParent /*=NULL*/): CDialogEx(CMFC流的形式读取图片Dlg::IDD, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CMFC流的形式读取图片Dlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_STATIC_PICTURE, m_picture);
}BEGIN_MESSAGE_MAP(CMFC流的形式读取图片Dlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CMFC流的形式读取图片Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()// CMFC流的形式读取图片Dlg 消息处理程序BOOL CMFC流的形式读取图片Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}void CMFC流的形式读取图片Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CMFC流的形式读取图片Dlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFC流的形式读取图片Dlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CMFC流的形式读取图片Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画图//CRect Rect;//m_picture.GetClientRect(Rect);//mECGRect = *(LPCRECT)Rect; // 在该矩形区域内画图//mECGDC = ::GetDC(m_picture.m_hWnd); // 获取心电波形句柄//读取图像文件FILE* fp = fopen("test.bmp", "rb");//读入的文件if (!fp){//cout << "文件未打开!\n";exit(0);}long width, height;BITMAPFILEHEADER fileHead;//位图文件头fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);//从fp中读取BITMAPFILEHEADER信息到fileHead中,同时fp的指针移动BITMAPINFOHEADER infoHead;//位图信息头fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fp);//从fp中读取BITMAPINFOHEADER信息到infoHead中,同时fp的指针移动width = infoHead.biWidth;//图像的宽height = infoHead.biHeight;//图像的高//cout << "width = " << width << endl << "height = " << height << endl;char* bmpBuf = new char[width * height * 3];//下边此语句不需要也可以//fseek(fp, long(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)), 0);//定位到起始位置fread(bmpBuf, sizeof(char), width * height * 3, fp);fclose(fp);//显示图像//HWND hwnd = GetForegroundWindow();//窗口句柄//HDC hdc = GetDC(hwnd);//绘图句柄HDC mECGDC; // 设备描述表句柄// RECT mECGRect; // 在该矩形区域内画图//CRect Rect;//m_picture.GetClientRect(Rect);//mECGRect = *(LPCRECT)Rect; // 在该矩形区域内画图mECGDC = ::GetDC(m_picture.m_hWnd);//mECGDC = GetDC(m_picture.m_hWnd);BYTE b, g, r, rgb;char*tmp = bmpBuf;for (int j = 0; j < height; j++){for (int i = 0; i < width; i++){b = *tmp++;g = *tmp++;r = *tmp++;SetPixel(mECGDC, i, height - j, RGB(r, g, b));}}}
相关文章:
MFC流的形式读取图片
1.基于对话框布置控件 2.给控件绑定变量 3.给按钮控件添加响应函数 void CMFC流的形式读取图片Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画…...
查找PPT中某种字体的全部对应文字
本文章的目的是找到某种字体的文字,而不是替换某种字体的文字,也不是将某种字体全部替换为另外一种文字。 第一步:在PPT中按下ALTF11 出现以下窗口 第二步:点击插入->模块 第三步:将以下代码输入到窗体中 Sub F…...
相机光学(三十一)——暗房设置的要求
ISO标准通常在测试相机时指定对周围条件的要求。由于摄影ISO组试图保持这些要求与所有标准一致,所以我们总结了这个“技术说明”中的重要方面。 温度应保持在23C /- 2C的范围内。在设计空调系统时,请记住图表照明的耗电量和发热量。湿度需要在&#…...
Linux安全技术与防火墙
一、安全技术和防火墙 1.1 安全技术 入侵检测系统:特点是不阻断网络访问,主要是提供报警和时候报警,不主动介入。 入侵防御系统:透明模式工作,对数据包、网络监控、服务攻击、木马蠕虫、系统漏洞等等进行准确的分析和…...
C#中简单Socket编程
C#中简单Socket编程 Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。 接下来,我用C#语言来进行简单的TCP通信和UDP通信。 一、TCP通信 新建项目SocketTest,首先添加TCP通信的客户端代…...
UNIAPP_ReferenceError: TextEncoder is not defined 解决
错误信息 1、安装text-decoding npm install text-decoding2、main.js import { TextEncoder, TextDecoder } from text-decoding global.TextEncoder TextEncoder global.TextDecoder TextDecoder...
科普文:微服务技术栈梳理
概叙 如上两图所示,微服务架构下,需要的组件很多,上面中也并未列全。下面将梳理一下国内微服务架构下,用到的技术栈,仅供参考。 科普文:12种常见的软件架构-CSDN博客 没有最好的架构,只有最适…...
如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围
如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围 在这篇博客中,我将介绍如何使用HTML和JavaScript读取文件夹中的所有图片,并显示这些图片以及它们的RGB范围。这个项目使用现代浏览器提供的<input type"file" webkitdirecto…...
PDF公式转Latex
文章目录 摘要数据集 UniMER介绍下载链接 LaTeX-OCRUniMERNet安装UniMER 用的数据集介绍下载链接 PDF-Extract-Kit整体介绍效果展示评测指标布局检测公式检测公式识别 使用教程环境安装参考[模型下载](models/README.md)下载所需模型权重 在Windows上运行在macOS上运行运行提取…...
excel 百分位函数 学习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…...
(十一) Docker compose 部署 Mysql 和 其它容器
文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)2.2.1、文件…...
提高项目透明度:有效的跟踪软件
国内外主流的10款项目进度跟踪软件对比:PingCode、Worktile、Teambition、Tower、Asana、Trello、Jira、ClickUp、Notion、Liquid Planner。 在项目管理中,确保进度跟踪的准确性与效率是每位项目经理面临的主要挑战之一。选用合适的项目进度跟踪软件不仅…...
大模型生成人物关系思维导图的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
精通 mysqldumpslow:深度分析 MySQL 慢查询日志
引言 在数据库管理与优化的领域中,慢查询日志是识别性能瓶颈的金矿。mysqldumpslow 工具是挖掘这座金矿的利器,它帮助我们分析 MySQL 慢查询日志并提取关键信息。本文将详细介绍 mysqldumpslow 的核心选项,并通过实例展示如何使用这些选项来…...
C# Winform之propertyGrid控件分组后排序功能
在 WinForms 的 PropertyGrid 控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid 控件会根据 [Category] 和 [DisplayName] 属性装饰器对属性进行分组和…...
Java基础(十九):集合框架
目录 一、Java集合框架体系二、Collection接口及方法1、添加2、判断3、删除4、其它 三、Iterator(迭代器)接口1、Iterator接口2、迭代器的执行原理3、foreach循环 四、Collection子接口1:List1、List接口特点2、List接口方法3、List接口主要实现类:Array…...
execute_script与JS
JavaScript简称JS,有的测试场景需要JS脚本辅助完成Selenium无法做到的测试工作。webdriver提供了execute_script()方法调用JS代码。execute_script()可以在当前窗口/框架中执行JS脚本,并返回结果。可以使用它操作DOM元素、获取元素属性、执行异步操作等。…...
访问 Postman OAuth 2.0 授权的最佳实践
OAuth 2.0 代表了 web 安全协议的发展,便于在多个平台上进行授权服务,同时避免暴露用户凭据。它提供了一种安全的方式,让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端,支持 …...
《BASeg: Boundary aware semantic segmentation for autonomous driving》论文解读
期刊:Neural Networks | Journal | ScienceDirect.com by Elsevier 年份:2023 代码:https://github.com/Lature-Yang/BASeg 摘要 语义分割是自动驾驶领域街道理解任务的重要组成部分。现有的各种方法要么专注于通过聚合全局或多尺度上下文…...
高效利用iCloud指南
高效利用iCloud的指南主要包括以下几个方面: 一、注册与登录 创建Apple ID: 如果尚未拥有Apple ID,可以在苹果官网或iOS设备的设置中创建。Apple ID是访问iCloud服务的前提。登录iCloud: 在苹果设备上,进入“设置”应…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
