PowerBuilder中图片文件的处理

杨勤 莫国庆

摘 要 文章总结了在PowerBuilder应用程序中处理图片文件的两种方法:PowerBuilder语句加Picture控件以及OLE列加OLE控件。作者从图片的存储、显示与缩放三方面对这两种方法进行了较深入的讨论。
关键词 PowerBuilder  图片文件  Picture控件  OLE

Processing Picture File in PowerBuilder

Yang Qin  Mo Guoqing

  Abstract:Two methods to handle picture files in PB applications are illustrated in this paper. The first is using the PB clauses with picture control, and the second is using OLE column with OLE control. The discussion on both methods is unfolding in three steps: how to store, how to display and how to zoom pictures.
  Key words:PowerBuilder  picture file  picture control  OLE

  图片是数据库应用系统中常用的一种数据。图片处理主要涉及如何存储、显示和缩放图片等问题。比如,在人事管理信息系统中就要考虑如何对人员照片进行存储、显示和缩放。PowerBuilder(或简称PB)7.0以前的版本只能处理BMP格式的图片,PB7.0版本中可以处理JPG格式图片。在PB应用程序中这两种格式的图片数据都作为Blob数据类型进行处理。在PB应用程序的开发实践中,笔者发现了两种处理图片文件的方法:一种方法是使用PB提供的语句(SelectBlob和UpdateBlob)加Picture控件进行存取处理;另一种方法是在数据窗口中创建OLE列加OLE控件的方法。

1 PB语句加Picture控件的方法

  Picture控件主要用于显示图片,将该控件的PictureName属性指定图片文件名(扩展名可以是BMP或JPG),即可显示图片。这里以处理人员照片为例,对如何存储和显示照片作详细的介绍。
  .人员照片的存储
  (1) 使用GetFileOpenName函数得到图片文件名称,放入变量窗口示例变量filename中;
  GetFileOpenName(″打开照片文件″,filename, named, ″bmp″, ″照片图形文件(..bmp),..bmp,照片图形文件(..jpg),..jbp″)
  (2) 利用文件操作函数将文件读进BLOB类型的变量中;
int handle, loops, i
long file-len, bytes-read, new-pos
blob p1, p2
file-len=fileLength(filename)
handle=FileOpen(filename, STREAMMODE!,READ!,LOCKREAD!)
//计算读文件次数,最多只能读32 k的数据
if file-len>32765 then
if Mod(file-len, 32765)=0 then
loops=file-len/32765
else
loops=(file-len/32765)+1
end if
else
loops=1
end if
//读文件
for i=1 to loops
bytes-read=FileRead(handle,p1)
p2=p2+p1
new-pos=new-pos+bytes-read
FileSeek(handle, new-pos, FROMBEGINNING!)
next
FileClose(handle)
  (3) 利用UPDATEBLOB语句将图片存储进数据表Person中,设该表有以下主要字段(列):
P-Number, Char(4), Not Null, 主关键字,人员编号
P-Name, Varchar(30), Not Null, 人员姓名
P-Picture, Blob, Null, 人员照片
……
UPDATEBLOB Person SET P-Picture=:p2
WHERE P-Number=′0001′ USING SQLCA;
  .人员照片的显示
  (1) 用SELECTBLOB语句读取图片数据进BLOB变量中
Blob Pic
SELECTBLOB P-Picture INTO :PIC FROM Person
WHERE P-Number=′0001′ USING SQLCA;
.  (2) 通过Picture控件函数SetPicture显示图片。
P-out.SetPicture(Pic) //P-out为控件

2 OLE列加OLE控件的方法

  .人员照片的存储
  (1) 使用GetFileOpenName函数得到图片文件名称,放入变量filename中;
  GetFileOpenName(″打开照片文件″,filename,named,″bmp″,″照片图形文件(..bmp),..bmp,照片图形文件(..jpg),..jpg″)
  (2) 利用OLE控件将图片文件嵌入到OLE对象中。
value=ole-1.InsertFile(filename) //OLE-1为OLE控件
if value=0 then //文件传送到OLE容器成功
//根据需要设置OLE控件容器的有关属性
ole-1.Activation=activatemanually!
ole-1.Border=false
ole-1.DragAuto=false
ole-1.FocusRectangle=false
ole-1.Resizable=false
ole-1.Bring To Top=false
ole-1.Enabled=false
ole-1.IsDragTarget=false
beep(16)
MessageBox(″提示信息″,″向OLE容器传输数据成功!″)
else
MessageBox(″出错信息″,″向OLE容器传输数据失败!″,stopsign!)
end if
  (3) 将图片存入到数据表Person中
photo=ole-1.ObjectData //图片数据送BLOB变量
UPDATEBLOB Person SET P-Picture=:photo
WHERE P-Number=:′0001′;
  .人员照片的显示
  (1) 创建数据窗口dw-zpxs,数据源选择QuicSelect,显示风格选择Tabular,全选表Person所有的列。
  (2) 选择OLE DataBase Blob对象,则系统自动显示DataBase Blob Object对话框的Definition页,其中:
Clients Class:默认值为Datawindow;
Client name:默认值为Untitled
Table:包含Blob列的表名,为Person
Large Binary/Text Columns: Blob列名,为P-Picture
Key Clause:指定where条件,为P-Number=:P-Number
File Template:为空值
OLE Class:指定应用类,第三方工具,为画笔Pbrush,
Client Name Express:为Blob列的每行赋予唯一的字符串,通常为主关键字
  (3) 定义数据窗口dw-zpxs的Retrieve函数的输入参数,列名P-Number为参数。
  (4) 上述数据窗口创建完后,使用dw-zpxs.retrieve(′0001′)函数即可看到图片。

3 图片的动态缩放

  必要时我们可以对所显示的图片进行放大与缩小处理,用上述两种方法均可实现图片的动态缩放。
  对Picture控件可以通过修改其高度(Height)和宽度(Weight)属性值来实现,根据显示比例将高度和宽度值进行换算,然后重新赋值即可。具体实现是:设图片原来的高度和宽度大小分别为h-old和w-old,并设显示比例为per,则Picture控件的新高度和新宽度属性值应修改为h-old . per和w-old . per。
  采用OLE列方法时利用数据窗口的Modify函数,通过修改数据窗口对象的Zoom属性来实现。初始时数据窗口中显示的图片是正常大小的,故显示比例是100%,假设现显示比例为per%,则下面语句可以实现按per的比例显示图片:
dw-zpxs.modify(″datawindow.zoom=′per′″)
比如,若要按150%比例显示,则语句应为:
dw-zpxs.modify(″datawindow.zoom=′150′″)
  比例值的动态变化可通过SingleLineEdit控件和VscrollBar控件实现,SingleLineEdit控件用于显示比例值(百分比值),VscrollBar控件表示比例值的增减变化。在SingleLineEdit控件的Modified事件中书写修改脚本。采用Picture控件方法则修改Picture控件高度与宽度,而采用OLE列方法则修改数据窗口对象的Zoom属性。

4 结 束 语

  应用系统中采用哪一种方法处理图片文件取决于系统本身,用Picture控件的方法简单方便,而用OLE列的方法则比较灵活,还可借助第三方工具修改图片。但值得注意的是,上述两种方法实现时不能混用,即若用Picture控件方法存储图片,则不能用OLE列方法显示图片;同样地,若用OLE列方法存储图片,则不能用Picture控件方法显示图片。

主要从事电信交换、程序设计方面的教学与科研工作。
主要从事计算机操作系统、数据库应用方面的教学与科研工作。
杨 勤(解放军理工大学通信工程学院讲师 南京 210016)
莫国庆(解放军理工大学计算机与指挥自动化学院讲师 南京 210016)

参考文献
1,Simon Gallagher. Simon Herbert. 康博创作室译. PowerBuilder 6.0程序设计大全. 北京: 机械工业出版社, 1998.
2,张长富,李 匀,严苏娅. PowerBuilder 6.0用户参考手册. 北京: 希望电脑公司, 1998.
3,PowerBuilder实用开发技巧. 北京: 晓通数据研究与发展中心, 1998.

收稿日期:2000-01-19

文章引用自:http://www.wanfangdata.com.cn/qikan/periodical.Articles/dnxx/dnxx2000/0005/000518.htm

PowerBuilder中图片文件的处理相关推荐

  1. php中图片文件上传,显示缩略图

    php中图片文件上传,显示缩略图 htm代码块: <meta charset="utf-8" /> <style>img {max-width: 100px ...

  2. java中图片文件的传输及显示(Socket以及ServerSocket演示)

    //客户端部分 package testSix;import java.awt.Graphics; import java.io.IOException; import java.io.InputSt ...

  3. java中图片文件的判断

    javax.imageio 类 ImageIO BufferedImage bi = ImageIO.read(resFile);//resFile --- InputStreamif(bi == n ...

  4. java图片资源存放_Java编程中图片文件放哪

    举个例子:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/*按扭类*/classBombextendsJButton{publ ...

  5. php将图片导入,php中图片文件的导入,上传与下载

    ---------------------------------------------图片的导入-------------------------------------------------- ...

  6. fastreport打印指定路径图片显示不出来_报表工具中图片文件怎么展示---本地图片--网络图片--数据库图片...

    用于报表展示的图片来源有多种,如:数据库的图片字段.服务器本地图片.网络图片等,因此,报表工具也针对多种图片来源提供了多种多样的处理方式. 下面从不同的图片来源角度,举例介绍报表工具如何设置呈现. 图 ...

  7. android 判断图片的格式的,android判断文件是否是图片文件的方法

    判断一个文件是否是图片文件的方法,采用BitmapFactory去decode然后根据返回的Options参数来确定: public static boolean isImageFile(String ...

  8. 分析RM970 固件V2.5版本的图片文件列表

    --在RM970的早期固件版本中,我们是可以按照自己的意愿对其进行固件美化的,网上有很多这方面的教程.(例如:http://bbs.romman.net/thread-112858-1-1.html) ...

  9. Android中从assets资源中读取图片文件并保存到内部存储器并加载显示在ImageView中

    场景 Android系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里./res和/assets的不同点是,android不为/assets下的文件生成ID.如果使用/ ...

最新文章

  1. linux centos7 root密码重置方法
  2. SpringBoot+MyBatis+Shiro 搭建杂谈
  3. 大型网站后台架构的Web Server与缓存
  4. mysql 各表charset不同_MySQL表字段字符集不同导致的索引失效问题
  5. 事关SuperSocket发布,寻找YangFan哥哥
  6. Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器
  7. linux镜像包含数据库数据么,docker 镜像中包含数据库环境和运行环境
  8. 运维工具之轻量级自动化运维工具Fabric源码安装
  9. 可能是最简单暴力的卸载工具Geek Uninstaller
  10. 共享文件夹——Window与linux
  11. 微信公众号无服务器 外部链接,微信公众号文章怎么添加外部链接-给微信公众号文章添加外部链接的方法 - 河东软件园...
  12. python统计套利_配对交易-低风险统计套利量化交易 Python 实战
  13. Python批量处理lrmx格式文档内指定内容
  14. 程序复杂度之圈复杂度
  15. Pycharm Debugger - Frames Not Available
  16. 新加坡设自动巡逻机器人,助力城市精细化治理
  17. 没有全景相机,普通人如何用krpano做属于自己的全景图
  18. linux的几个小工具(日历和计算器)
  19. 内网渗透之内网信息收集(综合)
  20. 定时清理数据--定时操作

热门文章

  1. Python中的取模运算
  2. seo主导下的内容建设
  3. 点火成功后,她泪流满面!美国可控核聚变背后的华裔女科学家
  4. 新一代人工智能产业八大主要应用场景研判
  5. 数学美 之 判断线段相交的最简方法
  6. 微服务注册中心:Consul——服务注册
  7. 你能把压缩过的js代码重新美化成更可读的形式吗
  8. Neutral Graph Collaborative Filtering——论文提炼
  9. 06 Errors For Go1.13
  10. 【厚积薄发系列】C++项目总结9—ZeroMQ消息队列入门及分布式系统中应用(一)