VB中随机图像的魅力

VB中随机图像的魅力
2000-07-04· ·-··-

p>  在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
posted @ 2006-07-10 03:48  Vagrant  阅读(327)  评论(0编辑  收藏  举报