用VB实现图像特殊显示效果

软件世界

在VB中不仅可以使用图形控件来显示图片或图像,同时也提供了一些绘制图形的方法。图形方法的使用使得VB能够创建出许多图形控件中无法达到的可视效果,使得其图片的显示方式更加丰富多彩!比如利用Pset、Point和Paintpicture方法就不仅可以实现图片的某些特殊显示效果,而且还可以实现图片的动态显示。

一、利用Pset、Point方法实现百叶窗显示与隐藏效果

[Object.]Pset[step](X,Y)[,Color]方法:主要用于将对象上(x,y)位置指定的点设置颜色,也可以绘制一个指定颜色的点。其中Object参数表示绘制点的对象,如窗体(Form)、图片框(Picture)等,如果缺省的话,则当前窗体成为作用对象,Step参数用于指定相对于由CurrentX和CurrentY属性提供的当前位置的坐标,即如果调用语句为:Pset step (500,500),则绘制点的位置为(CurrentX+500,CurrentY+500),如果没有Step参数则(X,Y)为相对于Object左上角的坐标。其中Color用来指定绘制点的颜色。其中绘制点的大小由Object的DrawWidth决定。其中中括号内的参数为可选项。
Object.Point(x,y)方法:用于获取窗体或图片框控件指定(x,y)位置的点的RGB颜色值,其参数的作用同上。以上两个方法的综合应用的话,则可以实现图片的一些特殊的显示效果。
启动VB6.0,新建一“标准EXE”工程文件,利用标准控件工具箱上的图片框(PictureBox)控件在窗体上添加两个图片框(Picture1,Picture2),并设置其大小一样,然后点击Picture1的Picture属性右边的“...”按钮,打开图片选择对话框为Picture添加显示的图像。然后双击窗体打开代码输入窗口,输入如下源代码:
Option Explicit
Private Sub Form_Load()
Picture1.ScaleMode = 3 '设置模式为像素
Picture2.ScaleMode = 3
Picture2.Width = Picture1.Width
Picture2.Height = Picture1.Height
End Sub
Private Sub Picture1_Click() '显示图像
Dim times As Integer
Dim x As Integer
Dim y As Integer
Dim color
For times = 0 To 10
For x = times To Picture1.ScaleWidth Step 10
For y = 0 To Picture1.ScaleHeight
color = Picture1.Point(x,y) '获取Picture1(x,y)位置的颜色
Picture2.PSet (x,y), color '用获取的颜色在Picture2上相同的位置绘点
DoEvents
Next
DoEvents
Next
DoEvents
Next
End Sub
Private Sub Picture2_Click() '以同样效果隐藏图像
Dim times As Integer
Dim x As Integer
Dim y As Integer
Dim color
For times = 0 To 10
For x = times To Picture1.ScaleWidth Step 10
For y = 0 To Picture1.ScaleHeight
Picture2.PSet (x,y), Picture2.BackColor '以Picture2的背景色覆盖图像
DoEvents
Next
DoEvents
Next
DoEvents
Next
End Sub
然后按下F5键运行程序,点击Picture1即可在Picture2中看到Picture1的图像以百叶窗效果,由朦胧到清晰,由远到近的特殊显示效果。而点击Picture2则可以看到Picture2以同样的效果恢复到背景颜色,这样为我们在VB程序中创建图像的平滑过渡显示效果提供了一个很好的途径。

二、利用Paintpicture方法实现缩放显示效果

