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: 在苹果设备上,进入“设置”应…...
Scroll Reverser终极指南:彻底告别macOS滚动方向混乱的智能解决方案
Scroll Reverser终极指南:彻底告别macOS滚动方向混乱的智能解决方案 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser Scroll Reverser是一款专为macOS设计的智能滚动方…...
实战揭秘:3步解锁你的微信聊天记忆宝库
实战揭秘:3步解锁你的微信聊天记忆宝库 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾因为手机丢失或更换设备,眼睁睁看着珍贵的微信聊天记录消失无踪?那些承…...
差分隐私下机器学习模型预处理完整性验证框架设计与实践
1. 项目概述:当模型审计遇上隐私保护在金融风控、医疗诊断这些对数据隐私和模型可靠性要求极高的领域,我们常常面临一个两难困境。一方面,一个机器学习模型在上线前,必须确保其训练流程是合规且完整的,尤其是数据预处理…...
从《原神》到《黑神话》都在用的AI Agent中间件:轻量级推理框架v0.9.3内部测试版首次泄露(仅限前500名开发者)
更多请点击: https://codechina.net 第一章:AI Agent游戏行业应用全景图 AI Agent 正在重塑游戏开发、运营与玩家体验的全生命周期。从智能NPC行为建模到实时动态世界生成,从自动化测试脚本到个性化内容推荐,AI Agent已不再局限于…...
科学边缘计算ML硬件可靠性设计:从比特精确验证到精细化容错
1. 项目概述:当科学实验遇上极端数据洪流想象一下,你面前有一台每秒产生数TB数据的超级显微镜,或者一个每时每刻都在进行数十亿次粒子对撞的探测器。这些并非科幻场景,而是高能物理、材料科学等前沿科学领域的日常。海啸般的数据从…...
别再手动标注了!:2026年唯一支持零样本Schema自演化+跨源实体对齐的3款工具深度拆解(含API调用成本对比)
更多请点击: https://kaifayun.com 第一章:别再手动标注了!:2026年唯一支持零样本Schema自演化跨源实体对齐的3款工具深度拆解(含API调用成本对比) 当企业每天接入17类异构数据源(CRM、IoT边缘…...
量子态估计新突破:超越置乱时间,QELM稳健实现高效信息提取
1. 项目概述 量子态估计,简单来说,就是“看清”一个未知量子系统内部状态的过程。这好比在完全黑暗的房间里,你需要通过有限的光线(测量)来推断房间内物体的精确形状和位置。在量子计算、量子通信和量子传感等领域&…...
Necesse 多人沙盒生存 RPG 服务器搭建教程
Necesse 多人沙盒生存 RPG 服务器搭建教程 Necesse 是一款融合了《泰拉瑞亚》式俯视角探索与《边缘世界》式基地管理的沙盒生存 RPG 游戏。当你和朋友想一起挖矿、打地牢、建造基地时,自建专用服务器能带来更稳定的连接、更低的延迟,以及完全由你掌控的…...
ARCADE:用AR交互评估弥合CV模型指标与感知的鸿沟
1. 项目概述:当指标“说谎”时,我们如何看清计算机视觉模型的真实能力?在计算机视觉(CV)研究与应用的前沿,我们每天都在见证新模型的诞生。从深度估计到光照预测,从语义分割到目标检测ÿ…...
【字节跳动】Robix系统的底层技术参数配置
Robix 绝密底层裸数据 无修饰纯技术续档一、地址总线时序剥离源码 void addr_bus_timing_restore(void) {setup_hold_time_clr();strobe_delay_cancel();bus_wait_state_disable();addr_valid_mask_null(); } 总线时序原生参数地址建立保持时间清零 读写选通脉冲延时全部取消 总…...
