利用API函式實現影像淡入淡出效果 (轉)
利用API函式實現影像淡入淡出效果 (轉)[@more@]利用實現影像淡入淡出效果
一般傳統的實現兩個PictureBox之間影像的淡入淡出效果都需要使用大量的API函式並進行復雜的調色盤以及
繪圖裝置(Device Context)的操作。但是在、中,提供了支援透明影像複製的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, 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控制元件以及一個Commanutton控制元件,然後
在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的,就是在我寫完
程式後,並沒有出現透明覆制的效果。搞的我以為該函式不起作用,但是當我再開啟VB執行上面的程式後,一切有正常了。
我在MSDN上也沒有找到相關的Bug列表。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-995466/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jQuery 實現淡入淡出效果jQuery
- 實現元素的淡入淡出效果
- 利用回撥函式實現簡單的輪播圖效果函式
- javascript原生封裝一個淡入淡出效果的函式JavaScript封裝函式
- 影像平滑滾動效果的VC實現 (轉)
- jQuery實現的元素淡入淡出動畫效果jQuery動畫
- js利用H5的requestAnimationFrame()API實現動畫效果JSH5requestAnimationFrameAPI動畫
- 一個 Pillow 實現的影像填充函式函式
- javascript實現的淡入淡出效果程式碼例項JavaScript
- 利用指標實現strncmp函式功能指標函式
- 充分利用Windows API擴充套件Delphi函式 (轉)WindowsAPI套件函式
- 滑鼠滑過實現淡入淡出效果程式碼例項
- 利用 PHP 反射實現內建函式文件PHP反射函式
- JS 利用高階函式實現函式快取(備忘模式)JS函式快取模式
- jQuery 效果 – 淡入淡出jQuery
- JavaScript淡入淡出效果JavaScript
- 虛擬函式實現原理(轉)函式
- mysql函式substring_index實現split切割效果MySql函式Index
- jQuery 04 效果 淡入淡出jQuery
- (函式)實現strstr函式函式
- C#動態執行函式:利用反射實現C#函式反射
- iOS專案開發實戰——使用CALayer實現圖片的淡入淡出效果iOS
- 利用動態建立自動化介面實現VB的函式指標呼叫 (轉)函式指標
- Sql Server函式全解(三)資料型別轉換函式和文字影像函式SQLServer函式資料型別
- jquery中淡入淡出效果案例jQuery
- php利用遞迴函式實現無限級分類PHP遞迴函式
- 利用SQL的charindex實現字串陣列和Split函式SQLIndex字串陣列函式
- 利用樹形查詢實現部分分析函式功能函式
- | / - 的旋轉效果實現(轉)
- 利用jQuery實現頁面漸顯效果jQuery
- 用ORACLE分析函式實現行列轉換Oracle函式
- DELPHI中使用API函式詳解 (轉)API函式
- python之 利用字典與函式實現switch case功能Python函式
- 利用ORACLE的MINUS函式和OVER函式,直接通過檢視實現兩個記錄集的比較。(轉載)Oracle函式
- 利用swagger和API Version實現api版本控制SwaggerAPI
- 利用空格實現中文標題對齊效果
- 利用 OmniGraffle 實現放大鏡標註效果
- 宣告函式指標並實現回撥 (轉)函式指標