图片透明效果制作揭秘 赵玉勇 杨桂梅 2001年 47期 我们在VB中处理图片时总希望我们的图片能更完美一些,更加符合我们的需要。图片无非是现实生活中实际物体的反映,可这种完美在有些时候却大打折扣。因为像我们使用的方方正正的屏幕那样,我们使用的图片也必须是方方正正的,怎样将多余的东东去除呢?只保留我们需用的,这完全可办到,在VB中可通过三种办法来实现。   #1底色调整法   我们可将图片上的图像背景设置成一种和窗体背景色(BackColor)一模一样的颜色,通过Picture或Image控件,将我们的图片放在控件上,控件的边线(BorderStyle)和外表3D模式(Appearance)均去除,一切OK,不过此法在控件较多的情况下仍然很笨拙。如果图片很少,利用此法可谓简单实用之极(如^47020504a^所示)。当然图片事先是通过画图或其他更好的图像处理软件处理过的。   #1API函数法   1.程序界面   界面中用到一个Form窗体,窗体中用到一个PictureBox图像框用来作为存放源图像的窗口,一个命令按钮CommandButton,其中picture1的Visuable属性设为TrueAutoredraw也设为True。原始图片需经过一定的处理,我们需用的图像保留,应该透明的部分设置成为白色。因为我们利用白色所具有的特性实现了透明效果,对白色和其他颜色施行AND(与)操作后,将保留原有的颜色。   2.BitBlt函数   BitBlt()函数可以将一幅图从一个设备场景复制到另一设备场景。它执行颜色数据的位传送,从指定的源设备向目标设备传送对应于一个像素矩形的颜色数据。   其声明形式如下(可从API阅览器中通过加载win32api.txt后从声明中得到):   Private Declare Function BitBlt Lib “gdi32”(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 dwRop As Long) As Long   函数中各参数含义如下:   hDestDC:目标设备   x和y:指定目标矩形的左上角   nWidth和nHeight:目标矩形的宽度和高度   hSrcDC:源设备   xSrc和ySrc:指定源矩形左上角坐标   dwRop:传输过程中要执行的光栅运算,定义了为了获得最终的颜色,怎样将源矩形的颜色数据和目标矩形的颜色数据相结合(我们本题中用到的常数意义是:SRCAND──用AND操作符将源矩形颜色与目标矩形的颜色相结合)。   3.源程序   Private Sub CmdTrans_Click() '透明效果   hDC1 = Me.Picture1.hDC   hdc3 = Me.hDC   Call BitBlt(hdc3, 0, 0, w, h, hDC1, 0, 0, SRCAND)   End Sub   Private Sub Form_Load()   Me.ScaleMode = 3   Me.Picture1.ScaleMode = 3 '转换输出格式为像素   w = Me.Picture1.ScaleWidth   h = Me.Picture1.ScaleHeight   End Sub   #1自制控件法   1.选择“文件”,“新建工程”中的“ActiveX控件”,进入自制控件窗体。将MaskPicture属性按上面的说明设好,Backstyle设置为透明,Maskcolor设置为纯黑色,一定要用纯黑。如果我们直接生成控件还不行,必须先将控件的属性进行调整,在其中添加上可对图片进行控制的Picture属性。   2.给控件添加属性并设置映射。选择“外接程序”中的“外接程序管理器”,选择列表中的VB 6ActiveX控件接口向导,并将下面加载行为的“加载/卸载”选中,选择确定。   重新打开“外接程序”菜单,现在菜单中多了个选择项“ActiveX接口向导”,将它选中。这里面有两项工作要做,一是调整自建控件的属性,将Picture属性加入其中,再者是将控件所有的属性设置元素映射,以使各控件能用。   3.上面的设置完成后,可通过“文件”菜单中的生成XXX.ocx菜单生成我们所需控件。记住该控件的路径和名称。   4.将控件加入到我们的窗体中,在工具箱上按右键选择部件,将出现部件对话框,通过其中的“控件”项目中的浏览,找到该控件的名称,可将我们自建的控件加入其中。我们将自制控件拖到窗体上,将其Picture属性设置为笔记本电脑图片的原图(底纹是红色的),图片将其红色部分变为透明。   上述方法实现起来较为麻烦,但针对一幅图片,一但建成,将可反复使用。   上面是三种实现图片透明的方法,第一种最简单,但情况稍复杂时却很难派上用场,后两种实现起来稍稍复杂,却各有千秋,有兴趣的朋友不妨试试。