VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB中随机图像的魅力
发表评论(0)作者:李莹, 平台:VB6.0+Win98, 阅读:10677, 日期:2000-11-03
---- 在VB中提供了相当强的绘图功能, 可以在窗口或图形框中利用各种命令绘制各种图形, 灵活使用这些绘图命令不仅可以完成许多特殊的功能, 而且可以为WINDOWS 的程序界面增加许多活力, 特别是那些巧妙的随机图像则更具有特殊的魅力, 下面仅以三种随机动画为例, 演示VB中随机动画图像的风采。

一、随机简单图形动画
---- 完成此工作主要的直接使用VB中的作图命令, 比如画点函数PSet(X,Y),COLOR, 其中X Y为图形坐标系统的坐标, COLOR表示颜色值,可用QBColor(x)或RGB(r,g,b)等形式表示, 同时可以控制画点的半径长度,即通过设置Drawwidth 属性, 当半径大于1时实际上此命令是画一个实心圆,当然也可以利用Circle命令直接绘制圆形。VB中还提供了随机数产生手段,即RND内部函数, 它可以产生0到1之间的随机数, 利用此函数可以随机确定画点的位置、点的颜色、点的半径等,这样即可以实现在固定区域内进行随机画圆操作, 其中随机位置的确定必须根据作图区域进行确定, 具体可用 ScaleWidth及Scaleheight属性进行确定。为了实现连续动画效果,可利用时间控件或"DoEvents" 命令实现后台处理, 具体请见文后的Command1_Click事件中的程序代码。如果把程序改为随机画矩形或空心圆,或者灵活控制画圆的半径, 则会产生另外的艺术效果, 比如在一片黑色的屏幕上画出随机的小点, 就象夜空中的点点繁星。
二、随机文字动画
---- 在VB中可利用"Print"命令进行字符串的显示工作,此命令一般只在当前位置显示字符串, 但具体操作时可通过 CurrentX和CurrentY 控制字符串显示位置,通过FontSize 控制字体的尺寸, 通过ForeColor和BackColor控制字符的前景色和背景色, 如果把上述的各项属性值均采用RND 进行随机产生, 即会形成随机字符显示效果, 比如在一个图形框中显示一些新年贺辞, 同时播放美妙的音乐, 那将是一份极好的新年礼物。需要注意一点,由于字体互相覆盖,长时间显示会使窗口显得乱一些,所以最好按一定时间用 "CLS"命令进行窗口清除。此处说明一下颜色的控制技巧, 如果使用QBColor(Rnd*15)方式定义随机颜色,只能在16种颜色中随机产生, 而采用RGB(Rnd*256,Rnd*256,Rnd*256) 方式则可以产生256*256*256种不同的颜色,但具体的颜色特性受当前WINDOWS 屏幕模式的限制。具体操作方式请见文后Command2_Click事件中的代码。
三、立体图形随机动画
---- 上面只是直接利用绘图语句进行简单的动画, 如果通过这些命令绘制成一定的立体图形, 并实行随机动画操作, 那将更具有特殊的艺术效果。比如下面两行简单的命令将画出一个具有强烈立体感效果的三角锥体, 其中(M,N) 为锥体的顶端坐标:
Picture1.Line(m,n+2.5*i)-(m+i/2,n+2*i),
RGB(180,180,180)
Picture1.Line(m,n+2.5*i)-(m-i/2,n+2*i),
RGB(80,80,80)
---- 如果把屏幕的底色置为暗黄色, 在此窗口内的随机位置画出大小不一的三角锥, 就象在黄色的沙漠上建起了无数的金字塔, 具有一种特殊的情趣。具体操作方法请见文后程序中的Command3_Click事件中的代码。
四、随机显示图像
---- 在VB中不仅提供了完善的做图方法, 而且在绘图方法中还可以灵活的处理图像文件, 其中提供了一个方便的图像复制命令即: PaintPicture, 此命令的功能与API 函数 BitBlt类似, 但由于不用做API函数说明,所以更有它的方便之处, 语法格式:
PaintPicture Pic,destX,destY,
destWidth,destHeight,
scrX,scrY,scrWidth,scrHeight
其中Pic:为图片对象, 如图形框Picture等;
destX,destY:目标图像位置;
destWidth,destHeight:目标图像尺寸;
scrX,scrY:原图像的裁剪坐标;
scrWidth,scrHeight:原图像的裁剪尺寸;

