已阅读5页,还剩57页未读, 继续免费阅读
(计算机系统结构专业论文)专业图像处理软件的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 本文主要介绍了种专业图像处理软件的设计与实现。论文主要涉及四个方 面:图像的采集模块、界面管理模块、内存防护模块和扫描仪驱动程序。在第 部分中首先对t w a i n 标准进行了详细介绍,然后给出图像采集的具体实现方法, 并对不同的传输方法进行了比较。在第二部分中介绍了界面设计的构图原则、设 计方法和该模块所采用的b c g c o n t r o l b a r 扩展框架库。在第三部分中对内存防护 模块的核心技术、工作原理、错误报告机制和所采用的线程本地存储器做了详细 说明。第四部分是对扫描仪驱动程序和对其各个模块所做的工作做了详细说明。 该软件可以使得专业扫描仪的性能得到更好的提高和完善,更好的为客户服 务,具有显著的经济效益和社会效益。 关键词:t w a i n ,界面管理,内存防护,扫描仪驱动程序 a b s t r a c t t h i sp a p e rd e a l sm a i n l yw i t ht h ed e s i g na n di m p l e m e n t a t i o no fo n ep r o f e s s i o n a l s o f t w a r eo fi m a g ep r o c e s s i n g t h e r ea r ef o u ri m p o r t a n tp a r t si nt h i st h e s i s :i m a g e a c q u i s i t i o n ,i n t e r f a c em a n a g e r , m e m o r ym a n a g e r a n ds c a n n e rd r i v e r i nt h ef i r s tp a r to f t h i sp a p e r ,t h et w a i ns t a n d a r di sd e s c r i b e di nd e t a i lf i r s t l y , t h e na l li m p l e m e n t a t i o no f i m a g ea c q u i s i t i o ni sp r e s e n t e d ,a n d ac o m p a r i s o no fd i f f e r e n td a t at r a n s f e rm o d e si s m a d e i nt h es e c o n d p a r t ,t h ec o m p o s i t ep r i n c i p l e t h a ti su s e df o rt h ei n t e r f a c ed e s i g n i n g i s i n t r o d u c e d ,a n d ad e t a i l d e s c r i p t i o n o fb c g c o n t r o l b a r ( b u s i n e s sc o m p o n e n t s g a l l e r yc o n t r o l b a r ) t h a ti s a nm f ce x t e n s i o nf r a m e w o r kl i b r a r yi s m a d e ,w i t ha m e t h o df o rd e s i g n i n gi n t e r f a c ei sg i v e n i nt h et h i r dp a r t ,n u c l e a rt e c h n o l o g y , w o r k i n g e l e m e n t sa n ds y s t e mo fe r r o rr e p o r ta b o u tm e m o r y m a n a g e ri si n t r o d u c e d ,w i t ha d e t a i l d e s c r i p t i o n o ft l s i nt h ef o u r t h p a r t ,s c a n n e rd r i v e r i s i n t r o d u c e d ,a n d ad e t a i l d e s c r i p t i o no f t h e j o b t h a tid of o ra l lm o d u l e so f t h ed r i v e ri sm a d e t h e a c c o m p l i s h m e n to f t h es o f t w a r ec a l li m p r o v ed i f f e r e n tp r o f e s s i o n a ls c a n n e r s a n dm a k et h e mw o r km o r ee f f i c i e n ta n ds e r v ec l i e n tb e t t e r t h e r ei sn od o u b tt h a tt h e s o f t w a r ee a r lb r i n gu sr e m a r k a b l es o c i a la n de c o n o m i cb e n e f i t s k e y w o r d s :t w a i n i n t e r f a c em a n a g e r m e m o r ym a n a g e r s c a n n e rd r i v e r y璺兰墨墨壁璺 独创性( 或创新性) 声明 小人声明所呈交的论文是我个人在导师指导下进彳的研究工作及取得的研究 成粜。尽我所知,除了文中特别加以标注和致蹴中所罗列的内容外,沦史巾不包 含其他人已经发表或撰写过的研究成果;也不包括为获得西安电子科技大学或其 它敦订机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所作过 的任俐贡献均已在论文中做了明确的【 3 明并表示了谢意。 申请学位论文与资料若有不实之处,木人承担一切相关责任。 本人签名:递毖 日期:2 ! 立i ! 黟 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位期间论文 作的知识产权单位属于西安电子科技大学。本人保证 毕业离开学校后,发表沦文或使用论文工作成果时署名单位仍然为西安电子科技 大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论 文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。( 保密 的论文在解密后遵守此规定) 本学位论文属于保密在一年解密后适用本授权书。 本人签名 导师签名 鲎丝p 燃 日期:趟 e j 期:塑坐! :! ! 第一章绪论 第一章绪论 1 1 课题的提出 随着计算机技术的进步,特别是图形界面操作系统( w i n d o w s 等) 的出现,大大 促避了数字图像的普及,使得计算机图像采集与处理技术得到广泛的应用。 西安电子科技大学海光数码公司承担了高精度大幅面工程扫描仪、特殊胶片影 像判读仪等国防科研项目,并自行研制了医学影像扫描仪、印前图像扫描仪、航 片摄影扫描仪等多种专业计算机图像输入设备。在研制开发过程中发现专业领域 有许多特殊图像处理的需求,所以急需开发一种与专业计算机图像输入输出设备 配套的拥有自主知识产权的专业图像处理软件系统。 以前公司研制和销售的扫描仪都是采用第三方软件做处理软件,通过t w a i n 接口与公司的驱动程序相连接。这种方法的弊端是有些专业的图像处理要求得不 到满足,如印前扫描仪的软件要求实现去网纹和去划痕等处理,而常用的第三方 软件都无法满足。 故此,公司决定用我们已有的扫描仪驱动程序的编程经验结合常用的图像处理 算法,自主研发能给各种专业扫描仪应用的配套软件。 1 2 课题的意义 目前我国使用专业扫描仪的企业( 如印刷厂、医院) 都以国外价格昂贵的扫描 仪为首选设备,主要是因为国产的设备短缺,或者是达不到各项指标的要求。海 光公司生产的各种专业扫描仪填补了国内扫描仪的许多空白,具有广阔的市场前 景,因而扫描仪配套软件的功能完备性也就变得很重要。 目前世界上研制开发成功的最著名的图像处理软件是a d o b e 公司推出的 p h o t o s h o p 。与其功能相似的还有l i n u x 操作系统下的一个功能强大的图像处理软 件g i m p 。但它们都是通用图像处理软件,对许多专业领域需求的图像处理功能支 持不够。 国内有个别单位根据需要自行开发了一些专用图像处理模块,但是因为他们开 发的模块脱离高性能的图像输入设备,使得这些软件的功能和效果受到限制,仍 然不能满足高性能彩色图像处理的要求 做好这个软件可以使得专业扫描仪的性能得到更好的提高和完善,更好的为客 户服务,也能使的扫描仪的性价比进一步提高。 专业幽像处理软什的殴计与实现 1 3 课题的设计与实现 公司细成_ r 一个研发小组来做设计和开发r = 作。本系统设计参照了p h o t o s h o p 的丌发包及s e e 的些设计思想。系统划分为十个模块,分别是界面管理模块、 内存管理模块、内部数掘管理模块、插件管理模块、历史记录管理模块、图像显 示模块、颜色转换模块、色彩管理模块( p r o f i l e 的相关操作) 、打印管理模块、 图像采集模块。使用的开发工具为v i s u a lc _ 卜+ 6 0 ,操作系统采用目前较为通用的 w i n d o w s2 0 0 0 。 经过查阅相关的技术文档和资料,对该系统可能使用单位的调研,我们研发 小组一起制定了内核的工作模式和交互方法。,我所完成的工作是:参与了内核和 框架的设计,负责了图像采集模块、内存管理模块和界面管理模块的实现。除此 之外,还编写和维护了几个扫描仪的驱动程序。 其中,有创造性的工作是: 1 ) 基于w i n d o w s 内存管理的背景知识,提出了一套内存防护的解决方案, 经用使用,使内存使用的安全性得到提高。 2 ) 对扫描仪开发包所自带的校正方法进行了改良,在不影响清晰度的情况 下,提高了速度,实用效果良好。 3 ) 实现了扫描选择时的多矩形框选择,以往公司的驱动能提供的选择都是 一个矩形框的选择形式。 1 4 论文的章节安排 本文的主要章节及其内容简介如下: 第一章,绪论,主要介绍图像处理软件的现状和发展,及课题的意义和实现。 第二章,系统设计,主要介绍系统的需求、总体设计和模块设计。 第三章,图像采集,主要介绍了t w a i n 标准和图像采集的实现。 第四章,界面管理,主要介绍了界面设计过程中遵循的一些原则和实现上的 一些方法和技巧,及界面管理模块的设计。 第五章,内存防护,主要介绍了内存防护的意义和该模块的工作原理和实现 方法。三、四、五章属于我在图像处理软件中所作的工作。 第六章,扫描仪驱动程序,介绍了我所参与的海光公司的印刷专用扫描仪的 驱动程序。 第三章图像采集 第二章总体设计 2 1 系统需求 本软件系统是为了配合海光公司开发的专业用途扫描仪,满足某些专业用户 对扫描仪的特殊要求而设计的。系统需要实现的功能是为各种专业要求的实现提 供公用的平台,而专业要求通过二次开发插件来满足特殊要求。这个平台的功能 包括,通过t w a i n 协议从扫描仪的驱动程序读入图像数据,能完成图像的显示和 缩放,能进行简单的翻转和旋转的功能,实现图像的颜色管理功能,有历史记录 管理( 即可先前返回操作) ,要求有内存防护的功能来记录内存操作的错误,能对 图像进行加密和解密。 由于最终用户是各种行业的从业人员,对计算机操作的熟练程度有限,系统 要求有友好的界面,操作要简单,相关的提示一定要有。 2 2 总体设计 平台部分共十个模块,分别是插件管理器、界面管理器、内部数据管理器、 内存管理器、色彩模式转换器、色彩管理器、历史记录管理器、图像采集模块、 显示管理器以及打印管理器。各功能模块相对独立,其相互联系通过接口来实现。 其结构如图2 1 所示。 图21 总体模块划分 专业图像处理软件的蹬训与实现 2 3 模块设计 插件管理器的主要任务是管理插件协调和其它模块( 内存管理器、界面管理 器、内部数据管理器、历史记录管理器等) 的相互通信( 数据传输) 。 界面管理器负责软件的总体交互,如其他管理器的启动、为其他管理器传递 消息,完成模块的同步,为个别模块提供显示的界面等。 内部数据管理器为其他模块提供图像数据,如显示模块,历史记录模块,以 及其他要对图像进行处理的请求的插件。 内存管理器取代编程环境提供的内存申请函数和内存释放函数,从而达到对 内存错误进行自动检测的目的。 色彩模式转换器的任务是完成图像在不同模式如r g b 、c m y k ,或者是r g b 的不 同位深的情况下,对图像模式、位深的转换。 色彩管理器是为了保证图像颜色在处理、显示和转换过程中的致性,而通 过对p r o f i l e 的操作来实现的。 历史记录管理器是为了防止在用户操作过程要返回上次的操作而设立的,通 过存储一定步骤的图像信息来实现该功能。 图像采集模块的功能是从扫描仪的驱动程序得到图像数据,完成输入。 显示管理器是由于w i n d o w s 提供的图像显示功能不足以满足该软件系统对大 图的显示要求而设立的,完成了图像的快速显示和快速缩放。 打印管理器实现对图像的打印功能。 本人主要负责了界面管理模块、内存管理模块和图像采集模块的设计和实现。 第二章幽像采集 第三章图像采集 3 1t w a i n 标准介绍 随着扫描仪、数码相机和其他图像采集设备的出现,人们渐渐发现在文档和 其他作品中加入图像具有很高的价值。然而,对于应用程序开发者来说,为了支 持在程序中显示和操作图像是要付出很大的代价的。他们需要创建用户界面,并 对各种可用的图像设备进行控制。当他们刚准备好支持一种给定的设备时,往往 又要面对随着新功能和特性的出现,设备升级的局面。应用程序丌发者发现他们 必须不断地更新他们的程序来才能保持不被淘汰。 图像采集设备开发者和应用程序开发者都意识到需要在图像设备和应用程序 之间建立一种统一的通信标准。这个标准使开发者受益匪浅的同时也让用户更好 的使用产品。它可以使设备生产厂商的产品被更多的应用程序访问,同时可以使 应用程序生产厂商的产品可以访问各种的设备的数据,而不必关心设备的种类和 特性。由于一致性和简化性的需要t w a i n 标准应运而生。目前最新版为t w a i n 工作组委员会在2 0 0 0 年1 月2 0 曰制定的t w a i n s p e c i f i c a t i o n v e r s i o n1 9 。 t w a i n 定义了一个标准的软件协议和一个用于应用程序和图像采集设备通信 的a p i ( a p p l i c a t i o n p r o g r a m m i n g i n t e r f a c e ) 。t w a i n 在系统中的位置如图3 1 。 a p p l l c a t l o a s o f t w a l e l m a g e a p p l i c a t i o n r a x a p p i c a t i o n w o r dp i o c e $ 5 0 f a p p l i c a t i o n i n s l i m e r 3 - 一 i i i 二1 q l 三 d 3 b s o l j f c em a n a g e r s o f t w a r e d a 阳s o u f c 白 埘a n 8 9 e r t w a i n i n t e r f a c e s h wd e 4 ) e n d a n t l l 0l a y e r ( s c q 1 p a r a l l e ls e r i a le t c i d a t as o u r c e s o f t w a r e l d i g i t a lc a m e r a d a t as o u r c e s c a n n e r d a t as o u r c e n x j ed a t a b a s e d a t as o u r c e p r o d u c e r so f i n y a g ed a t a 图3 1t w a i n 元素 在t w a i n 中有三个主要元素,它们分别是: 应用程序软件使用t w a i n 的应用程序 源管理器软件一该软件管理应用程序和源的接口,是由t w a i n 开发工具 包提供的,应该免费和t w a 蹦应用程序或源一起发行。 专、卅吲像处理软竹的殴计与实现 源软件一咳软件用来拧制蚓像采集设备,是由设备丌发者提供并符合 t w a i n 规范。 t w a i n 的体系 图3 2 t w a i n 软件元索 最上层是应用层,用户的应用程序在该层执行。t w a i n 对应用程序开发者描 述了关于用户如何访问t w a i n 的功能和用户如何选择一个源用户接口的指导方 针。t w a i n 不用关心应用程序如何实现,也不会对应用程序中可能会用到的应用 程序之间的通信方案有任何影响。 应用层下面是协议层。协议是t w a i n 所使用的“语言”和“语法”。它实现 了传输数据所需的指令。协议层包括: 应用程序中提供应用程序和t w a i n 接口的部分。 由t w a i n 提供的t w a i n 源管理器。 包括从源管理器接收指令的源设备和回传数据以及返回码的软件。 协议层下面是采集层,源主要驻留在这一层。用来控制采集的软件元素称为 源。采集设备可以是物理的( 如扫描仪或者数码相机) 或者逻辑的( 如图像数据 库) 。源使用源和应用程序都支持的格式和传输机制,来传输数据给应用程序。源 般会提供一个内建的用户界面来控制设备。应用程序也可以重写这个用户界面, 提供自己的用户界面来控制源的操作。 最下层是设备层,传统的低级设备驱动程序在这一层。设备驱动程序将指定 设备的命令转换为设备的特定硬件命令和动作。由于驱动程序是源的一部分,所 以使用t w a i n 的应用程序不再需要发行驱动程序。t w a i n 根本不去关心设备层, 源向应用程序隐藏了设备层,它提供了将t w a i n 操作和使用源用户界面进行的交 互翻泽成发给驱动程序的导致设备进行所希望的相应动作的等同命令 第二三章图像采集 3 2t w a i n 元素之间的通信 t w a e n 兀素之间的通信是通过两个入口点函数进行的。它们是d s m e n t r y ( ) 和d se n t r y ( ) 。d s m 指数据源管理器( d a t as o u r c em a n a g e r ) ,d s 指数据源( d a t a g o n y c e ) 。图3 3 说明了t w a i n 元素之间通过入口点进行通信的方法。 图3 3 用于元素之间通信的入口点 应用程序的目的是从源采集数据,然而应用程序不能直接和源通信,所有的对 数据、功能信息和错误信息的请求都要通过源管理器来完成。t w a i n 定义了大约 1 4 0 种操作,应用程序发送消息给源管理器来请求传输。应用程序为每个请求操作 指定最终的目的地,是源或者源管理器。应用程序与源管理器通过入口点 d s me n t 州) 函数来通信,该入口点是源管理器的唯一入口点。 源管理器为应用程序和源之间的通信提供路径,支持用户对源的选择,装载 源供应用程序访问。应用程序与源管理器通过源管理器的入口点d s me n t r y ( ) 通 信。如果d s me n t r y 调用的目的地是源管理器,源管理器直接处理该操作。如果 d s me n t r y 调用的目的地是源,源管理器将翻译参数列表信息,去掉目的地参数 然后调用相应的源。为了能到达源,源管理器调用源的d se n t r y ( ) 。每一个源都提 供这个入口点函数。此外,源管理器还能处理发起三个不是由应用程序发起的操 作。这些操作用于识别可用的源以及打开和关闭源。 源可以接收从应用程序通过源管理器发来的操作。也可以接收从源管理器直 接发来的操作。它处理请求然后返回可以表示操作结果的返回代码( 以t w r c 为 前缀) 给源管理器。如果操作的发起者是应用程序,那么返回代码将作为 d s m e n t r y ( ) n 数的返回值返回给应用程序。如果操作成功,源将设定包含指定信 息的状态代码( 以t w c c - 为前缀) 。尽管状态代码由源设定,但是并不自动传递 给应用程序,所以应用程序应该发起操作来查询状态代码的内容。 专业图像处理软件的殴计与实现 d s me n t r y ( ) , f l id se n t r y ( ) 函数用于通信操作。一个操作就是由应用程序或者 源管理器引发的动作。期望的动作是由传递给雨数的三元组定义的。一个三兀组 由= 个参数组成,分别是:数据组( d a t ag r o u p ) ,数据类型( d a t a a r g u n a e n tt y p e ) 和消息i d ( m e s s a g e 1 d ) 。 第一个参数是数据组( d gx x x x ) 。数据组将操作划分为几个大类,目前 t w a i n 定义了三个大类:控制类、图像类和音频类。标识符为d gc o n t r o l 是 控制类操作。该类操作涉及对t w a i n 会话的控制,例如打开源管理器时使用 d g _ c o n t r o l 作为数据组的标识符。标识符为d gi m a g e 是图像类。该类操作 涉及对图像数据的操作,例如请求传送图像数据时使用d gi m a g e 作为数据组 的标识符。标识符为d g a u d i o 是音频类。该类操作涉及对音频数据的操作,例 如请求传送音频数据时使用d ga u d i o 作为数据组的标识符。 第二个参数是数据类型( d a t x x x x ) 。三元组中的这个参数用来标识被传递 或操作的数据的类型。这个类型可以引用一个结构或者一个变量。t w a i n 中有许 多这样的数据类型。例如d a ti d e n t i t y 类型用于标识一个t w a i n 元素如一个 源。 第三个参数是消息i d ( m s gx x x x ) 。消息玎) 用来标识应用程序或者源管理器 想要进行的操作。例如m s gg e t ,m s gs e t 等等。 操作是由传递给函数的三元组确定的,每一个三元组都是一个唯一地确定地指 定了一个特定的动作。由三元组组成的三个参数分别传递特定的信息。 对操作的请求有三种方式: 从应用程序到源管理器,使用d s me e n t r y o i g l 数,将p d e s t 参数设置 为n u l l 。 从应用程序到源( 通过源管理器) ,使用d s m _ e n t r y ( ) i 垂t 数,将p d e s t 参数设置为指向标识源的有效结构。 从源管理器到源,使用d s _ e n t r y o 函数。 3 3t w a i n 的七种状态 应用程序、源管理器和源必须通过通信来管理数据的采集。这些处理必须以 一定的次序来进行。为了确保按照次序正确的执行,t w a i n 在会话中定义了七个 状态,源管理器和源在任何时刻只能处于一种状态。如图3 4 所示,其中a p p 表 示应用程序。应用程序通过源管理器连接到源的这段时期是一次会话,应用程序 连接到源管理器的时期是另一次会话。如果有多个数据源同时存在,也就有多个 会话同时存在,但在一次会话的某一点上,源管理器和源各自拥有一个特定的状 态。向新状态的转移是由应用程序或者源的请求操作导致的。大多数状态转移是 第三章图像采集 簟步状念转移。杓一l 二个状念中,状态l 、2 和3 只是用来指,j 源管理器的状态,状 态4 、5 、6 和7 只是用柬指示源的状态。 a p p :装载 源管理嚣状态源状态 图3 4 状态转移图 1 状态1 :会话前( p r e s e s s i o n ) 。在应用程序建立与源管理器的会话之前, 源管理器在状态1 。此时源管理器代码已经安装在系统中,但是还没有装 载到内存。 2 状态2 :源管理器已装载( s o u r c em a n a g e rl o a d e d ) 。源管理器己经被装载 进内存,但还没有打开。这时,源管理器已经准备好了从应用程序接收三 元组。 3 状态3 :源管理器已打开( s o u r c e m a n a g e r o p e n e d ) 。源管理器已打开,准 备管理源。这时,源管理器准备提供可用源的列表,打开源和关闭源。在 后续的会话中源管理器将一直保持在该状态,直到被关闭。当应用程序还 有打开的源时,源管理器将拒绝关闭。 4 状态4 :源己打开( s o u r c eo p e n e d ) 。源管理器已经将源转载并打开,源准 备接收相关操作。这时,应用程序可以查询源所支持的功能,并且可以设 定某些功能的设置。应用程序和源之间的功能协商在该状态进行。 5 状态5 :源已启用( s o u r c ee n a b l e d ) 。应用程序通过源管理器将源启用, 源已经准备好接收用户发起的传输。如果应用程序允许源显示它的用户界 专业图像处理软什的殴计与实现 面,那么源将在进入该状态时显示用户界面。 6 状态6 :传输就绪( t r a n s f e r i sr e a d y ) 。源准备好了传输数据给应用程序。 由状态5 到状态6 的转移是由源触发的,源通知应用程序传输已经准备好 了。在发起传输之f j i ,应用程序必须查询图像的相关信息( 分辨率,图像 尺寸,等等) 。 7 状态7 :正在传输( t r a n s f e m n g ) 。源正在向应用程序传输图像数据。传输 或者成功完成或者异常中止,源都会发送适当的返回代码来表明结果。当 源表明传输成功完成,应用程序必须对传输结束进行应答。 在程序中我们使用相应的三元组来调用入口点函数,来改变源管理器和源的 状态,从而实现图像采集。 3 4t w a i n 的数据传输方式 源向应用程序传输数据可以采用三种方式:原始方式( n a t i v e ) 、磁盘文件方 式( d i s kf i l e ) 和内存缓冲方式( b u f f e r e dm e m o r y ) 。 原始方式是每个源都必须支持的传输方式。它是缺省的传输方式,是最容易 由应用程序实现的传输方式。然而,它却受到许多限制,如只可传输d i b ( d e v i c e i n d e p e n d e n tb i t m a p ) 形式的数据,而且受限于可用内存的大小。在这种 方式下,源分配一个内存块并将图像数据写在该内存块,然后向应用程序传送一 个指向该内存块的指针,完成传输后由应用程序将内存块释放。该方式的最大优 点是,编程简单,传输速度快,一次完成整个图像数据的传输。 磁盘文件方式是源可选的方式,源可以不支持该方式但是仍建议支持。在该 方式下,由应用程序创建一个文件,源来读写这个文件。在状态4 ,应用程序可以 通过和源进行功能协商来确定源支持哪种文件格式。接下来应用程序就可以指定 相应的文件格式和文件名来用予传输。当图像数据较大时,使用原始方式由于内 存受限而无法实现,这时可采用磁盘文件方式。磁盘文件方式比下面要介绍的内 存缓冲方式要容易实现。但是,磁盘文件方式要比内存缓冲方式的传输速度慢。 内存缓冲方式是每个源都必须支持的传输方式。在该方式下,传输是由一个 或者多个缓冲区来实现的,缓冲区的分配和释放由应用程序完成。数据是按照未 格式化的位图来传输的,应用程序必须使用在传输过程中的可用信息来确定每个 缓冲区并正确的解释这个位图。当使用原始方式和磁盘文件方式时,传输是一次 完成的,但是在内存缓冲方式中,应用程序要循环地读取缓冲区数据。内存缓冲 方式在数据采集和控制方面提供了最大地灵活性,但却是最难实现的方式。 第- 章剀像采集 3 5 采集的实现 t w a i n 支持的操作系统有w i n d o w s 和m a c i n t o s h ,由于存本系统中采用 w i n d o w s2 0 0 0 作为丌发平台,所以本文只介绍了在w i n d o w s 系统中相关的操作流 程。程序使用v i s u a l c + 十6 0 作为开发工具,使用了m f c 中的类来实现。 用于w i n d o w s 平台的t w a i n 源管理器由4 个文件组成,分别是: t w a i n3 2 d l l t 後i n16 d l l 是3 2 位的源管理器,3 2 位的应用程序必须使用它来 和t w a i n 通信。 是1 6 位的源管理器,1 6 位的应用程序必须使用它来 和t w a i n 通信。 t w u n k e r _ 3 2 e k e 用于1 6 位应用程序和3 2 位源之间的通信。 t w u n k e r _ 1 6 e x e 用于3 2 位应用程序和1 6 位源之间的通信。 我们首先要将这些文件安装在w i n d o w s 的系统目录里,这样应用程序才可以 访问源管理器,进而和源进行通信。另外,需要在程序代码中包含t w a i n 的头文 件t w a i n h 。 3 5 1t w a i n 消息的处理 要使应用程序支持t w a i n 协议,我们必须在程序中将消息机制进行改动使其 可以响应t w a i n 消息。在程序中我们需要处理的消息包括:w i n d o w s 自身的消息 和t w a i n 消息。其中w i n d o w s 自身的消息已经在c m a i n f r m 类中得到处理,我 们需要做的是将t w a i n 消息的处理添加到c m a i n f r m 类里。为此我们在程序中向 c m a i n f r m 类中添加对p r e t r a n s l a t e m e s s a g e 消息的处理,并且在消息处理函数中调 用处理t w a i n 消息的函数。 b o o l c m a i n f r a m e :p r e t r a n s l a t e m e s s a g e ( m s g + p m s g ) i f ( m t w p r o c e s s t w m e s s a g e ( + p m s g ) ) c v i e w :p r e t r a n s l a t e m e s s a g e j n _ 回值是t r u e 时,表明该消息已经被 翻译,不应该再被翻译和派发 r e t u r nt r u e ; ; r e r a mc f r a m e w n d :p r e t r a n s l a t e m e s s a g e ( p m s g ) ; 1 专业图像处理软仆的设计与实现 程序巾的mt w 是c m a i r l f r m 类的成员变曼,它是c t w a i n 类的实例。c t w a i n 类负责与t w a i n 相关操作的处理,它的成员函数p r o c e s s t w m e s s a g e 是专门处理 t w a i n 消息的。如果源管理器和源均已打开,并且是发给源管理器或源的消息或 者源管理器或源发出的消息,则处理该消息,并返回t r u e ,这时w i n d o w s 默认 的消息处理程序不再对该消息处理,否则直接返回f a l s e ,由w i n d o w s 消息处理 程序来处理该消息。 3 5 2 二值图、8 位灰度图和2 4 位真彩图的采集 本系统支持对二值图、8 位灰度图、2 4 位真彩图、1 6 位灰度图和4 8 位彩色图 的采集。其中二值图、8 位灰度图和2 4 位真彩图的采集使用原始方式进行传输, 1 6 位灰度图和4 8 位彩色图的采集使用内存缓冲方式进行传输。由于两种传输方式 的实现上有差别,我们分2 节讨论。 在程序中我们先添加2 个按钮,选择源和采集图像。其中选择源按钮用于从 当前可用源中选择将要使用的数据源,采集图像按钮用于使用所选定的数据源来 采集图像。在实际操作时,我们一般先点击选择源按钮来选择源,然后再点击采 集图像按钮开始采集图像。也可以直接点击采集图像按钮,这样所使用的源就是 上一次t w a i n 所使用的数据源。 当点击选择源按钮时,程序将t w a i n 的源管理器动态链接库t w a i n3 2 d l l 加载到内存中,并且获得入口函数。然后以三元组d gc o n t r o l d a tp a r e n t m s go p e n d s m 为参数调用入口函数,打开源管理器。然后以三元组 d gc o n t r o l d a ti d e n t y m s gu s e r s e l e c t 为参数调用入口函数,从 可用源列表中选择将要使用的源。这时用户选择源,源管理器将记录用户所选择 的源,以便采集图像时使用。 当点击采集图像按钮时,首先执行点击选择源按钮时的前两个操作,因为在 操作时已经加了判断,所以不会重复前面已经进行过了的操作。这样做给用户带 来了方便,当用户想使用上次t w a i n 所选择的源时,就不必再去点击选择源按钮, 可以直接点击采集图像按钮来采集图像。接下来,程序以三元组d gc o n t r o l d a ti d e n t i t y m s go p e n d s 为参数调用入口函数,打开源,这时源进入状态 4 。 功能协商是在状态4 进行的。由于c a px f e r c o u n t 的缺省值是一1 ,表示要 采集多帧图像,而我们的程序是采集单帧图像的,所以必须要对该参数设置。在 功能协商中需用到两个三元组:d gc o n t r o l d a tc a p a b i l i t y m s gg e t 和d g c o n t r o l d a tc a p a b i l i t y m s gs e t ,分别是对功能的查询和设定。 在功能协商时要用到在t w a i n 头文件中定义的两个结构t wc a p a b i l i t y 和 第二章图像采集 t wo n e v a l u e 。 t y p e d e fs w u c t t wu i n t l 6 t wu r n t l 6 结构的定义如下 c a p ; 将要设定或者查询的功能的i d c o n t y p e ;为t w o n o n e v a l u e 时,表示使用单值。 为t w o nr a n g e 时,表示使用范围值。 为t w o n e n u m e r a t i o n 时,表示使用枚举值。 为t w o na r r a y 时,表示使用数组。 t w h a n d l eh c o n t a i n e r ;指向c o n t y p e 变量所指定的类型的句柄。 ) t w c a p a b i l i t y ; t y p e d e fs t r u c t t wu i n t l 6 i t e m t y p e ;条目的值的类型 t wu i n t 3 2 i t e m ;条目的值 ) t w o n e v a l u e ; 需要注意的是,在功能设定时,由源来分配h c o n t a i n e r 所指的内存;而在功 能查询时,由应用程序来分配h c o n t a i n e r 所指的内存。最后对内存的释放都是由 应用程序来完成的。在设定c a px f e r c o u n t 时,需要将c a px f e r c o u n t 赋值给c a p ,将c o n t y p e 设定为t w o n _ o n e v a l u e ,程序分配一块 t w o no n e l v a l u e 大小的内存,将首地址赋值给h c o n t a i n e r 。将 t w o n o n e v a l u e 的变量i t e m t y p e 设定为t w t y u i n t l 6 ,表示值的类型是1 6 位无符号数。将t w o no n e v a l u e 的变量i t e m 设定位1 ,表示采集单帧图像。 将指向该t wc a p a b i l i t y 的指针和三元组d gc o n r r o l d a tc a p a b i l i t y m s gs e t 传递绘入口函数,完成对c a px f e r c o u n t 的设定。设定之后要检 查返回代码以确定是否正确设定。由于对1 6 位灰度图和4 8 位彩色图要使用内存 缓冲方式传输,而t w a i n 缺省是以原始方式传输的,所以要对传输方式进行协商。 只要将i c a px f e r m e c h 赋给c a p ,将t w s xm e m o r y 赋给i t e m ,其余步骤 和对c a px f e r c o u n t 的设定一样。 完成功能协商后,我们以三元组d gc o n t r o l d a tu s e r i n t e r f a c e m s ge n a b l e d s 为参数调用入口函数,启用源。这时源的用户界面将弹出,进 入状态5 。至此采集图像按钮的功能全部完成,剩下的工作就是用户通过源的用户 界面和源交互完成想要的操作。当用户点击源用户界面上的退出按钮时,源将向 应用程序发送消息m s gc l o s e d s r e q ,请求关闭源。应用程序收到该消息后先 让t w a i n 消息处理函数处理,t w a i n 消息处理函数将禁用源,然后关闭源,源 的用户界面也就关闭了。当用户点击扫描按钮时,源将和用户一起工作来管理对 所需数掘的传输。和前面的状态转移不同的是,这次从状态5 向状态6 的转移是 由源发起的,而不是由应用程序引发。源准备好传输后将向应用程序发送消息 专业蚓像处理软什的设计与实现 m s gx f e r r e a d y ,应用程序收到该消息后先山t w a i n 消息处理函数来处理。 在t w a i n 消息处理函数中我们需要添加代码来完成传输。 在对m s gx f e r r e a d y 消息响应的代码中,我们先以三元组d gi m a g e , d a t i m a g e l n f o m s q g e t 为参数调用入口函数,获取图像信息,进而决定下 一步的操作。如果成功返回则源将回填结构t wi m a g e i n f o ,t wl m a g e i n f o 结构如下: t y p e d e fs t r u c t t wf 3 2 x r e s o l u t i o n ;木水平分辨率+ t wf i x 3 2 y r e s o l u t i o n ;产垂直分辨率8 t wi n t 3 2 i m a g e w i d t h ;产图像的列数,1 时表示源不知道列数8 , t w i n t 3 2i m a g e l e n g t h ;+ 图像的行数,一i 时表示源不知道行数+ t wi n t l6 s a m p l e s p e r p i x e l ;每个象素的取样个数4 t wi n t l 6 b i t s p e r s a m p l e 8 ;* 每个取样值的位数+ t wi n t l 6 b i t s p e r p i x e l ;产每个象素的总的位数+ t wb o o l p l a n a r ;严象素取样值的排列方式+ , t wi n t l 6 p i x e l t y p e ;木象素类型r t w p tx x x x ) + t wu i n t l 6 c o m p r e s s i o n ; 产压缩方式( t w c px x x x ) + t w _ i m a g e i n f o ,f a r + p t wi m a g e i n f o ; 通过对t wm a g e i n f o 的查询,我们可以知道将要传输的图像的信息。通 过这些信息,我们可以决定使用何种传输方式来完成传输。 由于二值图、8 位灰度图和2 4 位真彩图相对较小,而且用d i b 可以直接表示, 为了实现快速传输,我们采用原始传输方式。这样可以不但传输速度快,而且编 程简单。而1 6 位灰度图和4 8 位彩色图一般相对较大,而且d i b 不能表示这两种 图像,所以我们采甩了内存缓冲方式。这样虽然编程复杂些但是可以灵活操作 图像的象素数据,以便给应用程序使用。图3 5 说明了处理流程。 取得图像信息后,根据图像类型我们已经决定了采用何种传输方式。对于二 值图、8 位灰度图和2 4 位真彩图,我们以三元组d gc o n t r o l d a ti m a g e n a t i v e x f e r m s gg e t 为参数调用入口函数。调用成功则由状态 6 进入状态7 ,开始真正的图像传输,否则保持在状态6 。在实际程序中我们检查 函数的返回代码,如果返回代码是t w r c x f e r d o n e ,则说明成功采集了图像。 应用程序这时要使用源回填的指向图像数据的位图句柄,将图像数据拷贝出来, 然后释放位图句柄所指的内存块。将图像数据拷贝出来之后,应用程序要向源发 消息表示传输已经完成。以三元组d g _ c o n t r o l d 哪e n d i n g x f e r s m s ge n d x f e r 为参数调用入口函数,通知源完成传输,并使源由状态7 返回到 状态5 。 第j 章型像采集 图3 5 传输方法选择 完成一次采集后,源回到状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年考老师证模拟试题(含答案)
- 2027届哈尔滨市级名校中考物理考试模拟冲刺卷含解析
- 四川省成都市新都区2027届中考适应性考试物理试题含解析
- 2027届广西桂林市全州县重点名校中考四模物理试题含解析
- 江西省南昌市2027届中考物理猜题卷含解析
- 2027届上海市文来中学中考物理押题卷含解析
- 承德市重点中学2027届中考猜题物理试卷含解析
- 产学研协同模式下的智能化产业升级范式
- 西乌珠穆沁旗2026学年数学三下期末监测试题含答案解析
- 2026年口腔模拟试卷带答案
- 2025江苏南京紫金山科技产业发展集团有限公司工作人员招聘7人笔试参考题库附带答案详解
- 民房拆除安全协议书
- 2025-2026学年北京市丰台区高一(上)期中物理试卷(含答案)
- 断乳仔猪饲养管理 课件《猪鸡生产》演示模板
- 广东省幼儿园课程建设指导纲要(试行)2025
- 企业档案分类、归档范围、保管期限表
- 2024入团考试题库及答案初中
- 人权法试题及答案
- 学生心理健康一生一策档案表
- 深圳市罗湖区2022-2023学年七年级上学期期中地理试题
- 会展部门发展和规划
评论
0/150
提交评论