全自动虚拟切片扫描系统---条形码识别模块.doc

上传人:知****量 文档编号:86264649 上传时间:2023-04-14 格式:DOC 页数:27 大小:787.50KB
返回 下载 相关 举报
全自动虚拟切片扫描系统---条形码识别模块.doc_第1页
第1页 / 共27页
全自动虚拟切片扫描系统---条形码识别模块.doc_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《全自动虚拟切片扫描系统---条形码识别模块.doc》由会员分享,可在线阅读,更多相关《全自动虚拟切片扫描系统---条形码识别模块.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、毕业设计题 目 全自动虚拟切片扫描系统 -条形码识别模块 学 院 机械工程学院 专 业 机械设计制造及其自动化 班 级 机设07q2 学 生 徐哲 学 号 20073006114 指导教师 王玉增 二一一年五月三十日1 前言1.1全自动虚拟切片扫描系统-条形码识别模块的背景 传统病理学技术主要是在玻璃切片和显微镜的基础之上发展起来的,已经发展了200多年。最近几十年,随着计算机和信息技术的发展,病理学数字化也产生了。最早应用于虚拟病理技术的技术是使用数字式或模拟式摄像头进行图像采集、存储和传输,目前在病理的各方面工作中得到了广泛的应用。摄像头图像采集作为数字化病理的首次应用,所以相比较于传统切

2、片具有很多的优点,比如可以显示病理切片中的典型病变特点,其次是占用相对较少的存储空间而且方便存储和传输,并且能在数字图像上进行计算和图像处理等。随着数字化技术的飞速发展,就可以将整张切片进行数字化即“虚拟切片技术”。该技术已经在欧美和日本等科技发达国家进行了研发,并取得了很大的突破。 传统的病理切片由于是基于玻璃片,所以保存和运输困难。而这种虚拟切片技术就解决了这些不足。但是对于如此大量的虚拟切片,如何准确而且快速的被医生或者病人及其家属成功提取成为一个问题。然而条形码技术的产生与发展,很好的解决了这一问题。 条形码技术是在计算机应用实践中产生和发展起来的一种自动识别技术 ,是为实现对信息的自

3、动扫描而设计的。它是实现快速、准确而可靠地采集数据的有效手段 。条形码技术的应用解决了数据录入和数据采集和“瓶颈”问题,为供应链管理提供了有力的技术支持,输入速度快 ,信息量大,准确度高 ,成本低,可靠性强。1.2全自动虚拟切片扫描系统-条形码识别模块的现状在近几年的发展中,对于虚拟切片技术的发展主要有两个方向,第一,就是基于自动显微镜;第二,是基于切片扫描仪。对于第一方向开发较早,其关键设备为显微镜上的自动载物台,成像部件为数字式摄像头,成像速度和质量现阶段还都不能满足使用要求。而对于第二种发展方向的关键部件有自动切片转运部件、高速线性或矩阵式数字成像部件等,随着虚拟技术的长足发展,在成像质

4、量和速度上都有了较大提高,可以成批快速扫描切片,近年来占据了主要的虚拟切片设备市场。但是,目前还有阻碍其发展的有两大因素:第一,价格昂贵;第二,是配套软件较少。我们可以把虚拟切片制作系统分为两大部分:硬件和软件。其中,硬件包括虚拟切片扫描仪和计算速度高,存储容量大的高级计算机,软件就是虚拟切片扫描系统和能够安装在计算机上的图像浏览和编辑软件。现阶段中国主要应用的是日本研发的虚拟切片扫描仪。在扫描过程中多数情况下无需人工干预,从切片传递、选择图像区域、对焦、成像、文件合成等一系列操作完全由计算机控制自动完成。而且,可以进行多层切片扫描,形成三维虚拟切片,便于多层次、多截面观察。对于条形码技术,由

5、于它的领域特别的大,所以近些年来其技术发展迅速,很多不同种类和不同编码标准的条形码相继被应用于社会的各个领域,每一种条形码都具有各自特点。最具代表性的就是EAN13一维条形码和PDF417二维条形码。在开始选取条形码进行学习的时候,我首先采用了pdf417二维条形码,它的特点非常突出。二维条形码除具有普通条码的优点外,二维条码还具有信息容量大、可靠性高、保密防伪性强、易于制作、成本低等优点。二维条码DF417作为一种新的信息存储和传递技术,现阶段已应用在医疗保健、工业、国防、公共安全、金融、交通运输、商业、海关及政府管理等领域。美国十多个州的美国军人证、驾驶证、军人医疗证等几年前早已采用了PD

6、F417条形码技术。将证件上的个人信息及照片编在二维条码中,这样不但可以实现身份证件的自动识读,而且可以有效地防止假冒证件事件的发生。此外,本条形码要应用在医院常用的玻璃病理切片上,所以对条形码的大小有一定的要求,而二维条形码就具有这样的特点:条码符号形状、尺寸大小比例可变。除此之外,二维条形码还具有容错能力强的特点,具有纠错功能,这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50仍可恢复信息;译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一的特点。但是,随着学习的深入和在查阅相关文献的过程,结合与导师进行课题讨论的过程中,我发现在现

7、阶段医院进行病理切片或者病理档案时,最常用到的条形码是一维条形码。虽然一维条形码,如EAN13条形码,能编码的内容和种类远远没有二维条形码,如PDF417条形码的多,但是把它作为管理病理切片的编号是远远足够的(结合数学排列组合和现在我国人口的增长水平,此条形码可在100年内不重复)。再者,二维条形码虽然编码的内容很多,但是不太符合当今医院的体系,录入病人信息的过程相对复杂,且内容量很大并且需要有一定专业医学知识的医务工作者才可以胜任,在录入病理信息的过程中还要保持高度的警惕性,以免出现错误。而一维条形码只需录入一组数字简单,快捷,方便,且出错率低。2全自动虚拟切片扫描系统-条形码识别模块设计方

8、案2.1全自动虚拟切片扫描系统-条形码识别模块设计内容全自动虚拟切片机是远程医学诊断系统的重要组成部分,其工作原理是在本地采集病理切片,然后通过生物显微镜、数字摄像机、图像采集卡采集到计算机。病人编码用条形码表示,在医院登记处给病人一个编码,生成条形码并用条形码打印机打印出条形码贴片,把条形码贴在病理切片的固定区域。本课题的研究的内容为全自动虚拟切片机的条形码识别模块,包括条形码的采集与识别。2.2 设计中使用的软件平台和工具介绍2.2.1 VisualStudio 2010简介VisualStudio作为一套完整的开发工具集,用于生成XMLWebServices 、ASP.NETWeb应用程

9、序、移动应用程序和桌面应用程序。VisualC+、VisualC#、VisualBasic、VisualJ#全都使用相同的集成开发环境(IDE),利用此IDE不仅可以共享工具而且有助于创建混合语言解决方案。另外,这些语言利用了.NETFramework的功能,通过此框架可使用XMLWebServices开发的关键技术,简化ASPWeb应用程序。VS2010的主要部分包括:(1)使用Microsoft.NETFramework3.5.NET Framework提供了用于解决常见编程任务的构建基块(预制的软件),从而能够快速构造具有最终用户体验的出色的紧密联系的应用程序。在.NET Framewo

10、rk模型业务流程上有效构建的应用程序有利于在异类环境中实现系统集成。.NETFramework 和Visual Studio的结合使用减少了对公用管道代码的需要,从而缩短了开发时间而且使开发人员能够集中精力解决业务问题。.NET Framework3.5是在.NETFramework3.0的基础上构建的更高版本。得到增强的功能领域包括基类库、Windows CommunicationFoundation、Windows workflow foundation、WindowsCard Space和Windows PresentationFoundation。开发人员使用VisualStudio2

11、010旗舰版可以:集成的单元测试更有效的验证应用程序。应用程序的单元测试能够帮助我们在开发过程的早期轻松发现大量的问题。现在,VisualStudio2010旗舰版中集成了单元测试功能,而以前这个功能只在VisualStudioTeamSystem产品中提供。(2)ASP.NETASP.NET是建立在.NETFramework编程类的基础上的,为Web应用程序模型提供了一组可简化Web应用程序生成的基础结构和控件。ASP.NET包括能用于封装通用HTML用户界面元素(像文本框、列表框和按钮)的一组控件。这些控件在Web服务器上运行,并以HTML的形式将其用户界面呈现在浏览器中。在服务器中,这些

