MFC中Picture Control控件显示照片的几种方式

目前使用CImage和CBitmap两个类,还有是将CImage转CBitmap显示。

MFC界面拖拽一个button按钮和一个Picture Control控件。

1.CImage显示。这种方式显示图片会有颜色不对的情况

void Cpicture_test_controlDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码CImage image;HRESULT hResult = image.Load("D:\\jpeg.bmp");if (!SUCCEEDED(hResult)) {AfxMessageBox("imread error");}//获取picture control 句柄CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);//获取控件大小CRect rect;pStatic->GetClientRect(&rect);int controlWidth = rect.Width();int controlHeight = rect.Height();//获取图片原始尺寸int imageWidth = image.GetWidth();int imageHeight = image.GetHeight();//创建兼容的DCCDC *pDC = pStatic->GetDC();CDC memDC;memDC.CreateCompatibleDC(pDC);//创建兼容的位图,并选入内存DCCBitmap bmp;bmp.CreateCompatibleBitmap(pDC, controlWidth, controlHeight);CBitmap* pOldbmp = memDC.SelectObject(&bmp);BITMAP bmpInfo;bmp.GetBitmap(&bmpInfo); // 获取位图信息//清空背景memDC.FillSolidRect(&rect, pDC->GetBkColor());//使用CImage绘制倒内存DC, 这里使用缩放image.Draw(memDC.m_hDC, 0, 0, controlWidth, controlHeight, 0, 0, imageWidth, imageHeight);//将内存DC绘制到控件上pDC->BitBlt(0, 0, controlWidth, controlHeight, &memDC, 0, 0, SRCCOPY);//清理memDC.SelectObject(pOldbmp);ReleaseDC(pDC);
}

2.CBitmap显示

void Cpicture_test_controlDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码//需要再资源视图中增加资源,资源类型为BitmapCBitmap img;if (!img.LoadBitmap(IDB_BITMAP2)) {AfxMessageBox("imread error");}// 获取Picture Control的设备上下文CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);CDC *pDC = pStatic->GetDC();// 获取对话框和图片的尺寸CRect rect;pStatic->GetClientRect(&rect);BITMAP bmpInfo;img.GetBitmap(&bmpInfo);// 创建兼容的内存设备上下文CDC memDC;memDC.CreateCompatibleDC(pDC);CBitmap* pOldBitmap = memDC.SelectObject(&img);// 绘制缩放后的图片int iStretchMode = pDC->SetStretchBltMode(COLORONCOLOR); // 色彩保留pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);pDC->SetStretchBltMode(iStretchMode);// 清理memDC.SelectObject(pOldBitmap);ReleaseDC(pDC);
}

3.将CImage转CBitmap显示。有两种方式

void Cpicture_test_controlDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码CImage image;HRESULT hResult = image.Load("D:\\jpeg.bmp");if (!SUCCEEDED(hResult)) {AfxMessageBox("imread error");}HBITMAP hBitmap = image.Detach();CBitmap img;img.DeleteObject();img.Attach(hBitmap);// 获取Picture Control的设备上下文CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);CDC *pDC = pStatic->GetDC();// 获取对话框和图片的尺寸CRect rect;pStatic->GetClientRect(&rect);BITMAP bmpInfo;img.GetBitmap(&bmpInfo);// 创建兼容的内存设备上下文CDC memDC;memDC.CreateCompatibleDC(pDC);CBitmap* pOldBitmap = memDC.SelectObject(&img);// 绘制缩放后的图片int iStretchMode = pDC->SetStretchBltMode(COLORONCOLOR); // 色彩保留pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);pDC->SetStretchBltMode(iStretchMode);// 清理memDC.SelectObject(pOldBitmap);ReleaseDC(pDC);}
void Cpicture_test_controlDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码CImage image;HRESULT hResult = image.Load("D:\\jpeg.bmp");if (!SUCCEEDED(hResult)) {AfxMessageBox("imread error");}HBITMAP hBitmap = image.Detach();CBitmap *img = CBitmap::FromHandle(hBitmap);// 获取Picture Control的设备上下文CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);CDC *pDC = pStatic->GetDC();// 获取对话框和图片的尺寸CRect rect;pStatic->GetClientRect(&rect);BITMAP bmpInfo;img->GetBitmap(&bmpInfo);// 创建兼容的内存设备上下文CDC memDC;memDC.CreateCompatibleDC(pDC);CBitmap* pOldBitmap = memDC.SelectObject(img);// 绘制缩放后的图片int iStretchMode = pDC->SetStretchBltMode(COLORONCOLOR); // 色彩保留pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);pDC->SetStretchBltMode(iStretchMode);// 清理memDC.SelectObject(pOldBitmap);ReleaseDC(pDC);}

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

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

相关文章

计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议

文章目录 一、TCP/IP五层模型(重要)二、应用层常见的协议三、TCP与UDP3.1 TCP、UDP的区别(重要)3.2 运行于TCP、UDP上的协议3.3 TCP的三次握手、四次挥手3.3.1 TCP的三次握手3.3.2 TCP的四次挥手3.3.3 随机生成序列号的原因 四、T…

Redis集群模式之Redis Sentinel vs. Redis Cluster

在分布式系统环境中,Redis以其高性能、低延迟和丰富的数据结构而广受青睐。随着数据量的增长和访问需求的增加,单一Redis实例往往难以满足高可用性和扩展性的要求。为此,Redis提供了两种主要的集群模式:Redis Sentinel和Redis Clu…

