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毫秒