用VB完成特殊圖形效果
發表時間:2024-02-23 來源:明輝站整理相關軟件相關文章人氣:
[摘要]引言 在PowerPoint這樣的軟件中,各種各樣的圖形特效層出不窮,如百葉窗式、飛入式、關門式、棋盤式等等,在VB中也是可以實現這樣的效果的,而且十分簡單,其方法是調用Windows的API函數BitBlt。 BitBlt函數簡介 BitBlt函數在API函數群中是個很重要的角色,尤其在圖像處理...
引言
在PowerPoint這樣的軟件中,各種各樣的圖形特效層出不窮,如百葉窗式、飛入式、關門式、棋盤式等等,在VB中也是可以實現這樣的效果的,而且十分簡單,其方法是調用Windows的API函數BitBlt。
BitBlt函數簡介
BitBlt函數在API函數群中是個很重要的角色,尤其在圖像處理方面,更是不可或缺。其原意是“Bit Block Transfer”,用途是位圖的復制。用Bitblt函數顯示圖形特效,其原理十分簡單,在窗體上繪制兩個圖片框,將圖片存入一個圖片框,同時令另一個為空,然后調用Bitblt函數將第一個圖片框中的圖形一部分一部分地復制到第二個圖片框中,這樣就可以實現千奇百怪的圖形特效了。
使用BitBlt函數應先在模塊中進行如下聲明:
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
各參數含義如下:
參數 含義
hDestDC 目標設備環境的handle(hDC)
X,Y 欲復制圖形放置在目標設備
環境的位置(左上角坐標)
nWidth 欲復制圖形的寬度
nHeight 欲復制圖形的高度
hSrcDc 源設備環境的hDC
xSrc,ySrc 從源圖形的(xSrc,ySrc)坐
標處開始復制
dwRop 圖形從源設備環境復制到目標
設備環境時所做的邏輯運算。
總共有15種運算碼,通常使用
SRCCOPY(&HCC0020),表
示直接復制。
實現完美的圖片顯示效果
新建一窗體Form1和一模塊Module1,在窗體上添加兩個圖片框Picture1、Picture2和一個按鈕Command1,Picture1中加載任一圖片,Picture2為空,為按鈕編程以達到點擊按鈕,此圖片在Picture2中以下述任一效果出現。
1.左進入效果
其原理是將源圖形的像素元素,一列一列地復制到目標區域,配合稍許的時間延遲及數據復制的方向,從屏幕上看好像圖形從左邊進入圖片框中。改變delay()函數中的參數可改變程序運行時間。據此可制作“從下進入”、“從上進入”、“從右進入”等效果。
2.水平百葉窗效果
其原理是事先將圖形分割成幾部分,每一部分都單獨傳輸給目標圖像,傳輸的方式采用“值差”式,
即先傳輸第一部分第一塊,第二部分第一塊……再傳輸第一部分第二塊,第二部分第二塊……直到圖形出來為止,從屏幕上看好像是門簾逐漸反轉顯示一樣。據此可做出“垂直百葉窗”等效果。
3.負片效果
其原理是把圖形逐點復制,只是把復制的方式改為“NOTSRCCOPY”,從屏幕上看好像是圖片的負片一樣。
4.拉伸效果
其原理是開始把圖形的寬度方向壓縮成很窄的矩形,高度方向與原圖像保持一致,然后逐步放大以接近原圖片的寬度,從屏幕上看好像把圖片拉伸了一樣。
以下是部分源程序清單:
Private Sub Command1_Click()
Const SRCCOPY = &HCC0020
Const NOTSRCCOPY = &H330008
Dim i, j, w, h As Integer
Dim dtime, effect, scanline As Integer
Dim source, dest
dtime = 20000
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight
source = Picture1.hDC
dest = Picture2.hDC
effect = Int(5 * Rnd)
Picture2.Cls
Select Case effect
Case 0: ’從左進入效果
For i = 0 To w
call BitBlt(dest, 0, 0, i, h, source, 0, 0, srccopy)
delay dtime * 3
Next
Case 1: ’左上角飛入效果
For i = 0 To w
Call BitBlt(dest, 0, 0, i, h * (i / w), source, 0, 0, srccopy)
delay dtime * 3
Next
Case 2: ’水平百葉窗效果
scanline = 10
For i = 0 To (scanline - 1)
For j = i To w Step scanline
Call BitBlt(dest, j, 0, 1, h, source, j, 0, srccopy)
delay dtime * 2
Next
delay 10 * dtime
Next
Case 3: ’負片效果
Call BitBlt(dest, 0, 0, w, h, source, 0, 0, notsrccopy)
Case 4: ’拉伸效果
For i = 0 To 100
For j = w To 0 Step -1
Call BitBlt(dest, j * i / 100, 0, 1, h, source, j, 0, srccopy)
Next
Next
End Select
End Sub
Public Sub delay(dtime As Long)
Dim i As Long
For i = 0 To dtime
Next i
End Sub
圖片出現的效果還有很多,由于篇幅所限,就不在這里敘述了。只要您靈活地應用以上方法,一定還能產生更多更美的圖片效果。這些風格各異的圖片效果必定會為您的VB程序增添美麗的情調,使您的程序更富魅力、更專業。
(以上程序在VB 6.0下調試通過)