12、控件公布面向对象的编程模型,该模型能为Web开发人员提供面向对象编程的丰富功能。ASP.NET还提供基础结构服务,如进程回收和状态管理,从而进一步减少开发人员必须编写的代码数量,而且提高应用程序的可靠性。另外,ASP.NET使用这些同样的概念使开发人员可以以服务的形式交付软件。同时使用XMLWebServices功能,ASP.NET开发人员可以编写他们的业务逻辑,并使用ASP.NET基础结构通过SOAP交付该服务。Visual Studio2010还包括各种增强功能,例如对Web开发工具的大量改进、可视化设计器(使用.NETFramework3.5加速开发),以及能够加速处理和开发所有类型数据

13、的语言功能。VisualStudio2010为开发人员提供了所有相关的框架和工具支持,帮助创建令人印象深刻的、引人注目并支持AJAX的Web应用程序。开发人员能够利用这些丰富的服务器端和客户端框架轻松构建以客户为中心的Web应用程序,这些应用程序可以集成在任何当前浏览器内运行、任何后端数据提供程序、Microsoft平台以及完全访问ASP.NET应用程序服务。(3)统一编程类该框架为开发人员提供了统一的、分层的、面向对象的和可扩展的类库集(API)。目前,C+开发人员使用Microsoft基础类,而Java开发人员使用Windows基础类。该框架统一了这些完全不同的模型,还为JScript和V

14、isualBasict程序员提供了对类库的访问。通过所有编程语言的公共API集,公共语言运行库使得跨语言继承、调试、错误处理成为可能。从JScript到C+的所有编程语言具有对框架的相似访问,开发人员可以自由选择它们要使用的语言。(4)公共语言运行库运行库实际上在开发时操作中和组件的运行时都起到很大的作用,虽然名称中没有体现这个意思。在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、停止线程、启动和进程,以及强制执行安全策略。由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,特别是与今天的COM相比。特别是反射等功能显著减少了开发

15、人员为将业务逻辑转变为可重用组件而必须编写的代码量。(5)快速的应用程序开发为了帮助开发人员迅速创建先进的软件,VisualStudio2010提供了数据功能和改进的语言,像语言集成的查询(LINQ),各个编程人员可以利用这些功能更轻松地构建解决方案以处理和分析信息。Visual Studio 2010还使开发人员能够从同一开发环境内创建面向多个.NETFramework版本的应用程序。开发人员能够构建面向.NETFramework2.0、3.0或3.5的应用程序,这意味他们可以在同一环境中支持各种各样的项目。2.2.2 C+介绍C+是C语言的超集,在上世纪90年代为满足程序管理的复杂性要求,

16、贝尔实验室的BS博士对C语言进行了扩充和改进,同时由于面向对象的方法增加了程序的可扩充性、可靠性和可维护性,大大提高了程序员编程的效率,因此面向对象技术就成了程序设计方法的主流。C+是一种混合性语言,不仅保持了C语言的高效,而且对C语言进行了面向对象和非面向对象的扩充,成为当今面向对象的最受欢迎的语言,并且已成为事实上的标准。尽管C+与C最最明显的区别是它支持面向对象的程序设计,但新的语言在非面向对象特性上也做了不少的改进。尤其在国际信息系统标准委员会的指导下,1988年确立了C+语言国际标准,也就是ISO/IEC FDIS 14882,其中提供了bool类库、标准模板库、超过150个的标准类

17、库、命名空间和外处理机制等,大大丰富了C+语言。下面简要列出了C+对C的一些扩充:(1)const说明符const说明用于冻结一个实体在起作用域内的值,也可用来冻结一个指针变量指向的数据。函数的参数也可以说明为const,以冻结这个参数的值。(2)分程序内说明C+允许在可执行代码之后和分程序内出现变量声明,而不必在程序的开始处对要使用的变量加以声明,即可以在分程序内第一次使用变量的地方对变量进行说明。(3)强制类型转换 用户自定义类型名与预定义类型名都可以作为函数名使用,明确指明由一种类型转换成另一种兼容的类型。它支持两种类型转换的形式:“(类型)表达式”和“类型(表达式)”。前者为C语言支持

