时间: 2021-07-31 作者:daque
作家:吴斌 在vb中表露位图,常常都是经过百般控件实行的。经过控件表露的位图,或十足或限制,一直是以一个准则的矩形图像出此刻屏幕上,没辙做到只表露位图中某个不准则的限制图像,而使位图的其它局部具备通明性以露出其下原有的屏幕表露,即所谓“通明位图”,所以通明位图的实行只能另辟门路。底下,笔者将向大师引见一种本领。 道理 本来,windows中到处看来的图标即是一个通明位图的典范范例。 图标是由两个独立的位图构成的。第一个位图是由玄色(脸色位全为0)后台与彩色图标图案构成的,该位图将与暂时屏幕表露经过异或(xor)操纵贯串起来,故称其为xor位图。第二个位图是由白色(脸色位全为1)后台与玄色(脸色位全为0)图标图案构成的,该位图将与暂时屏幕表露经过与(and)操纵贯串起来,故称其为and位图。图目标表露是经过两个办法实行的: 暂时屏幕表露与and位图经过and操纵贯串起来; 暂时屏幕表露与xor位图经过xor操纵贯串起来。 大师领会,1与任何数值and操纵的截止将保护原数值,而0与任何数值and操纵的截止则是0,所以在办法第11中学,and位图中白色(1)与屏幕表露过程and操纵后被原颜色樊篱,而玄色(0)则将原颜色樊篱。办法1中断后,屏幕大将留住一个玄色的图标图案。在随后的办法第22中学,因为0与任何数值异或的截止都将是原数值,所以,xor位图与屏幕表露过程异或操纵后,位图和屏幕中的玄色局部都将被各自对应的彩色局部樊篱。办法2中断后,一个形势不准则的图标图案就出此刻屏幕上了。这即是图标表露的道理。 本领 开始,按照源位图和运用需要,创造出and位图和xor位图,而后,依照上述办法,顺序将and位图和xor位图与屏幕表露贯串起来,便可实行通明位图了。 and位图和xor位图的创造,在很多图像处置软硬件中都不妨得心应手地实行,笔者不复精细刻画。and位图和xor位图与屏幕表露的贯串,不妨经过像素迭加时的光栅操纵实行,简直实行不妨运用vb4中为form和picturebox新增的本领paintpicture。该本领的功效是将一个图像文献的实质传递到form或picturebox的表露屏幕上,也即是将源图像中的像素与暂时表露屏幕上对应的像素叠加在一道。paintpicture的语法为:object.paintpicturepicture,x1,y1,width1,height1,x2,y2,width2,height2,opcode。个中,object是挪用本领的form或picturebox东西范例;picture指定源图像,该参数必需是form或picturebox控件的picture属性;x1,y1指定目的东西顶用于摆放被传递图像的矩形地区左上角的论理坐圈点;width1,height1指定目的东西顶用于摆放被传递图像的矩形地区的宽窄和莫大;x2,y2指定源图像中被传递的矩形地区左上角的论理坐圈点;width2,height2指定源图像中被传递局部的宽窄和莫大;opcode指定传递进程中运用的光栅操纵代码值,and操纵代码值为h8800c6,xor操纵代码值为h660046。 范例 底下,正文引见一个通明位图的运用范例,范例演练一个卡通人物在窗口顶部轮回地从左到右穿梭窗口的动画。动画的播放沿用pictureclip控件和timer控件来实行,动画画面包车型的士表露则运用正文的通明位图本领。 兴建一个vb名目,在form第11中学介入一个timer控件timer1,两个pictureclip控件bmpxor和bmpand,将它们的picture属性辨别树立为xor.bmp和and.bmp,这两个位图即是通明位图所运用的xor位图和and位图,如右所示。 在form的generaldeclaration局部介入下列恒量证明: const srcand as long=&h8800c6 const srcinvert aslong=&h660046 const steplength = 10 const animatespeed = 100 名目代码如次: private sub form_load() me.scalemode=3 with bmpand .cols=4 .rows=2 end with with bmpxor .cols=4 .rows=2 end with timer1.interval=animatespeed endsub private sub timer1_timer() static curpic as integer static curx as single me.refresh if curpic > bmpand.cols*bmpand.rows-1 then curpic=0 if curx > me.scalewidth then curx=0 me.paintpicture bmpand.graphiccell(curpic),curx,0,,,,,,,srcand me.paintpicture bmpxor.graphiccell(curpic),curx,0,,,,,,,srcinvert curpic=curpic+1 curx=curx+steplength end sub 按f5运转,form第11中学就会展示一个在窗口顶部从左到右轮回地行走的卡通人物。人物行走的速率和步长不妨经过恒量animatespeed和steplength遏制。为了检查通明位图的功效,不妨为form1树立百般后台。您会看到,运用通明位图本领表露的动画与百般后台都能天然地融洽在一道,犹如事前衬托天生的动画片子一律。这即是通明位图本领蓄意到达的手段。