Database 版 (精华区)
发信人: anmeil (孤帆), 信区: Database
标 题: 在基于FoxPro的MIS实现大量图像数据的管理
发信站: 紫 丁 香 (Sun Apr 16 15:07:34 2000), 转信
在基于FoxPro的MIS实现大量图像数据的管理
作者:肖伟中
随着计算机软、硬件技术的发展和各种业务工作的实际需要,管理信息系统(
MIS)日渐趋向多媒体化,除了传统的文字信息外,图像、图形、语音、视频等多媒体信
息也必然要纳入到MIS的管理范围内,例如我们软件开发人员经常涉足的有关人员方面的
管理信息系统,就需要将人员照片与文字信息结合起来进行管理。当照片数量比较少时
,我们可以以图像格式文件的形式对其进行管理,但如果照片数量很多而且会越来越多
,那又有什么更好的办法呢?下面就以此为例谈一谈笔者在开发基于FoxPro的MIS中管理
大量图像数据的一些经验和体会。
众所周知,要对人员照片进行计算机管理,首先要通过扫描仪将其扫描成图像格式
(BMP、PCX等格式)的文件,并存放到指定的目录下。在实践中发现,为了使图像文件
与文字信息构成一一对应的关系,我们最好把具有唯一性的人员编号作为图像文件名,
如某一个人员的编号是6900001,那么他的照片图像文件名最好取名为6900001.*,其中
*表示扩展名,可为BMP、PCX等,分别代表一些常见的图像格式。
通常,我们把扫描过的照片以图像文件的形式存放在同一个目录下进行管理,这在
照片数量不多的情况下是可行的,但如果照片数量比较多,而且成不断增长的趋势,则
不宜采取这种办法,因为大量图像文件存放在一个(或几个)子目录下,容易造成磁盘
空间的浪费,并带来大量的磁盘碎片,导致系统存取效率降低,性能下降,而且随着图
像文件数量的增多,性能下降的幅度将越来越大,这就直接影响到照片的存取、显示速
度:另外,大量图像文件堆放在一起,就其安全性而言,也是很难令人放心的。那么,
如何对大量图像文件进行有效的管理呢,笔者经过实践总结,发现在基于FoxPro的MIS中
使用以下两种方法比较好。
1、利用通用字段(General Field)进行图像数据的管理。
在各种版本(如2.5、2.6、3.0、5.0)的FoxPro for Windows(3.x/95)下,我们
都可以利用数据库表的通用字段(General Field)把图像文件作为OLE(对象连接与嵌
入)数据进行管理,这有两种方法,一是连接,当通用字段连接一个图像文件后,该文
件仍必须存放在原目录下,不可删除,FoxPro保持与它的连接,当图像文件改变时,对
应存放在通用字段的数据也自动改变,这种方法实际上跟以图像文件管理的形式没什么
两样。第二种方法是嵌入,图像文件嵌入通用字段后即成为数据库的一部分,存放在DB
F文件对应的FPT文件中,此时,图像文件本身与通用字段无牵连,可删除,若不作删除
,则等于占了两份硬盘空间,这对存储大量图像数据的硬盘来讲是极不划算的。通用字
段中的图像数据可利用SAY命令直接进行屏幕显示或打印。
具体编程方法如下:
(1)将图像文件嵌入人员数据库的通用字段中:
txwjm=ryk.rybh+".bmp" && 先获取当前人员的图像文件 && 名(人员编号+图像
格式)
Append General ryk.zp from (txwjm)
(2)直接显示通用字段的图像数据:
@x,y SAY ryk.zp ISOMETRIC SIZE n1,n2
其中,ryk是人员数据库的别名, zp是通用数据类型的照片字段名,x、y是图像显
示的起始行、列位置,修改SIZE中的n1、n2参数可对图像进行缩小、放大显示。如果要
直接输出到打印机,则必须先运行set device to printer命令。
值得一提的是,利用Foxpro for windows的通用字段通过OLE还可以对PCX、JPG等其
他各种格式的图像文件进行管理,显示速度也非常快,但都必须在Windows环境下才能运
行,而且图像文件嵌入数据库后,需通过剪贴板的形式手工操作才能还原成原图像格式
的文件,很z成批地进行还原(一般需通过其他编程才能实现),从而使图像数据的重新
剪接、备份、传输等变得十分困难。所以,用这种数据类型管理图像文件,优点和缺点
都比较明显,在应用中,就需要视具体情况而定了。
2、利用备注字段(Memo Field)进行管理
我们知道,FoxPro中的备注类型字段除了可以储存一般的文字信息外,还可以储存
图像、图形、音乐等二进制数据,借助于此,我们也可将人员数据库的照片字段设置为
备注类型,然后利用Append Memo命令将图像文件装入到对应记录的照片字段中,成为数
据库的一部分,存放在DBF文件对应的FPT文件中,而且装入后,图像文件本身可删除。
这样,既节约了磁盘空间,又使文字信息与照片构成了一一对应关系,而且还可以非常
方便地利用FoxPro本身所提供的Copy Memo命令成批地将备注字段的二进制数据还原成图
像格式的文件,以作显示或重新裁剪、备份、传输之用。
具体编程方法如下:
(1)将图像文件装入人员数据库的备注字段:
txwjm=ryk.rybh+".bmp"
Append Memo ryk.zp from (txwjmz) overwrite
(2)从数据库的备注字段中还原图像文件:
Copy Memo ryk.zp to (txwjm)
(3)显示图像文件:
@x,y SAY txwjm BITMAP ISOMETRIC SIZE n1,n2
其中,zp是人员数据库ryk的备注类型照片字段名,x、y是图像显示的起始行、列位
置,修改SIZE中的n1、n2参数可对图像进行缩小、放大显示。但必须注意的是该显示命
令只能在FoxPro for Windows下使用,而且只能显示BMP格式的图像文件,不支持PCX等
其它格式。另外, 如果要将BMP格式的图像文件直接输出到打印机,也必须先运行set
device to printer命令。
在DOS环境下,我们也可用FoxPro的备注字段对图像文件进行存储,但FoxPro for
DOS本身并不提供对图像文件进行屏幕显示的命令,只能借助外部命令来实现。比较常用
的方法是利用UCDOS的特殊显示功能,但也只能显示PCX格式的图像文件,不支持BMP等其
他格式,而且不能与FoxPro输入输出的函数相容,必须利用打印口3才能进行特殊显示
。值得庆幸的是,北京希望公司不失时机地推出了一个软件开发工具包:UCDOS SDK 2.
0 for FoxPro,其中提供了功能强大的基本图像函数库,它不仅支持BMP、PCX等多种图
像格式,而且可以直接对备注字段中的图像数据进行屏幕显示、无级缩放,由于SDK是以
函数库的形式提供对FoxPro的功能扩展,所以其函数的使用方法与FoxPro内部函数的使
用方法完全相同,对程序员来说,SDK实际上只是提供了更多的FoxPro函数而已。SDK函
数亦可自动编译进EXE文件,脱离SDK独立运行。
(1)将图像文件装入人员数据库的备注类型字段:同上(略)
(2)显示备注字段中的图像数据:
set library to fp26x.p1b additive && 打开SDK函数库
=setdmode(10) && 设置256色显示模式
if not empty(ryk.zp)
=showbmp(x,y,"ryk.zp") && 直接显示备注字段
endif
其中,zp是人员数据库ryk. bf的备注类型照片字段名,fp26x是UCDOS SDK for Fo
xPro提供的外部函数库(对应FoxPro 2.6X版本,其他版本各有对应的外部函数库),x、
y是图像显示的起始行、列行置。如果要进行放大、缩小显示,则必须在进行显示之前设
置无级缩放,编程方法如下:
=autosize(.T.) &&设置可进行无级缩放
if not empty(ryk.zp)
=showbmpin(x,y,n1,n2,"ryk.zp")
*在某一区域全域显示备注字段,修改n1、n2即可进行
*无级缩放显示
endif
笔者在设计一个人员图文管理信息系统时,曾将近五万多个图像文件(每个图像文
件约15K左右)存放在备注类型的字段中,并利用UCDOS SDK for FoxPro提供的图像函数
按上述方法编程实现图文同屏显示及打印,效果非常好,特别是在进行成批图像浏览显
示时,可利用SQL命令Select rybh,zp from ryk where 条件 into cursor tmp将满足条
件的图像数据存放到一个虚似临时数据库文件tmp中,除非内存无法容纳,否则绝大部分
时间,tmp将自动存放在内存中,所以,利用SDK函数直接显示内存中的备注字段数据,
其速度之快是可想而知的,这一点其他方法难以望其项背。另外有一个好处是对硬件配置
要求比较低,但SDK也有令人遗憾之处,那就是只能支持BMP、PCX、ICO三种图像格式,
对图像数据的打印支持也不够,只能通过打印屏幕上某一区域(即图像显示的区域)的
方法来实现图像打印,打印速度比较慢。
综上所述,在Windows环境下开发基于FoxPro的图文管理信息系统,可借助通用、备
注两种数据类型对比较大量的图像数据进行管理,如果图像文件装(嵌)入后不需(或
不想另外编程实现)成批还原以作重新剪接或其他之用,或存在非BMP格式的图像文件,
则宜使用通用数据类型;否则,以备注类型为佳。而在DOS环境下,根据笔者的经验,最
好用备注类型管理图像文件,并辅以UCDOS SDK提供的图像函数进行编程,效果也非常理
想,有兴趣的读者不妨一试。
出版日期:1998-07-01 总期号:7 本年期号:7
--
你好,我是您的朋友孤帆 你时云儿,我是风
你是大海,我是帆 在网络生涯中,我愿与你相伴
嗨,有空给我来信吧 记得我是您永远的朋友 我
/\ \/ |_厂 愿
)|_) 意
)|_) 成
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.235.54]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.253毫秒