18、的强制转换形式。(4)sizeof运算符C+提供的sizeof运算符用来查看某变量的字节数或数据类型。该运算符可将变量名和数据类型名作为自变量,比如sizeof(变量)、sizeof(数据类型)、sizeof变量、sizeof数据类型都是合法的形式。(5)缺省参数在C+函数说明时,可以把某个函数所带参数中的后面一个或几个赋以缺省值。调用时,可以不提供具有缺省值的自变量,而被舍弃的参数使用相应的缺省值。(6)内联函数 声明函数的时候,如果加上说明符inLine,那就表明编译器要把指定的函数直接插入到每个调用语句处,这样用增加程序代码所占内存空间来加快程序执行速度。(7)new和delete运算符

19、 用这两个运算符来进行内存动态分配和释放。(8)引用参数在参数表中的参数类型后面加&号来表明其为引用参数,当进行函数调用时,引用参数成了其自变量的别名,当引用参数发生变化时自变量的参数会随之改变。(9)返回void的函数和指向void的指针Void函数类型表明一个函数不返回任何值,指针变量也可声明为指向void,这种指针可被看成是可以指向任何基本类型的其他指针。(10)函数名重载C+允许定义不同参数表、相同函数名的多个函数。编译程序可以根据类型、参数个数区别重载函数。但是,如果参数表及函数名都相同,仅函数返回类型不同,编译程序就会出错。(11)对象(object)它是C+系统中的基本运行实体,

20、其中的数据可视为对象的状态,对象状态的改变,只能由其他对象向该对象发送信息,接受信息后通过调用相应的函数来实现。因此,对象的独立性较强,通过对象来构造复杂的应用程序。(12)成员函数类中的方法称为该类的成员函数,C+中的成员函数就是在该类的数据上定义的基本操作。(13)类(class) 类是创建对象的关键,每个对象都是由一个类来说明的,类和对象的关系就好像任何一种计算机语言中的数据类型和变量的关系一样,一个对象应属于某一个类;一个变量应属于某种数据类型。对象也称为相应类的实例。在C+中声明类的方式为: Class类名Private: /私有数据和方法Public: /共有数据和方法Protec

21、ted: /被保护的数据和方法 ; 其中private, protected ,public,为访问控制关键字。(14)继承 继承作为面向对象程序设计的关键机制,C+同样支持继承性。C+中的继承分为多重继承和单一继承。多重继承,导出类可以有多个父类;单一继承中导出的类只有一个父类。 多重继承的方式为: Class C:访问控制C1,访问控制C2,,访问控制Cn 其中导出类C表示同时继承了C1,C2,Cn(多个)父类的特性。 单一继承的方式为: Class B:访问控制A 其中访问控制为关键字public或private,缺省为private。该形式的声明表明导出类B能继承父类A的特性。(15)

22、析构函数和构造函数 析构函数和构造函数是两种特殊的成员函数。析构函数即是相应的类名前加上符号的成员函数,与析构函数相反,当一个对象离开系统时,系统调用析构函数以完成该对象所占内存空间的释放以及成员函数中定义的其他工作。构造函数是与它的类具有相同名字的成员函数,当声明该类的一个对象时,系统调用相应的构造函数,已完成对声明对象的初始化工作。(16)例外处理和命名空间 这两种机制是C+国际标准ISO/IEC FDIS 14882最新制定的。命名空间是C国际标准中不可缺少的组成部分。正如我们所知道的那样,在应用开发过程中,常常需要多个库,并且这些库可能来自不同的文件。在这些文件中可以定义相同名称的类和