python opencv3

三、图像预处理2 1、图像滤波 为图像滤波通过滤波器得到另一个图像。也就是加深图像之间的间隙,增强视觉效果;也可以模糊化间隙,造成图像的噪点被抹平。 2、卷积核 在深度学习中,卷积核越大,看到的信息越多&#xff0…

JAVA后端生成图片滑块验证码 springboot+js完整案例

前言 现在大部分网部都是图片滑块验证码,这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证,但是我们要保证发送短息接口的全安,具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…

【因果分析方法】MATLAB计算Liang-Kleeman信息流

【因果分析方法】MATLAB计算Liang-Kleeman信息流 1 Liang-Kleeman信息流2 MATLAB代码2.1 函数代码2.2 案例参考Liang-Kleeman 信息流(Liang-Kleeman Information Flow)是由 Liang 和 Kleeman 提出的基于信息论的因果分析方法。该方法用于量化变量之间的因果关系,通过计算信息…

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5 1. 安装 Oracle Database 23ai2. 连接 Oracle Database 23c3. 重启启动后,手动启动数据库4. 重启启动后,手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开…

Ubuntu23.10下解决C语言调用mysql.h问题

Ubuntu23.10下解决C语言调用mysql.h问题 导语环境准备问题和解决方案总结参考文献 导语 在学习C语言和MySQL的调用的时候遇到包和版本的问题,由于使用的书很老(10年的),因此很多MySQL的包已经过时,在查找很多资料和询…

【JAVA毕业设计】基于Vue和SpringBoot的微服务在线教育系统

博主说明:本文项目编号 T 060 ,文末自助获取源码 \color{red}{T060,文末自助获取源码} T060,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Spring Boot编程训练系统:技术实现与案例分析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

在 ASP.NET Core 6.0 中使用 Swagger/OpenAPI 丰富 Web API 文档

示例代码:https://download.csdn.net/download/hefeng_aspnet/89961435 介绍 在选择或尝试与 API 集成之前,大多数开发人员都会查看其 API 文档。保持 API 文档更新以反映软件更改是一项挑战,需要时间和精力。对于 Web API,我们…

tensorflow案例5--基于改进VGG16模型的马铃薯识别,准确率提升0.6%,计算量降低78.07%

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 本次采用VGG16模型进行预测,准确率达到了98.875,但是修改VGG16网络结构, 准确率达到了0.9969,并且计算量…

Spring Boot编程训练系统:构建可扩展的应用

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足,创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

Java-sec-code-SSRF攻击

Java-sec-code(SSRF攻击) java-sec-code平台中也内置了SSRF攻击案例,我们来看看SSRF漏洞代码是什么样的。 案例1 直接从url参数接收数据,但是未进行任何检查和校验。 通过调用httpUtil.URLConnection方法,建立URL对…

docker基础:搭建centos7(详见B站泷羽sec)

docker的简单学习: sudo apt-get update //这个命令让系统检查有没有新软件 sudo apt-get install docker.io //安装 Docker sudo docker version //查看是否安装成功,显示docker的版本信息 启用Docker 启…

RNN(循环神经网络)详解

1️⃣ RNN介绍 前馈神经网络(CNN,全连接网络)的流程是前向传播、反向传播和参数更新,存在以下不足: 无法处理时序数据:时序数据长度一般不固定,而前馈神经网络要求输入和输出的维度是固定的&a…

解剖C++模板(2) —— 模板匹配规则及特化

众所周知,模板声明部分的尖括号中的内容是声明模板形参,而调用模板时的尖括号是给模板传参。然而这样理解仅仅停留于现象,只是将模板形参传参和函数传参的过程划等号了。C 的函数重载匹配并非真的进行匹配,因为函数名修饰规则导致…

题目讲解15 合并两个排序的链表

原题链接: 合并两个排序的链表_牛客题霸_牛客网 思路分析: 第一步:写一个链表尾插数据的方法。 typedef struct ListNode ListNode;//申请结点 ListNode* BuyNode(int x) {ListNode* node (ListNode*)malloc(sizeof(ListNode));node->…

高性能Web网关:OpenResty 基础讲解

一:概述 OpenResty是由国人章亦春开发的一个基于Nginx的可伸缩的Web平台。 openresty 是一个基于 nginx 与 lua 的高性能 web 平台,其内部集成了大量精良的 lua 库、第三方模块以及大数的依赖项。用于方便搭建能够处理超高并发、扩展性极高的动态 web 应…

OceanBase JDBC (Java数据库连接)的概念、分类与兼容性

本章将介绍 OceanBase JDBC的 概念与分类,已帮助使用 JDBC 的用户及技术人员更好的 了解JDBC,以及 OceanBase JDBC在与 MySQL 及 Oracle 兼容性方面的相关能力。 一、JDBC 基础 1.1 JDBC 的概念 JDBC 一般指 Java 数据库连接。Java 数据库连接&#xf…

小程序中引入下载到本地的iconfont字体图标加载不出来问题解决

我这个是uniapp项目,字体图标都是一样的,在vue项目中web端、uniapp运行到h5都没问题,但是运行到小程序加载不出来,报错如下: 不让用本地路径,所以我们要转为base64编码,这里给大家提供一个工具,它可以把本地字体文件转为base64:transfonter 进入官网后,第一步: …