⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 基于jpeg格式的图像数据库实现.txt

📁 Vfp 文档 一些经典编程文章 可供初学者学习编程时使用
💻 TXT
字号:
基于JPEG格式的图像数据库实现

作者:江明富  



  用VFP5.0开发多媒体应用时,存储图像通常使用的是BMP格式。
然而,由于幅面较大的BMP图像存储时占用存储空间较大,对于要管
理大量图像的应用,硬盘空间的占用将成为一个大问题。在众多图像
文件格式中JPEG格式压缩率最高,用JPEG格式将图像压缩20倍后,图
像仍然很清晰。VFP5.0能处理JPEG图像吗?回答是肯定的,我们可以
利用Wang图像控件达到目的。

  Wang图像控件由Wang图像编辑控制、图像扫描控制、图像管理控
制及图像缩略图控制组成,它是一组Windows 95自带的控件,选择安
装Windows 95附件中的映像即可安装该控件。

  Wang图像控件提供了图像扫描、图像打印、图像缩放、图像旋转、
在图像上加标签、生成缩略图、图像文件管理等功能,并且这些功能
的实现都可编程控制。这些控件的详细资料请参看Windows 95目录下
的Help\Wangocxd.hlp。

  一、图像的扫描输入、存储、显示

  创建“表单1.SCX"(见图)。插入Wang图像扫描对象imgscan的方
法是,在表单中插入“OLE容器控件”,出现“Insert Object"窗口
后,选“Insert Control",在“Object Type"列表中选择“Wang
图像扫描控制”,再点“OK"按钮;插入Wang图像编辑对象imgedit1,
将其AutoRefresh属性置为.T.,ImagePalette属性置为3,ImageControl
属性置为imgscan;再插入其它对象(按钮名称:左旋90度:btnleft,
扫描:btnscan,保存:btnsave,退出:btnexit),并置
text1.value=100,btnsave.enabled=.f.

  btnscan.click过程为:

  if thisform.imgscan.scanneravailable()&&如果安装了扫描
仪thisform.imgscan.DestImageControl=′imgedit1′&&扫描到
imgedit1thisform.imgscan.scanto=0thisform.imgscan.startscan
&&开始扫描if thisform.imgscan.statuscode=0&&扫描成功

  thisform.btnsave.enabled=.t.&&允许保存endif

  elsemessagebox(′扫描仪未安装好′,16)

  endif

  btnsave.click过程(保存按钮)为:

  local m.fn

  m.fn=sys(3)+′.jpg′

  thisform.imgedit1.saveas(m.fn,1,6,6,64,.f.) 

  *把图像以JPEG格式存在临时文件中这里把64改为128、256、
....、16384 ,可得到不同压缩率

  appe memo pic from (fn) overwrite&&图像存入数据库

  erase (fn)

  btnexit.click过程为:

  thisform.release

  btnleft.click过程为:

  if thisform.imgedit1.imagedisplayed()&&如果已经显示了
图像

  thisform.imgedit1.rotateleft&&左旋90度

  endif

  text1.valid过程为:

  thisform.imgedit1.zoom=this.value&&改变图像显示大小

  表单1的init过程为:

  if eof()

  append blank

  endif

  public grph&&下面几条命令实现JPG图像的显示

  grph=sys(3)+′.jpg′

  if not empty(pic)&&如果本记录已经存有图像copy memo pic

  to (grph)thisform.imgedit1.image=m.grph&&就显示图像
thisform.imgedit1.displaythisform.btnsave.enabled=.t.

  endif

  这里把JPG图像存储在二进制备注型字段中。假设表文件image.dbf
有一二进制备注型字段pic(下同),执行下列语句:

  use image

  ...&&把记录指针定位到所需位置

  do form表单1.SCX

  可以扫描图像存入当前记录,如果当前记录已存有图像,也可修
改(旋转)已有图像。如果经常修改库中的图像,FPT文件会不断增
大,可打开库,执行Pack命令。

  

  二、在报表中插入数据库中存储的图像

  在VFP5.0的报表中,只能插入“图片/OLE绑定型控

  件”,图片只支持BMP格式,故为了在报表中打印JPG图像,必须
在打印前将JPG格式转换成BMP格式。下面新建报表imagerpt.frm,在
“页标头”部分插入了一“域控件”,“表达式”位置填入pimage(),
由pimage.prg临时生成要打印的图片文件(同一页面中要打印多张图
片时,生成多个临时文件),在“细节”部分插入一“图片/OLE绑
定型控件”,在其“图片来源”中,填入文件名(tmp);pimage.prg
内容如下:

  if file(tmp)

  erase (tmp)&&删除前一页生成的JPG文件

  tmp=left(m.tmp,12) 

  erase (tmp)&&删除前一页生成的BMP文件

  endif

  tmp=sys(3)+′.jpg′

  if not empty(pic)

  copy memo pic to (tmp)&&生成JPG文件

  myform.imgedit.image=m.tmp

  myform.imgedit.display

  myform.imgedit.saveas(m.tmp+′.bmp′,3,7,1,0,.t.)&&转
换成BMP文件

  myform.imgedit.cleardisplay&&清除显示的图像

  tmp=m.tmp+′.bmp′

  endif

  return 

  这里设计的报表不能单独运行,因为使用的对象在报表中没有定
义,要用下面这段程序调用:

  private myform,tmp

  MyForm = CREATEOBJECT(″form″)

  *在表单中加入图像编辑控件

  MyForm.AddObject(″imgedit″,″olecontrol″,
″wangimage.editctrl.1″)

  tmp=sys(3)+′.bmp′

  use image

  report form imagerpt preview for not empty(pic)

  if file(m.tmp)

  erase (tmp)

  tmp=left(m.tmp,12)

  erase (tmp)

  endif

  release myform

  三、图像的引入和导出

  图像的引入是指把现有的图像文件加入数据库,图像的导出是指
把库中存储的图像取出,供其它程序使用。

  Wang图像编辑控件能识别BMP、JPG、TIFF等格式的文件,用下面
这段程序可将现有文件转换成JPG格式,存入数据库中:

  private myform,tmp

  MyForm = CREATEOBJECT(″form″)

  MyForm.AddObject(″imgedit″,″olecontrol″,
″wangimage.editctrl.1″)

  tmp=sys(3)+′.jpg′

  use image

  ...&&定位记录到所需位置

  myform.imgedit.image=′要入库的图像文件名′

  myform.imgedit.display

  myform.imgedit.saveas(m.tmp,1,6,6,64,.t.)&&转换成JPG文

  append memo pic from (tmp) overwrite

  use

  erase (tmp)

  release myform


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -