在VB中实现位图的透明放置

吾岂爱一躯

吾岂爱一躯

2016-02-19 18:10

今天图老师小编要跟大家分享在VB中实现位图的透明放置,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!
我们在开发一个软件中,通过扫描仪输进了大量实景图片,这些图片是以位图格式存储的,实际需要将这些图片透明放置到多彩色背景上,而在我们所使用的VisualBasicforWindows开发环境中,只能将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上。
  程序清单如下:
  1Constsrccopy=&HCC0020
  2Constsrcinvert=&H660046
  3Constsrcpaint=&HEE0086
  4SubCommand1Click()
  5black=RGB(0,0,0)
  6white=RGB(255,255,255)
  7position=0'拷贝piccel到picmatte上
  8r=bitblt(ByValpicmatte.hDC,ByVal0,ByVal0,ByValpiccel.width,ByValpiccel.Height,ByValpiccel.hDC,ByVal0,ByVal0,ByValsrccopy)
  9Forscanline=0To(piccel.Height-1)
  10Do‘取得picmatte上坐标为(position,scanline)点的颜色
  11currentcolor=getpixel(picmatte.hDC,position,scanline)
  12IfcurrentcolorblackThen‘如果该点不为黑色,则置为白色
  13retlong=setpixel(picmatte.hDC,position,scanline,white)
  14EndIf
  15position=position 1
  16LoopWhilepositionpiccel.Width
  17position=0
  18Nextscanline‘创建原位图piccel的反相图象
  19r=bitblt(ByValpiccel.hDC,ByVal0,ByVal0,ByValpiccel.Width,ByValpiccel.Height,ByValpicmatte.hDC,ByVal0,ByVal0,srcinvert)
  20r=bitblt(ByValbkgrd.hDC,ByVal10,ByVal10,ByValpiccel.Width-1,ByValpiccel.Height-1,ByValpicmatte.hDC,ByVal0,ByVal0,srcpaint)
  21r=bitblt(ByValbkgrd.hDC,ByVal10,ByVal10,ByValpiccel.Width-1,ByValpiccel.Height-1,ByValpiccel.hDC,ByVal0,ByVal0,ByValsrcinvert)
  22EndSub
  23SubCommand2-Click()
  24End
  25EndSub
  26SubForm-Load()
  27picmatte.Width=piccel.Width
  28picmatte.Height=piccel.Height
  29EndSub->

展开更多 50%)
分享

猜你喜欢

在VB中实现位图的透明放置

编程语言 网络编程
在VB中实现位图的透明放置

VB中位图旋转的实现

编程语言 网络编程
VB中位图旋转的实现

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VB中任意旋转位图的实现

编程语言 网络编程
VB中任意旋转位图的实现

在C++ Builder中显示透明位图

编程语言 网络编程
在C++ Builder中显示透明位图

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VB中实现文件上传

编程语言 网络编程
在VB中实现文件上传

在VB中模拟实现邮件传输

编程语言 网络编程
在VB中模拟实现邮件传输

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

QQ最近登录过的所有详细时间查询方法

QQ最近登录过的所有详细时间查询方法

在VB中如何使用ping命令

在VB中如何使用ping命令
下拉加载更多内容 ↓