赛迪网 > IT技术 编程语言 > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

利用API函数实现图像淡入淡出效果

发布时间:2006.08.16 02:42     来源:plwww    作者:

利用API函数实现图像淡入淡出效果 一般传统的实现两个PictureBox之间图像的淡入淡出效果都需要使用大量的API函数并进行复杂的调色板以及绘图设备(Device Context)的操作。但是在Win98、Win2000中,微软提供了支持透明图像拷贝的AlphaBlend函数。这篇文章就介绍如何通过API函数AlphaBlend实现PictureBox之间图像的淡入淡出效果。AlphaBlend函数的定义在msimg32.dll中,一般Win98、Win2000都带了这个库,在编程之前你可以先察看一下该文件是否存在。 打开VB建立一个新工程。选择菜单 Project Add Module 添加一个模块到工程中,在其中输入以下代码:Public Type rBlendProps tBlendOp As Byte tBlendOptions As Byte tBlendAmount As Byte tAlphaType As ByteEnd TypePublic Declare Function AlphaBlend Lib "msimg32" (ByVal 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 widthSrc As Long, _ByVal heightSrc As Long, ByVal blendFunct As Long) As BooleanPublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _(Destination As Any, Source As Any, ByVal Length As Long) 大家可以看到,AlphaBlend函数的定义同普通的复制函数Bitblt很相似,只是最后的参数blendFunct定义为一个rBlendProps结构。那么为什么在函数定义中blendFunct 定义为Long类型呢?因为rBlendProps结构长度是4个字节。而Long类型变量的长度也是4个字节,那么我们就可以程序中通过API函数CopyMemory将一个rBlendProps结构拷贝到blendFunct 中。 在Form1中添加两个PictureBox控件,其中Picture2为源,Picture1为拷贝目标,将两者的ScaleMode都设置为3-Pixel将两者的AutoRedraw属性都设置为True,然后分别添加图像。在加入一个Timer控件以及一个CommandButton控件,然后在Form1的代码窗口中添加如下代码:Dim lTime As ByteSub ShowTransparency(cSrc As PictureBox, cDest As PictureBox, _ ByVal nLevel As Byte) Dim LrProps As rBlendProps Dim LnBlendPtr As LongcDest.Cls LrProps.tBlendAmount = nLevel CopyMemory LnBlendPtr, LrProps, 4 With cSrcAlphaBlend cDest.hDC, 0, 0, .ScaleWidth, .ScaleHeight, _.hDC, 0, 0, .ScaleWidth, .ScaleHeight, LnBlendPtr End With cDest.RefreshEnd SubPrivate Sub Command1_Click() lTime = 0 Timer1.Interval = 100 Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer() lTime = lTime + 1 ShowTransparency Picture2, Picture1, lTime If lTime >= 255 ThenTimer1.Enabled = False End If Me.Caption = Str(Int(lTime / 2.55)) + "%"End Sub 运行程序,点击Command1,就可以看到Picture2图像拷贝到Picture1上的淡入淡出效果了。 在结构rBlendProps中,最重要的参数就是tBlendAmount,该值决定了源与目标之间的透明程序。如果为0的话,源完全透明,如果为255的话,源完全覆盖目标。 另外AlphaBlend 函数不只用于两个PictureBox之间的拷贝,而且可以在两个Device Context之间的透明拷贝,也就是说,象窗口等控件之间也可以实现透明效果。不过在编程过程中发现一个问题,不知是否是AlphaBlend的Bug,就是在我写完程序后,并没有出现透明复制的效果。搞的我以为该函数不起作用,但是当我再打开VB运行上面的程序后,一切有正常了。我在MSDN上也没有找到相关的Bug列表。www.applevb.com


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 利用VB提取HTML文件中的EMAIL地址 (06-15) · 非Access数据库在VB的编程及应用 (08-15)
· VB编程的一些心得 (12-18) · 用VB开发应用程序如何使用INI文件 (02-09)
· 贪食蛇 (10-10) · 贪食蛇 (04-18)
· 让VB应用程序支持鼠标滚轮 (11-26) · 让VB应用程序支持鼠标滚轮 (03-01)
· Matthew Curland的VB函数指针调用 (04-07) · Matthew Curland的VB函数指针调用 (12-26)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管