国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
利用API函數(shù)實現(xiàn)圖像淡入淡出效果 - 沐風(fēng)經(jīng)典
 一般傳統(tǒng)的實現(xiàn)兩個PictureBox之間圖像的淡入淡出效果都需要使用大量的API函數(shù)并進(jìn)行復(fù)雜的調(diào)色板以及
繪圖設(shè)備(Device Context)的操作。但是在Win98、Win2000中,微軟提供了支持透明圖像拷貝的AlphaBlend函數(shù)。
這篇文章就介紹如何通過API函數(shù)AlphaBlend實現(xiàn)PictureBox之間圖像的淡入淡出效果。AlphaBlend函數(shù)的定義在
msimg32.dll中,一般Win98、Win2000都帶了這個庫,在編程之前你可以先察看一下該文件是否存在。
    打開VB建立一個新工程。選擇菜單 Project | Add Module 添加一個模塊到工程中,在其中輸入以下代碼:

Public Type rBlendProps
    tBlendOp As Byte
    tBlendOptions As Byte
    tBlendAmount As Byte
    tAlphaType As Byte
End Type

Public Declare Function AlphaBlend Lib "msimg32" (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 widthSrc As Long, _
        ByVal heightSrc As Long, ByVal blendFunct As Long) As Boolean

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (Destination As Any, Source As Any, ByVal Length As Long)

    大家可以看到,AlphaBlend函數(shù)的定義同普通的復(fù)制函數(shù)Bitblt很相似,只是最后的參數(shù)blendFunct定義為一個
rBlendProps結(jié)構(gòu)。那么為什么在函數(shù)定義中blendFunct 定義為Long類型呢?因為rBlendProps結(jié)構(gòu)長度是4個字節(jié)。
而Long類型變量的長度也是4個字節(jié),那么我們就可以程序中通過API函數(shù)CopyMemory將一個rBlendProps結(jié)構(gòu)拷貝到
blendFunct 中。

    在Form1中添加兩個PictureBox控件,其中Picture2為源,Picture1為拷貝目標(biāo),將兩者的ScaleMode都設(shè)置為3-Pixel
將兩者的AutoRedraw屬性都設(shè)置為True,然后分別添加圖像。在加入一個Timer控件以及一個CommandButton控件,然后
在Form1的代碼窗口中添加如下代碼:

Dim lTime As Byte

Sub ShowTransparency(cSrc As PictureBox, cDest As PictureBox, _
    ByVal nLevel As Byte)
    Dim LrProps As rBlendProps
    Dim LnBlendPtr As Long
   
    cDest.Cls
    LrProps.tBlendAmount = nLevel
    CopyMemory LnBlendPtr, LrProps, 4
    With cSrc
        AlphaBlend cDest.hDC, 0, 0, .ScaleWidth, .ScaleHeight, _
            .hDC, 0, 0, .ScaleWidth, .ScaleHeight, LnBlendPtr
    End With
    cDest.Refresh
End Sub

Private Sub Command1_Click()  
    lTime = 0
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub


Private Sub Timer1_Timer()
    lTime = lTime + 1
    ShowTransparency Picture2, Picture1, lTime
    If lTime >= 255 Then
        Timer1.Enabled = False
    End If
    Me.Caption = Str(Int(lTime / 2.55)) + "%"
End Sub

    運行程序,點擊Command1,就可以看到Picture2圖像拷貝到Picture1上的淡入淡出效果了。
    在結(jié)構(gòu)rBlendProps中,最重要的參數(shù)就是tBlendAmount,該值決定了源與目標(biāo)之間的透明程序。如果為0的話,源完全
透明,如果為255的話,源完全覆蓋目標(biāo)。
    另外AlphaBlend 函數(shù)不只用于兩個PictureBox之間的拷貝,而且可以在兩個Device Context之間的透明拷貝,也就是
說,象窗口等控件之間也可以實現(xiàn)透明效果。不過在編程過程中發(fā)現(xiàn)一個問題,不知是否是AlphaBlend的Bug,就是在我寫完
程序后,并沒有出現(xiàn)透明復(fù)制的效果。搞的我以為該函數(shù)不起作用,但是當(dāng)我再打開VB運行上面的程序后,一切有正常了。
我在MSDN上也沒有找到相關(guān)的Bug列表。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VB關(guān)于webbrowser相關(guān)操作大全
如何用sendmessage 模擬鍵盤按鍵?!
VB6把攝像頭的圖像放入 Image 或 PictureBox 里
在VB編程開發(fā)中如何應(yīng)用API函數(shù)?
★Excel-VBA操作文件四大方法[ExcelHome技術(shù)論壇]
在Excel Vba中使用API函數(shù)playSound播放聲音
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服