您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VFP >> 辅导 >> 正文    
  VFP处理JPG图像文件方法谈 【注册男护士专用博客】          

VFP处理JPG图像文件方法谈

www.nanhushi.com     佚名   不详 

  Bitmap是非压缩型图像文件,占用的存储空间很大,而JPG图像文件是压缩型图像文件,因此,正确保存和显示JPG等图像文件具有很高的实用价值。 在VFP编程中,需保存图像文件时,通常是将图像以OLE方式保存到一个GENERAL型字段中。当需要在表单中显示该图像时,则使用OLE Bound控件,并将该控件绑定到保存图像的字段上即可。

  上述方法对于保存和显示Bitmap位图时没有问题,但是对JPG、GIF等图像文件则无法显示图像,而只能将其保存时的图像文件名显示出来。

  VFP 6.0版中的Imgae控件支持 bmp、gif、jpg和ico等图像文件格式,但是该控件不能绑定到保存图像文件的GENERAL型字段上。本文所采用的基本思路是:不将图像文件保存到GENERAL型字段中,而是把图像文件保存到一个二进制的Memo型字段中,当需要显示图像时,则将该Memo型字段的内容输出到一个临时文件中,然后再将临时文件名赋给Image控件中Picture属性即可显示图像。在报表打印输出时,也可以采用类似的方法打印图像。

  为实现上述的构想,本文提供了两个函数,一个是将图像文件保存到Memo型字段中,另一个是将Memo型字段中的图像保存到一个外部文件中。

  下面的过程文件是将一个外部图像文件保存到二进制Memo型字段中。图像文件在Memo型字段中的格式为:前128个字节保存原始图像文件名,其后的数据为图像数据。

Procedure s—ftom

lparameter s—cfield , s—cfile

local s—temp—str

if vartype(s—cfield) !=″C″ or vartype(s—cfile) !=″C″

=MessageBox(″参数类型错!″,48,″提示″)

return .F.

endif

if type(″&s—cfield″) != ″M″

=MessageBox( ″ ′ ″+s—cfield +″ ′ ″+ ″字段必须是二进制备注型数据!″,48,″提示″)

return .F.

endif

if !file( s—cfile)

=MessageBox( ″文件:″+s—cfile+″ 不存在!″,48,″提示″)

return .F.

endif

s—temp—str=PADR(JUSTFNAME(s—cfile),128, ′ ′)+filetostr(s—cfile)

replace (s—cfield) with s—temp—str

return .T.

endproc

  下面的过程文件是将Memo型字段中的图像保存到外部文件中,s—default—return当Memo字段为空或读写错误时该过程返回的隐含信息。该过程调用成功后返回所写的图像文件名,否则返回s—default—return的值。

procedure s—mtof

lparameter s—cfield, s—cfile, s—default—return, s—old—file

local s—temp—str, s—old—file, s—return

clear resource

s—return=s—default—return

s—old—file=′′

if vartype(s—cfield) !=″C″ or vartype(s—cfile) !=″C″ or vartype(s—default—return) !=″C″

=MessageBox(″参数类型错!″,48,″提示″)

return ′′

endif

if type(″&s—cfield″) != ″M″

=MessageBox( ″ ′ ″+s—cfield +″ ′ ″+ ″字段必须是二进制备注型数据!″,48,″提示″)

return s—return

endif

s—temp—str = &s—cfield

if len(s—temp—str) 〈= 128

return s—return

endif

s—old—file = alltrim(left(s—temp—str,128))

if empty(s—cfile)

s—return=s—old—file

else

s—return=defaultext( s—cfile, alltrim(justext(s—old—file)) )

endif

=STRTOFILE( substr(s—temp—str,129), s—return, .F.)

return s—return

endproc

  笔者使用该方法处理了大量的图像文件,在CPU 为P133的电脑上,对于每个图像文件不大于1.5MB的情况,处理速度非常满意。当图像文件较大时,则显示速度比较慢。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。