• 主页
  • API 调用
  • 基础类
  • 控件与界面
  • 数据库相关
  • DataWindow
  • 项目管理
  • Web 应用
  • 脚本语言

如何在dw中打印jpg格式图片?

devil_heart 2004-05-11 08:49:56
在dw中放入jpg格式图片,然后在彩色激光打印机上打印出来的却是黑块,如果换成是bmp格式图片就正常。大家有没有遇到过?如何解决的?谢谢!
...全文
1381 点赞 收藏 15
写回复
15 条回复
feixianzhi 2004年06月09日
小日本的东西不好用,建议楼主换一个打印机试试。
回复 点赞
zanglinfeng 2004年06月08日
有可能是BUG了.
不过JPG和BMP格式可以转换的了.
打印机是不是有别的设置?
回复 点赞
yilinpang 2004年06月08日
如何保存jpg到数据库呀
回复 点赞
devil_heart 2004年05月11日
我用的是pb8.02,pb9也试过了,一样!
回复 点赞
tommyhuanglei 2004年05月11日
建议:换个打印驱动看看!
回复 点赞
linleming 2004年05月11日
在转一篇文章给你!看看对你有帮助吗!你也由Microsoft Web浏览控件实现JPG文件的显示和打印试试
基于数据库的JPG图像处理

谢 忠
福建省龙岩电业局信息中心 福建 龙岩 364000

摘要:采用JPG格式在数据库中处理图像的方法,同时给出使用PB开发工具、ORACLE数据库系统的JPG图像处理实例。
关键词:图像处理 JPG 数据库
在开发应用软件时,往往会遇到处理大量图像信息的时候,例如在人事档案系统中职工照片信息的处理。一般情况下,先将一幅幅照片扫描成BMP格式的单个文件,保存在文件系统中,然后在职工数据库中只保存对应照片的文件名。检索时先从数据库得到图像文件名,然后再去访问对应的BMP图像文件的方法。但这种方法存在两个缺点:一是由于BMP图像文件很多,文件系统检索速度慢;二是在网络上运行应用系统,由于BMP格式的图象数据量很大,传输速度慢,同时也占用了大量的存储空间。本文提出了在数据库环境下采用JPG格式存储图像文件以及图像处理的方法,解决了上述缺点。
1. 图像格式为何采用JPG格式
能够处理静态图像的格式有:BMP、TIFF、JPEG、GIF等。
⑴ GIF:图形互换格式(Graphic Interchange Format),储存1位/点至8位/点的图像,其原理是减少每点的存储位数,以减少图像文件的大小。准确地说,GIF减少了图像调色板中的色彩数量,支持的颜色数目较少。
⑵ 图象格式JPEG即JPG,是由Joint Photographic Experts Group提出并因此而得名。JPG在Internet上广泛应用,JPG支持16M色彩也就是通常所说的24位颜色或真彩色。JPG是一种以损失质量为代价的压缩方式,是对图像中某些相同的色彩进行压缩,压缩比越高,图像质量损失越大。JPG只能对具有连续色调或连续灰阶的 24位图像进行压缩,对由8位转化成24位的图像没有优势,适用于一些色彩比较丰富的照片以及24位图像。经压缩转换为JPG格式图像后,文件长度小得多,而且显示和打印效果仍能满足要求。
⑶ BMP(位图)和TIFF(全名Tagged Image File Format)格式文件都很大,TIFF格式经压缩后容量比JPG大很多 。
在GIF和JPG之间进行选择时,要求在质量可以接受的情况下使图像的容量变为最小。通常单调的颜色考虑使用GIF压缩(在WEB上使用很广泛,如各种图形按钮),照片比较合适用JPG处理,因为它们的阴影与色彩中包含有许多缓和的变化。
JPG、GIF格式的图像可以用WEB 浏览器显示,常用的开发工具都支持WEB 浏览器的控件处理;目前的扫描仪都能将图片扫描成24位的图像,因此,对具有连续色调(如色彩丰富的照片)或连续灰阶的 24位图像可以采用JPG格式处理图像。
2.BMP图像如何转换成JPG格式
转换方法很多,可以采用各种图形处理软件转换,如PhotoShop、Graphic Converter、ACDsee等。这里介绍比较简单的两种方法:
⑴ 使用windows附件中的画图工具,将BMP文件打开,然后另存为JPEG格式。
  ⑵ 使用frontpage的“导入”(import)功能,将BMP文件“导入”,自动转换为JPG文件,然后将JPG文件“导出”(export)到指定目录。
3.JPG图像处理
现以一个实例介绍图像直接存入数据库及其显示、打印的方法,实例的环境为PB和ORACLE数据库。
⑴ 建立两个表:
职工信息表emp_info
列名 类型 长度 内容
Emp_ID Number 4 职工号
Name Char 8 姓名
Sex Char 1 性别
...
表 1


职工照片表emp_photo
列名 类型 长度 内容
Emp_ID Number 4 职工号
Photo Long raw 照片
表 2
它们都以emp_ID作关键字,类型long raw可以用来存储照片数据。

⑵ 在应用系统主程序中连接数据库。定义全局变量integer g_emp_ID,表示要处理照片的职工号。新建一窗口w_photo,定义窗口的实例变量:
blob I_photo //存放照片数据
int fp //文件指针
⑶ 图像存储
将经过扫描、转换为JPG格式文件的职工照片存放在目录中。现在处理如何将照片存入职工照片表emp_photo中:
在窗口中建立一按钮cb_store ,click事件程序编写如下:
string ls_path_filename,ls_filename

