• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    利用API函數實現圖像淡入淡出效果

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網     一般傳統的實現兩個PictureBox之間圖像的淡入淡出效果都需要使用大量的API函數并進行復雜的調色板以及
    繪圖設備(Device Context)的操作。但是在Win98、Win2000中,微軟提供了支持透明圖像拷貝的AlphaBlend函數。
    這篇文章就介紹如何通過API函數AlphaBlend實現PictureBox之間圖像的淡入淡出效果。AlphaBlend函數的定義在
    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函數的定義同普通的復制函數Bitblt很相似,只是最后的參數blendFunct定義為一個
    rBlendProps結構。那么為什么在函數定義中blendFunct 定義為Long類型呢?因為rBlendProps結構長度是4個字節。
    而Long類型變量的長度也是4個字節,那么我們就可以程序中通過API函數CopyMemory將一個rBlendProps結構拷貝到
    blendFunct 中。

        在Form1中添加兩個PictureBox控件,其中Picture2為源,Picture1為拷貝目標,將兩者的ScaleMode都設置為3-Pixel
    將兩者的AutoRedraw屬性都設置為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上的淡入淡出效果了。
        在結構rBlendProps中,最重要的參數就是tBlendAmount,該值決定了源與目標之間的透明程序。如果為0的話,源完全
    透明,如果為255的話,源完全覆蓋目標。
        另外AlphaBlend 函數不只用于兩個PictureBox之間的拷貝,而且可以在兩個Device Context之間的透明拷貝,也就是
    說,象窗口等控件之間也可以實現透明效果。不過在編程過程中發現一個問題,不知是否是AlphaBlend的Bug,就是在我寫完
    程序后,并沒有出現透明復制的效果。搞的我以為該函數不起作用,但是當我再打開VB運行上面的程序后,一切有正常了。
    我在MSDN上也沒有找到相關的Bug列表。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>