Database 版 (精华区)
发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: Database
标 题: VFP中多媒体数据快速处理与实现技巧
发信站: 哈工大紫丁香 (2000年12月06日20:04:55 星期三), 站内信件
VFP中多媒体数据快速处理与实现技巧
黄云、何东
一. VFP与OLE技术
Visual FoxPro(以下简称VFP)是一种高级数据库应用程序开发系统,可利用
OLE技术实现对象的链接与嵌入。为此 VFP在定义数据库(表)的过程中,提供了
General字段,用以将各种媒体对象放入数据库中。并可用APPEND、MODIFY命令或
系统菜单对数据库中的各种媒体对象进行输入、输出和编辑等操作。虽然VFP提供
的OLE编程方式简单快捷,但在实际运行VFP程序的过程中,发现使用OLE方式处理
多媒体数据运行效果并不理想,其原因在于:
⒈重复占用磁盘空间
笔者曾用General字段建立一个多媒体数据库。在进行多媒体数据入库操作后
,发现备注文件(.FPT)的生成长度略大于原文件(.BMP、.WAV、.AVI)长度,且
有些操作不能删除原文件,造成重复占用磁盘使用空间。
⒉运行速度慢
在VFP中利用OLE方法处理多媒体数据,访问磁盘的次数明显增加。由于频繁地
读取磁盘数据,使得用户操作有明显的等待时间。
二. VFP中多媒体程序的设计与实现
为简化多媒体数据的管理,提高多媒体信息的输出速度,笔者对VFP中多媒体
信息处功能、外部应用程序接口、WINDOWS 的多媒体动态链接库进行了充分的研究
,终于找到一种简单有效的实现方法。
首先建立一多媒体数据库 PLAY. DBF , 设有三个字符型字段:BMPFILE、
WAVFILE、AVIFILE,分别用于存放图片文件名(.BMP )、声音文件名(.WAV)和
视频文件名(.AVI)。
⒈实现数字视频文件的快速播放
虽然 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......)
注意:⑴在CALLFN()中说明的参数数目、类型必须与在REGFN( )中指定的参数
相符,否则调用失败。
⑵在VFP5.0中,针对32位系统提供了调用REGFN32()。
⑶对regfn()和callfn() 中双引号内的字符串应注意大小写的混合写法,否
则可能会引起执行错误。
例:本例仅给出视频操作部分的程序代码,省略了其它相关部分的程序代码。
⑴ FORM.INIT事件中的程序代码:
set library to HOME()+foxtools.fll ADDITIVE
public playfavi
playfavi=regfn("MCISendString","CCII","I","MMSYSTEM")
⑵ 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为窗口大小,也可用坐标变量的方
式确定视频播放窗口的位置及大小。
⑶PLAY.CLICK(播放AVI文件操作)程序代码:
=callfn(playfavi,"Play AVI","",0,0)
⑷TOP.CLICK(回到片头操作,即影片的第一帧)程序代码:
=callfn(playfavi,"SEEK AVI TO START","",0,0)
⑸END.CLICK(转到片尾操作,即影片的最后一帧)程序代码:
=callfn(playfavi,"SEEK AVI TO END","",0,0)
⑹CONFIG.CLICK(显示视频处理配置操作)程序代码:
=callfn (playfavi,"configure avi ","",0,0)
⑺CLOSE.CLICK(关闭视频文件操作)程序代码:
=callfn(playfavi,"close AVI","",0,0)
⒉声音文件的处理技巧
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)
操作者可通过「停止播放」按钮中断声音的播放。
⒊图片文件的快速处理
快速方法:充分利用VFP引入的图形控件及其PICTURE属性。
程序处理过程:
⑴建立表单FORM,放入图形控件IMAGE1,添加PLAY.DBF至表单的数据环境,并
将图形控件IMAGE1的属性设置如下:
⑵程序清单:
THISFORM.IMAGE1.PICTURE=PLAY.BMPFILE
THISFORM.REFRESH()
该程序在运行过程中,随着数据库指针的移动,图形控件IMAGE1将随之实现图
片的快速刷新显示。
上述程序在Windows95/Windows3.2环境中,分别用VFP3.0(中文专业版)、
VFP5.0调试通过。
采用以上方法(非OLE 方式)处理多媒体数据不仅能简化数据库管理(仅对各
种媒体的文件名进行管理即可),节省了大量的存储空间,还可以提高多媒体信息
的处理速度,并且编程简单,易于实现。
--
大海无边天做岸
山登绝顶我为风
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.393毫秒