23、函数,所以可以将对象、函数和类先顶再说明块内,而其他的基本命名空间放在std命名空间中和全局命名空间中。C+国际标准中另一个关键机制是例外处理,此机制可以处理程序运行中的错误。大多数现代的编译程序都提供了一个集成的开发环境。一般情况下,在该环境中点击菜单make或build或compiler命令来生成可执行的计算机程序。程序员在使用C+语言时,首先编制源程序(扩展名为.cpp).源程序被编译(compiler)后就生成了目标文件,通常用.obj作为文件的扩张名。此目标文件就是源程序的目标代码,即机器指令。因目标代码只是一个个的程序块,这仍不是一个可执行的程序,所以若要成为可执行的程序必须进行连

24、接(link),即程序间的相互衔接成为操作系统的程序整体。C+程序通过同时连接一个或几个目标文件与一个或几个数据库创建。库的扩展名为.lib,是由一组机器指令构建的程序代码,为可连接文件。库包括用户生成的库和C+标准库。库与文件连接后即生成计算机可执行的程序。当然,难免在集成环境中编辑C+源程序经编译后产生编译误差。此时,程序员必须回到编辑状态对程序进行修改。同时,连接时也能产生连接错误,这时也要退回到编辑状态对源程序进行修改。C+程序的开发步骤如图2-1:开始 程序设计编辑源程序程序编译编译错?+=+=?= 否程序连接 连接错? 是否 程序运行 运行错? 是 结束否否 图2-1 C+程序的开

25、发步骤2.3 EAN13码简介 一维条形码是指由一组规则排列的条、空及其对应字符组成的标识,用以表示一定的商品病理切片信息。其对应字符由一组阿拉伯数字组成,可以被人直接识读或通过输入计算机通过键盘等输入设备数据使用。这一组条空和相应的字符所表示的信息是相同的。 “空”指对光线反射率较高的部分,“条”指对光线反射率较低的部分,能够用特定的设备识别,转换成与计算机能够解读的二进制信息和十进制信息。对于每一个病理切片,它的编码是独一无二的,对于普通的一维条形码来说,还要通过数据库建立条形码与切片信息的对应关系,当条形码的数据传到计算机上时,由计算机上的应用程序对数据进行操作和处理。其意义是通过在计算

26、机系统的数据库中提取相应的信息而实现的 。因此,普通的一维条形码在使用过程中仅作为识别信息。 EAN13条形码的特点:(1)除了表示数字的条码符号外,还有一些辅助条码字符,用作表示起始,终止的定界符和平分条码符号的中间分隔符。(2) EAN条码字符集包括A子集、B子集和C子集。每个条码符号均由2个条和2个空构成。每个条和空由1-4 模块组成,每个条码字符的总模块数为7。条码字符集可表示0-9共10 个数字字符。(3)条码符号由一系列相互平行的条和空组成,四周留有空白区。(4) 供人识别字符位于条码符号下方,与条码相对应的13位数字,采用OCR-B字符。2.3.1 EAN13码编码规则EAN条形

27、码通用病理切片条码是模块组合型条码。EAN码是国际通用的符号体系,是一种长度固定、无含意的条码,所表达的信息全部为数字,主要应用于商品标识。模块是组成条码的最基本宽度单位,每个模块的宽度为033毫米。2.3.1.1编码要求条形码的国际标准要求编码由13位十进制数字构成(从左至右分别为第0位第12位)。并且第12位和前12位要满足如下的关系:满足以上关系的数码可以作为条形码的编码。2.3.1.2条形码规范符合国际标准条形码图案是由113条黑白相间的数线组成,其中包括黑色和白色两种反差很大的线条。如图一所示:图一 条形码实例整个图案包括开始部分、第一数据部分(左边)、中间部分、第二数据部分(右边)

28、和结束部分等五个部分。n 开始部分:包括12条线。是按照国际标准的国定格式的规律排列的,从左至右分别是8条白线,一条黑线,一条白线和一条黑线,如图二:图二 条形码起始部分n 第一数据部分:包括42条线。他的形成是按照一定的算法形成的,其中包含了这些数字包含的信息。如图三。图三 条形码第一数据部分n 中间部分:包括5条线,同开始部分相同符合国际标准的规律,从左到右依次是白线,黑线,白线,黑线,白线。如图四。图四 条形码中间部分n 第二数据部分:包括42条线。他的形成同第一数据部分是一样的,都是按照一定的算法形成的,其中包含了的数字包含的信息。如图五。图五 条形码第二数据部分n 结尾部分:包括12

