回 帖 发 新 帖 刷新版面

主题:[讨论]VFP处理JPG图像文件方法谈

VFP处理JPG图像文件方法谈
出处:网络

 
    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的情况,处理速度非常满意。当图像文件较大时,则显示速度比较慢。 

摘自《赛迪网》


本文来自-编程入门网:http://www.bianceng.cn/VFPwz/cyjs/js99.htm

大侠们,这是在网上搜到的关于vf处理图片的代码,但是本人实在太菜了,看不懂,请问这些代码要添加到什么地方,要建立什么样的表单、控件和表才能实现这样的效果呢,帮解释一下,我做一个菜谱管理系统,需要这样的功能。

回复列表 (共9个回复)

沙发

没有用过这种方法,我是将图像文件放到一个目录中,然后调用。今天用楼主的代码试做了个例子,不知对楼主是否有用。
[url=http://d.namipan.com/d/da7c5009ae72500226c43bf33d8acb3bb42cfe20756d0100]下载例子[/url]

板凳

哥们,我在用vfp9打开的时候,系统提示

[img]http://b28.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6ec0e1101f797b4ed110949786242ae8361d16e9e6b09d983fc887a449e80e5f7e92e0082ba38848caaf2c31297eee6ee27b6bd1227cbc11797b4624d2d4db6dc5bf9c99e496101265078ebda35116dd6fd73708&a=32&b=28 [/img]

3 楼



[img]http://hiphotos.baidu.com/tanghuitian/pic/item/90c2020f2a495f1b6159f315.jpg[/img]

4 楼

可能下载错了吧?下载了无关图片!
下载的应该是“图像处理.RAR”文件。

5 楼

没错,我解压了,里面有表单,可是用vp打开就会提示错误
错误信息如截图。。。。。主贴

6 楼

[quote]没错,我解压了,里面有表单,可是用vp打开就会提示错误
错误信息如截图。。。。。主贴[/quote]

按错误提示,选“定位(L)”,找到Wizstnd.vcx就OK了。
这个文件一般在"C:\Program Files\Microsoft Visual FoxPro 8\Wizards\wizstnd.vcx",与你安装VF时选择有关。

7 楼

哥们,谢谢你,解决这一问题了,能够打开表单,也能看控件代码,就是运行的时候提示错误,错误信息如截图。。。。。本页开头

8 楼

??

9 楼

也许是少见多怪。
本人也处理过图片,觉得很得意,没觉得有这么大的学问。
就是用一个文件夹放图片文件,变换Image控件PICTVRE的文件名就完了呀。

我来回复

您尚未登录,请登录后再回复。点此登录或注册