六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

使用API函數完成圖像淡入淡出

[摘要]一般傳統的實現兩個PictureBox之間圖像的淡入淡出效果都需要使用大量的API函數并進行復雜的調色板以及繪圖設備(Device Context)的操作。但是在Win98、Win2000中,微軟提供了支持透明圖像拷貝的AlphaBlend函數。   這篇文章就介紹如何通過API函數AlphaBl...
一般傳統的實現兩個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之間的透明拷貝,也就是說,象窗口等控件之間也可以實現透明效果。


主站蜘蛛池模板: 日韩欧美视频一区二区 | 伊人资源 | 欧美在线观看一区二区三 | 日韩欧美日本 | 最近的2019中文字幕免费一页 | 欧美亚洲免费久久久 | 日韩欧美系列 | 日本高清一区二区三区不卡免费 | 欧洲亚洲综合一区二区三区 | 亚洲免费黄色网址 | 天天在线干 | 天天躁日日躁狠狠躁综合 | 日日添日日摸 | 日韩一级在线视频 | 日韩一区二区三区不卡视频 | 在线观看视频一区二区 | 色亚洲一区 | 欲香欲色| 亚洲日本在线免费观看 | 午夜国产精品影院在线观看 | 色欧美片视频在线观看 | 欧美午夜精品久久久久免费视 | 亚洲资源最新版在线观看 | 羞羞漫画在线阅读页面漫画入口页面弹窗无限 | 在线观看国产久青草 | 青青草视频免费在线 | 天天干夜夜爽天天操夜夜爽视频 | 亚洲区在线播放 | 小说区图片区综合久久88 | 日本视频在线免费播放 | 青草青青在线视频 | 一二三四免费观看在线8 | 亚洲国产成人久久 | 日韩在线毛片 | 亚洲人成网站看在线播放 | 日韩毛片大全免费高清 | 青春草视频免费观看 | 青春草在线免费观看 | 色噜噜亚洲 | 中文字幕色婷婷在线视频 | 青春草视频在线观看免费 |