我在写一个浏览图象的程序,图象格式为BMP,因为程序的特殊性需要在程序读取时把BMP图片的黑底去掉,然后在程序里显示出图象来,就是象GIF透明图片那种样子显示,需要怎么做!!因为图片比较多,有几万张!!所以没办法用图象处理软件来,通过程序需要怎么做???

解决方案 »

  1.   

    MaskColor 属性(UserControl 对象)
          返回或设置赋给UserControl对象的MaskPicture 属性的位图的透明区域的颜色,该UserControl对象的BackStyle属性设置为0(透明)。语法object.MaskColor [= color]MaskColor 属性的语法包括下述部分:部分 描述 
    object 一个对象表达式,其值为“应用于”列表中的对象。 
    color 决定用作屏蔽色的值或常数,参见“设置值”的说明。 
    设置值Visual Basic使用Microsoft Windows操作环境的红-绿-蓝(RGB)颜色方案。color的设置值为:设置值 描述 
    RGB颜色 使用颜色调色盘或代码中的RGB或QBColor函数所指定的颜色。 
    说明当将位图赋给一个BackStyle属性为0(透明)的UserControl的MaskPicture属性时,该控件被位图中颜色为MaskColor属性值的区域所覆盖的部分就成为透明的。在该透明区域发生的鼠标事件由该容器接收,或由本来应覆盖这一区域的UserControl控件接收。如果没有将位图赋给MaskPicture 属性,或UserControl的BackStyle属性不为0(透明),则对MaskColor属性的设置不起作用。若要进一步详细了解,请参见UserControl对象的MaskPicture属性。注意   尽管 MaskColor接受了对象浏览器中Visual Basic (VB) 对象库所列的系统颜色常数,如在有关 BackColor和ForeColor属性的帮助中所描述的,也只有当MaskPicture的位图包含系统颜色时才有用。
      

  2.   

    Option ExplicitPrivate 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
    Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
    Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
    Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
    Private Declare Function GetBkColor Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function SelectPalette Lib "gdi32" (ByVal hdc As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
    Private Declare Function RealizePalette Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Private Declare Function CreateHalftonePalette Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, lColorRef As Long) As LongPrivate Const DSna = &H220326Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypePrivate Sub Command1_Click()
        Dim pSrc As StdPicture
        
        Set pSrc = Picture1.Picture
        PaintTransparentStdPic Picture2.hdc, 0, 0, _
                        Me.ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels), _
                        Me.ScaleY(Picture1.Picture.Height, vbHimetric, vbPixels), _
                        pSrc, 0, 0, Picture1.BackColor
                        
        Set pSrc = Nothing
    End SubPrivate Sub PaintTransparentStdPic(ByVal hdcDest As Long, _
                                        ByVal xDest As Long, _
                                        ByVal yDest As Long, _
                                        ByVal Width As Long, _
                                        ByVal Height As Long, _
                                        ByVal picSource As Picture, _
                                        ByVal xSrc As Long, _
                                        ByVal ySrc As Long, _
                                        ByVal clrMask As OLE_COLOR, _
                                        Optional ByVal hPal As Long = 0)
        Dim hdcSrc As Long
        Dim hbmMemSrcOld As Long
        Dim hbmMemSrc As Long
        Dim udtRect As RECT
        Dim hbrMask As Long
        Dim lMaskColor As Long
        Dim hdcScreen As Long
        Dim hPalOld As Long
        
        hdcScreen = GetDC(0&)
        If hPal = 0 Then hPal = CreateHalftonePalette(hdcScreen)
        hdcSrc = CreateCompatibleDC(hdcScreen)
        hbmMemSrcOld = SelectObject(hdcSrc, picSource.handle)
        hPalOld = SelectPalette(hdcSrc, hPal, True)
        RealizePalette hdcSrc
        PaintTransparentDC hdcDest, xDest, yDest, Width, Height, hdcSrc, xSrc, ySrc, clrMask, hPal
        SelectObject hdcSrc, hbmMemSrcOld
        SelectPalette hdcSrc, hPalOld, True
        RealizePalette hdcSrc
        DeleteDC hdcSrc
        ReleaseDC 0&, hdcScreen
        
    End SubPrivate Sub PaintTransparentDC(ByVal hdcDest As Long, _
                                        ByVal xDest As Long, _
                                        ByVal yDest As Long, _
                                        ByVal Width As Long, _
                                        ByVal Height As Long, _
                                        ByVal hdcSrc As Long, _
                                        ByVal xSrc As Long, _
                                        ByVal ySrc As Long, _
                                        ByVal clrMask As OLE_COLOR, _
                                        Optional ByVal hPal As Long = 0)
        Dim hdcMask As Long
        Dim hdcColor As Long
        Dim hbmMask As Long
        Dim hbmColor As Long
        Dim hbmColorOld As Long
        Dim hbmMaskOld As Long
        Dim hPalOld As Long
        Dim hdcScreen As Long
        Dim hdcScnBuffer As Long
        Dim hbmScnBuffer As Long
        Dim hbmScnBufferOld As Long
        Dim hPalBufferOld As Long
        Dim lMaskColor As Long
        
        hdcScreen = GetDC(0&)
        OleTranslateColor clrMask, hPal, lMaskColor
        hbmScnBuffer = CreateCompatibleBitmap(hdcScreen, Width, Height)
        hdcScnBuffer = CreateCompatibleDC(hdcScreen)
        hbmScnBufferOld = SelectObject(hdcScnBuffer, hbmScnBuffer)
        hPalBufferOld = SelectPalette(hdcScnBuffer, hPal, True)
        RealizePalette hdcScnBuffer
        BitBlt hdcScnBuffer, 0, 0, Width, Height, hdcDest, xDest, yDest, vbSrcCopy
        hbmColor = CreateCompatibleBitmap(hdcScreen, Width, Height)
        hbmMask = CreateBitmap(Width, Height, 1, 1, ByVal 0&)
        hdcColor = CreateCompatibleDC(hdcScreen)
        hbmColorOld = SelectObject(hdcColor, hbmColor)
        hPalOld = SelectPalette(hdcColor, hPal, True)
        RealizePalette hdcColor
        SetBkColor hdcColor, GetBkColor(hdcSrc)
        SetTextColor hdcColor, GetTextColor(hdcSrc)
        BitBlt hdcColor, 0, 0, Width, Height, hdcSrc, xSrc, ySrc, vbSrcCopy
        hdcMask = CreateCompatibleDC(hdcScreen)
        hbmMaskOld = SelectObject(hdcMask, hbmMask)
        SetBkColor hdcColor, lMaskColor
        SetTextColor hdcColor, vbWhite
        BitBlt hdcMask, 0, 0, Width, Height, hdcColor, 0, 0, vbSrcCopy
        SetTextColor hdcColor, vbBlack
        SetBkColor hdcColor, vbWhite
        BitBlt hdcColor, 0, 0, Width, Height, hdcMask, 0, 0, DSna
        BitBlt hdcScnBuffer, 0, 0, Width, Height, hdcMask, 0, 0, vbSrcAnd
        BitBlt hdcScnBuffer, 0, 0, Width, Height, hdcColor, 0, 0, vbSrcPaint
        BitBlt hdcDest, xDest, yDest, Width, Height, hdcScnBuffer, 0, 0, vbSrcCopy
        DeleteObject SelectObject(hdcColor, hbmColorOld)
        SelectPalette hdcColor, hPalOld, True
        RealizePalette hdcColor
        DeleteDC hdcColor
        DeleteObject SelectObject(hdcScnBuffer, hbmScnBufferOld)
        SelectPalette hdcScnBuffer, hPalBufferOld, True
        RealizePalette hdcScnBuffer
        DeleteDC hdcScnBuffer
        DeleteObject SelectObject(hdcMask, hbmMaskOld)
        DeleteDC hdcMask
        ReleaseDC 0&, hdcScreen
        
    End Sub
      

  3.   

    也可以用外部宏录制器比如Rational Visual Test录一个宏,然后让它自动处理那些图片
      

  4.   

    //能给我写个现成的代码的程序吗!!!你只需將上面的代碼復制到窗口代碼中,在窗體上添加兩個Picture控件,一個CommandButton,再給Picture1設置一張bmp圖片,運行後按Button就可看到效果了.
      

  5.   

    MaskColor属性好象只有在CheckBox、CommandButton、OptionButton 等控件中才有,Picture控件没有这个属性啊?不过,楼主你可在CommandButton控件上显示图片呀!    [例程]
        在窗体中放入一CommandButton,属性如下:
        -----------------------------------------------------
       | Caption      |    空                                |
        -----------------------------------------------------
       | MaskColor    |    &H00000000&(即你想屏蔽的颜色黑色)
        -----------------------------------------------------
       | Style        |    1-Graphical                       |
        -----------------------------------------------------
       | UseMaskColr  |    True                              |
        -----------------------------------------------------
        代码:
        Private Sub Command1_Click()
            Set Command1.Picture = LoadPicture("c:\abcd\pic1.bmp")
        End Sub
        
      

  6.   

    2000的话有现成的api可用(SetLayeredWindowAttributes),98下的话,要麻烦一些,可以通过扫描图片实现
      

  7.   

    注意,如果想用SetLayeredWindowAttributes(只对顶层窗口有效)的话,必须将图片作为窗体的背景,而不能载入picturebox
      

  8.   

    参考:
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=123362