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

用VB完成特殊圖形效果

[摘要]引言 在PowerPoint這樣的軟件中,各種各樣的圖形特效層出不窮,如百葉窗式、飛入式、關(guān)門式、棋盤式等等,在VB中也是可以實現(xiàn)這樣的效果的,而且十分簡單,其方法是調(diào)用Windows的API函數(shù)BitBlt。 BitBlt函數(shù)簡介 BitBlt函數(shù)在API函數(shù)群中是個很重要的角色,尤其在圖像處理...
引言

在PowerPoint這樣的軟件中,各種各樣的圖形特效層出不窮,如百葉窗式、飛入式、關(guān)門式、棋盤式等等,在VB中也是可以實現(xiàn)這樣的效果的,而且十分簡單,其方法是調(diào)用Windows的API函數(shù)BitBlt。

BitBlt函數(shù)簡介

BitBlt函數(shù)在API函數(shù)群中是個很重要的角色,尤其在圖像處理方面,更是不可或缺。其原意是“Bit Block Transfer”,用途是位圖的復(fù)制。用Bitblt函數(shù)顯示圖形特效,其原理十分簡單,在窗體上繪制兩個圖片框,將圖片存入一個圖片框,同時令另一個為空,然后調(diào)用Bitblt函數(shù)將第一個圖片框中的圖形一部分一部分地復(fù)制到第二個圖片框中,這樣就可以實現(xiàn)千奇百怪的圖形特效了。

使用BitBlt函數(shù)應(yīng)先在模塊中進行如下聲明:

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

各參數(shù)含義如下:

參數(shù) 含義

hDestDC 目標設(shè)備環(huán)境的handle(hDC)

X,Y 欲復(fù)制圖形放置在目標設(shè)備

環(huán)境的位置(左上角坐標)

nWidth 欲復(fù)制圖形的寬度

nHeight 欲復(fù)制圖形的高度

hSrcDc 源設(shè)備環(huán)境的hDC

xSrc,ySrc 從源圖形的(xSrc,ySrc)坐

標處開始復(fù)制

dwRop 圖形從源設(shè)備環(huán)境復(fù)制到目標

設(shè)備環(huán)境時所做的邏輯運算。

總共有15種運算碼,通常使用

SRCCOPY(&HCC0020),表

示直接復(fù)制。

實現(xiàn)完美的圖片顯示效果

新建一窗體Form1和一模塊Module1,在窗體上添加兩個圖片框Picture1、Picture2和一個按鈕Command1,Picture1中加載任一圖片,Picture2為空,為按鈕編程以達到點擊按鈕,此圖片在Picture2中以下述任一效果出現(xiàn)。

1.左進入效果

其原理是將源圖形的像素元素,一列一列地復(fù)制到目標區(qū)域,配合稍許的時間延遲及數(shù)據(jù)復(fù)制的方向,從屏幕上看好像圖形從左邊進入圖片框中。改變delay()函數(shù)中的參數(shù)可改變程序運行時間。據(jù)此可制作“從下進入”、“從上進入”、“從右進入”等效果。

2.水平百葉窗效果

其原理是事先將圖形分割成幾部分,每一部分都單獨傳輸給目標圖像,傳輸?shù)姆绞讲捎谩爸挡睢笔剑?

即先傳輸?shù)谝徊糠值谝粔K,第二部分第一塊……再傳輸?shù)谝徊糠值诙䦃K,第二部分第二塊……直到圖形出來為止,從屏幕上看好像是門簾逐漸反轉(zhuǎn)顯示一樣。據(jù)此可做出“垂直百葉窗”等效果。

3.負片效果

其原理是把圖形逐點復(fù)制,只是把復(fù)制的方式改為“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

圖片出現(xiàn)的效果還有很多,由于篇幅所限,就不在這里敘述了。只要您靈活地應(yīng)用以上方法,一定還能產(chǎn)生更多更美的圖片效果。這些風格各異的圖片效果必定會為您的VB程序增添美麗的情調(diào),使您的程序更富魅力、更專業(yè)。

(以上程序在VB 6.0下調(diào)試通過)