StretchBlt()、Bitblt用法详解

1、CDC::StretchBlt
BOOL StretchBlt( int x, int y,int nWidth,int nHeight, CDC* pSrcDC, intxSrc,  int ySrc, int nSrcWidth,  int nSrcHeight, DWORD dwRop)

功能:函数从源矩形 复制 一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩;
返回值:如果位图已经绘制,则返回非零值,否则为0。
参数:     x                目标矩形左上角的X逻辑坐标。
                 y               目标矩形左上角的Y逻辑坐标。
            nWidth           目标矩形的宽度(逻辑单位)。
            nHeight          目标矩形的高度(逻辑单位)。
            pSrcDC          指定源设备上下文。
              xSrc             源矩形左上角的X逻辑坐标。
              ySrc              源矩形左上角的Y逻辑坐标。
          nSrcWidth        源矩形的宽度(逻辑单位)。
          nSrcHeight       源矩形的高度(逻辑单位)。
          dwRop              指定光栅操作。

光栅操作模式说明了GDI是如何组合输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。可以为下列值之一:

· BLACKNESS 将所有输出变为黑色。
· DSTINBERT                反转目标位图颜色。
· MERGECOPY             使用AND运算符组合模板与源位图的颜色。
· MERGEPAINT             使用OR运算符组合源位图的反色与目标矩形的颜色。
· NOTSRCCOPY           将源位图的反色拷贝到目标矩形中。
· NOTSRCERASE         反转使用OR运算符组合源位图与目标矩形后得到的颜色。
· PATCOPY                    将模板颜色拷贝到目标矩形中。
· PATINVERT                 使用XOR运算符组合目标矩形与模板颜色。
· PATPAINT                    使用OR运算符组合模板与源位图的反色。再使用OR运算符将该操作结果与目标矩形组合
· SRCAND                     使用AND运算符组合源位图和目标位图的像素。
· SRCCOPY                  将源位图拷贝到目标位图。
· SRCERASE                反转目标矩形的颜色,再使用AND运算符将该结果与源位图组合。
· SRCINVERT               使用XOR运算符组合源位图和目标位图的像素。
· SRCPAINT                  使用OR运算符组合源位图和目标位图的像素。
· WHITENESS              使所有输出变成白色。

正常全屏显示:

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,m_bmp.bmWidth,m_bmp.bmHeight,SRCCOPY);
2、

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

BitBlt函数功能:把像素从一个设备环境(源)的矩形区域,传输到另一个设备环境(目标)中的一个同样大小的矩形区域。(将某一内存块的数据传送到另一内存块,前一内存块被称为"源",后一内存块被称为"目标"。)

BitBlt函数和上面的STretchBlt函数的参数基本上差不多,只是少了STretchBlt中倒数第二个和倒数第三个参数:(nSrcWidth:源矩形宽度)以及(nSrcHeight:源矩形高度);

前面四个参数也是和目标矩形(也即是我们的图像控件区域)相关的,如果是图像控件的话,起点坐标也是(0,0),终点坐标就是矩形区的宽度和高度;

对于源矩形区域(指内存DC中的位图),只需要给出拷贝的起点即可,

BitBlt函数不会对原来的位图进行拉伸或压缩,只会根据我们给定的nWidth,nHeight 值来决定该有多少部分进行显示。

3、

BitBlt和STretchBlt,都是从源 复制到目标。区别是:
STretchBlt会适应缩放,BitBlt不会。根据需求选择。

4、举例

void COwnerDrawBton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{// TODO: Add your code to draw the specified itemCDC *pDC;CRect rcBton;CDC dcMem;BITMAP s_Bmp;CBitmap m_Bitmap;CBitmap *pOldBitmap;// 将设备环境句柄 转换为指向设备环境的 指针pDC = CDC::FromHandle(lpDrawItemStruct -> hDC);                                  rcBton = lpDrawItemStruct -> rcItem; // 获取按钮控件大小m_Bitmap.LoadBitmap(IDB_Bmp);   // 载入位图dcMem.CreateCompatibleDC(pDC);  // 创建与内存设备环境相兼容的设备环境pOldBitmap = dcMem.SelectObject(&m_Bitmap);// 将位图对象选入到内存设备环境中m_Bitmap.GetBitmap(&s_Bmp); // 获取位图信息// 将位图从内存设备环境 拷贝到 显示设备环境             //希望缩放。pDC -> StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(),&dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);//pDC->BitBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(),&dcMem,0,0,SRCCOPY);//不会缩放                            dcMem.SelectObject(pOldBitmap); // 删除刚才选入到内存设备环境的位图对象
}

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

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

相关文章

【安全体系架构】——防御深度架构

防御深度架构: 防御深度架构是一种多层次的安全模型,旨在通过在网络和系统的各个层次上部署多个安全措施,以抵御不同类型的威胁和攻击。这个模型承认单一的安全措施可能无法全面防御所有潜在威胁,因此采用了多层次的安全防御策略…

【网络】网络编程套接字(一)

网络编程套接字 一 一、网络编程中的一些基础知识1、认识端口号2、认识TCP协议和UDP协议3、网络字节序 二、socket编程1、sockaddr结构2、简单的UDP网络程序Ⅰ、服务器的创建Ⅱ、运行服务器Ⅲ、关于客户端的绑定问题Ⅳ、启动客户端Ⅴ、本地测试Ⅵ、网络测试 一、网络编程中的一…

泛微全新低代码平台e-builder在沪发布,超千名与会者共商数字化转型

