热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bitblt与stretchblt的使用区别

CDC::BitBltBOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWOR

CDC::BitBlt
BOOL BitBlt(

 int x,

 int y, 

int nWidth, 

int nHeight, 

CDC* pSrcDC,

 int xSrc, 

int ySrc, 

DWORD dwRop

 );

返回值:函数成功,返回非零值,否则为0。


参数:

x 指定目标矩形左上角的逻辑x坐标。
y 指定目标矩形左上角的逻辑y坐标。
nWidth 指定目标矩形和源位图的宽度(逻辑单位)。
nHeight 指定目标矩形和源位图的高度(逻辑单位)。
pSrcDC 指向CDC对象的指针,标识待拷贝位图的设备上下文。如果dwRop指定不包括源的光栅操作,则它必须为NULL。
xSrc 指定源位图左上角的逻辑X坐标。
ySrc 指定源位图左上角的逻辑Y坐标。
dwRop 指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。
下面对dwRop列出光栅操作代码及其描述:
BLACKNESS 所有输出变黑。
DSTINVERT 反转目标位图。
MERGECOPY 使用布尔AND操作符合并特征与源位图。
MERGEPAINT 使用布尔OR操作符合并特征与源位图。
NOTSRCCOPY 拷贝反转源位图到目标。
NOTSRCERASE 反转使用布尔OR操作符合并源和目标位图的结果。
PATCOPY 拷贝特征到目标位图。
PATINVERT 使用布尔XOR操作符合并目标位图和特征。
PATPAINT 使用布尔OR操作符合并反转源位图和特征。用布尔OR操作符合并这项操作结果与目标位图。
SRCAND 使用布尔AND操作符合并目标像素和源位图。
SRCCOPY 拷贝源位图到目标位图。
SRCERASE 反转目标位图并用布尔AND操作符合并这个结果和源位图。
SRCINVERT 使用布尔XOR操作符合并目标像素和源位图。
SRCPAINT 使用布尔OR操作符合并目标像素和源位图。
WHITENESS 所有输出变白。

说明:
从源设备上下文拷贝位图到这个当前设备上下文。应用可以在字节边界上对齐窗口或客户区域,保证BitBlt操作发生在以字节对齐的矩形上(登记窗口类时设置设备CS_BYTEALLGNWINDOW或CS_BYTEALIGHCLIENT标记)。

在字节对齐矩形上的BitBlt操作比未经字节对齐的矩形上的BitBlt操作快许多。如果想对自己的设备上下文指定字节对齐类风格,必须登记窗口类而不要依赖Microsoft基本类。可使用全局函数AfxRegisterWndClass。
一旦使用目标设备上下文和使用源设备上下文,GDI变形nWidth和nHeight。如果结果延伸不匹配,必要时GDI使用Windows StretchBlt函数压缩或拉伸源位图。
如果目标、源和特征位图颜色格式不同,BitBlt转换源和特征位图以匹配目标。转换中使用目标位图的前景和背景色。

BitBlt函数把单色位图转换为彩色时,它设置白色(1)为背景色,黑色(0)作为前景色。使用目标设备上下文的背景和前景色。要把彩色转换为单色,BitBlt把与背景色匹配的像素设置为白色,其余所有像素设置为黑色。在从彩色到单色的转换中,BitBlt使用彩色设备上下文的前景和背景色。
注意,并非所有的设备上下文都支持BitBlt。为检查给定设备上下文是否支持BitBlt,使用GetDeviceCaps成员函数并指定RASTERCAPS索引。

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 使所有输出变成白色。


说明:
将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合。函数使用目标设备上下文(由SetStretchBltMode设置)的扩展模式来决定如何扩展或压缩位图。StretchBlt函数将pSrcDC源设备中的位图移动到目标矩形,该矩形用成员函数正在调用的设备上下文来表示。xSrc,ySrc,nSrcWidth和nSrcHeight 参数定义了源矩形的左上角和尺寸。x,yc,nWidth和nHeight参数定义了目标矩形的左上角和尺寸。dwRop指定的光栅操作模式说明了源位图与目标设备上已经存在的位图是如何组合的。如果nSrcWidth和nWidth或nSrcHeight和nHeight的符号不同,StretchBlt将为位图创建一个镜像。如果nSrcWidth和nWidth符号不同,函数沿X轴创建镜像。如果nSrcHeight和nHeight符号不同,函数沿Y轴创建镜像。StretchBlt函数在内存中对源位图进行扩展或压缩,然后将结果拷贝到目标矩形中。如果模板要与结果组合,则在扩展后的位图拷贝到目标矩形后才组合。如果用到画刷,应使用目标设备上下文中选定的画刷。目标坐标根据目标设备上下文来转换,源坐标根据源设备上下文来转换。如果目标位图、源位图和模板位图的格式不一致,StretchBlt使模板与源位图匹配模板位图格式,转换中会使用到目标设备上下文中的前景色和背景色。如果要将黑白位图转换为彩色位图,它将背景色设置为白位(1),前景色设置为黑位(0)。如果要将彩色位图转换为黑白位图,函数设置与背景色匹配的像素为白(1),其它像素为黑(0),用到了带颜色的设备上下文中的前景色和背景色。不是所有的设备都支持StretchBlt函数。调用带RASTERCAPS索引的GetDeviceCaps 函数来决定是否支持StretchBlt。并检验为返回给RC_STRETCHBLT标记的值。

BitBlt 是位块传送,从源dc的 nXSrc,nYSrc坐标开始,拷贝图像数据到目的dc的 nXDest,nYDest 坐标处,拷贝宽度和长度是 nWidth, nHeight;,如果原dc的范围达不到nWidth,nHeight的范围,那部分数据不处理。

StretchBlt是拉伸图像拷贝,参数中比bitblt多了, nWidthSrc, nHeightSrc,源dc的高度和宽度。这个是映射模式,从源dc的,nXOriginSrc,nYOrignSrc映射到目标dc的nXOriginDest, nYOriginDest。源dc的范围和目标dc的范围执行拉伸隐射。可以看成一个空间几何的四棱椎台体。从一个截面映射到另外一个截面。如果2个截面面积相等,那就是1对1的数据拷贝,如果不是,就按照比例计算拟合数据。这个需要 SetStretchBltMode 设置拉伸拷贝的数据复合模式。也就是数据拟合的计算方法。相同的参数 DWORD dwRop 表示光栅计算模式,从源数据-》目标数据的复合,比如拷贝、按位与或等二进制运算。

简单说,bitblt直接按你指定的大小输出源dc到目标dc,而strechblt会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。也就是说,strechblt输出的图总是完整的,而且充满你指定的目标DC区域,而bitblt则可能输出的图是不完整的,也可能无法充满目标dc制定区域。


推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
author-avatar
jiho_b
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有