VB的PaintPicture与StretchBlt的异同比较

不太了解这两个函数的小伙伴可以先看一下下面几篇博客:

PaintPicture函数
http://blog.csdn.net/wf824284257/article/details/53221631
http://blog.csdn.net/wf824284257/article/details/53222996

StretchBlt函数
http://blog.csdn.net/wf824284257/article/details/53353868

1 函数原型

下面是StretchBlt函数声明

Declare Function StretchBlt Lib "gdi32" _
( _
ByVal hdc As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, _
ByVal dwRop As Long _
) As Long

下面是PaintPicture参数表

对象.PaintPicture picture,x1,y1,[width1],[height1],[x2],[y2],[width2],[height2],[opcode]

这两个函数作用几乎一样的,但它们有什么不同之处呢,博主今天简单的探究了一下。

2 实验过程

窗体上有2个picture控件,我们要做的是把picture1中图片复制到picture2中,下面我们看一下使用这两个函数有什么不同之处

实验窗体如下图

先定义w和h

Dim w As Integer, h As Integer
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight

直接使用StretchBlt函数

Picture2.Cls
StretchBlt Picture2.hdc, 0, 0, w, h, Picture1.hdc, 0, 0, w, h, vbSrcCopy

可以看出,这不是我们想要的结果,在picture2中竟然画出了多余的边框,多余部分是picture1的右边框和picture2的左边框。

这是因为StretchBlt的参数单位是像素Pixels,而picture控件默认单位是缇Twips,1Pixel>1Twips,由于单位不统一导致了w和h远大于picture1的宽和高。

下面是直接使用PaintPicture函数

Picture2.Cls
Picture2.PaintPicture Picture1.Picture, 0, 0, w, h, 0, 0, w, h, vbSrcCopy

这是我们想要的结果

那使用StretchBlt函数达到正确的复制图片效果,应该怎么做呢?

正确做法:

Picture1.ScaleMode = vbPixels
Picture2.ScaleMode = vbPixels
w = Picture1.ScaleWidth
h = Picture1.ScaleHeightPicture2.Cls
StretchBlt Picture2.hdc, 0, 0, w, h, Picture1.hdc, 0, 0, w, h, vbSrcCopy

这下就正常了,可以看出PaintPicture的参数单位是缇Twips

下面我们测试一下将单位改成像素后的paintpicture函数会出现怎样的结果

Picture1.ScaleMode = vbPixels
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight
Picture2.Cls
Picture2.PaintPicture Picture1.Picture, 0, 0, w, h, 0, 0, w, h, vbSrcCopy

可以看出,picture2上只画了左上角一点点图片,这是因为一个像素=15个缇,所以picture2的图片宽和高只有十五分之一

最后一个测试是测试paintpicture的过度抓图会出现怎样的效果。刚刚的StretchBlt在抓图范围大于picture1的大小时,会抓到窗体上,那PaintPicture会不会呢

Picture2.Cls
Picture2.PaintPicture Picture1.Picture, 0, 0, w, h, 0, 0, 2*w, 2*h, vbSrcCopy

这此我们代码抓图抓的宽和高都是picture1的宽高的两倍。结果如下

可以看出,PaintPicture的抓图会限定在对象内,不会抓到窗体或者其他控件。

结束

希望可以帮到后来的小伙伴们

VB的PaintPicture与StretchBlt的异同比较相关推荐

  1. VB中windows API StretchBlt,BitBlt的应用

    VB中windows API StretchBlt,BitBlt的应用 1.BitBlt函数 函数原型:Declare Function BitBlt Lib "gdi32" _ ...

  2. 不错VB代码,收藏!!!

    实现毫秒精度的延时 'Module Code: Option Explicit Declare Function QueryPerformanceFrequency Lib "kernel3 ...

  3. VB中使用GDI+进行图像缩放的实例

    VISUAL BASIC(VB)对图形图像的处理一直以来是弱项,并受到很多人的垢病.关于图形图像的放大缩小,一般使用PICTUREBOX的PAINTPICTURE方法来处理.但这个处理方法最大的问题就 ...

  4. 计算机等级考试模拟题卷子,二级VB模拟试卷 1

    一.选择题:35题,2分/题,共70分 下列各题A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. 1.假定窗体有一个标签,名为Label1 ...

  5. VB6.0和VB.Net对照表

    想在网上找一下VB.Net中,哪些是VB6.0遗留下来的东西,哪些是VB.Net增加的东西.结果中文的没有找到,找到了一个日文网页.简单的翻译了一下,放在这里,供需要的人参考. VB6.0和VB.Ne ...

  6. 在VB中如何让背景图片铺满整个MDIForm

    在VB中,如何让背景图片铺满整个Form,代码如下: '* ************************************************************** * '*    ...

  7. 第二章 VB的界面设计

    轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm 第二章         VB的界面设计 2.1  VB用户界面设计基础 1. 概述 界面的设计有两步 ...

  8. C语言与Java的异同

    C语言与Java的异同 作者:终南   <li.zhongnan@hotmail.com> 自工作以来,先用VB.ASP这些编程:后来转用Java,对面向对象的语言有了些许了解,如今又主要 ...

  9. VB显示PNG等格式的图片

    VB利用GDI+技术显示PNG等格式图形又一方法,通过GDI+创建DC图形场景,然后将图形转入到StdPicture,再从StdPicture中将图形显示到Form窗口,为什么要将图形转入StdPic ...

最新文章

  1. Ubuntu下如何用Empathy上QQ
  2. TYAN_S8230做硬Raid
  3. Java—正整数分解成质因数
  4. explode() 字符串转换数组
  5. spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?
  6. mongodb dsl_具有Java DSL的Spring Integration MongoDB适配器
  7. html图片编辑器插件,js图片编辑器插件Filerobot
  8. Bootstrap学习(一)
  9. Linux基本命令之pidof和kill/killall
  10. 框架应该弄明白的理论问题
  11. docker构建自己的镜像
  12. Mac网易云音乐ncm格式转mp3
  13. 多策略调和的布谷鸟搜索算法
  14. 渗透测试工具——BurpSuite
  15. 信号、频谱、能量、功率、噪声
  16. 欧美顶尖大学是如何使用大数据的?
  17. 打破垄断!国产服务器操作系统正式发布,微软慌了。。
  18. 程序员之路:Gmail邮箱客户端配置
  19. APM, EAM, AIP都是什么鬼?
  20. (31)ObjectARX2015 + vs2012选择集

热门文章

  1. TypeScript设计模式之工厂
  2. 【论文笔记】Commonsense Knowledge Aware Conversation Generation with Graph Attention
  3. 怎么利用tombstones墓碑文件分析崩溃问题
  4. 远端branch和tag同名的时候,删除方法
  5. 常用Linux命令的基本使用(五)
  6. 普陀区鼓励企业科创政策包(普陀科创十条)
  7. 初中经典几何题,95%的同学都不会做,高手请进来 2016-03-21 16:25 几何是初中数学最主要的内容,对大多数孩子来说也是比较难的内容。而我们想要战胜这一比较难的题型,我们就需要多多练题
  8. 对标西湖大学、投资超460亿!这所新大学发布全球招聘公告!
  9. nii格式matlab,如何将nii格式文件转换为二维图像
  10. 【粉丝福利】秋天的第一个雷蛇键盘