加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VB实现图像切换效果(拼图可用)

(2012-02-15 14:44:59)
标签:

杂谈

分类: vb教学

孙金萍

  在多媒体程序演示及屏幕保护程序中常看到图像的自动切换特技效果,其实我们完全可以利用VB中的PaintPicture方法来实现这一效果。与以前调用Windows API函数BitBlt相比,前者更易使用且调用速度快五倍。
  PaintPicture方法允许我们将象素从一个对象拷贝到另一个对象上。它可在一刹那间将一个图片框的一块矩形的部分转移到另一个图片框或一个窗体上,完成拷贝、翻转、改变大小、重新定位、组合以及其它操作。

1 基 本 句 法

  intPicture Picture,DestX,DestY,DestWidth,Destheight,SourceX,SourceY,SourceWidth,SourceHeight,RasterOp
  第一个参数Picture是该控件(图片框或窗体)(象素将从中被拷贝)Picture属性;
  DestXDestY是目的对象的左上角坐标;
  DestWidthDestHeight描述被拷贝图片的大小;
  SourceXSourceY用来说明预拷贝源图片左上角的坐标;
  SourceWidthSourceHeight描述预给目的对象传递方块的尺寸;
  RasterOp表示各种拷贝模式,常用的是&HCC0020或省略。

2 应 用 实 例

  1.创建项目文件
  运行VB,建立一个工程文件Project1,添加一个新的Form名称为Form1。在Form1中加入两个图片框PictureBox和几个定时器Timer(对应图片文件的个数)。设置各控件的属性如下:
Form1:AutoRedraw=True;
ScaleMode=3;
Picture1:AutoRedraw=True;
ScaleMode=3
Visible=False
Picture2:AutoRedraw=True
ScaleMode=3
Visible=True
  2.代码编写
  声明全局变量:
Dim j, i As Integer
Dim stripes As Integer
Dim stripeheight As Integer
窗体初始化:
Private Sub Form-Load()
Form1.WindowState=vbMaximized
Timer1.Enabled=True
Timer2.Enabled=False
Timer3.Enabled=False
Timer4.Enabled=False
Timer5.Enabled=False
Timer1.Interval=10
′启动定时器1
End Sub
功能实现程序:Private Sub Timer1-Timer()
i=0
j=0
Picture1.Picture=LoadPicture(App.Path+
″\Back1.bmp) ′装入图片1
timer1.Enabled=False
′关闭定时器1
Timer2.Enabled=True
′启动定时器2
Timer2.Interval=50
End Sub

Private Sub Timer2-Timer()
If i<=Picture1.ScaleHeight Then
i=i+100
Picture2.PaintPicture Picture1.Picture,0,0,Picture1.ScaleWidth,i,0,-0,Picture1.ScaleWidth,i
Else
Timer2.Enabled=False
Picture1.Picture=LoadPicture(App.Path+
″\Back2.bmp) ′装入图片2
Timer3.Enabled=True
′启动定时器3
Timer3.Interval=50
End If
End Sub

Private Sub Timer3-Timer()
If j<=Picture1.ScaleWidth Then
j=j+100
Picture2.PaintPicture Picture1.Picture,Picture1.ScaleWidth-j,0,j,-
Picture1.ScaleHeight,Picture1.ScaleWidth-j,0,j,Picture1.ScaleHeight
Else
Timer3.Enabled=False
Picture1.Picture=LoadPicture(App.Path+
″\Back3.bmp)
Timer4.Enabled=True
′启动定时器4
Timer4.Interval=50
End If

 

End Sub

Private Sub Timer4-Timer()
stripeheight=500
stripes=Fix(Picture1.ScaleHeight/stripeheight)
For j=20 To stripeheight Step 20
For i=0 To stripes
Picture2.PaintPicture Picture1.Picture,0,i *stripeheight,Picture1.ScaleWidth, j-,0,i *stripeheight,Picture1.ScaleWidth,j
Next
Next
Timer4.Enabled=False
Picture1.Picture=LoadPicture(App.Path+
″\Back4.bmp)
Timer5.Enabled=True
′启动定时器5
Timer5.Interval=50
End Sub
Private Sub Timer5-Timer()
Dim w,h As Integer
w=Fix(Picture1.ScaleWidth/2)
h=Fix(Picture1.ScaleHeight/2)
j=0
For i=0 To w Step 10
Picture2.PaintPicture Picture1.Picture,w-i,h-j,2 *(i+10), 2 *(j+10),w-i,h-j,2 *(i+10), 2 *(j+10)
j=j+10
Next
Timer5.Enabled=False
Timer1.Enabled=True
′循环切换
Timer1.Interval=50
End Sub

Private Sub Picture2-Click()
end
′当有击鼠标动作时结束
End Sub
  本程序使用多个定时器可改变各图片装入速度(也可改变interval值来实现这一功能),增加了程序的灵活性和可移植性。该程序在VB6.0中运行通过。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有