透明方式疊加圖象

發表于:2007-07-14來源:作者:點擊數: 標簽:
透明疊加方式是圖象處理中常用的一種處理方式,在這種處理方式中,一幅圖片疊加到另 一幅圖片上,但是這幅圖象不是完全將原來的圖象覆蓋,而是能夠部分的透過疊加的圖象顯示 出來,下面我就介紹如何在 VB 中編程實現這樣的功能。 首先在建立兩個大小相等的圖
    透明疊加方式是圖象處理中常用的一種處理方式,在這種處理方式中,一幅圖片疊加到另
一幅圖片上,但是這幅圖象不是完全將原來的圖象覆蓋,而是能夠部分的透過疊加的圖象顯示
出來,下面我就介紹如何在VB中編程實現這樣的功能。
    首先在建立兩個大小相等的圖象文件,將它們保存成BMP文件,VB5以上的版本支
持JPEG顯示,也可以保存為Jpg文件。在Form中加入兩個PictureBox控件,將它們的大小設置成
同圖象文件相同的大小。注意這兩個PictureBox控件不要相互重疊,也不要和Form中的其它控件
產生重疊。將兩幅圖象分別加入到兩個PictureBox控件中。然后在Form中加入一個CommandButton
控件。最后在Form的代碼窗口中加入以下代碼:

Private Type LOGBRUSH
        lbStyle As Long
        lbColor As Long
        lbHatch As Long
End Type
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal _
        hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) _
        As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc _
        As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
        ByVal hObject As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, _
        lpRect As RECT, ByVal hBrush As Long) As Long
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
Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush _
        As LOGBRUSH) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long

Const SRCPAINT = &HEE0086
Const SRCAND = &H8800C6
Const BS_SOLID = 0
Const gColor = &HFFFFFF

Private Sub Command1_Click()
    Dim pDstDC As Long
    Dim dcCompatible As Long
    Dim pBitmapOld As Long
    Dim bm As Long
    Dim rectTemp As RECT
    Dim lBrush As Long
    Dim tLog As LOGBRUSH
     
    dcCompatible = CreateCompatibleDC(Picture1.hdc)
     
    bm = CreateCompatibleBitmap(Picture1.hdc, Picture1.Width \ 15, _
        Picture1.Height \ 15)
     
    pBitmapOld = SelectObject(dcCompatible, bm)
    rectTemp.Left = 0: rectTemp.Top = 0
    rectTemp.Right = Picture1.Width \ 15: rectTemp.Bottom = _
        Picture1.Height \ 15
    tLog.lbColor = gColor
    tLog.lbStyle = BS_SOLID
    tLog.lbHatch = 0
    lBrush = CreateBrushIndirect(tLog)
    FillRect dcCompatible, rectTemp, lBrush
    BitBlt Picture1.hdc, 0, 0, Picture1.Width \ 15, _
        Picture1.Height \ 15, dcCompatible, 0, 0, SRCAND
    SelectObject dcCompatible, pBitmapOld

    BitBlt Picture1.hdc, 0, 0, Picture1.Width \ 15, _
        Picture1.Height \ 15, Picture2.hdc, 0, 0, SRCPAINT
    DeleteDC dcCompatible
End Sub
    運行程序,點擊Command1,你就可以看到Picture2上的圖象疊加到了Picture1上面了。改變上面
源程序中的 Const gColor = &HFFFFFF 一句中的gColor的值(在0到&HFFFFFFFF間變動),就可以
使圖象的疊加產生不同的透明效果。
    以上程序在Win98、VB6.0下運行通過。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97