windows编程中的位图操作,界面中插入位图方法

在界面中插入位图,主要用到BitBlt这个函数

BOOL CDC::BitBlt(int x, int y, int width, int height, CDC *src, int src_x, int src_y, DWORD dwRop)

用法说明见官方说明

这里要注意的是,这个函数是把源图像从src这个设备上下文传递到目标设备上下文(这个函数调用对象),源和目标的宽和高都是width, height,也就是不进行缩放。并且源的左上角(其实不一定真的是左上角,与实际使用的坐标系有关,指的是坐标最小的xy值)。
dwRop是操作码,操作码可以将官方说明,这里使用SRCCOPY。

另外要注意的是,如果width, height超过了源的大小,那么使用源的大小,width, height设置成源的大小。另外x, y, width, height可以超过目标的大小,比如x, y可以是小于0的数,如果超过了目标大小,超出的部分直接丢弃不显示,在目标区域的图像不受影响。

界面插入位图方法,除了这个BitBllt函数,还有其他几个函数需要使用

创建源的设备上下文无关

BOOL CDC::CreateCompatibleDC(CDC* pDC);

创建的这个设备上下文无关用于保存源图像,也就是上面BitBlt中的src这个CDC对象

导入图片

BOOL CBitmap::LoadBitmap(LPCTSTR sourcename)
BOOL CBitmap::LoadBitmap(UINT sourceID)

有两个方法可以使用,直接使用图片的路径,另一个先把图像放到资源文件中,然后用资源的id来导入

获取图片信息

int CBitmap::GetBitmap(BITMAP* pBitMap)

返回:非0为成功,0为不成功

BITMAP是一个结构体

/* Bitmap Header Definition */
typedef struct tagBITMAP{LONG        bmType;LONG        bmWidth;LONG        bmHeight;LONG        bmWidthBytes;WORD        bmPlanes;WORD        bmBitsPixel;LPVOID      bmBits;} BITMAP

可以用这个函数获取图像的尺寸信息

有了以上这些函数,就可以在界面中插入位图了。下面是一个例子,直接在窗口客户区对象的OnDraw方法中调用

	CRect rect;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);//显示缓冲区自定义坐标系pDC->SetWindowExt(rect.Width(),rect.Height());pDC->SetViewportExt(rect.Width(),-rect.Height());pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);CBrush greenBrush;greenBrush.CreateSolidBrush(RGB(0, 255, 0));CBrush *pOldBrush = pDC->SelectObject(&greenBrush);pDC->Rectangle(&rect);pDC->SelectObject(pOldBrush);CDC picDC;//声明一个图片缓冲区picDC.CreateCompatibleDC(pDC);//创建一个与显示缓冲区兼容的内存缓冲区CBitmap NewBitmap,*pOldBitmap;NewBitmap.LoadBitmap(IDB_TEACUP);//从资源中导入位图BITMAP bmp;//声明bmp结构体NewBitmap.GetBitmap(&bmp);//获取位图信息	pOldBitmap=picDC.SelectObject(&NewBitmap);//将位图选入内存DCpicDC.SetMapMode(MM_ANISOTROPIC);//内存DC自定义坐标系picDC.SetWindowExt(bmp.bmWidth,bmp.bmHeight);picDC.SetViewportExt(bmp.bmWidth,-bmp.bmHeight);picDC.SetViewportOrg(bmp.bmWidth/2,bmp.bmHeight/2);int nX=rect.left+(rect.Width()-bmp.bmWidth)/2;//计算位图居中显示时的左下角点坐标int nY=rect.top+(rect.Height()-bmp.bmHeight)/2;pDC->BitBlt(nX,nY,bmp.bmWidth,bmp.bmHeight,&picDC,-bmp.bmWidth/2,-bmp.bmHeight/2,SRCCOPY);//图片拷贝到显示缓冲区//pDC->BitBlt(nX,nY,rect.Width(), rect.Height(),&picDC,-bmp.bmWidth/2,-bmp.bmHeight/2,SRCCOPY);//图片拷贝到显示缓冲区picDC.SelectObject(pOldBitmap);//恢复原位图NewBitmap.DeleteObject();//删除新位图picDC.DeleteDC();//删除picDC

效果如图
在这里插入图片描述

其中有一些函数比如SelectObject,SetMapMde之类的,这些在Windows图像编程中比较基础,可以看我另一篇文章:使用Windows GDI进行绘图

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

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

相关文章

LangChain:1. Prompt基本使用

1. Prompt基本使用 from langchain_core.prompts import PromptTemplate from langchain_core.prompts import ChatPromptTemplate这里有两种prompt,其对应两种形式:PromptTemplate 和 ChatPromptTemplate 从某种意义来说,前者是一个通用形…

如何从 iPhone 恢复已删除或丢失的联系人?

不小心删除了您的 iPhone 联系人?不用担心。我们将向您展示如何从 iPhone或 iPad恢复已删除或丢失的联系人。当您从 iPhone 中删除联系人时,您可能认为无法将其恢复。但事实是,您可以从 iPhone 或 iPad 恢复已删除的联系人,因为它…

链表经典练习题

目录 前言: 一、反转单链表 二、链表的中间结点 三、合并两个有序链表 四、分割链表 五、约瑟夫问题 六、判断链表是否有环? 七、求环形链表的入口点 八、输入一个链表,输出该链表中倒数第k个结点 九、输入两个链表,找出…

云原生Kubernetes: K8S 1.29版本 部署Sonarqube

一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K8S node节点1.29.0192.168.204.10已部署Kuboard (2)master节点查看集群 1&…

