摘要:實現了基于VFP的非OLE方式多媒體數據快速處理,提出了一種簡化數據庫管理,節省了大量存儲空間,且編程簡單,快速的多媒體信息處理技術。
關鍵詞:VFP;OLE;多媒體數據快速處理
中圖分類號:TP391.41文獻標識碼:A文章編號:1009-3044(2008)25-1545-02
Fast Disposal Technology of Datas in Media Based on VFP
WANG Shuo1, WU Hui2
(1. Hebei Transportation College, Shijiazhuang 050091, China; 2. Shijiazhuang Information Engineering Vocational College, Shijiazhuang 050091, China)
Abstract: The paper introduced the technology of not using OLE in Visual FoxPro(VFP) to realize the fast disposal of multimedia data. It not only predigested the database management, saved the space for multimedia information. But the technology is very easy to be programmed and realized.
Key words: VFP; OLE; Fast Data Disposal Technology In Multimedia
1 VFP與OLE技術
Visual FoxPro(以下簡稱VFP)是一種高級數據庫應用程序開發系統,可利用OLE技術實現對象的鏈接與嵌入。為此 VFP在定義數據庫(表)的過程中,提供了General字段,用以將各種媒體對象放入數據庫中。并可用APPEND、MODIFY命令或系統菜單對數據庫中的各種媒體對象進行輸入、輸出和編輯等操作。雖然VFP提供的OLE編程方式簡單快捷,但在實際運行VFP程序的過程中,發現使用OLE方式處理多媒體數據運行效果并不理想,其原因在于:
1.1 重復占用磁盤空間
在進行多媒體數據入庫操作后,發現備注文件(.FPT)的生成長度略大于原文件(.BMP、.WAV、.AVI)長度,且有些操作不能刪除原文件,造成重復占用磁盤使用空間。
1.2 運行速度慢
在VFP中利用OLE方法處理多媒體數據,訪問磁盤的次數明顯增加。由于頻繁地讀取磁盤數據,使得用戶操作有明顯的等待時間。
2 VFP中多媒體程序的設計與實現
為簡化多媒體數據的管理,提高多媒體信息的輸出速度,筆者對VFP中多媒體信息處功能、外部應用程序接口、Windows 的多媒體動態鏈接庫進行了充分的研究,終于找到一種簡單有效的實現方法。
首先建立一多媒體數據庫PLAY. DBF, 設有三個字符型字段:BMPFILE、WAVFILE、AVIFILE,分別用于存放圖片文件名(.BMP )、聲音文件名(.WAV)和視頻文件名(.AVI)。
2.1 實現數字視頻文件的快速播放
雖然VFP處理視頻文件的功能較弱,但作為VFP運行基礎的Windows系統卻提供了上百個具有多媒體處理能力的API函數,并統一由多媒體動態鏈接庫提供給開發者使用。多媒體動態鏈接庫所在目錄及庫名,在不同的系統中略有不同,在Windows 3.2和Windows 95中,為\\WINDOWS\\SYSTEM\\MMSYSTEM.DLL,在Windows NT中,則為\\WINDOWS\\SYSTEM32\\WINMM.DLL。
在VFP中,為調用多媒體動態鏈接庫中的API函數,提供了一個外部應用程序接口庫文件FOXTOOLS. FLL。其中有兩個重要的函數:REGFN()和CALLFN()。前者用來寄存駐留在WINDOWS的動態鏈接庫中的API函數及其參數。后者則用以調用執行 Windows 的 API 函數。調用格式:REGFN(\"函數名\",\"傳給函數的參數類型、數量\",\"函數返回值的數據類型\",\"DLL庫名\")
返回參數:調用成功REGFN()返回一個數值,否則返回-1。
CALLFN ((REGFN()的返回值,參數1,參數2...)
注意:
(1)在CALLFN()中說明的參數數目、類型必須與在REGFN()中指定的參數相符,否則調用失敗。
(2)在VFP5.0中,針對32位系統提供了調用REGFN32()。
(3)對regfn()和callfn() 中雙引號內的字符串應注意大小寫的混合寫法,否則可能會引起執行錯誤。
例:本例僅給出視頻操作部分的程序代碼,省略了其它相關部分的程序代碼。
(1)FORM.INIT事件中的程序代碼:
set library to HOME()+foxtools.fll ADDITIVE
public playfavi
playfavi=regfn(\"MCISendString\",\"CCII\",\"I\",\"MMSYSTEM\")
(2)OPEN.CLICK(打開視頻文件操作)程序代碼:
avifname=play.avifile
callfn(playfavi,\"Open avifname alias AVI Type AVIVideo\",\"\",0,0)
callfn (playfavi,\"put AVI window at 160 100 320 240\",\"\",0,0)
thisform.Refresh()
說明:160,100為窗口左上角坐標,320,240為窗口大小,也可用坐標變量的方式確定視頻播放窗口的位置及大小。
(3)PLAY.CLICK(播放AVI文件操作)程序代碼:
callfn(playfavi,\"Play AVI\",\"\",0,0)
(4)TOP.CLICK(回到片頭操作,即影片的第一幀)程序代碼:
callfn (playfavi,\"SEEK AVI TO START\",\"\",0,0)
(5)END.CLICK(轉到片尾操作,即影片的最后一幀)程序代碼:
callfn(playfavi,\"SEEK AVI TO END\",\"\",0,0)
(6)CONFIG.CLICK(顯示視頻處理配置操作)程序代碼:
callfn (playfavi,\"configure avi \",\"\",0,0)
(7)CLOSE.CLICK(關閉視頻文件操作)程序代碼:
callfn(playfavi,\"close AVI\",\"\",0,0)
2.2 聲音文件的處理技巧
VFP處理聲音文件的方式除OLE外,還可用編程方法控制播放.WAV文件具體方法:
SET BELL TO PLAY.WAVFILE,WAV
CHR(7)
用此方法處理聲音文件雖然快捷簡單,但無法通過鍵盤或鼠標中斷WAV文件的播放。為解決此問題,筆者事先用WINDOWS的RECORDER錄制一個了“靜音文件”SILENCE.WAV, 即沒有任何聲音的聲音文件,同時在表單中設置“停止播放”的命令按鈕,其CLICK代碼段為:
SET BELL TO \"SILENCE.WAV\",WAV
CHR(7)
操作者可通過“停止播放”按鈕中斷聲音的播放。
2.3 圖片文件的快速處理
快速方法:充分利用VFP引入的圖形控件及其PICTURE屬性。
程序處理過程:
(1)建立表單FORM,放入圖形控件IMAGE1,添加PLAY.DBF至表單的數據環境,并將圖形控件IMAGE1的屬性設置如下:
(2)程序清單:
THISFORM.IMAGE1.PICTURE=PLAY.BMPFILE
THISFORM.REFRESH()
該程序在運行過程中,隨著數據庫指針的移動,圖形控件IMAGE1將隨之實現圖片的快速刷新顯示。
3 結束語
采用以上方法(非OLE方式)處理多媒體數據不僅能簡化數據庫管理(僅對各種媒體的文件名進行管理即可),節省了大量的存儲空間,還可以提高多媒體信息的處理速度,并且編程簡單,易于實現。
參考文獻:
[1] 楊佩理.VFP編程技術及數據庫應用教程[M].北京:中國電力出版社,2002:23-56.
[2] 張龍祥.數據庫原理與設計[M].北京:人民郵電出版社,2002:50-62.
[3] 王家文,曹宇.圖形圖像處理[M].北京:國防工業出版社,2004:78-90.