---- 从以上可以看出,目标图像的位置可以随机改变,不仅如此,通过改变destWidth与destHeight值,还可以改变复制后的图像的尺寸, 实现放大或缩小图像显示, 甚至可以置这两个属性为负值, 这样可使目标图像在水平方向翻转,实现特殊效果的图像显示, 灵活运用RND 随机函数确定上述各个参数, 可取得理想的随机图像显示效果。具体操作方法请见文后程序Command4_Click事件中的代码。
---- 文后是一个完成上述随机动画的完整演示程序,需要在From1 窗体中安放两个图形框Picture(1-2)及四个命令按钮Command1-5,然后把下面的代码填入相应的事件处,运行此程序之后,按下按钮1则在图形框中进行随机画圆演示, 按下按钮2 则在图形框中进行随机文字显示, 按下按钮 3 则在图形框中随机显示三角锥体, 按下按钮4 则进行随机图像显示, 按下按钮5 则退出程序。此程序在WINDOWS 95 系统下VB4.0环境下调试通过。

注释:程序准备
Private Sub Form_Load()
Command1.Caption = "随机画圆"
Command2.Caption = "随机文字"
Command3.Caption = "立体图形"
Command4.Caption = "随机图像"
Command5.Caption = "退出"
Form1.ScaleMode = 1
Picture1.ScaleMode = 1
Picture2.Picture = LoadPicture
("d:\windows\256color.bmp")
End Sub
注释:随机画圆动画
Private Sub Command1_Click()
Dim XPos, YPos
Picture1.Cls
Do
nn = Int(100 * Rnd)
If nn > 0 Then
Picture1.DrawWidth = nn
End If
XPos = Rnd * Picture1.ScaleWidth
YPos = Rnd * Picture1.ScaleHeight
Picture1.PSet (XPos, YPos), RGB
(Rnd * 256, Rnd * 256, Rnd * 256)
DoEvents
Loop
End Sub
注释:随机文字动画
Private Sub Command2_Click()
Picture1.Cls
Do
nn = Int(45 * Rnd)
If nn > 0 Then
Picture1.FontSize = nn
End If
Picture1.CurrentX =
Rnd * Picture1.ScaleWidth - 1000
Picture1.CurrentY =
Rnd * Picture1.ScaleHeight
Picture1.ForeColor =
RGB(Rnd * 256, Rnd * 256, Rnd * 256)
Picture1.Print "随机 OK!"
n = n + 1
If n > 50 Then
n = 0
Picture1.BackColor = QBColor(Rnd * 15)
End If
DoEvents
Loop
End Sub
注释:立体随机动画
Private Sub Command3_Click()
Dim m, n
Picture1.DrawWidth = 1
Picture1.BackColor = RGB(210, 150, 0)
Picture1.Cls
Do
m = Rnd * Picture1.ScaleWidth
n = Rnd * Picture1.ScaleHeight - 500
For i = 0 To Rnd * 800
Picture1.Line(m,n+2.5*i)-(m+i/2,n+2*i),
RGB(180,180,180)
Picture1.Line(m,n+2.5*i)-(m-i/2,n+2*i),
RGB(80,80,80)
Next i
DoEvents
Loop
End Sub
注释:随机图像显示
Private Sub Command4_Click()
Do
xx = Rnd * Picture1.Width
yy = Rnd * Picture1.Height
Picture1.PaintPicture Picture2.
Picture, xx, yy,
Picture2.Width, Picture2.Height
DoEvents
Loop
End Sub
注释:退出按钮
Private Sub Command5_Click()
End
End Sub