首页 VB通过Bitblt API实现图像特效

VB通过Bitblt API实现图像特效

举报
开通vip

VB通过Bitblt API实现图像特效VB通过Bitblt API实现图像特效 VB中实现图像特技在多媒体程序设计中,为了美化显示屏幕,增加画面的动感,常常要用天各种图像显示特技。图像的切换技术能明显美化画面。用Visual Basic编制这类程序时,由于VB自身没有这种切换功能,因此需要利用第三方控件或调用WindowsAPI函数BitBlt来实现这种功能。 本文介绍用BitBlt函数实现画面的各种切换方法,供大家参考。 假设有5个图像文件(Picture1-Picture5),我们的目标是让这5幅画自动地循环显示,每幅画以某种切换方式出现,当...

VB通过Bitblt API实现图像特效
VB通过Bitblt API实现图像特效 VB中实现图像特技在多媒体程序设计中,为了美化显示屏幕,增加画面的动感,常常要用天各种图像显示特技。图像的切换技术能明显美化画面。用Visual Basic编制这类程序时,由于VB自身没有这种切换功能,因此需要利用第三方控件或调用WindowsAPI函数BitBlt来实现这种功能。 本文介绍用BitBlt函数实现画面的各种切换方法,供大家参考。 假设有5个图像文件(Picture1-Picture5),我们的目标是让这5幅画自动地循环显示,每幅画以某种切换方式出现,当有击鼠标动作时退出程序。 1 创建项目文件:运行VB,建立一个新 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 文件Project1,加入一个新的Form名称为Form1,和一个模块文件Modull,在Form1中加入一个图画框Picture1和一个定时器Timer1。设置各控件的属性如下: Form1:AutoRedraw:True ScaleMode:3 Picture1:AutoRedraw:True ScaleMode:3 Visible:False 2 代码编写Modull.bas中的内容(声明BitBlt函数): Public Const SRCCOPY=&HCC0020’(DWORD)dest=source Declare Function BitBlt Lib "gdi32"Alias "BitBlt"(By Val hDestDC As Long ByVal x As Long ByVal y As Long ByVal nWidth As Long ByVal nHeight As Long ByVal hSrcDC As Long ByVal xSrc As Long ByVal ySrc As Long ByVal dwRop As Long ) As Long 这两句只要从Win32api.txt文件中粘贴即可。 Form1中的代码: 在Declare中定义全局变量: Const bmpfilemax=5 '总共5个bmp文件 Dim bmpfile(bmpfilemax)As String 'bmp 文件的文件名数组 Dim drawbmpmode(bmpfilemax) As Integer '各画显示时的切换方式 Dim bmpnum,movestep,xmax,ymax As Integer Dim kxy As Single 'x,y二个方向的比例 程序运行时先作初始化工作: Private Sub Form_Load () bmpnum=0 '当前文件号=0,第一个文件 bmpfile(0)=App.Path+"\bmp1.bmp" bmpfile(1)=App.Path+"\bmp2.bmp" bmpfile(2)=App.Path+"\bmp3.bmp" bmpfile(3)=App.Path+"\bmp4.bmp" bmpfile(4)=App.Path+"\bmp5.bmp" drawbmpmode(0)=1 drawbmpmode(1)=5 drawbmpmode(2)=3 drawbmpmode(3)=4 drawbmpmode(4)=2 movestep=0 '步进参数 xmax=Form.ScaleWidth/2 ymax=Form.ScaleHeight/2 kxy =ymax/xmax Picture1.Picture=LoadPicture(bmpfile(bmpnum)) Timer1.Interval=30 '定时器起动 End Sub 响应鼠标: Private Sub Form_Click () End '当有击鼠标动作时程序结束 End Sub 切换演示工作主要在定时器中完成: Private Sub Timer1_Timer () hDestDC=Form1.HDC '目标 DChSrcDC=Picture1.hDC '源DC,画是从不可见的Picture1中拷贝到窗体 drawflag =drawbmpmode(bmpnum) '当前画出现的方式 Select Case drawflag Case 1 '从中间逐步放大 endmax=xmax '用于结束判断 X1=xmax-movestep w=movestep*2 Y1=Cint(ymax-movestep*kxy) h=Cint(2*movestep*kxy) i=BitBlt(hDestDC,X1,Y1,w,h,hSrcDC,X1,Y1,SRCCOPY) Case 2 '从左到右 endmax=xmax w=movestep*2 h=Form1.ScaleHeight i=BitBlt(hDestDC,0,0,w,h,hSrcDC,X1,Y1,SRCCOPY) Case 3 '左右向中间 endmax=xmax w=movestep h=Form1.ScaleHeighti=BitBlt(hDestDC,0,0,w,h,hSrcDC,0,0,SRCCOPY) '左 面部分 X1= Form1.ScaleWidth-movestep i=BitBlt(hDestDC,X1,0,w,h,hSrcDC,X1,0,SRCCOPY) '左面部分 Case 4 '栅条状 endmax=CInt(2*xmax/10) '共分阶10条 tempi=CInt(2*xmax/10) w=movestep h=Form1.ScaleHeight For ij=0 To 9 i=BitBlt(hDestDC,tempi*ij,0,w,h,hSrcDC,tempi*ij,0,SRCCOPY) Next ij Case 5 '棱形状 endmax=CInt(2*xmax/10) tempi=CInt(2*xmax/10) w=movestep For ih=0 To w-1 For ik=0 To 9 For ij=0 To 9 l=tempi*ik+tempi/2 t=tempi*ij+tempi/2 i=BitBlt(hDestDC,1-(w-ih),t-ih,(w-ih)*2,1,hSrcDC,1-(w-ih), t-ih, SRCCOPY) i=BitBlt(hDestDC,1-(w-ih),t+ih,(w-ih)*2,1,hSrcDC,1-(w-ih), t+ih, SRCCOPY) Next ij Next ik Next ih End Select Form1.Refresh movestep=movestep+2 '步进增加 If movestep>endmax Then '若步进够大,画面都已显示,本张画结束切换 bmpnum=bmpnum+1 '进到下一张画 If bmpnum>=bmpfilemax Then '若5张画已显示完则再从第一张开始 bmpnum=0 End If movestep=0 Picture1.Picture=LoadPicture(bmpfile(bmpnum)) End If End Sub
本文档为【VB通过Bitblt API实现图像特效】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:5
分类:生活休闲
上传时间:2017-09-26
浏览量:29