本科毕业论文(设计)
题 目 基于VC++二维码制作软件设计 学生姓名 杨再东 专业名称 自动化 指导教师 朱三元
2015年 12月 20 日
基于VC++的二维码制作软件设计
摘要:21世纪以来,伴随着科学的进步,信息技术的高速发展,自动识别技术越来越广泛的应用于人们的生活中。二维码更是在我们生活中的方方面面都有应用,可以说我们生活中充满了无数的二维码。所以,二维码的制作软件也就有了很大的需求。目前二维码的有着广阔的市场前景,所以我们要对此进行研究。
本研究的目的是利用VC++设计软件生成一个二维码,设计完成输入一个文本生成一个QR二维码。本文是主要介绍QR二维码的一些特点,并且利用VC++来实现使其编码的功能。本文将主要介绍二维码生成的原理以及VC++的相关知识,主要研究QR二维码的应用,输入文本信息生成相对应的QR二维码。 关键词:QR二维码;VC++;纠错码
Qr code to make the software design based on vc + +
Abstract: Since the 21st century, with the progress of science, the rapid development of modern information technology, automatic identification technology is more and more widely used in people's life. Qr code but also has application in every aspect of our lives, our life is filled with countless qr code, so to speak. So, qr code to make the software also has a lot of demand. The qr code has a broad market prospect, so we have to study.
The purpose of this study was to generate a QR code, using vc + + design completed a text input to generate a QR code. Some characteristics of this article is mainly introduces the QR code, and the use of vc + + to realize the function of the code. This article mainly introduces the principle of the QR code generation and vc + + related knowledge, the main research QR code application, the input text information to generate the corresponding QR code. Keywords: QR code, VC + +,Sself-correcting code
目 录
1.绪论............................................................................................................................ 1
1.1 论文选题及研究意义..................................................................................... 1 1.2 国内外研究现状........................................................................................... 2 2.QR二维码的生成原理 ............................................................................................. 4
2.1 基础知识.......................................................................................................... 4 2.2 编码流程......................................................................................................... 5
2.2.1用户提供所需的数据,输入后进行分析............................................. 5 2.1.2数据编码................................................................................................. 6 2.2.3结束符和补齐符..................................................................................... 6 2.2.4纠错码..................................................................................................... 6 2.4标志模块.......................................................................................................... 7 2.5加入掩模和格式版本信息.............................................................................. 7 2.6生成二维码图案.............................................................................................. 8 3.开发环境及工具介绍................................................................................................ 9
3.1开发平台的选择.............................................................................................. 9 3.2 Microsoft Visual C++简介 .............................................................................. 9 3.3 Visual C++面向对象编程 ............................................................................... 9 3.4 Win32编程 .................................................................................................... 10 4.系统实现.................................................................................................................. 11
4.1 软件功能的需求........................................................................................... 11 4.2软件的总体模块设计.................................................................................... 12
4.2.1配置文件............................................................................................. 12 4.2.2应用说明............................................................................................. 13 4.2.3库函数................................................................................................. 14 4.2.4串口通信接口..................................................................................... 16 4.2.5位图压缩接口..................................................................................... 17 4.2.6 Qr_Code编码接口.............................................................................. 18 4.3软件编码实例................................................................................................ 23 结 论.......................................................................................................................... 25 参考文献...................................................................................................................... 26 致 谢.......................................................................................................................... 28
1.绪论
1.1 论文选题及研究意义
若果你的手机自带一个编码图片,你将畅游互联网来获取很多对你有用的信息。如果你正在使用某件商品,只需要用你的手机扫描一下包装上的二维码,你将知道这个商品很详细的信息。这个功能在日本很盛行,甚至可以说QR二维码是日本的一个支柱产业。
1994,日本汽车零部件制造商电装波在通过供应链跟踪车辆的时间发明了QR码技术。QR二维码能够储存大量的星系,能轻松获取到百万甚至更多的信息,信息储存量巨大。QR二维码的使用非常灵活局限性小,没有储存空间和字符这一局限,并且只需要一小块的位置。以前人们经常多以多种线性码作为主要使用,复合型线性码和二维码的功能在后期会逐渐被发掘出来。QR二维码在携带信息上主要是水平和竖直方向上进行携带。数字、字母中文等是其主要携带信息。QR二维码使用方便,只需要有手机或者解码器随时随地就能够进行解码,扫描时没有位置的要求,任意方向就可以进行扫描读取信息,全方位进行识别,甚至有些破损的二维码也能够进行扫描和读取信息。
在日本,这种二维码已经在生活的各个方面得到了应用。各个事物上都出现了这种二维码,可见日本对于二维码的喜爱,更见到了二维码的广阔的市场。小到汉堡食物等,大到建筑等等。欧洲也紧跟其后,开始大量使用这种二维码。
日本在本国的QR二维码使用迅速占领了市场,甚至接近于饱和了,慢慢日本已经将这项技术向欧洲方向发展。现在Marks & Spencer公司正在进行实验型的阶段。一旦实验成功,将会进军欧洲的QR二维码市场,有着广阔的市场前景。
二维条码自身的特点决定了它较为适合我国的国情: 1) 二维码的使制作成本较低,实用价值高 2) 采用二维条码的单证容错性好,使用寿命长
3) 可以降低许多的费用,稳定可靠,减少了对主系统的依赖和网络的依赖 4) 对于证件上,会提高对于证件的读取的功能 5) 提高了证件的防伪能力
1
二维码很适应我国的国情。对于我国这种人口众多,信息获取较难的情况,二维码的使用将会弥补这些。所以,在我国对于二维码的推广是有着至关重要的作用。
1.2 国内外研究现状
QR二维码的符号很多,有21×21模块到177×177模这些版本。版本号从1到10,以4个模块向上增加。一个符号中有70个数字字符,4296个字母字符,1817个日文字符,21008个中文汉字字符。
在英国第一家在包装上使用这种编码的公司是Marks & Spencer。他们在开始使用时进行了8周的实验,最后这种编码得到了好评,实验非常成功。顾客在购买商品时通过扫码能够获得很多与产品相关的信息,并且还能知道与此产品相关的趣闻,非常的详细。QR二维码是一个不需要扩大商品的包装和标签的大小来为顾客提供信息的工具,它能够在小小的空间里和顾客进行更多的交流,顾客能够充分的了解商品。只要手中有移动设备就能够了解到商品背后的故事,制作过程等等,这些仅仅需要小小的空间就能完成。
斯亚皮奇说:”我们要做的是将商品的整个本质提供给消费者,并不只是单单提供一个物品.”比如,消费者在购买薯片和汉堡时能够通过扫描二维码来获得制作此产品人的详细信息。当消费者需要了解商品详细信息的时候,这项技术就越来越显得重要,这个技术能够给许多商家提供广大的市场空间。
斑马产品和移动打印机垂直营销经理马太(帕克马太)是非常同意上述观点,他认为在欧洲,许多顾客在购买商品时都非常想知道有关食物的制作及其来源的信息,而二维码正好能够为广大的顾客提供这个功能。
在日本,你会发现无论是哪里,报纸广告,传单等等上面都会有QR二维码。他们给顾客们提供一个链接能够详细了解商品的链接,这是公司的工具也是与顾客交流的平台,这里的商人都非常喜欢这个东西,他能很精确的知道关于活动的效力。
在国内由于我们的条码技术和产业起步较晚,所以国内的条码技术还是引进国外的。QR二维码条码标准是从日本翻译过来的。但是我国不断进行技术创新,不断地进行研究,最后研制出自己的二维码技术,得到了国家的认可,并且在全
2
国范围内进行推广。
在2000年12月基于日本的QRCode公布了国标GB/T18284—2000《快速响应矩阵码》。
在2005,我国自主开发的中文字母代码标准,这是一个二维码与中国自主知识产权的代码。这是我国商品编码中心和北京网络科技有限公司共同开发的想象空间。本标准不仅得到了国家标准的批准和十五个科技项目的批准,而且还获得了业内专家的一致好评。
虽然我国对于二维码的应用起步较晚,但是目前国内二维码技术的应用还是很多的,许许多多的领域有着广泛的应用。在一些大型的工业企业中,如工业的自动化生产线上;国家的医疗上,如医疗卡;收费和汇款上,如银行汇款等等地方。
自从手机上提供了二维码这一功能以后,通信、互联网与媒体连接融合,产生了一个新的跨媒体营销平台。媒体、移动他们各有各的优势,相互融合后就产生了一个新的营销方法。目前有了新的营销模式、客户之间的相互交流、广告上也有了新的形式,这些都是由于平面媒体的延伸有了新的媒体空间、广告形式也有新的改变,这是一种新的交流方式。对于一个商品,消费者只需要简单的扫一扫,就能够获取与这个产品相关的介绍,以及它的销售信息,还可以进入该商品的销售网站等等信息。
二维码的应用能够节约工业上许多企业的时间,还能够促进社会的进步,提高企业的经济效益。手机上的二维码应用还能有效的防伪,同时也能减少不少成本,现在有许多的商务票都直接使用电子版本的,上面加上二维码,也能够方便检验。这样不仅节约了成本,也在很大程度上保护了顾客的权益,同时还能加强与消费者之间的交流。促进了厂商与消费者之间的交流,对企业和消费者来说都能够争取到最大的效益。
3
2.QR二维码的生成原理
2.1 基础知识
QR二维码是由编码区和功能区的两个图形来组成的,外观是一个大的正方形矩阵,里面是由许多的小正方形模块组成。功能图形主要用于纠正图形、检测图形、分隔符和图形的定位,它是用来识别特定图形和定位的。有一个至少4个模块的宽度的空白区域。如图1是一个二维码的样例:
图1 二维码的样例
(1)寻像图形
位置探测图形分别位于符号的除去右下角的位置上。这几个模块有大小颜色之分,大小都不相同,有7*7、5*5、3*3这几个大小。7*7和3*3是个深颜色的模块,而5*5是个浅颜色的模块。寻像图形用来识别和确定条码的位置和方向。这是因为有掩模的作用,其他地方遇到类似的图形是不可能的。
(2)定位图形
在二维码上需要寻找信息,其实二维码也是有坐标的。如果想知道符号的密度以及该符号的版本,就需要在二维码的第六行与第六列去寻找,这就是一个抽象的坐标。它是由深色和浅色交替的模块组成的一列和一行,一个模块宽的水平和垂直定位图形。
4
(3)校正图形
每个版本的校正图形的数量是不同的。大小分别为5×5、为3×3和一个中心模块,其中5×5为深色的模块、3×3为浅色模块、中心模块为深色。 2.2 编码流程
图2 QR Code 编码流程图
2.2.1用户提供所需的数据,输入后进行分析
首先要对用户提供的数据进行分析,要得到我们所需要的编码的字符类型。还要知道纠错等级的选择是多少(对于没有选择纠错等级的用户来说,我们将会直接选择为我们的默认等级),随着数据的最小的编码版本的选择,我们将根据误差校正水平和数据容量。
5
2.1.2数据编码
QR支持如下编码:
数字编码Numeric mode的:0到9。要求编码的数字可以以是否为三的倍数来区分,如果是三的倍数,则会直接编译成10,12,14bits,长度视二维码的尺寸决定。如果需要编码的数字不是三的倍数,则最后剩下的1或者2要被转换成4或者7bits。
Alphanumeric mode字符编码:从0到9,有大写A到Z,以及符号$ % * + – . / : 包括空格。编码的过程就是字符的转换,先将字符分为两组。将这两组转换为45进制,再将其转换为11bits的二进制,然后,最后有一个位数,这样的九转换成6bits的二进制。编码模式和字符的个数可以以是否为9,11,13个二进制来划分,这要根据不同的Version尺寸来选择。 2.2.3结束符和补齐符
补齐码(Padding Bytes)
最后,有一个的位,如果不是最大的。添加一些完整的代码(填充字节),字节填充是每个字节的最大位:每一个版本的10001个11101100个错误校正水平。如果你需要1个纠错级别的版本,那么,它的最大需要104位,而上面的不够。所以,它也需要填充24位,即3字节填充。 2.2.4纠错码
在上面有提到纠错等级,这就是我们有时候发现有的二维码被不小心破损了,但是还是能够扫描出来,这就是四种级别的纠错起的作用。也就是为什么可以在二维码的中心位置加入图标。
这是一个需要分组的,你要阻止这些数据包,然后对每个组进行纠错编码,即不同的块纠错码。
在每个代码块的数量,所谓的代码的数量,这是字节的字节数
QR二维码是由里德所罗门(RS)产生的几段产生纠错词本算法的误差修正。数据码里面混有纠错字以后,QR二维码码破坏后可以来纠正数据中的错误。L,
6
M,Q,H为四个等级的纠错码。
QR码的纠错是根据几个部分来确定的,误差不同,版本的高低不同,数据字序列分为一个或多个段,每一分段规则托运的标准误差校正操作。我们有个纠错的等级标准,通过这个标准来对数据码进行分类,分成若干个不同的小类别,然后再按照规定的一些标准来进行纠错,就能够生成相对应的纠错字。 2.4标志模块
功能模块在矩阵符号中的标志版本信息和格式信息的模块位置空缺,首先要看图形、分隔符、定位图形、校准图形。以便放入版本信息和格式信息的模块。
符号QR是通过两个模块对从符号栏右下角的宽度设置。然后从右向左,交替地自下向上最后从上向下安排到QR码符号的编码区域内。如果遇到功能符号则会绕开。
图4 三种方向的符号字符位的放置
2.5加入掩码和格式版本信息
要均衡地安排好浅色模块位置,并且避免位置探测图形出现在其他的区域,这样才能提高R码的阅读可靠性。
编码区的图形XOR异或操作是用掩码图形进行的。掩模不能用于功能图形。 掩模一共有8中图形。用户可根据自身的情况来选择,如果用户有选择,就按照用户的选择来添加掩模。如果用户没有进行选择,系统就会自动选择合适的掩码。这个自动选择的依据就是对8中掩码进行不同的尝试,最后会生成图形,这些图形中我们用评分来区别,图形的评分高低决定了我们应该选择哪个掩码的图形。最后我们选择浅色也就是得分最低的那个掩码图案。
7
通过BCH(18,6)编码来获得到的格式信息加入其中。纠错等级是格式信息的前两位,掩模图形号为后三位,这五个BCH码字符串是经过BCH(15,5)生成得到的最后通过101010000010010段字符串异或运算得到。
版本信息是通过BCH(18,6)。通过BCH(18,6)将版本信息的前六位计算生成BCH码字符串。 2.6生成二维码图案
二维码中数据1表示深色方块,0表示浅色。这样我们就能将数据通过图形来表示出来。
图5 QR Code 条码(存的内容为“QR Code 编码系统设计”)
8
3.开发环境及工具介绍
3.1开发平台的选择
在在Windows环境下,目前比较流行的二维码制作软件的开发工具主要有:Visual C++、Java及C#等。而本软件采用Microsoft Visual C++ 6.0作为开发工具。相比, C在程序运行的效率、内存使用的可控性和编程的灵活性上具有优势。 3.2 Microsoft Visual C++简介
Visual C++是微软微软公司的Win32环境下的程序开发,面向对象的可视化集成开发系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。 3.3 Visual C++面向对象编程
比较传统的面向过程的程序设计是以一个个的功能为中心来进行的,主要是一个功能通过一个函数来实现,使用公用的数据。公用的函数是可以被任何函数调用的,当程序比较少的时候设计者就比较容易使用,而当程序比较多而且很复杂的时候,我们进行程序设计的时候就比较难以应对了。
我们本次设计所采用的面向对象的程序设计就不是用的这种,而是使用的一种新的思路。我们面对一个对象来设计一个程序,每一组数据都有它的比较特别的用途,也就是一个操作对象。我们将所有的需要的操作进行封装,使其成为一个对象。
我们在进行程序设计的时候就要从两个方面进行就行:一边是要考虑我们所需要的一些类和对象,就是把我们所需要的东西装在一起;二是要设法向我们的对象发送我们所需要的信息,使其达成我们的目的,完成我们所需要的功能。
9
3.4 Win32编程
编写Visual C++程序实际上就是一个构造类和把类实例化的过程。由于Windows 95/98/Me/NT/2000/XP是PC平台中应用最广泛的操作系统,微软正试图使用一个标准的调用win32的32位应用程序接口为这些操作系统共同开发接口,所以经常采用Win32来代表Microsoft的32位Windows操作系统,因此Visual C++主要用于针对Win32的应用程序开发。
Win32具有抢占式多任务,多线程和线性寻址的内存管理,win32编程,包括基本要求:
应用程序的执行于硬件设备。 应用程序具有图形用户界面。
能在Windows 95/98/Me和Windows NT/2000/XP之间透明移植,并可
移植到支持Windows NT/2000的RISC硬件平台。 高性能的抢先式多任务和多线程管理。 高级的多媒体支持。
多个应用程序的目标定位是通过OLE 2实现。
Microsoft为进行Win32编程提供了一套名为Win32 SDK的应用程序编程接口,其中包括上千个Win32系统函数。MFC(Microsoft Foundation Class Library,微软基础类库,它定义了Win32编程所需的各种类。有的类封装了大部分的Win32 SDK中应用程序的编程接口函数;有的类封装的则是应用程序本身的数据和操作;另外ActiveX类、OLE和网络编程的特点和Winsock网络特性和DAO(数据访问对象)、ODBC(开放数据库连接)的数据访问。SDK和MFC win23 Win32编程的主要工具。
Visual C++的AppWizard工具能自动生成应用程序框架,该框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。该程序的用户界面,可以在视觉设计上,由C++可视化(编辑资源),ClassWizard可以连接用户界面和程序代码。程序员要做的就是用MFC类实现框架中未完成的应用程序的特定功能部分。所以使用Visual C++可以实现Win32的可视化程序设计。
10
4.系统实现
本二维码生成软件使用了了Visual C++对话框界面编写,主界面如下:
4.1 软件功能的需求
(1)条码类型框
图6 系统的主界面
本次设计主要是研究的对象是QR二维码的生成,故此条码类型框内是设定的QR二维码的类型。若想生成其他类型的二维码可在程序中进行添加和修改,能够满足不同用户的需求。
(2)文本输入框
本功能在软件的右上方空白处,在这个空白的框框内可以输入用户想生成二维码的信息,这个地方是方便有些用户只需要较少的信息,比较简单的内容,如果用户要输入较为繁多的信息,我们准备了下一个功能。
(3)文本文件框
这个功能主要用来给需要输入大量信息的用户使用。首先用户可以在TXT文本中写好自己所需要输入的信息,然后保存下来。当用户需要生成二维码的时候,再将此TXT文件拿出来,在本功能框里的文件路径中选择用户事先写好的文
11
本。这样能够方便用户使用,能够方便用户对信息的修改,避免用户在输入信息错误的时候,需要重新填写信息。而且还能方便用户对于信息的保存。
(4)参数设置
参数设置中包括纠错级别设置和放大倍数两个参数设置。纠错级别选择中有7%、15%、25%、30%四个级别。放大倍数是直接输入数字就会生成相对应大小的二维码,这个是根据用户的需要来自己设置的。
(5)生成条码按钮
在文本输入完成,各项设置完成后,就可以点击此按钮,然后就能生成该文本相对应的二维码。
(7)二维码显示位置
生成的二维码生成的位置在软件的右下角空白处,可以直接进行扫描获得二维码的信息。
(8)退出按钮
二维码生成之后,软件使用完毕之后,点击即可退出软件。 4.2软件的总体模块设计 4.2.1配置文件
配置文件主要存放了条码编码参数,串口通信参数。 例如MakeBarCode.ini存放形式如下:(//为注释符) [SCAN]
//串口设置参数
//波特率
Baudrate=9600 Port=COM1 [PDF]
//连接的是COM1口
//PDF417条码设置参数
Aspect=1:3 Truncated=0 ECCLevel=0
//外形比(高:宽)
//是否是截短形条码(0_否,1_是)
//纠错级别(Auto表按百分比设置,若0-8为纠错级别。)
//纠错百分比(100*纠错码词/数据码词) //X方向放大系数
12
ECCPercent=40 XScale=1
YScale=1 Rows=0 Cols=0 [QR]
// Y方向放大系数
//指定码的行数(0表不指定) //指定码的列数(0表不指定)
//QR条码设置参数
//纠错百分比(100*纠错码词/总码词数)
ECCLevel=15 Scale=2 [CS]
//放大系数
//汉息码设置参数
//纠错百分比(100*纠错码词/总码词数) //放大系数
ECCLevel=8 Scale=3 [DM]
//DM条码设置参数
Scale=2 //放大系数
4.2.2应用说明
在程序调用条码生产函数首先调用setpdfconfile功能,配置文件名传递给动
态链接库。否则条码生产函数使用默认参数进行编码。
如:在制作PDF417条码前,先将“MakeBarCode.ini”参数配置文件传递给
EnCodePdf.dll:
第一步:设置参数配置文件 SetPdfConFile( “MakeBarCode.ini” );
//最好全路径
第二步:生成二维码,三个接口,您任选一种模式即可。 //文本内容制码
pdfbmpname= EnPdfText ( strText,outFile ); //单文件制码(从文本文件生成条码)
pdfbmpname= EnCodePdf ( TxtFileName,,outFile ); //多文件制码(文本、图像、指纹生成条码)
pdfbmpname=MakePdf417( TxtFileName,ImgFileName,\"\
13
4.2.3库函数 1) 接口方式:
采用Active X 动态链接库的方式。 2) 动态链库:
3) 支持被调用主要的开发环境有:
Csharp(C#) / vb.net
Microsoft Visual C++ 6.0 / 7.0/8.0 Microsoft Visual Basic 5.0/6.0 Microsoft Visual Foxpro 5.0/6.0 PowerBuilder Delphi
EnCodePdf.dll EnCodeQr.dll EnHanXin.dll
//PDF417编码动态链接库 //Qr_Code编码动态链接库 //HanXin编码动态链接库 //DataMatrix编码动态链接库
EnDataMatrix.dll Wcomp.dll
//图像压缩动态链接库
4) EnCodePdf.dll包含的接口函数:
void SetCommPort(LPCTSTR szPort,int dwPort=9600) int InitRead ( HWND hcallwnd, LPCTSTR lpPathName ) int CloseRead ( void )
void SetPdfConFile( LPCTSTR confile )
BSTR EnPdfText( LPCTSTR strText,LPCTSTR outfile=_T(“”) ) BSTR EnCodePdf( LPCTSTR txtfile,LPCTSTR outfile=_T(“”)) BSTR
MakePdf417(LPCTSTR
txtfile,LPTCSTR
pictfile,LPCTSTR
otherfile ,LPCTSTR outfile=_T(“”)) 5) EnCodeQr.dll包含的接口函数:
void SetCommPort(LPCTSTR szPort,int dwPort=9600)
14
int InitRead ( HWND hcallwnd, LPCTSTR lpPathName ) int CloseRead ( void )
void SetQrConFile( LPCTSTR confile )
BSTR EnQrText( LPCTSTR strTtext,LPCTSTR outfile=_T(“”) ) BSTR EnCodeQr( LPCTSTR txtfile ,LPCTSTR outfile=_T(“”) ) BSTR
MakeQrCode(
LPCTSTR
txtfile,LPCTSTR
imgfile,LPCTSTR
othfile ,LPCTSTR outfile=_T(“”)) 6) EnHanXin.dll包含的接口函数:
void SetCommPort(LPCTSTR szPort,int dwPort=9600) int InitRead ( HWND hcallwnd, LPCTSTR lpPathName ) int CloseRead ( void )
void SetHxConFile( LPCTSTR confile )
BSTR EnHxText( LPCTSTR strTtext,LPCTSTR outfile=_T(“”) ) BSTR EnCodeHx( LPCTSTR txtfile ,LPCTSTR outfile=_T(“”) ) BSTR
MakeHanXin(
LPCTSTR
txtfile,LPCTSTR
imgfile,LPCTSTR
othfile ,LPCTSTR outfile=_T(“”)) 7) EnDataMatrix.dll包含的接口函数:
void SetCommPort(LPCTSTR szPort,int dwPort=9600) int InitRead ( HWND hcallwnd, LPCTSTR lpPathName ) int CloseRead ( void )
void SetDmConFile( LPCTSTR confile )
BSTR EnDmText( LPCTSTR strTtext ,LPCTSTR outfile=_T(“”) ) BSTR EnDataMatrix( LPCTSTR txtfile ,LPCTSTR outfile=_T(“”) )
BSTR MakeDataMatrix( LPCTSTR txtfile,LPCTSTR imgfile,LPCTSTR
othfile ,LPCTSTR outfile=_T(“”) ) 8) Wcomp.dll包含的接口函数:
int Wcompress (LPSTR infile_name, LPSTR outfile_name, int budget) int Wdecompress(LPSTR infile_name, LPSTR outfile_name) int SizeDIB( LPCSTR originBMP, int BmpHeight, int BmpWidth)
15
4.2.4串口通信接口
1) void SetCommPort(LPCTSTR szPort,int dwPort=9600) 功能:
设置串端口名(如”COM1”)和波特波
参数:
为串口名,如COM1.COM2,
szPort
dwPort 为串口波特率,9600/19200/38400/11520。 说明:
无返回值,在类PB开发工具中,需要申明成过程。
动态连接库:EnCodePdf.dll / EnCodeQr.dll / EnDataMatrix.dll
2) int InitRead ( HWND hcallwnd, LPCTSTR lpPathName ) 功能: 初始化端口
参数:
hcallwnd为需要响应数据读入的窗体句柄, lpPathName
读取的文本、图形和其它信息存放的路径。
其中:文本文件名:Temp.Txt
图形文件名:Temp.img 其它信息名:Temp.oth
说明:
当串口收到数据并进行分离后,将向窗口发送Keydown消息,并返回键值255,如果数据分析错误返回255。
动态连接库:EnCodePdf.dll / EnCodeQr.dll / EnDataMatrix.dll 3) int CloseRead ( void ) 功能: 关闭端口 说明:
返回0代表成功,否则不成功。
16
动态连接库:EnCodePdf.dll / EnCodeQr.dll / EnDataMatrix.dll 4.2.5位图压缩接口
1) int Wcompress (LPSTR infile_name, LPSTR outfile_name, int budget) 功能: 位图压缩函数 参数:
infile_name: 为输入的位图全路径文件名, outfile_name: 为输出的压缩数据全路径文件名, budget:
为预计达到的压缩后的字节数。
其中输入的位图必须经过SizeDIB函数进行预处理。
说明:
返回为0,表示成功。 动态连接库:Wcomp.dll
2) int Wdecompress(LPSTR infile_name, LPSTR outfile_name) 功能: 位图解压函数 参数:
infile_name: 为压缩数据全路径文件名, outfile_name: 为解压出的位图全路径文件名。 说明:
返回为0,表示成功。 动态连接库:Wcomp.dll
3) int SizeDIB( LPCTSTR originBMP, int BmpHeight, int BmpWidth) 功能:
调整图形,进行编码的图形进行调整规格。 参数:
originBMP为要进行调整的位图全路径文件名, BmpHeight为预期要达到的位图高度,
17
BmpWidth为预期要达到的位图宽度
说明:
返回0表成功;否则失败。 动态连接库:Wcomp.dll
4.2.6 Qr_Code编码接口
1) void SetQrConFile( LPCTSTR confile ) 功能:
设置配置参数文件
参数:
confile:配置参数文件
说明:
无返回值,在类PB开发工具中,需要申明成过程。
动态连接库:EnCodeQr.dll
2) BSTR EnQrText( LPCTSTR strText,LPCTSTR outfile=_T(“”) ) 功能:
将信息生成QrCode条码,不包含编码信息结构。 输出生成条码位图文件路径
参数:
strText: 编码字符串 outfile: 输出文件名(含路径)
说明:
成功能返回条码位图文件名,否返回空。 默认位图文件名: TempQr.bmp
动态连接库:EnCodeQr.dll
3) BSTR EnCodeQr( LPCTSTR txtfile,LPCTSTR outfile=_T(“”) ) 功能:
18
将文本信息字符串生成QrCode条码,不包含编码信息结构。 输出生成条码位图文件路径
参数:
txtfile:条码文件名(含路径) outfile: 输出文件名(含路径)
说明:
4) BSTR
MakeQrCode(
LPCTSTR
txtfile,LPCTSTR
imgfile,LPCTSTR
成功能返回条码文件名,否返回空。 默认位图文件名: TempQr.bmp 动态连接库:EnCodeQr.dll
othfile,LPCTSTR outfile=_T(“”) ) 功能:
将文本、图形和其它信息合成生成QrCode条码,包含编码信息结构。 输出生成条码位图文件路径
参数:
txtfile:文本文件,可以为空 pictfile:图形压缩后文件,可以为空 otherfile:其它编码信息,可以为空
说明:
成功能返回信息文件名,否返回空。 默认位图文件名: TempQr.bmp 动态连接库:EnCodeQr.dll
5)打印和复制
//--------------------------------------- //将位图拷贝至粘贴板上
void CBarCodeDlg::CopyBitmapToClipBoard( LPCSTR lpBmpName ) {
FILE* fp;
19
BITMAPFILEHEADER bmpfheader; //位图头结构 BITMAPINFOHEADER bmpiheader; //位图信息结构 byte* int
lpBits; nLen;
HGLOBAL clipbuffer; char*
lpbuf;
memset( &bmpfheader,0,sizeof(BITMAPFILEHEADER) ); memset( &bmpiheader,0,sizeof(BITMAPINFOHEADER) ); fp=fopen( lpBmpName,\"rb\" );
fread( &bmpfheader,sizeof(BITMAPFILEHEADER),1,fp ); fread( &bmpiheader,sizeof(BITMAPINFOHEADER),1,fp ); nLen=bmpfheader.bfSize - sizeof(BITMAPFILEHEADER) ; lpBits=(byte*)malloc( nLen+1 );
fseek( fp,sizeof(BITMAPFILEHEADER),SEEK_SET ); fread( lpBits,1,nLen,fp ); fclose( fp );
if ( OpenClipboard() ) {
EmptyClipboard(); //清空剪贴板
clipbuffer = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
nLen+1 );
lpbuf = (LPSTR)GlobalLock(clipbuffer); //锁定申请到的内存 memcpy( lpbuf,lpBits,nLen );
//解锁内存
GlobalUnlock(clipbuffer);
}
20
SetClipboardData( CF_DIB, clipbuffer ); CloseClipboard(); //delete lpbuf;
}
delete lpBits;
//--------------------------------------- //拷贝位图
void CBarCodeDlg::CopyViewToClipBoard() { }
//---------------------------------------
21
CBitmap bitmap;
CClientDC dc(&m_ctrlBarCode); CDC CRect
memDC.CreateCompatibleDC(&dc); m_ctrlBarCode.GetWindowRect(rect);
HBITMAP hBitmap = m_ctrlBarCode.GetBitmap();
//得到位图句柄
memDC; rect;
bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() ); bitmap.FromHandle( hBitmap );
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
memDC.BitBlt(0, 0, rect.Width(),rect.Height(),&dc,0,0, SRCCOPY);
OpenClipboard() ; EmptyClipboard() ;
SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ; CloseClipboard () ;
memDC.SelectObject(pOldBitmap); bitmap.Detach();
//拷贝
void CBarCodeDlg::OnBTNCopy() { }
6)退出按钮
/*-----------------------------------------------------------*/ //退出操作
void CBarCodeDlg::OnBTNExit() { }
/*-----------------------------------------------------------*/
OnOK();
CopyViewToClipBoard();
((CButton*)GetDlgItem(IDC_BTN_Copy))->EnableWindow(FALSE);
22
4.3软件编码实例
打开软件出现如下界面:
然后在右边文本输入框中输入信息(姓名:杨再东 学号:512300614145)
然后点击参数设置选项,选择需要的设置
23
这里我选择了纠错级别为15%,放大比例为5。然后点击生成条码,就能够在软件的右下角显示出来。
这样一个包含有(姓名:杨再东 学号:512300614145)的二维码就生成了。
24
结 论
这次完成基于VC++的二维码制作软件设计,我在二维码这方面的知识有了更加深刻的了解,对于二维码的原理以及生成过程都有了详细的了解。
对于二维码中容错率的实现和二维码矩阵的生成得到了充分的认识。在以前,生活中处处可见的二维码,我们只知道它是干什么的,但是对于其中的奥秘缺只是一知半解,更是不懂它是如何产生的。这让我从中获得了许多的道理,我们对于生活中的许多东西的了解只是停留在表面,并没有从内部去深入的了解,更加突出了学习的重要性。
在本次设计上虽然成功的生成了大部分的代码,但是也有许多不足的地方,有的时候生成的二维码扫描出来会有一些乱码,这些问题都慢慢解决掉了。本次设计在自己的慢慢学习和尝试还是完成了,但是功能可能不是非常齐全,在以后的学习中,还要不断提升自己的知识来解决。
虽然在本次设计上有许多的不足之处,但是当生成出来带有自己信息的二维码时,还是特别高兴地,也体验到了做软件的快乐。在今后的学习和工作中也会进一步去了解这个东西,争取以后能做出更加完善的软件出来。
25
参考文献
[1]李永婵,李安平.现代物品信息技术应用指南[M].北京:中国标准出版社,2008. [2]中国物品编码中心.商品条码应用指南[S].北京:中国标准出版社,2007. [3]曾子剑.基于QR二维码编解码技术的研究与实现[D]成都:电子科技大学.2010 [4]冯克勤.纠错码的代数理论[M].北京:清华大学出版社,2005.
[5] 刘悦,刘明业. QR code 二维条码数据编码的研究. 北京理工大学学报. 2005 [6]李军.QR码的图像恢复和识别技术研究与实现[D].苏州:苏州大学.2010 [7]中国物品编码中心,中国自动识别技术协会.自动识别技术导论[M].武汉:武汉大学出版社,2007.
[8] 曾子剑.基于QR二维码编解码技术的研究与实现[D]成都:电子科技大学.2010
[9] 刘东, 高西全. QR 码图像处理及识别算法的研究. 信息技术(哈尔滨).2004(1)
[10] GB/T18284-2000.快速响应矩阵码 2001
[11] Chang I. F., Chu S. J. and Liu, S. T., Bar code scanning information entry technology and application, International Journal on Policy and Information, 1983, 7(2):165-180
[12] Lo Chih-Chung and Chang C. Alec, Neural networks for bar code positioning in automated material handling, Proceedings of the 1995 International IEEE/IAS Conference on Industrial Automation and Control,1995:485-491
[13] Chang C. Alec, Lo Chih-Chung and Hsieh Kuang-Han, Neural networks and Fourier descriptors for part positioning using bar code features in material handling systems, Computers&Industrial Engineering, 1997,32(2):467-476
[14] 何斌, 马天予, 王运坚. Visual C++数字图象处理. 人民邮电出版社. 2002 [15] 王新梅. 纠错码与差错控制. 人民邮电出版社. 19 [16] 陈宗杰, 左孝彪. 纠错编码技术. 人民邮电出版社. 1987 [17] S.林. 纠错编码入门. 人民邮电出版社. 1976
[18] 杨琼敏, 张永林. 基于二维条码和掌纹识别技术的证件防伪系统的研究.
26
暨南大学硕士论文, 2001
[19]袁人杰.二维QR码识别算法研究及在智能手机上的应用[D].南京:南京理工大学.2012.
27
致 谢
经过这几个月的时间我的毕业设计终于完成了,在毕业设计以前单纯只是觉得毕业设计只是一个考试,来检测以前所学过的知识。但是毕业设计不仅仅只包括这些,它是对你全方位,多个层面进行的考核,是对学习能力的一种考核。通过这次毕业设计使我明白自己学的比较浅,需要学的知识还有很多,之前觉得什么东西都会都懂,这就是所谓的眼高手低,通过这次训练,才明白学习还是要不断的累积,才能有收获,以后在学习和生活中要继续不断求知,努力提高自己的综合能力。在这次毕业设计中也使我们的同学关系更进一步,同学之间互相帮助,有什么问题一起商量着来,听听不同的看法是对我们更好的帮助,所以在这里先感谢我的同学们。感谢你们的帮助。总之不管学会的还是写不会的的确觉得困难比较多,开始完全不知道如入手,后做完了有一种如释重负的感觉,但是做出来的东西真心拿不出手,最后终于得出一个结论,知识必须要通过应用才能实现其价值!有些东西会了但是真真到了用的时候才发现那是两回事,只有到了真正会用的时候才是真的学会了。最后也要感谢我的指导老师对我的指导,收获同样巨大,培养了自己制作的能力。
毕业设计对于我们来讲,它是一个非常考验我们能力的东西。在我刚刚拿到这个毕业设计的题目之时,我对于二维码的了解也只是停留在表面上。对于二维码的生成和规则确实没有什么了解。但是,在两个多月的时间里,我从不停地收集资料,查看与之相关的参考文献,通过慢慢的积累,慢慢的学习,这段时间的努力,在二维码知识上面有了更加深入的了解,不在只是片面的认识。这个课题中有我们以前学过的知识,也有以前没有学过的知识。在这段时间里,我不仅对以前所学的知识进行复习,也要从其他地方学习新的知识。这段时间里不仅我以前课堂上所学的书本知识得到了复习,而且也要不断地学习以前没有学到的知识,真的是收获很大。而且在制作设计的时候经常会遇到各种问题和困难,在解决问题与克服困难中,自己的各方面能力也得到了很好的提升。在此次的设计中,慢慢把自己以前书本上学到的知识用到实践上,锻炼和提高了我的学习能力,也开阔了我的视野,为我以后走上工作岗位奠定了坚实的基础。在此,我还要感谢我的同学和老师,他们的帮助和指导,让我能够顺利完成此次设计。
28
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务