29、条线。排列顺序同开始部分和中间部分,按照国际标准排列,从左至右分别是一条黑线,一条白线和一条黑线,8条白线。如图六:图六 条形码的结束部分2.4 EAN-13条形码生成原理条形码的第一数据部分是由7个数字形成的,其编码方法具体如下:n 首先使用产生和匹配的字母码,该字母码有6个字母组成,字母限于A和B。产生字母码的列表如下字母码0AAAAAA1AABABB2AABBAB3AABBBA4ABAABB5ABBAAB6ABBBAA7ABABAB8ABABBA9ABBABA表2.1 映射表n 将和产生的字母码按位进行搭配,来产生一个数字-字母匹配对。并通过查表来得到形成的条形码第一数据部分。将和C进行

30、搭配,并通过查表得到,即是形成的条形码的第二数据部分。其映射表,如表二所示:数字-字母匹配对二进制信息0A00011010B01001110C11100101A00110011B01100111C11001102A00100112B00110112C11011003A01111013B01000013C10000104A01000114B00111014C10111005A01100015B01110015C10011106A01011116B00001016C10100007A01110117B00100017C10001008A01101118B00010018C10010009A0001

31、0119B00101119C1110100表2.2 数字-字母映射表n 绘制条形码:通过映射二进制数码进行绘制,二进制数字“1”对应黑色线,二进制数字“0”对应白色线。2.5 EAN-13条形码的识别原理首先,通过条形码的开始部分,即一条黑线、一条白线、一条黑线的规律组合识别出,第一数据部分的开始部分位置position start 1。Position start 1就是EAN-13条形码的第13条线。从position start 1开始识别第一数据部分代表的二进制元信息,即通过从position start 1开始依次向右扫描42条线(第13条线到第54条线),得到42字节的二进制信息码

32、。然后将这个元信息码按照7字节一组进行分组,得到6个组group1, group2, , group6。然后将GROUP I在表二中进行反向查表,得到数字-字母匹配对(number-character),即得到了。通过得到的6个字母的组合得到一个字母码,并通过反向查找表2.1,得到。同时现在的扫描位置为中间部分,即position middle。通过从position middle开始识别一条黑线、一条白线、一条黑线的规律组合,找到了第二数据部分的起始位置position start 2,从position start 2开始识别第二数据部分代表的二进制信息,即通过从position star

33、t 2开始依次向右扫描42条线(第60条线到第101条线),得到42字节的二进制元信息码。然后将这个元信息码按照7字节一组进行分组,得到6个组group1, group2, , group6。然后将GROUPI 在表二中进行反向查表,得到数字-字母匹配对(number-character),舍弃后面必然为C的字母后即得到了。3 程序编译与编译结果3.1 EAN-13条形码生成过程程序最终的运行结果是完成对EAN-13条形码的13位数的编码,最后生成一幅bmp格式的图像。双击进入条形码编码程序,此时会出行一个对话框,说明此程序的工作步骤,点击“OK”。然后单击“操作”按钮,此时可将你想要编码的1