开箱子咸鱼之王H5游戏源码_内购修复优化_附带APK完美运营无bug最终版__GM总运营后台_附带安卓版本

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 1.包括原生打包APK,资源全部APK本地化,基本上不跑服务器宽带 2.优化后端,基本上不再一直跑内存,不炸服响应快! 3.优化前端&#xff0c…

WSL2-Ubuntu使用Conda配置百度飞浆paddlepaddle虚拟环境

0x00 缘起 本文将介绍在WSL2-Ubuntu系统中,使用Conda配置百度飞浆paddlepaddle虚拟环境中所出现的各种问题以及解决方法,最终运行"run_check()"通过测试。 在WSL2中配置paddlepaddle不像配置Pytorch那样顺滑,会出现各种问题(如:库的文件缺失、不知道如何匹配C…

设计模式-02 设计模式-接口隔离原则案例分析

1.定义 接口隔离原则(Interface Segregation Principle,简称 ISP)是设计模式中的一个原则,它规定客户端不应该依赖它不使用的方法。 换句话说,接口应该被细分为更小的、更具体的接口,以便客户端只依赖于它…

Hive 与 MySQL 的数据库限制对比

数据库的大小 Hive: 由于Hive是建立在Hadoop生态系统之上,理论上其数据库大小仅受Hadoop分布式文件系统(HDFS)的限制,可以达到PB级别或更高。MySQL: MySQL数据库的大小受到磁盘空间和文件系统的限制。在实践中,单个实例…

Web后端开发中对三层架构解耦之控制反转与依赖注入

内聚与耦合 内聚 比如说我们刚刚书写的员工的实现类 在这里我们仅仅书写的是和员工相关的代码 而与员工无关的代码都没有放到这里 说明内聚程度较高 耦合 以后软件开发要高内聚 低耦合 提高程序灵活性 扩拓展性 分析代码 如何解耦 创建容器 提供一个容器 存储东西 存储E…

STM32 F103C8T6学习笔记16:1.3寸OLED的驱动显示日历

今天尝试使用STM32 F103C8T6驱动显示 1.3寸的OLED,显示数字、字符串、汉字、图片等 本质与0.96寸的OLED是完全相同的原理: 而且经过我的研究发现: 1.3寸大小的OLED并未比0.96寸的有更多的显示像素点数来显示,也是128*64的像素点数显示: 也…

AI期末复习(PolyU)

文档详见评论链接 Tutorial 2-Search Algorithm Breadth-first search宽度优先搜索 [图片] [图片] open表由queue队列实现,因此加在尾部。 [图片] Depth-first search深度优先搜索 [图片] [图片] open表由stack栈实现,因此加在头部。 [图片] Hill climbi…

【设计模式】之单例模式

系列文章目录 【设计模式】之责任链模式【设计模式】之策略模式【设计模式】之模板方法模式 文章目录 系列文章目录 前言 一、什么是单例模式 二、如何使用单例模式 1.单线程使用 2.多线程使用(一) 3.多线程使用(二) 4.多线程使用…

uni框架下的前端小知识

<movable-area> 和 <movable-view> 组件来创建一个可以移动的区域&#xff0c;这通常用于模拟地图或座位图等场景的拖动效果。 1、direction&#xff1a;移动方向&#xff0c;可选值为all、vertical、horizontal分别表示所有方向、垂直、水平方向。 2、inertia&am…

力扣153. 寻找旋转排序数组中的最小值

Problem: 153. 寻找旋转排序数组中的最小值 文章目录 题目描述思路复杂度Code 题目描述 思路 1.初始化左右指针left和right&#xff0c;指向数组的头和尾&#xff1b; 2.开始二分查找&#xff1a; 2.1.定义退出条件&#xff1a;当left right时退出循环&#xff1b; 2.2.当nums…

Python爬虫-BeautifulSoup解析

1.简介 BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库。它提供了一种灵活且方便的方式来导航、搜索和修改树结构或标记文档。这个库非常适合网页抓取和数据提取任务&#xff0c;因为它允许你以非常直观的方式查询和操作文档内容。 2.安装 Beautiful Soup 终端输…

docker学习笔记5:Docker Compose安装与使用

Docker Compose 简介 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个 YAML 文件来配置应用服务,这样可以通过一个简单的命令创建和启动所有服务。Docker Compose 主要面向开发环境、自动化测试环境和小型生产部署。 Docker Compose 的主要特…

Time_embedding采样的理解

简单概括&#xff0c;就是t越大&#xff0c;采样得到的点越分散&#xff0c;采样得到的点范围更广 一个简单的示例函数 def time_embedding(t, max_steps1000):frequency np.linspace(0, 1, max_steps)embeddings np.concatenate([np.sin(frequency * t * math.pi),np.cos(f…

【笔记】 - Git

一、安装 https://git-scm.com/ 下载 下一步下一步 二、clone 到本地 1、git clone [url] Git 会按照你提供的 URL 所指向的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字&#xff0c; 你可以在该命令后加上你想要…

【webrtc】RemoteAudioSource的创建线程

m98 代码&#xff1a;I:\webrtc m98_yjf\src\pc\rtp_transmission_manager.cc RtpTransmissionManager::CreateReceiver 在信令线程创建receiver receiver 是&#xff1a; rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>receiver;其实际…

可视化大屏在真实场景的效果,绝对震撼,不要再嘲笑其作用了

hello&#xff0c;我是大千UI工场&#xff0c;本地带来一批可视化大屏现场效果图&#xff0c;非常震撼&#xff0c;给大家带来身临其境的感受&#xff0c;欢迎关注点赞&#xff0c;有需求请私信。 有人可能会认为可视化大屏没有太多价值&#xff0c;可能是因为以下几个原因&am…