在VB中进行各种图形切换的方法
图形切换是多媒体应用中常见的现象。常见的切换方法可以总结如下。
剪切:当前图像被另一个图像快速替换
淡入:当前图像慢慢变黑消失
淡出:一个图像慢慢出现
从黑屏中淡出:一个图像慢慢变成另一个图像[/br:一个图像逐渐穿过并覆盖当前图像
幻灯片:一个图像以恒定速度从屏幕一侧滑入
弹出开/关:一个图像立即出现或消失
下拉/上拉:图像像窗帘一样从屏幕顶部拉下来,同样的方式。
VB和Windows API为生成切换效果提供了强大的工具。图形切换的本质是通过快速组合或复制来创建单独的图像。在某些情况下,设置切换效果只会将当前图像的属性从可见更改为真实,如弹入弹出、切换等。在上面的效果中,但是大多数情况下,切换效果需要通过调用Windows的GDI函数来完成。
图形切换和弹出入弹出是最容易实现的例子。前面已经解释了这两种切换效果的含义。拉出表单中的Image1和Image2。请注意,Image1和Image2的坐标和大小应该完全相同。并设置了两个事先准备好的数字。将Image1的Visible设置为True,然后将Image2的Visible设置为false,双击Form,并输入以下程序代码:
private Sub Form _ Click()
Image1。Visible=False
Image2。Visible=True
End Sub
当程序运行时,您应该只能看到图像1。这时点击鼠标可以看到Image1很快被Image2取代。形成图形的切换效果。然后错开Image1和Image2的坐标,不要让两个图形重叠。此时再次运行程序,点击鼠标。同时,图像1消失,图像2出现在另一个地方。形成图形的突入和弹出效果。
拉入和滑入是稍微复杂一些的切换方法。在Form1中添加Timer组件,设置interval为1,然后在Form1中添加PictureBox1,假设PictureBox1左边为-3000,宽度为3000;Form1的宽度为9000。双击计时器组件并添加以下程序代码:
私有子定时器1_Timer()
If Picture1。Left > 6000 Then
Picture1。left = 6000
Else
picture 1。移动图片1。左+ 100
End If
End Sub
运行程序时,因为Picture1在边界之外,所以看不到。附图片。左+100,Picture1从边界外慢慢滑入形状。当图片1距离左边界大约6000时,大约在表格1的中间,图片1停止移动。形成图形从屏幕边缘或角落平滑滑入的画图效果。但如果事先在Picture1静止后的位置设置与Picture1大小相同的Picture2,就会形成下一个图形逐渐穿过并覆盖当前图形的滑入效果。
上面的算法都很简单,可以满足一般的编程要求,但是在进行一些高要求的编程时,这些效果就有点粗糙了,但是调用Windows本身的GDI函数就可以满足一些近乎苛刻的效果。让我们通过调用GDI函数重写上面的滑入效果。
在Form1中设置两个尽可能大小相同的picCurrentPicture和picnextpicture,并将picCurrentPicture的Visible设置为True,picNextPicture的Visible设置为False;Autosize设置为True,ScaleMode设置为Pixel,然后向Form1添加一个命令和一个计时器。编程过程如下:
首先解释一下公共部分。在VB中可以直接从Text API视图中复制关于BitBlt的语句。具体内容如下:
将函数BitBlt Lib " GDI "(ByVal hDestDC As _
Integer,ByVal X As Integer,ByVal Y As Integer,_
ByVal nWidth As Integer,ByVal nHeight As Integer,_
ByVal hSrcDC As Integer,ByVal XSrc As Integer,_
ByVal YSrc As Integer,ByVal dwRop As Long)As Integer
Const lngSRCCORY = & HCC 020
Const
双击计时器组件并输入以下代码:
private Sub Timer 1 _ Timer()
Dim intI As Integer
int next piece = BitBlt(picCurrentPicture . hdc,0,0,_
intPieceToAdd,PicCurrentPicture。ScaleHeight,_
picNextPicture.hDC,0,0,lngSRCCOPY)
IntPieceToAdd = IntPieceToAdd+intWidthChang
IntI = IntI+1
If(IntI-int steps)> 0则Timer1。Enabled=False
End Sub
双击Command1并输入以下代码:
private Sub command 1 _ Click()
intCurrentPictureWidth = picCurrentPicture。scale width
intPieceToAdd = int width change
定时器1。Enabled=True
End Sub
此时,再次运行程序并单击Command1。怎么样?这次滑进去的效果是不是比用前一种方法要精细很多?
另外,翻转、旋转、淡入淡出都是常用的。限于篇幅,这里只是简单介绍一下。
在翻转效果中,显示每个图形的反面并不重要,但需要空空格来改变。同时,还必须考虑不同图像尺寸的情况。此外,通过跟踪一些关键事件,并用它们来检测图像应该变大还是变小,程序可以更加简洁。
假设一个矩形,其中心画一条垂直线段,从矩形上最宽的点开始切换。当开关的前半部分完成后,矩形中心线的两边都缩小为窄条。在这个过程中,它的宽度减少了一个固定的量(设置为TempWidth)。在切换的后半部分,矩形将扩展到新图像的大小。
这种缩减和扩展的完成将决定切换过程的平滑度。在程序中,当矩形的宽度减少一定的增量(TempWidth)时,图形将在新的矩形中重新绘制(它将通过拉伸来适应新的大小),然后图形将通过move方法向左或向右移动一半的增量。通过调整定时器控制的速度和增量,可以产生想要的效果。
至于淡入淡出,就比较复杂了。但是,其原理是将显示图形的像素随机变黑,或将随机变黑的像素变回原色。GDI函数也有调用,详细解释用了很大篇幅,这里就不多描述了。
0条评论