VB中随机图像的魅力

发表于:2007-06-21来源:作者:点击数: 标签:
在 VB 中提供了相当强的绘图功能, 可以在窗口或图形框中利用各种命令绘制各种图形, 灵活使用这些绘图命令不仅可以完成许多特殊的功能, 而且可以为WINDOWS 的程序界面增加许多活力, 特别是那些巧妙的随机图像则更具有特殊的魅力, 下面仅以三种随机动画为例,

   

  在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

原文转自:http://www.ltesting.net