MFC流的形式读取图片

news2024/12/24 8:44:00

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));
		}
	}
	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1925957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念&#xff0c;涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js&#xff08;一种流行的 3D 渲染 JavaScript 库&#xff09;中&#xff0c;了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

AIGC是什么,与AI绘画有什么关系,一篇文章带你了解AI绘画的前世今生

在讲解AIGC和AI绘画之前&#xff0c;我们先看看什么是AI以及AI的历史。 AI历史发展轨迹 什么是人工智能 人工智能(Artificial intelligence&#xff0c;简称AI)亦称机器智能&#xff0c;指由人制造出来的机器所表现出来的智能。通常人工智能是指用普通计算机程序来呈现人类智…

ConfigMap-secrets-静态pod

一.ConfigMap 1.概述 ConfigMap资源&#xff0c;简称CM资源&#xff0c;它生成的键值对数据&#xff0c;存储在ETCD数据库中 应用场景&#xff1a;主要是对应用程序的配置 pod通过env变量引入ConfigMap&#xff0c;或者通过数据卷挂载volume的方式引入ConfigMap资源 官方解释…

成为git砖家(1): author 和 committer 的区别

大家好&#xff0c;我是白鱼。一直对 git author 和 committer 不太了解&#xff0c; 今天通过 cherry-pick 的例子搞清楚了区别。 原理 例如我克隆了著名开源项目 spdlog 的源码&#xff0c; 根据某个历史 commit A 创建了分支&#xff0c; 然后 cherry-pick 了这个 commit …

240710_昇思学习打卡-Day22-条件随机场

240710_昇思学习打卡-Day22-条件随机场 在正式开始LSTMCRF序列标注之前&#xff0c;我们先来了解一下条件随机场&#xff0c;以下仅做简单介绍。 CRF全称Conditional Random Field&#xff0c;按照名字来理解&#xff0c;条件随机&#xff0c;随机输入&#xff0c;条件输出。…

vue中父子传递属性值

1、父传子属性值 自定义图库组件 在add.vue中应用tuku组件并给默认值 效果 2、 子传父&#xff0c;逆向赋值 add.vue和第一问中一样 修改tuku组件&#xff0c;传值给add.vue 3、多个传递 效果&#xff1a; 点击两个修改按钮后 4、使用defineModel简化父子传值 其他代码跟…

使用Tkinter库设计实现的中小学校疫情防控入校人员登记检测系统

Tkinter简介 Tkinter是Python标准库中用于GUI图形用户界面开发的工具包&#xff0c;它是基于Tcl/Tk的封装&#xff0c;提供了大量预定义的控件&#xff0c;如按钮、文本框、标签等&#xff0c;非常适合快速原型开发和小型应用的构建。本文将通过一个具体的案例——“中小学校疫…

【java】力扣 合并k个升序链表

文章目录 题目链接题目描述思路代码 题目链接 23.合并k个升序链表 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表 思路 我在这个题里面用到了PriorityQueue(优先队列) 的知识 Prio…

鸿蒙语言基础类库:【@system.app (应用上下文)】

应用上下文 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import app from system.app;app.getInfo …

MFC之对话框--重绘元文件

文章目录 实现示例展示需要绘制的窗口/位置控件位置更新下一次示例粗细滑动部分更新 重绘元文件&#xff08;窗口变化内容消失&#xff09;方法一&#xff1a;使用元文件方法二&#xff1a;兼容设备方法三&#xff1a;使用自定义类存储绘图数据除画笔外功能处理画笔功能处理 保…

【雷达原理】MIMO雷达技术

一、MIMO雷达原理 1.1 基本概念 多输入多输出(Multiple input multiple output&#xff0c;MIMO)雷达指该雷达具有多个发射天线和多个接收天线。 学术界对 MIMO 雷达的定义中&#xff0c;多输入是指同时发射多种雷达信号波形( 一般是多个天线同时发射不同的波形) &#xff0c;…

藏着不为人知的泪水

在娱乐圈的璀璨舞台上&#xff0c;每一个光芒四射的背后&#xff0c;藏着不为人知的汗水与泪水。提及#张艺凡 出道位#&#xff0c;这段历程&#xff0c;不仅仅是个人奋斗的见证&#xff0c;更是关于勇气、坚持与自我证明的壮丽篇章。曾几何时&#xff0c;网络的喧嚣声中&#x…

【信息系统项目管理师】高项常见知识点与公式

绩效域、合同、配置、变更、招投标、安全、立项论文考到的话大致业是按下面相关知识点开写 八大绩效域及其要点 团干部策划开公交 合同管理 合同的签订->合同的履行管理->合同的变更管理->合同的档案管理->合同的违约\索赔管理 配置管理 制定配置管理计划配置识…

欧几里得算法求解若干数的最小公倍数

公倍数 公倍数(common multiple)是指在两个或两个以上的自然数中&#xff0c;如果它们有相同的倍数&#xff0c;这些倍数就是它们的公倍数。公倍数中最小的数&#xff0c;就称为这些整数的最小公倍数&#xff08;lowest common multiple&#xff09; 求解方法 求多个数的最小公…

c++ new 与二级指针

new 与数组的简单用法&#xff0c;一个简单的例子&#xff1a; #include <stdio.h> #include <stdlib.h>#define MAX_ARRAY_NUM 10int main() {int *p new int[MAX_ARRAY_NUM];for(int i 0; i < MAX_ARRAY_NUM; i){p[i] i 10;}for(int i 0; i < MAX_AR…

MAVSDK动态库与静态库及mavsdk_server程序macOS平台编译与安装

1.克隆mavsdk: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译静态库 cmake -Bbuild/default -H. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF 生成makefile 生成成功,开始编译 cmake --build build/default -j8 成功生成libmavsdk.a 开…

BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能

概述 在应用DC-DC开关电源芯片时&#xff0c;通常需要关注以下参数&#xff0c;同步与非同步&#xff0c;输入电压&#xff0c;输入电流&#xff0c;输出电压&#xff0c;输出电流&#xff0c;输入输出电容的选择&#xff1b;mosfet选型&#xff0c;电感选型&#xff0c;功耗&a…

python作业三

1.使用requests模块获取这个json文件http://java-api.super-yx.com/html/hello.json 2.将获取到的json转为dict 3.将dict保存为hello.json文件 4.用io流写一个copy(src,dst)函数,复制hello.json到C:\hello.json import json import shutilimport requests #使用requests模块获…

RPC与服务的注册发现

文章目录 1. 什么是远程过程调用(RPC)?2. RPC的流程3. RPC实践4. RPC与REST的区别4.1 RPC与REST的相似之处4.2 RPC与REST的架构原则4.3 RPC与REST的主要区别 5. RPC与服务发现5.1 以zookeeper为服务注册中心5.2 以etcd为服务注册中心 6. 小结参考 1. 什么是远程过程调用(RPC)?…

MybatisPlus(MP)基础知识

MP BaseMapper 为了简化单表CRUD&#xff0c;MybatisPlus提供了一个基础的BaseMapper接口&#xff0c;其中已经实现了单表的CRUD&#xff0c;因此我们自定义的Mapper只要实现了这个BaseMapper&#xff0c;就无需自己实现单表CRUD了。 package com.itheima.mp.mapper;import …