程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VisualBasic6.0實現電影特效

用VisualBasic6.0實現電影特效

編輯:VB綜合教程
電影或電視中經常可見到一些字幕或圖片的動態變化特技,在制作多媒體教學軟件或廣告宣傳等多媒體演示文檔時,也常常需要用到一些圖文的動態變化效果。VB6.0作為Windows軟件的強有力開發工具,在多媒體程序設計方面具有廣闊的應用前景。本文討論運用VB6.0的定時器並結合WindowsAPI函數實現圖片或文字的動態縮放和漸隱漸現等特技效果。
  
  一、實現圖文動態縮放和漸隱漸現特效的程序方法
  
  1、程序界面
  
  取窗體名為Form1,其Windowstate屬性設為2。在窗體Form1中設置如下控件和屬性:一個標簽控件Label1,其backcolor等於form1的backcolor;bondstyle為0,Autosize為True。一個圖像控件image1,其Stratch和Visible均為True;Bordstyle為0。兩個圖片框控件Picture1和Picture2,Visible屬性Picture1為False而Picture2為True;AutoRedraw屬性Picture1為True而Picture為False;ScaleModel屬性兩者均為Pixels;Bondstyle屬性兩者均為0。三個定時器控件Timer1,Timer2和Tirner3;命令按鈕控件數組cmd(0),......,Cmd(4),其caption屬性分別為:“文字縮放”、“圖片縮放”、“文字隱現”、“圖片隱現”和“退出”。
  
  2、文字的動態縮放 
  
  通過VB6.0的定時器控件定時改變文字的Size屬性,就可達到文字被動態放大或縮小的效果。程序中通過timer1的tuner過程來控制標簽Label1的caption屬性文字大小。由cmd(0)觸發的cmd_click事件引發timer1_time過程,通過一邏輯變量1(0)(數組元素)控制文字的變化方式,1(0)=true時使字體動態放大,1(0)=false時使字體動態縮小。
  
  3、圖形的動態縮放
  
  將圖像控件image1的stretch屬性設為true,可實現控件中圖片大小隨imagel控件大小的變化而變化。通過定時器timer2的tuner過程定時改變imagel控件的尺寸大小,就達到了使圖片動態縮放的效果。由cmd(1)觸發的cmd_click事件將引發timer2_time過程,通過邏輯變量1(1)控制圖片變化的方式,1(1)=true時控制圖片動態放大,1(1)=false時控制圖片動態縮小。
  
  4、文字的漸隱漸現效果
  
  從字符串中取若干個文字作為標簽Label1的caption值,如果從字串中截取的文字數遞增(直到等於字串的全部字數),則實現文字漸現效果;而截取的文字如果遞減(從字串的全部字數減到0),則實現文字漸隱效果。通過定時器timer3的time:過程定時改變截取的字數,來達到此效果。由cmd(2)觸發的。md_click事件引發timer3_time過程,通過邏輯變量1(2)控制文字變化的方式,1(2)=true時使文字漸現,1(2)=false時使文字漸隱。
  
  5、圖形的漸隱漸現效果
  
  用WindowsAPI函數BitBlt復制圖片的方法實現。BitBlt函數的使用方法為:
  
  ->BitBlthDestDC,x,y,nWidth,nHeight,hSrcDC,xSrc,ySrc,dwRop->
  其中各參數的含義為:hDestDC和hSrcDC分別表示目標設備描述表句柄和源設備描述表句柄。即要把圖片從hSrcDC復制到hDestDC。Picturellox控件的hDC屬性就是我們要用到的設備描述表句柄。x,Y表示目標中左上角的位置,nWidth,nHeight表示目標中的寬和高。即要把圖片復制到目標設備描述表中的什麼位置,以及復制多寬和多高。xsrc和ySrc表示源圖片中的左上角位置,即表示從什麼位置開始復制。DwRop參數表示一種繪制方式,常用直接復制方式,這時就取SRCCOPY。
  
  二、實現圖文動態縮放和漸隱漸現特效的程序代碼
  
  ->‘對全局變量和API函數的通用聲明(API函數Sleep,BitBlt及其常參數SRCCOPY的聲明從略,可從API浏覽器中復制、粘貼):
  Dim1(4)AsBoolean,iasLong,sAsString,ztAsInteger
  ‘實現圖片漸現漸隱的通用過程:
  PrivateSubPicCpy(OptionalstripAsInteger=10,OptionaldelayAsInteger=20)
   DimplwAsInteger,plhAsInteger,p2AsInteger
   If1(3)=TrueThen
  Picture1=LoadPicture("c:win98安裝程序.bmp")
   Else
  Picture1=LoadPicture("")
   EndIf
   plw=Picturel.Width
   plh=Picturel.Height
   p2=0
   DoWhilep2<=plw
  BitBltPicture2.hDC,p2,0,strip,plh,Picture1.hDC,p2,0,SRCCOPY
  p2=p2 strip
  Sleepdelay
  DoEvents
   Loop‘由於圖片寬度不一定是strip的整數倍,故下面再全圖復制一遍圖片:
   BitBltPicture2.hDC,0,0,plw,plh,Picture1.hDC,0,0,SRCCOPY
  EndSub
  
  PrivateSubForm_load()
   Label1.Font.Name="黑體"
   Image1.Top=0
   Image1.Left=0
   Picture2.Top=0
   Picture2.Left=Screen.Width-Picthne2.Width
   s="產生縮放和隱現效果的文字"
   zt=5'zt為字體大小控制變量
   i=0'i為顯示文字時截取文字的字數變量
  EndSub
  
  PrivateSubCmd_Click(IndexAsInteger)
   If1(Index)=TrueThen
  1(Index)=False
   Else
  1(Idex)=True
   EndIf
   SelectCaseIndex
  Case0'激活timer1的timer過程
   Timer1.Enabled=True
   Timer1.Interval=50
   ......'Case1,2與上述類似,分別激活timer2,timer3的timer過程
  Case3'調用圖片復制過程Piccpy
  
   PiCpy10,50
  Case4‘結束程序運行
   UnloadMe
   End
   EndSelect
  EndSub
  PrivateSubTimer1_Timer()'實現文字縮放的過程
   If1(0)=TrunThen
  zt=zt< 5
   Else
  Zt=Zt-5
   ElseIf
  Ifzt>50orzt<=5Then
   Timer1.Enabled=False
  EndIf
  WithLabel1
   .Font.Size=zt
   .Left=(Form1.Width-Lable1.Width)/2
   .Top=(Form1.Height-Label1.Height)/2
  EndWith
  Label1.Caption=s
  EndSub
  
  PrivateSubTimer2_Timer()'實現圖片縮放的過程
   If1(1)=TrueThen'使圖片放大
  Image1.Width=Image1.Width Form1.Width/10
  Image1.Height=Image1.Height Form1.Height/10
   Else'使圖片縮小
  Image1.Width=Image1.Width-Form1.Width/10
  Image1.Height=Image1.Height-Form1.Height/10
   EndIf
   If(Image1.Width>=Form1.Width/2)or(Image1.Width<=Form1.Width/10)Then
  Timer2.Enabled=False
   EndIf
  Image1=LoadPicture("c:win98安裝程序.bmp")
   EndSub
  
  PrivateSubTimer3.Timer()
   Label1.Font.Size=30
   If1(2)=TrueThen
  i=i l
   Else
  i=i一1
   EndIf
   Ifi>=Len(s)oni<1Then
  Timer3.Enabled=False
   EndIf
   Ifi>=0Then
  Label1.Caption=Left$(s,i)
   EndIf
  EndSub->
  以上程序在VB6.0和Windows98/2000環境下調試通過。
  ->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved