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

devil_heart 2004-05-11 08:49:56
在dw中放入jpg格式图片,然后在彩色激光打印机上打印出来的却是黑块,如果换成是bmp格式图片就正常。大家有没有遇到过?如何解决的?谢谢!
...全文
1724 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
不应该的呀!
Dreamweaver 外部插件 名称 简介 Alwaysontop 可以使弹出的窗口始终位于顶端 Browse4redirct 页面自动重定向到某个地址 Moustrail 鼠标移动带有"轨迹" windowresizer 指定窗口的分辨率 Pageborder 设定页边距 ColourDethRedirect 根据访问者的的屏幕颜色数选定相应页面 Framewizard 制作各种样式的帧结构 FrameBuster 监测是否现在在一个帧,如果在跳出帧结构 Makemaillink 建立邮件连接 Makenewslink 建立新闻组连接 Fullscreen Opener 在新窗口以全屏幕方式打开页面 close onblur 光标移出窗口时自动关闭该窗口 CSS on resolution 根据不同的分辨率调入相应的外部css文件 Css on platform 根据不同的操作系统调入相应的外部css文件 Css on Browser 根据不同的浏览器调入相应的外部css文件 FontTagKiller 将页面所有的标记清除 jsonbrowser 根据不同的浏览器选择不同的js代码 Remove lines from maps IE4会在可点图激活时候显示虚线框,该命令移走这个框 Tag killer 将指定的标签从页面清除 InsertCustom Tag 插入自定义标签 set global Var 在head标签设置javascript的全局变量 windwo mover 将窗口移到屏幕的指定地方 dreamshow 使图片像播放幻灯一样顺序播放 Show-HideallLayers 隐藏或者显示所有的层 OpenerLocation 在新窗口打开指定的url Flash3_detector 监测是否支持flash3 redirect 可以根据浏览器操作系统等多种条件调入相应页面 Centrewindow 自动将窗口置 One by one(behavior+command) 在显示当前层的时候,自动隐藏前一个层 maxmizewindow 最大化窗口 Open full screen window 打开一个新的全屏幕的窗口 printcrossbrowser 弹出打印对话框 Audioembed 可以嵌入midi文件并设置为循环播放 Background_that_fit 不论怎样缩放窗口背景图片总是和窗口一样大 Basetarget 设定页面的的base URL Timestamp 为页面加上时间戳,这下最新更动时间不用每次再自己写了 guestbook-o-matic 不用cgi制作自己的留言本 quicktimeobj 插入quicktime文件 Flash3embedder 插入Flash3文件 realvideo 插入real文件 js depending on browser 根据不同的浏览器选择不同的javascript代码 Externel CSS file 插入外部的CSS文件 Externel Javascript file 插入外部的js文件 Video embed 插入activemovie windowsMaxmizer 最大化窗口   名称 简介 Reverse Timeline Reverse Timeline可以从TIMELINE的帧15倒放到帧1,但必须将其放到TIMELINE的文件夹下,否则它不会工作 Layer f(x) Behavior 这个Behavior 可以让一个层(layer)按照一个圆形、螺旋形或一些 特殊的轨迹运动。 Align Layers 这个Action的功能是让用户可以将一个layer象table一样的在屏幕上 进行竖直或水平排列对齐,同时这个插件还可以设置整个html页面的边距。 Layer Transitions 包含了12种网页常见的层变化效果的插件,在IE和NN内都能够正常 显示。 Back to my frame 在网页加入这个action后浏览器将会判断当前的页面是否包含在一 个帧,如果结果为否则会自动跳转到指定的url地址。 History Go 2.0 这个Behavior的作用是在网页增加一个“History Go”的javascri pt,从而可以实现类似于浏览器的“前进”和“后退”按钮的功能。 Print 3.0

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