BitBlt和StretchBlt的区别

BitBlt和StretchBlt的区别CDC BitBltBOOL nbsp BitBlt nbsp int nbsp x nbsp int nbsp y nbsp int nbsp nWidth nbsp int nbsp nHeight nbsp CDC nbsp pSrcDC nbsp int nbsp xSrc nbsp int nbsp ySrc nbsp DWORD nbsp dwRop nbsp 返回值 函数成功 返回非零值 否则为 0 参数 nbsp x nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 指定目标矩形左上角的逻辑 x 坐标 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp y nbsp nbsp nbsp nbsp

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















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



StretchBlt是拉伸图像拷贝。参数中比bitblt多了, nWidthSrc, nHeightSrc,源dc的高度和宽度。这个是映射模式,从源dc的,nXOriginSrc,nYOrignSrc映射到目标dcnXOriginDest, nYOriginDest。源dc的范围和目标dc的范围执行拉伸隐射。可以看成一个空间几何的四棱椎台体。从一个截面映射到另外一个截面。如果2个截面面积相等,那就是11的数据拷贝,如果不是,就按照比例计算拟合数据。
这个需要 SetStretchBltMode 设置拉伸拷贝的数据复合模式。也就是数据拟合的计算方法。
相同的参数 DWORD dwRop 表示光栅计算模式,从源数据-》目标数据的复合,比如拷贝、按位与或等二进制运算。简单说,bitblt直接按你指定的大小输出源dc到目标dc,而strechblt会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。也就是说,strechblt输出的图总是完整的,而且充满你指定的目标DC区域,而bitblt则可能输出的图是不完整的,也可能无法充满目标dc制定区域

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209104.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午10:01
下一篇 2026年3月19日 上午10:02


相关推荐

  • javbus爬虫-老司机你值得拥有

    javbus爬虫-老司机你值得拥有起因有个朋友叫我帮忙写个爬虫,爬取javbus5上面所有的详情页链接,也就是所有的https://www.javbus5.com/SRS055这种链接,我一看,嘿呀,这是司机的活儿啊,我绝对不能

    2022年8月5日
    4
  • H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

    H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制canvas 简介 canvas 绘图基础 标签介绍 上下文 context beginPath 状态 案例 绘制表格 绘制饼状图

    2026年3月17日
    2
  • 一文看懂TVS二极管SM8S30A

    一文看懂TVS二极管SM8S30A一文读懂TVS二极管SM8S系列,汽车抛负载防护器件随着汽车行业的大力发展,智能化、数字网络化、总线化以及节能环保成为了汽车发展的方向,然而,无论朝着哪种方向发展,汽车运用的基础电子保护防护元器件作用不容忽视,不可替代。如今,汽车电路保护的概念,早已不在局限于汽车保险丝,从仪表盘到车灯,从动力总成系统到高级驾驶辅助,个性化驾驶习惯和不确定的工作环境,都需要更高级、先进的保护措施为汽车保驾护航。电…

    2026年2月26日
    7
  • 十款很不错的磁盘碎片整理工具「建议收藏」

    十款很不错的磁盘碎片整理工具「建议收藏」
    说到磁盘整理工具,应该说说磁盘碎片的定义,为什么磁盘碎片会对系统性能造成影响。首先我不是专业的电脑人员,对很专业的理论知识不懂,在这里只可以用很通俗很日常的语言来表达。其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。为什么这些碎片多了,会对系统性能造成影响呢?打个比方,你的房间你很久没有整理和清洁了,原本有条不紊的东西变得乱七八糟,你找起东西来自然不方便,耗时间。系统读取硬盘数据也一样,硬盘数据琐碎散落,系统读取起来就

    2022年6月25日
    205
  • Java-int和Integer的区别

    Java-int和Integer的区别在说 int 和 Integer 的区别之前 先要弄清楚两个问题 一 java 基本数据类型及其封装类二 java 自动拆箱和自动装箱一 java 基本数据类型及其封装类数据类型字节大小封装类 byte8 位 Byteshort16 位 Shortint32 位 Intergerlong 位 Longfloat32 位 Floatdouble6 位

    2026年3月19日
    2
  • linux查看磁盘空间命令

    linux查看磁盘空间命令Linux 查看磁盘空间可以使用 df 和 du 命令 dfdf 以磁盘分区为单位查看文件系统 可以获取硬盘被占用了多少空间 目前还剩下多少空间等信息 例如 我们使用 df h 命令来查看磁盘信息 h 选项为根据大小适当显示 显示内容参数说明 Filesystem 文件系统 Size 分区大小 Used 已使用容量 Avail 还可以使用的容量 Use 已用百分比 Mou

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号