如果看本篇不太懂的话,请先看第一篇
先把函数参数表放在这里
对象.PaintPicture picture,x1,y1,[width1],[height1],[x2],[y2],[width2],[height2],[opcode]
实现 图片从左到右进入 的效果,需要怎么做呢
很简单可以想到用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
效果如图
下面我们再看一下右上角斜向下
右上角斜向下分析图
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
其他的平移进入型方法都一样,明确了坐标系以后就好办了
拿水平百叶窗为例,效果图如下
我们需要把整个图片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
联系客服