打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VB PaintPicture (第2篇)

如果看本篇不太懂的话,请先看第一篇

先把函数参数表放在这里

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

1.简单的图片的进入效果

实现 图片从左到右进入 的效果,需要怎么做呢

很简单可以想到用paintpicture 函数 比如 每隔0.1秒让图片向右移动一点,嗯,大概就是这个思路

先给出利用API的延时函数的代码

Public Declare Function timeGetTime Lib "winmm.dll" () As LongPublic Sub delay(ByVal n As Single)    Dim tm1 As Long, tm2 As Long    tm1 = timeGetTime    Do        tm2 = timeGetTime        If (tm2 - tm1) / 1000 > n Then Exit Do        DoEvents '转让控制权,令程序在忙于执行指令时抽出少许时间让给别的程序    Loop End Sub

博主画了一下picturebox的坐标系

零点在左上角,width向右为正,height向下为正

我们拿下面这张图片做例子

我们拿这张图片做例子,左边pic1中加载了图片,我们要在pic2中实现从左向右进入效果,首先为了使图片大小适应窗口,代码如下

pic2.PaintPicture pic1.Picture, 0, 0, pic2.ScaleWidth, pic2.ScaleHeight, 0, 0, pic1.ScaleWidth, pic1.ScaleHeight

为了实现从左向右进入,pic2初始状态应该是这样子的,黑色表示pic2,红色表示图片

(x1,y1)需要水平右移,即x1增大,y1不变,由上面坐标系的分析可知x1是从-pic2.scalewidth 移动到0

我们每0.00005秒移动20个像素长度的话,代码如下

pic2.ClsFor i = -pic2.ScaleWidth To 0 Step 20    pic2.PaintPicture pic1.Picture, i, 0, pic2.ScaleWidth, pic2.ScaleHeight, 0, 0, pic1.ScaleWidth, pic1.ScaleHeight    delay 0.00005Next i

这样图片就可以实现从左向右进入的效果

从右向左与上面类似。

下面说从左上角斜向下

分析图得知,x1,y1都需要不断增大.我们用x1来做循环条件的话,y1的位置可以按比例计算得到。代码为

pic2.ClsDim id As Single '比例Dim j As SingleFor i = -pic2.ScaleWidth To 0 Step 20    id = i / pic2.ScaleWidth     j = id * pic2.ScaleHeight    pic2.PaintPicture pic1.Picture, i, j, pic2.ScaleWidth, pic2.ScaleHeight, 0, 0, pic1.ScaleWidth, pic1.ScaleHeight    delay 0.00005Next i

效果如图

下面我们再看一下右上角斜向下
右上角斜向下分析图


这里,x1要不断减小,y1要不断增大
所以代码为

pic2.ClsDim id As Single '比例Dim j As SingleFor i = pic2.ScaleWidth To 0 Step -20    id = i / pic2.ScaleWidth     j = -id * pic2.ScaleHeight ' i 是减小,j是增大    pic2.PaintPicture pic1.Picture, i, j, pic2.ScaleWidth, pic2.ScaleHeight, 0, 0, pic1.ScaleWidth, pic1.ScaleHeight    delay 0.00005Next i

其他的平移进入型方法都一样,明确了坐标系以后就好办了

2.百叶窗效果

拿水平百叶窗为例,效果图如下

我们需要把整个图片height切割,切成多个横条(假设数量为pages),如果每个横条的height为sy,则我们需要用2层循环来实现水平百叶窗效果。

外层循环为0到sy的循环,内层循环为1到pages的循环;外层规定了每个横条画出的高度,内层是使所有的横条都先画出规定的高度。

代码如下

pic2.ClsDim pages As Integerpages = 20   '切成20个横条Dim sy As Single   '每个横条的高度sy = pic1.ScaleHeight / pagesDim gao, id As Single  'gao表示当前每个横条画出来的高度,id是比例id = pic2.ScaleHeight / pic1.ScaleHeightFor gao = 20 To sy + 10 Step 2    For i = 0 To pages - 1        pic2.PaintPicture pic1.Picture, 0, sy * i * id, pic2.ScaleWidth, gao * id, 0, sy * i, pic1.ScaleWidth, gao    Next i    delay 0.00002Next gao

这里注意外层循环如果从0到sy的话会出错,从20到sy的话最后可能整个图片会留一条白线,所以这里选择了从20到sy+10,step可以调节百叶窗闭合的速度

竖直百叶窗与水平类似,给出代码

pic2.ClsDim pages As Integerpages = 40  '切成40个纵条Dim sx As Single '每个纵条的宽度sx = pic1.ScaleWidth / pagesDim kuan, id As Single 'kuan表示当前每个纵条画出来的宽度id = pic2.ScaleWidth / pic1.ScaleWidthFor kuan = 20 To sx + 5 Step 2    For i = 0 To pages - 1        pic2.PaintPicture pic1.Picture, sx * i * id, 0, kuan * id, pic2.ScaleHeight, sx * i, 0, kuan, pic1.ScaleHeight    Next i    delay 0.00002Next kuan

结束

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VB如何制作多张图片的特效显示效果(就像POWERPOINT制作的特效那样),用来制作屏保程序
VB图形和绘图操作
Android例子
使表格中的图片具有点击放大和还原效果 | VBA实例教程
Visual Basic自适应窗体设计经验
关于Width、ScaleWidth和Height、ScaleHeight
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服