[Object.]PaintPicture Picture,X1,Y1,[width1]height1][X2][Y2][Width2][Height2]Opcode方法:利用它可以在窗体、图片框和Printer对象上的任何地方绘制图形,可以将矩形图块从一个地方移到另外一个地方,从而可以很轻松地实现图片的动态显示或缩放显示效果。其中Picture参数必须为一个图片对象,它由窗体或控件的Picture或Image属性决定;X1,Y1为图像左上角在Object中的显示位置。Width1,Height1决定图像在Object中的显示宽度与高度,利用它们可以很容易的实现图像的缩放。而X2,Y2,Width2,Height2则用来定义裁剪源图像的左上角位置坐标和裁剪的宽度与高度,从而可以实现图像部分显示的效果,而Opcode参数则决定了源图像复制到目标区域时与目标区域内的图像重叠时产生的效果,从而可以实现两幅图像的交互显示的特殊效果。其中Object对象可以与Picture的对象为同一对象。

1.局部静态放大

同样在一“标准EXE”工程文件中,创建一图片框(Picture1),设置Autosize属性为“True”,并通过Picture属性为它添加一幅图像,下面我们要实现的就是将该图像中心部分100×100像素的方块区域放大2倍显示。在代码输入窗口中输入如下源代码:
Option Explicit
Private Sub Form_Load()
Picture1.ScaleMode = 3 '设置模式为像素
Form1.ScaleMode = 3
End Sub
Private Sub Picture1_Click()
Picture1.PaintPicture Picture1.Picture,Picture1.ScaleWidth / 2 - 100, Picture1.ScaleHeight / 2 - 100, 200, 200, Picture1.ScaleWidth / 2 - 50, Picture1.ScaleHeight / 2 - 50, 100, 100
End Sub
运行程序,点击图片框,即可看到显示效果。如果将其中目标显示区域Object改为其他的控件,如窗体或其他图片框,则可以在其他地方看到其单独的放大图像效果。如果将其中的Width1,Height1设置得比Width2,Height2小则实现缩小显示效果。

2.缩放动态显示图像效果

同样在上面的工程中,在窗体上添加两个按钮(Command1.caption=“放大显示”,Command2.caption=“缩小显示”),并将图片框的Visible属性设置为“False”,然后在代码窗口中添加如下源代码:
Private Sub Command1_Click() '由小到大放大显示
Dim i As Integer
For i = 1 To 10
Form1.PaintPicture Picture1.Picture Form1.ScaleWidth/2 - 50 i Form1.ScaleHeight/2 - 50 i 100 i,100 i ' Picture1.ScaleWidth/2 - 50, Picture1.ScaleHeight/2 - 50 100 100
DoEvents
Next
End Sub
Private Sub Command2_Click '由大到小缩小显示
Dim i As Integer
Form1.AutoRedraw = True
For i = 10 To 1 Step -1
Form1.Cls
Form1.PaintPicture Picture1.Picture, Form1.ScaleWidth / 2 - 50 * i, Form1.ScaleHeight / 2 - 50 * i, 100 * i, 100 * i ', Picture1.ScaleWidth / 2 - 50, Picture1.ScaleHeight / 2 - 50, 100, 100
DoEvents
Next
End Sub
运行程序,点击“放大显示”按钮,即可看到图像在窗体上由小到大慢慢显示,从而达到镜头逐渐拉近的动态显示效果,而点击“缩小显示”按钮,则达到图像由大到小,镜头逐渐推远的显示效果。

3.图像的翻转

利用如下的代码则可以实现图像的上下翻转:
Picture1.PaintPicture Picture1.Picture, 0, Picture1.ScaleHeight, Picture1.ScaleWidth, -Picture1.ScaleHeight;
而通过Picture1.PaintPicture Picture1.Picture Picture1.ScaleWidth, 0, -Picture1.ScaleWidth, Picture1.ScaleHeight则可以实现图像的左右翻转;依据同样的原理当然还可以实现其他的旋转效果。
以上就是在VB中进行图形图像操作中比较常用的三种方法,借助于它们还可以实现图像的许多过渡效果和特殊显示效果,特别是如果能恰当使用Opcode参数的话,则用Paintpicture方法可以使得图像的显示更加丰富多彩,这样也就使得我们用VB创建的程序更加引人注目,使得用户在使用程序功能的同时,还能感觉到操作环境带来的美的享受!