34、3位数出入其对话框中,点击“您已确定”之后,便可生成一幅EAN-13条形码图像。最后,点击“文件”,“保存”,这样一幅标准的EAN-13条形码图像就生成了。程序进行的第一步就是要首先判断你想要编码的这一组数字是否符合EAN-13条形码的国际标准要求,就是是否出入的是一组13位数的阿拉伯数字,那么其判别代码如下:void CGeneratorView:OnEditGive() / TODO: Add your command handler code hereCGiveCodeDlg myDialog; if(myDialog.DoModal()=IDOK)if (myDialog.m_code

35、.GetLength() != 13)MessageBox(_T(位数不对,无法处理!),_T(出错啦!),MB_ICONERROR);return; for (int j=0; j=12; j+)codej=(int)myDialog.m_code.GetAt(j)-48; m_bModified=TRUE; if(code12 != CheckBit()MessageBox(_T(校验码有误,已重新计算!), _T(校验码出错),MB_ICONERROR); code12 = CheckBit();CWnd:Invalidate();要使程序能把13位数字,转化成一组黑白相间的一维条形码图

36、像,就需要把这一组13位数字首先转化成二进制的一组数。其转化代码如下:void CGeneratorView:BldFirstTable() firstcode0=_T(AAAAAA);firstcode1=_T(AABABB);firstcode2=_T(AABBAB);firstcode3=_T(AABBBA);firstcode4=_T(ABAABB);firstcode5=_T(ABBAAB);firstcode6=_T(ABBBAA);firstcode7=_T(ABABAB);firstcode8=_T(ABABBA);firstcode9=_T(ABBABA);void CGen

37、eratorView:BldSecondTable() coderule_T(0A)=_T(0001101);coderule_T(0B)=_T(0100111);coderule_T(0C)=_T(1110010);coderule_T(1A)=_T(0011001);coderule_T(1B)=_T(0110011);coderule_T(1C)=_T(1100110);coderule_T(2A)=_T(0010011);coderule_T(2B)=_T(0011011);coderule_T(2C)=_T(1101100); coderule_T(3A)=_T(0111101);

38、coderule_T(3B)=_T(0100001);coderule_T(3C)=_T(1000010); coderule_T(4A)=_T(0100011);coderule_T(4B)=_T(0011101); coderule_T(4C)=_T(1011100); coderule_T(5A)=_T(0110001); coderule_T(5B)=_T(0111001);coderule_T(5C)=_T(1001110); coderule_T(6A)=_T(0101111);coderule_T(6B)=_T(0000101); coderule_T(6C)=_T(101000

39、0); coderule_T(7A)=_T(0111011); coderule_T(7B)=_T(0010001);coderule_T(7C)=_T(1000100); coderule_T(8A)=_T(0110111);coderule_T(8B)=_T(0001001); coderule_T(8C)=_T(1001000); coderule_T(9A)=_T(0001011); coderule_T(9B)=_T(0010111);coderule_T(9C)=_T(1110100);int CGeneratorView:CheckBit() int odd=0,even=0,r

40、esult=0;for(int i=1; i=11; i+=2) odd += codei;for(int j=0; j=10; j+=2)even += codej;result = 10 - (odd*3+even)%10;return result;在把这一组符合标准的13位数字转化成一组二进制数码之后,程序就要把这些二进制数转化成黑色与白色的条纹。其转换规则很简单,就是“1”代表黑色条纹,“0”代表白色条纹。上面我们已经提到,EAN-13条形码图像分成五个部分,其中有三部分(起始部分,中间部分和结束部分)是规定好的,只有两个数据部分是根据数字转换而来,那其数据转换成黑白条形码程序源代码

41、为:void CGeneratorView:DrawLeft(CDC *ptDC) CString temp1 = firstcodecode0;CString YorN6; /用于存贮左边的六位数的编码for(int i=0;i=5;i+)char temp2;ToChar(codei+1,temp2);CString temp3(temp2);temp3+=temp1.GetAt(i); /将数字和字母连接成串 coderule.Lookup(temp3,YorNi); /查表得出编码int x;for(int j=0;j=5;j+)for(int k=0;k=6;k+) /每个数字有七位

42、编码x=12+j*7+k; /计算每个模块的横坐标if(YorNj.GetAt(k)=1)DrawOne(ptDC,CPoint(x*lineWidth,0),FALSE);elseDrawZero(ptDC,CPoint(x*lineWidth,0);void CGeneratorView:DrawRight(CDC *ptDC) char temp1;CString YorN6; /用于存储后面六位的编码for(int i=7;i=12;i+)ToChar(codei,temp1);CString temp2(temp1);temp2+=C;coderule.Lookup(temp2,YorNi-7); int x;for(int j=0;j=5;j+)for(int k=0;k=6;k+) /每个数字有七位编码x=59+j*7+k; /计算每个模块的横坐标if(YorNj.GetAt(k)=1)DrawOne(ptDC,CPoint(x*lineWidth,0),FALSE);else Draw

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