10月18日下午,泛微低代码平台体验大会在上海顺利举办,大会以“智能、协同、全程数字化”为主题,吸引了上千位政府及企事单位的信息化负责人参与。 活动现场,参会者身临其境地体验了泛微低代码平台,了解了泛微低代码平…

[论文笔记]Sentence-BERT[v2]

引言 本文是SBERT(Sentence-BERT)论文1的笔记。SBERT主要用于解决BERT系列模型无法有效地得到句向量的问题。很久之前写过该篇论文的笔记,但不够详细,今天来重新回顾一下。 BERT系列模型基于交互式计算输入两个句子之间的相似度是非常低效的(但效果是很好的)。当然可以通过…

WebDAV之π-Disk派盘 + 密码键盘

密码键盘是一款密码管理器,可以存储和管理需要受保护的数据。为方便日常使用,同时也是一款安全输入法,帮您安全便捷地填写账号密码、通用内容、卡包信息。 密码键盘使用军事级的 PBKDF2 有损加密算法保护您的根密码,使用军事级的 AES 加密算法保护您的存储数据。云端再额外…

数据库主键设计中自增ID和Guid的比较

SQL GUID和自增列做主键的优缺点 公司的数据库全部是使用GUID做主键的,很多人习惯使用int做主键。所以呢,这里总结一下,将两种数据类型做主键进行一个比较。 主键自增为什么比随机和自定义快? 1、如果表使用自增主键&#xff0…

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测 目录 分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于BiLSTM-…

【Excel单元格类型的解析校验】Java使用POI解析excel数据

一、使用的maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version> </dependency> <dependency><groupId>org.apache.poi</groupId&…

安装docker并在内安装mysql

如何卸载docker 1. 停止Docker服务&#xff1a; 在卸载Docker之前&#xff0c;首先需要停止Docker服务。在终端中运行以下命令停止Docker服务&#xff1a; sudo systemctl stop docker 2. 卸载Docker软件包&#xff1a; 接下来&#xff0c;你需要卸载Docker软件包。运行以下…

华为数通方向HCIP-DataCom H12-831题库(多选题:1-20)

第01题 如图所示,路由器所有的接口开启OSPF,图中标识的ip地址为设备的Loopback0接口的IP地址,R1、R2,R3的Loopback0通告在区域1,R4的Loopback0通告在区域0、R5的Lopback0通告在区域2,下列哪些IP地址之间可以相互Ping通? A、10.0.3.3和10.0.5.5 B、10.0.4.4和10.0.2.2 …

TensorFlow手动加载数据集(以mnist为例)

在进行Mnist手写识别的项目中&#xff0c;出现了Mnist数据集下载出错的问题&#xff0c;报出以下错误&#xff1a; Exception: URL fetch failure on https://s3.amazonaws.com/img-datasets/mnist.npz: None – [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主…

【CANoe】XML Test Module使用实例

文章目录 一、实操步骤1、增加XML Test Module节点2、配置XML Test Module节点3、XML Test Module节点增加CAPL脚本(.can文件)4、文件夹结构5、使用仿真节点开始测试6、测试结果与测试报告7、同理&#xff0c;在Test Setup也可如此操作 一、实操步骤 1、增加XML Test Module节…

【ubuntu】常用软件安装

【ubuntu】常用软件安装 前言安装搜狗输入法安装flameshot截图软件总结 前言 Ubuntu 是一个基于 Linux 内核的开源操作系统&#xff0c;它提供了简单易用的界面和丰富的功能&#xff0c;广受开发者和普通用户的喜爱。博主时常也需要经常切换Ubuntu系统进行开发和学习&#xff…

SEM和SD的区别和联系,以及其计算方法

http://t.csdnimg.cn/aHe99http://t.csdnimg.cn/aHe99

Android使用Navigation时如何获取fragment实例及齐公开方法和属性

使用了Navigation&#xff0c;则必然存在一个NavHostFragment&#xff0c;其它的Fragment都是它的子Fragment&#xff0c;所以&#xff0c;想获取其它fragment&#xff0c;就要从它的子fragment中获取&#xff0c;参考示例&#xff1a; //先获取NavHostFragment Fragment mMai…

【vue3】传送组件、Teleport

把test里的内容传送到test2 //test1.vue <template><div>test1<Teleport v-if"flag" to".aa">test1的内容</Teleport></div></template><script setup langts>import { ref,reactive,onMounted } from vueconst…

2023前端面试题总结

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 Html5和CSS3 常见的水平垂直居中实现方案 最简单的方案当然是flex布局 .father {display: flex;justify-content…

在线JSON转EXCEL工具

全天下的柔情共十分&#xff0c;你占八分。你喊我名字那晚的凉风秋月算一分&#xff0c;其余所有占一分。 推荐 在线JSON转Excel工具 - WeJSON 工具简介 在线JSON转Excel工具&#xff0c;可以快速将JSON数组数据一键转换为Excel格式&#xff0c;方便数据的可视化和交流。 所…

Java中过滤器与拦截器的使用

目录 Filter过滤器 Filter作用时机 Filter的使用 过滤器链 过滤器执行顺序 测试 Filter实现简单登陆验证 Interceptor拦截器 Interceptor的使用 Interceptor的拦截路径 Interceptor执行时机 Interceptor实现登录验证 Filter与Interceptor区别 Filter过滤器 Filter…

25.1 MySQL SELECT语句

1. SQL概述 1.1 SQL背景知识 1946年, 世界上诞生了第一台电脑, 而今借由这台电脑的发展, 互联网已经成为一个独立的世界. 在过去几十年里, 许多技术和产业在互联网的舞台上兴衰交替. 然而, 有一门技术却从未消失, 甚至日益强大, 那就是SQL.SQL(Structured Query Language&…