说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
在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 position17 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
[简讯] JDK 7u10发布 修复安全漏洞 搜狗茹立云:为何搜狗语音助手比Siri更精准? BlackBerry 10最终版SDK Gold发布 谷歌地图正式登陆App Store 为开发者推出SDK 你的云数据的三个最大威胁 公开叫板:Google不打算推出Win8版Gmail和Drive APP备案风波:开发者何去何从? 32位和64位的JVM 我该选择哪个呢? 黑莓“Got Game Port-a-Thon”活动将于12月22日在北京举行 专访Moti Joseph:浏览器安全的经验之谈 四大开源云平台的命运基因 FPS移动游戏:画质不是第一位,操控才是死穴 微软2013年的五个安全预测 应用成武器 王淮,大城小胖论辩HTML5 局部有小雨 技术人员创业后就不再适合继续编码了? Google Dremel vs Apache Hadoop 低功耗之争:英特尔 VS ARM NEIC-诺基亚体验创新中心 助力开发者创享新移动互联时代 Google地图主管Daniel Graf:新设计,新目标 浴火重生:OpenFeint创始人推开源平台OpenKit 紧随AWS数据仓库服务 Rackspace力鼎Cloudant 创业者谈:畏惧失败,但也要拥抱失败 谷歌赢得一场战斗 苹果能否赢得战争? 走进大学校园:是什么让学生成为独立开发者? 移动周报:为什么说独立开发者才是光明康途? MapFan eye:看日本地图导航应用的新玩法 数据会被清空:部分三星、魅族手机存安全漏洞 IE10简化文件访问 支持FileReader API 从MySQL迁移到MariaSQL Wikipedia力求开放 奥巴马筹款网站的制作过程 国内芯片厂商发力4G 新岸线2013年将推LTE方案 求救!!!C++制表的源程序,在DOS中实现 有谁能告诉我 pragma,USERES,USELIB,USEFORM,USEUNIT 作用与区别 呵呵,这个问题真不好意思问:用vc怎么编译c++啊?(别笑我哦) 配置好 APACHE后,运行 http://127.0.0.1 出现的页面是: NOT ACCEPTABLE? 写在羊皮纸上的遗嘱(臭长,建议:谁也别看,没意思) 帮忙,各位兄弟姐妹 ()()()()()()()()上海佬进来!!!受过上海佬骗的进来!!()()()()()()()() 人无远虑,必有近忧。想找块风水宝地百年之后藏身。荐者有分。 可以在 NT 登录以前在客户端创建 DCOM 实例吗? 被背叛的遗嘱 能提供C++制表的源程序吗?THANK YOU!!!!!!!! 还有6天 关于Socket编程的几个问题 哪里有莫文蔚的《the way you make me feel》国语版的? 切~~~~~~~~菜~~~~~~~~~ 斑竹,我觉得这几天CSDN上很无聊,怎么老有人弱智地问重复的或者以前已有答案的问题?他们不知道可以search先? 谁知道哪里有bmp图片可以下载,给个详细网址,多谢 VC 兼职? 荷兰国旗问题 ASP刚学,用什么方式好吗 斑竹!!!!!!!!!!!!!!!! 关于IE浏览 请问vb如何访问foxpro 6.0的数据库,最好有源程序,谢谢. he_cti@163.net 算了,散分 我散,我散,我散散散 散3 发分!!!! 发分!!!!! 发分!!!!!!!! 发分!!!!!!!!!!!! 发分!!!!!!!!!!!!!!!!!!! 请问如何去掉测试版软件的“购买”提示框???急急急急!!! 有关获取HTML中Frames的问题? 给分!!!!!啊 给分!!!!!啊!! 给分!!!!!啊!!!!!! 给分!!!!!啊!!!!!!!!!!!!! 给啊!!!!!!!!!!!!! 不是俺蓄意谋两位帮主的反,实在是 ... APPLET连接数据库。。。(我已经每粉了) 千分散尽不复来!!! 千分散尽不复来!!!! 千分散尽不复来!!!!! 千分散尽不复来!! 千分散尽不复来!!!!!!!! 千分散尽不复来!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!! 用分把灌水乐园咽死!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!!! 10分之3除以5 要过程 甲数比乙数多25%,甲数相当于乙数的( )%,乙数是甲数的( )% 甲数的5分之3等于乙数的75%,已知乙数是80,求甲数的算式是( ) +2!+3!+4!+5!+6!+7!+8!+9!+10!除以3的余数是几?A1 B2 C0 甲数比乙数多20%,乙数比丙数少30%,那么甲数相当于丙数的百分之几? 甲数的5分之3等于乙数的4分之3,已知乙数是80,甲数是( ) 一个数除以5 余数是2 ,除以8 余数是7 ,除以9 余数是5 .这样的三位数一共有多少个?一种秒杀方法:5、8、9公倍数是360,1000/360=2.280,因此有3个.这是为什么呢 ,我只要秒杀的方法. 甲数比乙数多20%,乙数比丙数少20%,甲数相当于丙数的百分之几? 甲的5分之3等于乙的百分之75,乙是80,甲几? 1^1+2^2+3^3+...+8^8+9^9 除以3的余数是几?为什么? 甲数比乙数多25%,乙数比丙数少20%甲数是丙数的()% 甲数是乙数的百分之80,甲数比乙数少百分之20.这对么?为什么 甲数是80,乙数是70,乙数比甲数少百分之几? 甲数比乙数多20%,乙数比丙数少20%,甲数相当于丙数的百分之几? 甲数是80比乙数少百分之20,乙数是 甲数比乙数多百分之25,则乙数比甲数少百分之几?要立算式 甲数比乙数多20%,乙数比丙数少30%,甲数相当于丙数的百分之几? 甲数是60,比乙数少20,甲数比乙数少百分之几? 甲、乙两数的比是80:100,甲数是乙数的百分之几?乙数是甲数的百分之几?甲数比乙数少百分之几?乙数比甲数多百分之几? 甲数是乙数的35%,乙数是甲数的( )%,甲数比乙数少( )%,乙数比甲数多( )% 观察下列一组数据,想一想它们的算术平方根和立方根有什么规律?10,20,30,40,50,60,70,80,90,100 .换成下换成下列数字又有什么规律?/10,1/20,1/30,1/40,1/50,1/60,1/70,1/80,1/90,1/100 如果甲数比乙数少百分之20,那么乙数比甲数多百分之几( ) 甲数是乙数的4倍,甲数比乙数多()%,乙数比甲数少()% 观察下列一组数据,想一想他们的算术平方根和立方根有什么规律?10,20,30,40,50,60,70,80,90,100这些数据换成10分之1,20分之1,30分之1,40分之1,50分之1,60分之1,70分之1,80分之1,90分之1,100分之1,又有什么规 甲数是80,乙数是50,甲数比乙数多百分之( ),乙数比甲数少百分之( ).列式 甲数比乙数多25%,乙数比甲数少( )% 急 1到9的数字,十字形9个格子,如何让横竖都等于24 甲数比乙数多5分之1,乙数与甲数的比是多少,乙数比甲数少百分之几 甲数比乙数多5分之1,所以乙数比甲数少( ). 数学10+20+30+50+80+70+60+40+90 甲数比乙数多20%,那么乙数比甲数少百分之几 甲数比乙数多60%乙数就比甲数少( )% 数字1~9,放到三行三列的九个空格里,横相加、竖相加、斜相加都等于10. 4800除以什么 等于什么有几种答案,分别是什么? 甲数比乙数多25%,乙数比甲数少百分之几? 甲数是25,乙数是20.甲数比乙数多百分之几?乙数比甲数少百分之几 80除以5等于多少? 甲数比乙数多25%乙数比甲数少百分之几?(要试子) 甲数是35,乙数是甲数的20%,乙数是多少? 5除以5等于多少 甲数比乙数多25%,甲数是乙数的百分之几?乙数比甲数少百分之几?乙数是甲数的百分之几? 甲数的百分之20等于乙数的百分之35,问谁大?再给我出几个类似的题更好, 2773除以80等于? 如果甲数比乙数少百分之25,那么乙数就比甲数多5分之1( ) 甲数的百分之62.5等于乙数的百分之75,乙是甲的几分之几 148.2除以95%除以80%等于几 甲数比乙数多25%,乙数就比甲数少百分之几? 甲数的75%等于乙数的50%,甲数是乙数的()% 80除以124等于?要个超级精确的 甲数比乙数多20%,乙数比甲数少百分之多少? 甲数的75%正好等于乙数的80%,甲数一定大于乙数. 10分之1除以20分之3-8分之5×5分之2 能简便的就简便 甲数比乙数多20%,乙数比甲数少百分之几? 甲数的75/100正好等于乙数的80/100,甲数一定大于乙数. 6分之5的10分之3加上2分之1再除以3分之2,商是多少?要有算式哦,完整点的 甲数的5五分之一等于乙数的百分之25,那么乙数是甲数的( )%,甲数比乙数多( )%.有急用,各位说下哈, 甲数的3分之2等于乙数的2分之1,甲数一定比乙数小,为什么? (2分之1-5分之2-10分之3)除以(-5分之3) 甲数比乙数多25%,乙数是甲数的百分之几 因为甲数的80%等于乙数的75%,所以甲数大于乙数,这句话正确吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn