picturebox中的图象如何将多余的部分透明化?急,谢谢!!!

解决方案 »

  1.   

    有难度哦,也许用API可以做到?我不懂我有个局限性比较大的变通办法
    如果图片的颜色数不多,可以转成背景透明的GIF,然后用IMAGE控件来显示
      

  2.   

    先把要透明的地方弄成黑色,再做一副一样大小的图,然后反色,原图需要的地方黑色,透明的地方白色。然后使用PaintPicture方法。
    Picture1.ScaleMode = vbPixels   '显示的图
    Picture2.ScaleMode = vbPixels   '原来的图,
    Picture2.AutoRedraw = TruePicture2.PaintPicture Picture1.Picture,   27,  37, 27, 37, 139, 87, 27, 37, vbSrcAnd
    Picture2.PaintPicture Picture1.Picture,  27, 37, 27, 37, 85, 87, 27, 37, vbSrcInvertNext
    我就是这么做的,你看看合适你不。
      

  3.   

    同意BlueBeer(1win)的建议,比较方便。
    还有一个方法就是不要使用PictureBox控件,而直接使用API: TransparentBlt,指定一个透明色之后直接将图像输出到窗体上,因为即使你使用这个API将图像透明输出到PictureBox上,PictureBox控件本身也会挡住下面的内容的。
      

  4.   

    用IMAGE控件,将Stretch属性改为真,可动态缩放大小根本不会出现“多余部份”,不是更好。而且是轻量级控件哦。
      

  5.   

    比较正规的方法是用setwindowrgn实现,下面是一个简单的例子:
    Option Explicit
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Sub Form_Load()
        Dim mRGN As Long
        mRGN = CreateEllipticRgn(0, 0, Picture1.Width / Screen.TwipsPerPixelX, Me.Picture1.Height / Screen.TwipsPerPixelY)
        'Set the window region
        SetWindowRgn Me.Picture1.hWnd, mRGN, True
        'delete our elliptical region
        DeleteObject mRGN '表明不显示窗体中的透明色,而第二个参数表示透明色为蓝色,并且你可以用RGB函数来指定颜色值
    End Sub难点是如果图片位数很高的话,找不到什么好方法快速的创建所需要的区域