getfileopenname('选择照片文件',ls_path_filename,ls_filename,"JPG","JPG Files(*.JPG),*.JPG")
if ls_filename='' then return

fp=fileopen(ls_path_name,streammode!) //打开JPG照片文件
fileread(fp,i_photo) //照片数据存入blob类型I_photo变量中
fileclose(fp) //照片的JPG文件容量很小,只读取最多64KB的数据
//照片数据存入职工照片表中
updateblob emp_photo set photo=:i_photo where emp_ID=:g_emp_ID ;

if sqlca.sqlcode= -1 then
ROLLBACK;
messagebox('出错信息','照片存储失败!')
else
commit;
end if
⑷ 图像显示
职工照片要求和职工信息一起显示、打印。在窗口中建立一数据窗口控件dw_1,然后利用数据窗口画笔以freeform风格新建一数据窗口dw_emp_info,它以职工号为参数检索emp_info(职工信息表)的数据:职工号和姓名。为处理照片显示和打印,在数据窗口中建立一个OLE对象,在出现的“inert object”(插入对象)对话框中,选中“insert control”单选钮,在“control type”控件选择列表框中找到“Microsoft Web浏览器”,选中它,然后按确定按钮,在该对象name属性中输入ole_photo,然后按确定。这时在数据窗口中增加了一个矩形对象,这就是显示照片的对象。调整该对象的大小,使能容纳实际照片大小。如图1所示:







图 1
设置dw_1的Datawindow Object Name 属性为dw_emp_info。在窗口open事件中编写如下程序:
dw_1.settransobject(sqlca)
dw_1.retrieve(g_emp_ID)
在窗口中建立一按钮cb_display,实现图像显示,click事件程序如下:
//从照片表中取出照片数据
selectblob photo into :i_photo from emp_photo
where emp_ID = :g_emp_ID;
//建立临时文件
fp=fileopen('c:\~~temp_photo.jpg',streammode!,write!,lockreadwrite!,replace!)
if fp= - 1 then
messagebox('出错信息','JPG临时文件建立失败')
return
end if
//建立JPG 照片文件
filewrite(fp,i_photo)
fileclose(fp)
//在数据窗口中显示照片
dw_1.object.ole_photo.object.navigate('c:\~~temp_photo.jpg')

⑸ 图像打印
在窗口中建立一按钮cb_print,click事件如下:
dw_1.print()
利用数据窗口的打印函数即可将职工信息和照片一起打印出来。
4.结束语
从上述实例可见,该方法使用文件函数处理JPG照片文件和BLOB类型内存变量之间的数据转换,由BLOB变量向数据库存贮或读取照片数据,由Microsoft Web浏览控件实现JPG文件的显示和打印,如图2。











图 2
该方法快速有效,实现了JPG图像文件的数据库存储、显示、打印。数据库检索照片的速度大大快于文件系统;在网络运行的应用系统中大大减轻了网络负载,提高了速度;也大大节省了数据库存储容量。图2所示处理方法同样适用于采用支持WEB浏览控件的开发工具和支持长二进制数据存储的数据库的应用系统。
参考文献
[1](美)Kevin Loney著 李晓军,李晓华,郑君 等译, ORACLE8数据库管理员手册,北京:机械工业出版社,1998.
[2]晓通网络数据库研究所编,PowerBuilder 开发与参考手册(1-9),呼和浩特:内蒙古人民出版社,1998.
[3]OLE2从入门到精通 Bryan Waters著,何玉洁,张建旭、毛新生译,北京:电子工业出版社,1996.
作者:谢忠
工作单位:福建省龙岩电业局信息中心
职称:工程师
通信地址:福建省龙岩电业局信息中心(364000)
电话:0597-2045817,2045595
E_mail:lyxzhong@pulic.lyptt.fj.cn
回复 点赞
feixianzhi 2004年05月11日
没有试过这个问题,可能你的版本太低!
回复 点赞
xyzliuin 2004年05月11日
打补丁或升级

用api应该也可以实现,去api区问问
回复 点赞
嘘嘘兔 2004年05月11日
我用的是pb8.04,用彩色激光打印机打印.jpg的照片正常根本没有这个问题,可能你的PB需要升级或者打补丁。
回复 点赞
linleming 2004年05月11日
楼主用的是不是用的6。5呀!
回复 点赞
askyff 2004年05月11日
PB6。5和PB7。0都有这个问题,打个补丁或升级版本就好了
回复 点赞
klbt 2004年05月11日
我也遇到过,我认为与具体的打印机有关。
回复 点赞
xiao_bai 2004年05月11日
换台打印机试试吧
回复 点赞
wind_flaw 2004年05月11日
打印机是富士xero的c1618,其它的ACDSee、IE等打印出来都正常,而只有PB里面打印出来是乱的。我试过,直接在datawindow里面放一个image控件载入jpg和bmp或ico的图然后点击打印,只有jpg的出不来
回复 点赞
linleming 2004年05月11日
不应该的呀!
回复 点赞
发动态
发帖子
PowerBuilder
创建于2007-09-28

599

社区成员

6.6w+

社区内容

PowerBuilder 相关问题讨论
社区公告
暂无公告