摘要载入中… 请稍等…
内容载入中… 请稍等…
| ◎→ | 本类最新 |
|
VB6制作Win98风格的工具栏 动态加载ActiveX控件漫谈 实现窗口图像缩放、滚动技巧 VB中处理长列表框项的两种方法 VB应用程序中的工具提示和状态显 VB实现窗口的弹出式菜单 VB实现按钮浮动效果 |
|
| ◎→相关资源 | |
| C语言入门视频教程 C#编程WinForm入门视频 Asp.net入门视频教程下载 VC++编程视频教程下载 VB窗体文章 HTML入门教程 VB基础视频教程 VB窗体文章 VB文件文章 VB数据库文章 VB-API文章 VB控制文章 | |
| ◎→ | 热门资源 |
| 制作方向按钮 制作半透明窗体和形状不规则的窗 制造出透明的Form 怎样得到文本框(TextBox)中的文 暂时禁止窗口更新 在最小化状态时提供提示 在运行时动态生成多个相同的控件 |
|
在VB中实现位图的透明放置 作者:王翠荣 葛光祥 我们在开发一个软件中,通过扫描仪输进了大量实景图片,这些图片是以位图格式存储的,实际需要将这些图片透明放置到多彩色背景上,而在我们所使用的Visual Basic for Windows开发环境中,只能将WMF格式的矢量图(通过Image控件装载)透明放置到多彩色复杂背景图上,对位图只能象照片一样将图片上的每一个点阵信息贴到复杂背景上。本文讨论的问题就是如何将位图透明放置到多色彩背景上,用于实现不规则前景在复杂背景上的动画,并给出了源程序。 首先将图片通过扫描仪输入到计算机,以*.BMP格式存盘,然后利用图象处理软件对扫进的图片进行加工,加工过程中应注意:将来准备放到复杂背景上的信息不能是黑色,不准备放到复杂背景上的信息要过滤掉,一律置成黑色。只有这样才能实现将位图上所关注的形状不规则信息透明放置到多彩复杂背景上,且不覆盖背景。我们主要使用Windows的API函数BITBLT产生此效果。 基本步骤如下: (1)首先在Forml上创建3个Picture控制,Name属性分别为PicCel(装载前景位图)、Picmatte(存放前景位图的黑白模板)、Bkgrd(存放复杂背景图象),再创建一个命令控制按钮Commondl。在PicCel上装入一幅黑色背景下的彩色位图; (2)将PicCel上的图象拷贝到Picmatte上,然后在Picmatte上进行工作,即在Picmatte上逐行逐点扫描位图信息,凡是非黑色象素点将其置成白色,这样在Picmatte上产生了PicCel的一个黑白模板,Picmatte上的彩色图象大小和PicCel一样,只是将PicCel上的非黑色信息转换成白色; (3)PicCel和Picmatte作反相invert运算产生PicCel的反相图象存于PicCel中; (4)用或运算将Picmatte贴于复杂背景Bkgrd上; (5)用异或运算将PicCel贴于复杂背景Bkgrd上。 程序清单如下: 1 Const srccopy=&HCC0020 2 Const srcinvert=&H660046 3 Const srcpaint=&HEE0086 4 Sub Command1 Click() 5 black=RGB(0,0,0) 6 white=RGB(255,255,255) 7 position=0’拷贝piccel到picmatte上 8 r%=bitblt(ByVal picmatte.hDC,ByVal 0,ByVal 0,ByVal piccel.width,ByVal piccel.Height,ByVal piccel.hDC,ByVal 0,ByVal 0,ByVal srccopy) 9 For scanline=0 To(piccel.Height-1) 10 Do‘取得picmatte上坐标为(position,scanline)点的颜色 11 currentcolor=getpixel(picmatte.hDC,position,scanline) 12 If currentcolor<>black Then‘如果该点不为黑色,则置为白色 13 retlong=setpixel(picmatte.hDC,position,scanline,white) 14 End If 15 position=position+1 16 Loop While position<piccel.Width 17 position=0 18 Next scanline ‘创建原位图piccel的反相图象 19 r%=bitblt(ByVal piccel.hDC,ByVal 0,ByVal 0,ByVal piccel.Width,ByVal piccel.Height,ByVal picmatte.hDC,ByVal 0,ByVal 0,srcinvert) 20 r%=bitblt(ByVal bkgrd.hDC,ByVal 10,ByVal 10,ByVal piccel.Width-1,ByVal piccel.Height-1,ByVal picmatte.hDC,ByVal 0,ByVal 0,srcpaint) 21 r%=bitblt(ByVal bkgrd.hDC,ByVal 10,ByVal 10,ByVal piccel.Width-1,ByVal piccel.Height-1,ByVal piccel.hDC,ByVal 0,ByVal 0,ByVal srcinvert) 22 End Sub 23 Sub Command2-Click() 24 End 25 End Sub 26 Sub Form-Load() 27 picmatte.Width=piccel.Width 28 picmatte.Height=piccel.Height 29 End Sub[1]
| 芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们 |