如何是picture box透明

解决方案 »

  1.   

    背景透明吧?转贴:
    VB6 直接支持图标和光标文件的背景透明,要想在窗体中放置一个背景透明而且是面积较大的图片时可以用API,当然也可以借助第三方控件来完成。笔者在这里就再介绍另一种方法——掩模覆盖法。 
      1、实现的原理 
      掩模覆盖法的原理:先对图片进行加工,保留图片的主体部分,需要透明掉的部分全部描为纯黑色生成源图片,再为这幅源图片制作一幅掩模图,就是将源图片主体部分描成纯黑色而需要透明的部分都描成纯白色。程序运行时将两幅图片在同一位置按不同方法显示在窗体或图片框上,就会显现出一幅背景透明的图片。 
      2、实现的代码 
      新建一标准EXE工程,在默认窗体Form1上放置两个图像框控件1和2,分别加载制作完成的掩码图和源图,两个图像框的其他属性均可取默认值。 
      程序代码如下: 
      Private Sub Form_Load() 
      Dim TU1,TU2 As Picture '定义TU1和TU2为图片对象 
      Dim X0=0:Y0=0 as Integer 
      1.Visible=False:Set TU1=1 
      2.Visible=False:Set TU2=2 
      AutoRedraw=True 
      Form1.PaintPicture TU1,x0,y0,,,,,,,&&H8800C6 
      Form1.PaintPicture TU2,x0,y0,,,,,,,&&H660046 
      End Sub 
      上述方法同样适用于在图片框内放置背景透明的图片。 
      掩模覆盖法优点是不需要附加任何外接控件,缺点是需要为每幅源图分别制作掩模图,工作量较大。 放置“透明”的图片在 VB 中,如果你试着把一只有鸟的图片放到背景的一棵树上,你就会发现树会被鸟遮
    住一个矩形的区域(即鸟的图片矩形)。我们可以通过以下方法使图片上非鸟的其它部
    分变透明:我们可以利用一个 WinAPI 函数 BitBlt 对图形进行一系列的位操作来达到
    此目的。
    函数声明: 
    Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (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——位处理操作,如 vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;
    vbSrcInvert 等 
    (目标环境或源环境只能是 Picture, Form 或 Printer 对象。各单位为象素。) 
    进行处理之前,我们需要对鸟的图片进行处理:先复制一份相同的图形,将其应该透明
    之处(鸟的背景)设置为黑色(设此图为sPic),再将另一图做以下处理:要复制的地
    方(鸟)设置为黑色,其余地方设置(鸟的背景)为白色(设此图为Mask)。 
    设树的图形为名dPic。 
    最后,请加入以下代码: 
    R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbScrCopy) 
    R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbScrInvert) 
    后记: 
    1、VB 中的 PaintPicture 方法提供类似功能,但速度不及此方法; 
    2、在此方法上稍微加入一些代码,就不难实现动画的显示。 
    3、VB 例子中的 CallDlls 就使用此方法。
      

  2.   

    透明贴图很简单的,只要把边框图片中间的那个部分(无论是方还是圆)涂成一个特定的颜色(最好是在图像中别的地方没有的色彩),然后使用TRANSPARENTBLT这个API将边框图像贴到第一个图像上就可以了,别忘了先把刚才涂上的那个颜色指定为透明色。关于这个API好像只有2000以上的系统才支持。这个方法是一般图像处理做边框的通用做法。你可以试试TransparentBlt(Picture1.hDC, X, Y, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture2.hDC, 0, 0,
     Picture2.ScaleWidth, Picture2.ScaleHeight,  vbWhite)'这是以白色为透明色
      

  3.   

    http://www.applevb.com/art/alphablend.txt