二维码生成与扫描识别系统设计_第1页
二维码生成与扫描识别系统设计_第2页
二维码生成与扫描识别系统设计_第3页
二维码生成与扫描识别系统设计_第4页
二维码生成与扫描识别系统设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计〔论文〕题目二维码生成和扫描识别系统设计学生姓名学号院〔系〕专业指导老师时间

二维码生成和扫描识别系统设计设计总说明条码技术是一种融编码,印刷,数据采集和处理和一体的自动识别技术。条码分为一维码和二维码。二维码除了具有一般一维码的优点外还具有信息容量大,牢靠性高的优点。本次设计内容包括三局部:〔1〕二维码的生成系统设计,生成系统主要完成了从输入数据到生成相应二维码的功能,运用MyEclipse10软件编程,编程语言为Java。〔2〕二维码图像采集系统设计,图像采集系统完成了生成二维码后采集到上位机的功能,运用KeiluVision5软件编程,编程语言为C,系统运用的硬件由计算机、STM32F103RCT6开发板和OV7670摄像头等组成。〔3〕二维码的识别系统设计,识别系统主要完成了对采集到的二维码图片进展译码复原出所携带信息的功能,运用VC++6.0编程,编程语言为C++。本文介绍了QRcode二维码的构造、标准及编解码过程,以及采集图像上传上位机的过程。系统实现了一般文字信息、数字等的编码、图像采集和译码的功能。关键词:二维码技术;二维码生成;QRcode;二维码识别

Designoftwo-dimensionalcodegenerationandscanrecognitionsystemDesignDescriptionBarcodetechnologyisakindofautomaticidentificationtechnology,whichisakindoffinancialcoding,printing,dataacquisition,processingandintegration.Barcodeisdividedintoonedimensionalcodeandtwo-dimensionalcode.Inadditiontotheadvantagesofthegeneralone-dimensionalcode,two-dimensionalcodehastheadvantagesoflargeinformationcapacityandhighreliability.Thisdesignincludesthreeparts:(1)two-dimensionalcodegenerationsystemdesign,generationsystemmainlycompletedfromtheinputdatatogeneratethecorrespondingtwo-dimensionalcodefunction,theuseofMyEclipse10softwareprogramming,programminglanguageforJava.(2)thetwo-dimensionalcodeimageacquisitionsystemdesign,imageacquisitionsystemtocompletethetwo-dimensionalcodegeneratedaftertheacquisitionofthefunctionoftheuppercomputer,theuseofKeiluVision5softwareprogramming,programminglanguageC,systemusesthehardwarebythecomputer,theSTM32F103RCT6developmentboardandtheOV7670cameraandsoon.(3)thetwo-dimensionalcoderecognitionsystemdesign,therecognitionsystemmainlycompletestheacquisitiontothetwo-dimensionalcodepicturetocarryonthedecodingtheinformationcarriestheinformationthefunction,usestheVC++6.0programming,programminglanguageforC++.Thispaperintroducesthestructure,standardandencodinganddecodingprocessofcodeQRtwo-dimensionalcode,aswellastheprocessofacquiringtheimageofthehostcomputer.Systemtoachievethegeneraltextinformation,digitalcoding,imageacquisitionanddecodingfunctions.Keywords:Twodimensionalcodetechnology;Two-dimensionalcodegeneration;QRcode;Two-dimensionalcoderecognition

书目1绪论 11.1设计背景和意义 11.2二维码在国内外的状况 12QR码编码规那么 42.1QR码符号构造 42.2QR码编码方法 53二维码生成系统设计 83.1二维码编码 83.2二维码编码程序实现 104二维码图像采集 134.1硬件介绍 134.1.1STM32简介 134.1.2STM32中断 144.1.3OV7670介绍 144.2硬件连接关系及原理 17硬件连接关系 17硬件原理 17软件实现 18运行实现 225二维码识别系统设计 245.1二维码识别系统 245.2识别程序实现 265.3运行实现 276总结 29致谢 30参考文献 31附录1:生成源程序 32附录2:采集源程序及原理图 35附录3:识别源程序 411绪论1.1设计背景和意义二维码是用某种特定的几何图形按必需规律在平面〔二维方向〕分布的黑白相间的图形记录数据符号信息的。二维码是DOI,数字对象唯一识别符的一种。二维码能够在横向和纵向两个方位同时表达信息。它具有存储容量大、牢靠性高、保密防伪性强、本钱低等优点。在代码编制上奇异地利用构成计算机内部逻辑根底的“0”、“1”比特流的概念,运用假设干个和二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或扫描设备自动识读以实现信息自动处理。在许多种类的二维条码中,常用的码制有:DataMatrix,maxicode,Aztec,QRCode,PDF417,Ultracode等,QRCode码是1994年由日本DW公司独创[1]。QR即快速反响的意思,源自独创者盼望QR码可让其内容快速被解码。QR码最常见于日本、韩国;并为目前日本最流行的二维空间码条。但二维码的平安性也正备受挑战,带有恶意软件和病毒正成为二维码普及道路上的绊脚石。开展和防范二维码的滥用正成为一个亟待解决的问题。每种有其特定的字符集;每个字符占有必需的宽度;具有必需的校验功能等。同时还具有对不同行的信息自动识别功能及处理图形旋转变更等特点。二维码是一种比一维码更高级的条码格式。一维码只能在一个方向〔一般是水平方向〕上表达信息,而二维码在水平和垂直方向都可以存储信息。一维码只能由数字和字母组成,而二维码能存储汉字、数字和图片等信息,因此二维码的应用领域要广得多。因此二维码的探究具有光明的前景。1.2二维码在国内外的状况我国对二维码技术的探究起先于1993年,中国物品编码中心对几种常用的二维码PDF417、QRCode、DataMatrix、MaxiCode、Code49、Code16K、CodeOne的技术标准进展了翻译和跟踪探究。随着我国市场经济的不断完善和信息技术的快速开展,国内对二维码这一新技术的需求和日俱增。中国物品编码中心在原国家质量技术监视局和国家有关部门的大力支持下,对二维码技术的探究不断深化。在消化国外相关技术资料的根底上,制定了两个二维码的国家标准:二维码网格矩阵码和二维码严密矩阵码,从而大大促进了我国具有自主学问产权技术的二维码的研发。目前我国二维码的应用主要在以下几个方面:〔1〕医疗卡:我国的医疗卫生事业在近几年来取得了令人瞩目的开展,许多中型以上的医院都接受了计算机管理并且大跨步地向着网络化的方向开展。但是想要和国际水平接轨,各大医院还须要调整开展步伐,改善管理机制,提高自身的业务水平和管理水平,从而提高经济效益,增加竞争力。想要到达这些目标,二维码是不行或缺的必要武器。〔2〕身份证:我国经济在改革开放以来得到了快速的开展,城市和农村之间人口流淌频繁。特别是近几年利用假身份证进展犯罪的现象屡屡发生,国家的相关部门和公共财产受到了紧要破坏。传统居民身份证缺乏机器识别功能,许多关键部门无法对身份证进展有效登记和验证,限制了公安部门的打击力度。因此,运用二维码提高现有居民身份证的防伪性能,是提高公安部门执法力度的一个特别踊跃有效的方法。〔3〕医用化验单:为了更好地发挥医疗投资效用,改善医疗管理,提高医疗效劳质量,就要运用二维条码技术来削减错误,更精确地配药。通过正确地识别病人,从而快速获得病例档案来进展各项检查,提高对病人的临床护理质量。〔4〕移动订票:中国早在2005年由翼码信息推出第一张电子电影票起先,传统形式的票券就朝着电子票的形式转变,传统的物流信息也转变成了电子流。不仅节约了本钱,还大大地提高了效率。综上所述,可见二维码的技术已经在我国得到比拟广泛的应用,但是相对于二维码开展比拟早的国家,如日本,美国,我国仍显得有许多的缺乏,因此,我国以不断引进,消化,吸取国外的二维码技术,同时加以创新,同时尽力推广二维码,使二维码技术在我国能得到更加广泛的应用,从而便利人们的生活。国外对二维码技术的探究始于20世纪80年头末,在二维码符号表示技术探究方面已研制出多种码制,常见的有PDF417、QRCode、Code49、Code16K、CodeOne等。在二维码标准化探究方面,国际自动识别制造商协会〔AIM〕、美国标准化协会〔ANSI〕已完成了PDF417、QRCode、Code49、Code16K、CodeOne等码制的符号标准。国际标准技术委员会国际电工委员会还成立了条码自动识别技术委员会〔ISO/IEC/JTC1/SC31〕,已制定了QRCode的国际标准〔ISO/IEC18004:2000〕《自动识别和数据采集技术—条码符号技术标准—QR码》〕,起草了PDF417、Code16K、DataMatrix、MaxiCode等二维码的ISO/IEC标准草案。在二维码设备开发研制、生产方面,美国、日本等国的设备制造商生产的识读设备、符号生成设备,已广泛应用于各类二维码应用系统。二维码作为一种全新的信息存储、传递和识别技术,自诞生之日起就得到了世界上许多国家的关注。美国、德国、日本等国家,不仅已将二维码技术应用于公安、外交、军事等部门对各类证件的管理,而且也将二维码应用于海关、税务等部门对各类报表和票据的管理,商业、交通运输等部门对商品及货物运输的管理、邮政部门对邮政包袱的管理、工业生产领域对工业生产线的自动化管理。

2QR码编码规那么2.1QR码符号构造每个QR码由名义上的正方形模块构成,组成正方形阵列,它由编码区域和包括寻像图形、分隔符、定位图形在内的功能图形组成,功能图形不能用于数据编码。符号的四周由空区包围。如图2-1所示:图2-1QR码符号构造〔1〕符号版本和规格QR码符号共有40种规格,分别是版本1到版本40,版本1规格为21*21个模块,版本2为25*25模块。以此类推,版本N的规格每行每列为21+4〔N-1〕个模块。〔2〕寻像图形寻像图形包括3个位置一样的探测图形,分别位于符号的左上角、右上角和左下角,如图2-1所示。每个探测图形可以看作是由三个重叠的同心的正方形组成,他们分别为7*7个深色模块、5*5个浅色模块、3*3个深色模块。位置探测图形的模块宽度比为1:1:3:1:1。符号中其它地方遇到类似图形的可能性微小。因此,识别组成寻像图形的3个位置探测图形,可以明确地确定视场中符号的位置和方向[5]。〔3〕分隔符每个位置探测图形和编码区域之间有宽度为1个模块的分隔符,如图2-1所示。全部由浅色模块组成。〔4〕定位图形定位图形是垂直和水平方向一个模块宽的一列和一行,由深色浅色模块交替组成。其起先和结尾都是深色模块,如图2-1所示。〔5〕校正图形每个校正图形可看作是3个重叠的同心正方形,由5*5个深色模块、3*3个浅色模块以及位于中心的一个深色模块组成。校正图形的数量由QR码的版本号确定,版本号2及以上的符号均有校正图形,本设计接受的版本号为7。〔6〕编码区域编码区域包括表示数据码字、纠错码字、版本信息和格式信息的符号字符。〔7〕空白区空白区为环绕在符号四周的4个模块宽的区域,其反射率和浅色模块一样。2.2QR码编码方法国家质量技术监视局发布的QR码标准中编码步骤如图2-2所示:图2-2QR编码步骤〔1〕数据编码将输入的数据转换为一个位流,假如ECI〔这种方式使得符号可以表示缺省字符集以外的数据〕是缺省的,那么一个数据流将包括模式指示符、字符计数指示符、数据,最终以4位终止符0000表示。其构造如图2-3所示:图2-3数据编码构造1〕数字模式数字模式下,将输入的数据每三位分为一组转化为10位二进制数,剩余位转化为7位或4位二进制数。最终将二进制数据连接起来并在前面加上模式指示符和数字计数指示符。2〕字母模式在字母模式下,将输入的数据以两个字符为一组,将前面字符的值乘以45和其次个字符的值相加,结果转化为11位二进制数,假设剩余一位,那么将其转化为6位二进制数。最终将二进制数据连接并在前面加上模式指示符和数字计数指示符。3〕8位字节模式在8位字节模式模式下,干脆将二进制数连接起来并在前面加上模式指示符和字符指示符。4〕中国汉字模式在中国汉字模式下,每个汉字符由两个字节表示,字符值为GB2312图形字符的内码值。将数据字符两个字节为一组转化为13位二进制数,然后二进制数连接起来并在前面加上模式指示符和字符指示符。(2)纠错编码QR接受纠错算法生成一系列纠错码字,添加在数字码字序列后面,使得符号在遇到损坏时不至丢失数据。纠错共有四个纠错等级,分别是:L级纠错容量:7%;M级纠错容量:15%;Q级纠错容量:25%;H级纠错容量:30%。(3)构造最终信息在规格确定的条件下,将产生的序列按次序放入分块中,按规定把数据分块,然后对每一块进展计算,得出相应的纠错码字区块,把纠错码字区块,按依次构成一个序列,添加到数据码字序列后面[6]。如D1,D12,D25,D35,D2,D13,D24,D36,...D11,D22,D33,D45,D34,D46,E1.E23,E45,E67,E2,E24,E46,E68,...(4)构造矩阵将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。把算出的完整序列填充到相应规格的二维码矩阵的区域中。(5)掩模掩模的目的是均衡地支配深色和浅色模块,以及尽可能地幸免位置探测图形的位图1011101出此时此刻符号的其他区域。掩模不用于功能图形,用多个矩阵图形连续地对确定的编码区域的模块图形〔格式信息和版本信息除外〕进展XOR操作。对不同掩模图形的结果计分,选择得分最低的掩模方案。(6)格式和版本信息生成格式和版本信息放入相应的区域内。版本7-40都包含了版本信息,没有版本信息的全为0。二维码上两个位置包含了版本信息,它们是冗余的。版本信息共18位,6*3的矩阵,其中6位是数据位,如版本号8,数据位的信息是001000,后面的12位是纠错位。本次设计须要完成二维码的编码,图像采集以及译码功能。二维码的编码是将输入数据生成相应的二维码,编码过程是对数据进展数据分析、编码、纠错、确定格式版本信息等的过程,编码语言接受Java,运用MyEclipse10软件编程,须要下载运用QRcode.jar包,生成二维码版本接受版本号7,纠错接受M级纠错容量:15%,最终图片保存为bmp格式;图像采集是要将生成的二维码采集到上位机,运用KeiluVision5软件编程,编程语言为C,采集过程为运用STM32开发板驱动OV7670摄像头拍照,拍照后的图片缓存到摄像头自带的FIFO缓存器中,编辑程序实现FIFO读写功能,将图片数据通过USB线输出到上位机当中,并以截图方式保存到上位机;二维的识别系统主要完成了对采集到的二维码图片进展译码复原出所携带信息的功能,运用VC++6.0编程,编程语言为C++。译码是将采集到的图片进展图像预处理,定位和校正,纠错等的过程。

3二维码生成系统设计3.1二维码编码设计运用的开发软件是MyEclipse10,首先要下载并安装MyEclipse10软件,运用JAVA语言实现编程。二维码接受不同的编码规那么共有几十种,广泛运用的有4、5种,目前运用率最好的编码方式为DM〔DataMatrix〕和QR(QuickResponse)两种。由于实现二维码的技术许多,各自互不兼容,这样在市场上各自为战,普及率很低,针对此状况国家先后制定了PDF417和QR两种编码标准。本次编码完全遵照国家标准编写,符合市场标准。QR二维码编码模块作为一个通用的二维码编码功能包,所供应的功能完全和国家标准一样,供应对数字、字母、8位字节模式和中国汉字等模式对应的编码方法,同时也供应对应选择编码等级和纠错等级的功能。QR码的主要功能应用为:〔1〕自动化文字传输:通常应用在文字的传输,利用快速便利的模式,让人可以轻松输入如地址、电话号码等,进展名片、进程数据等的快速交换。〔2〕数字内容下载:通常应用在电信公司游戏及影音的下载,在账单中打印相关的QR码信息供消费者下载,消费者通过QR码的解码,就能轻易连接到下载的网页,下载须要的数字内容。〔3〕网址快速链接:以供应用户进展网址快速链接、电话快速调用等。

二维码编码流程如图3-1所示:图3-1二维码编码流程图〔1〕数据分析:分析所输入的数据流,确定要进展编码的字符的类型。QR码支持扩大说明,可以对和缺省的字符集不同的数据进展编码。QR码支持不同的模式,必要时可以进展模式之间的转换更高效地将数据转换,以便为二进制串。〔2〕数据编码:将数据字符转换为位流。在当须要进展模式转换时,在新的模式段起从前参与模式指示符进展模式转换。在数据序列后面参与终止符。将产生的位流分为每8位一个码字,版本运用版本号7。〔3〕纠错编码:按块生成相应的错误订正纠错码字,并将其参与到相应的数据码字序列的后面。纠错容量为M:15%。〔4〕构造最终信息:在每一块中置入数据和纠错码字,必要时加剩余位。〔5〕在矩阵中布置模块:将寻像图形、分隔符、定位图形、校正图形和码字模块一起放入矩阵。〔6〕掩模:依次将掩模图形用于符号的编码区域,并选择其中使深色浅色模块比率最优且使不盼望出现的图形最少化的结果。3.2二维码编码程序实现设计运用JAVA语言实现编程,运用的版本号为版本号7,纠错级别为M级纠错容量:15%,运用了QRcode.jar包、Servlet和jsp等,首先须要新建WebProject工程,然后将QRcode.jar包添加到lib文件夹下,如图3-2所示:图3-2添加jar包显示主要实现程序如下://设置纠错实力L%7M%15Q%25H%30qrcode.setQrcodeErrorCorrect('M');//设置编码B代表二进制来存储信息rcode.setQrcodeEncodeMode('B');//获得画笔工具Graphics2Dg2D=image.createGraphics();//设置背风光g2D.setBackground(newColor(255,255,255));//绘制矩形生成界面设置局部程序如下:<inputtype="text"id="content"><inputtype="button"value="生成二维码"onclick="qd()"><imgid="image">程序编写完成,编译,运行无错。将编写程序部署运行后,生成界面为网页版,翻开本地网址,显示如图3-3所示生成界面:g2D.clearRect(0,0,140,140);//设置前风光g2D.setColor(Color.BLACK);//依据布尔数组填充图片的格点g2D.fillRect(j*3+2,i*3+2,3,3);//+2-偏移量g2D.dispose();//释放画笔工具image.flush();//去除残留数据//以流的方式将image输出,格式为bmpImageIO.write(image,"bmp",response.getOutputStream());}生成界面设置局部程序如下:<inputtype="text"id="content"><inputtype="button"value="生成二维码"onclick="qd()"><imgid="image">程序编写完成,编译,运行无错。将编写程序部署运行后,生成界面为网页版,翻开本地网址,显示如图3-3所示生成界面:图3-3二维码生成界面运行完成,在生成对话框中,输入所要生成的信息内容,点击图3-3中生成二维码图标,即可生成相应的二维码,生成后的显示界面如图3-4所示:图3-4二维码生成显示界面至此,二维码生成系统完成了对输入数据信息的编码,生成了相应的二维码。可以在采集系统和译码系统中引用。

4二维码图像采集4.1硬件介绍4.1.1STM32简介STM32F103xx增加型系列运用高性能的ARMCortex™-M332位的RISC内核,工作频率为72MHz,内置高速存储器(高达512K字节的闪存和64K字节的SRAM),丰富的增加I/O端口和连接到两条APB总线的外设。全部型号的器件都包含3个12位的ADC、4个通用16位定时器和2个PWM定时器,还包含标准和先进的通信接口:多达2个I2C接口、3个SPI接口、2个I2S接口、1个SDIO接口、5个USART接口、一个USB接口和一个CAN接口。STM32F103xx大容量增加型系列工作于-40℃至+105℃的温度范围,供电电压2.0V至3.6V,一系列的省电模式保证低功耗应用的要求。STM32F103xx大容量增加型系列产品供应包括从64脚至144脚的6种不同封装形式;依据不同的封装形式,器件中的外设配置不尽一样。STM32有丰富的内部资源,如下所示:·RealViewMDK〔MiertocontrollerDevelopmentKit〕基于ARM微限制器的专业嵌入式开发工具;·内置闪存存储器;·内置SRAM;·嵌套的向量式中断限制器(NVIC);·外部中断/事务限制器(EXTI);·时钟和启动;·自举模式;·DMA;·RTC(实时时钟)和后备存放器;·窗口看门狗;·I2C总线;·通用同步/异步承受发送器(USART);·串行外设接口(SPI);·限制器区域网络(CAN);·通用串行总线(USB);·通用输入输出接口(GPIO);·ADC(模拟/数字转换器);·温度传感器;·串行线JTAG调试口(SWJ-DP)。STM32中断ARMcortex_m3内核支持256个中断〔16个内核+240外部〕和可编程256级中断优先级的设置,和其相关的中断限制和中断优先级限制存放器〔NVIC、SYSTICK等〕也都属于cortex_m3内核的局部。STM32接受了cortex_m3内核所以这局部照旧保存运用,但STM32并没有运用cortex_m3内核全部的东西〔如内存爱惜单元MPU等〕,因此它的NVIC是cortex_m3内核的NVIC的子集。STM32可以支持的68个外部中断通道,已经固定的支配给相应的外部设备。每个中断通道都具备自己的中断优先级限制字节PRI_n(8位,但在STM32中只运用4位,高4位有效),每4个通道的8位中断优先级限制字〔PRI_n〕构成一个32位的优先级存放器〔PriorityRegister〕。68个通道的优先级限制字至少构成17个32位的优先级存放器,它们是NVIC存放器中的一个重要局部。OV7670介绍OV7670是OV〔OmmiVision〕公司生产的一个1/6寸的CMOSVGA图像传感器。该传感器体积小、工作电压低,供应单片VGA摄像头和影像处理器的全部功能。通过SCCB总线限制,可以输出整帧、子采样、取窗口等方式的各种辨别率8位影响数据。该产品VGA图像最高达30帧/秒。我们可以完全限制图像质量、数据格式和传输方式。全部图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。OmmiVision图像传感器应用独有的传感器技术,通过削减或者消退光学或者电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量得到清晰的稳定的彩色图像。OV7670的特点有:·高灵敏度、低电压适合嵌入式应用;·标准的SCCB接口,兼容I2C接口;·支持RawRGB、RGB(GRB4:2:2,RGB565/555/444),YUV(4:2:2)和YCbCr(4:2:2)输出格式;·支持VGA、CIF和从CIF到40*30的各种尺寸;·VarioPixel子采样方式;·支持自动曝光限制、自动增益限制、自动白平衡、自动消退灯光条纹、自动黑白平衡校准等自动限制功能。图像质量限制包括色饱度、色相、伽玛、锐度和ANTI_BLOOM等设置;·支持闪光灯:LED灯;·通用串行总线(USB);·通用输入输出接口(GPIO);·ADC(模拟/数字转换器);·串行线JTAG调试口(SWJ-DP);·支持图像缩放。OV7670功能框图如图4-1所示:图4-1OV7670功能框图OV7670传感器包括如下一些功能模块:〔1〕感光整列〔ImageArray〕OV7670总共有656*488个像素,其中640*480个有效〔即有效像素为30W〕。〔2〕时序发生器〔VideoTimingGenerator〕时序发生器具有的功能包括:整列限制和帧率发生〔7种不同格式输出〕、内部信号发生器和分布、帧率时序、自动曝光限制、输出外部时序〔VSYNC、HREF/HSYNC和PCLK〕。〔3〕模拟信号处理〔AnalogProcessing〕模拟信号处理全部模拟功能,并包括:自动增益〔AGC〕和自动白平衡〔AWB〕。〔4〕A/D转换〔A/D〕原始的信号经过模拟处理器模块之后,分G和BR两路进入一个10位的A/D转换器,A/D转换器工作在12M频率,和像素频率完全同步〔转换的频率和帧率有关〕。A/D范围乘积和A/D的范围限制共同设置A/D的范围和最大值,允许用户依据应用调整图片的亮度。〔5〕测试图案发生器〔TestPatternGenerator〕测试图案发生器功能包括:八色调色条图案、渐变至黑白彩色条图案和输出脚移位“1”。〔6〕数字处理器〔DSP〕这个局部限制由原始信号插值到RGB信号的过程,并限制一些图像质量:〔7〕缩放功能〔ImageScaler〕这个模块遵照预先设置的要求输出数据格式,能将YUV/RGB信号从VGA缩小到CIF以下的任何尺寸。〔8〕数字视频接口〔DigitalVideoPort〕通过存放器COM2[1:0],调整IOL/IOH的驱动电流,以适应用户的负载。〔9〕SCCB接口〔SCCBInterface〕SCCB接口限制图像传感器芯片的运行,可以进展通信。〔10〕LED和闪光灯的输出限制〔LEDandStorbeFlashControlOutput〕OV7670有闪光灯模式,可以限制外接闪光灯或闪光LED的工作。OV7670的存放器通过SCCB时序访问并设置,SCCB时序和IIC时序特别类似。OV7670的图像数据输出格式有:·VGA,即辨别率为640*480的输出模式;·QVGA,即辨别率为320*240的输出格式,也就是本文档我们须要用到的格式;·QQVGA,即辨别率为160*120的输出格式;·PCLK,即像素时钟,一个PCLK时钟,输出一个像素(或半个像素);·VSYNC,即帧同步信号;·HREF/HSYNC,即行同步信号。4.2硬件连接关系及原理4.2.1硬件连接关系ALIENTEKOV7670摄像头模块和MCU连接须要16根信号线,以及2根电源线。这16根信号线和ALIENTEKSTM32开发板的连接关系如表4-1所示:表4-1摄像头模块和开发板连接关系OV7670摄像头STM32开发板D0∽D7PB0∽PB7SCLPC4SDAPC5WRSTPA0RCLKPA1RRSTPA4OEPA11WENPA12VSYNCPA154.2.2硬件原理图4-2摄像头引脚图ALIENTEKOV7670摄像头模块自带了有源晶振,用于产生12M时钟作为OV7670的XCLK输入。同时自带了稳压芯片,用于供应OV7670稳定的2.8V工作电压,并带有一个FIFO芯片〔AL422B〕,该FIFO芯片的容量是384K字节,足够存储2帧QVGA的图像数据。模块通过一个2*9的双排排针〔P1〕和外部通信,和外部的通信信号如表4-2所示:表4-2OV7670模块信号及其作用描述信号作用描述信号作用描述VCC3.3模块供电脚,接3.3.V电源FIFO_WENFIFO写使能GND模块地线FIFO_WRSTFIFO写指针复位OV_SCLSCCB通信时钟信号FIFO_RRSTFIFO读指针复位OV_SDASCCB通信数据信号FIFO_OEFIFO输出访能FIFO_D[7:0]FIFO输出数据〔8位〕FIFO_VSYNCOV7670帧同步信号FIFO_RCLK读FIFO时钟ALIENTEKOV7670摄像头模块存储图像数据的过程为:等待OV7670同步信号→FIFO写指针复位→FIFO写使能→等待其次个OV7670同步信号→IFO写制止。通过以上5个步骤,我们就完成了1帧图像数据的存储。在存储完一帧图像以后,我们就可以起先读取图像数据了。读取过程为:FIFO读指针复位→给FIFO读时钟〔FIFO_RCLK〕→读取第一个像素高字节→给FIFO读时钟→读取第一个像素低字节→给FIFO读时钟→读取其次个像素高字节→读取剩余像素→完毕。软件实现编程需下载安装KeiluVision5软件,运用C语言编程,须要下载安装程序编程软件,这里运用FlyMcuV0.188下载地址“//:”。编程程序包含了STM32F103RCT6开发板驱动OV7670摄像头拍照缓存到摄像头自带的FIFO功能和运用串口上传上位机显示功能。上传干脆运用USB-232串口连接上位机实现。

系统实现的功能流程图如下所示:图4-3主函数流程图主函数初始化主要是对系统时钟初始化、串口初始化、延时初始化、摄像头初始化和LED接口初始化,完成系统的初始配置,为程序运行做准备。更新上位机显示,去除上位机已有的内容,为接收新的内容做准备,时钟信号到来时,上位机接收显示图像。新图像是否传输完成。用来检测上传一帧的图像是否完全上传成功,假设图像未完全上传那么返回到更新上位机显示,重新上传图像,假设上传成功,LED灯状态取反,等待下一次图像的上传。如此反复循环。

采集图像流程图如图4-4所示:图4-4摄像头采集流程图主函数初始化成功后,程序依次执行判定是否起先采集图像,假设成立,发送数据起始叮嘱,准备起先采集图像,假设不成立,那么干脆完毕,数据起始叮嘱发送后,FIFO缓存器可读,那么起先上传图像,传输完成后,发送数据完毕叮嘱,停顿读FIFO数据,如此一帧数据上传完成,完成后,延时执行,等待下一次采集图像。在HARDWARE文件夹下新建一个OV7670的文件夹。然后新建如下文件:ov7670.c、sccb.c、ov7670.h、sccb.h、ov7670cfg.h等5个文件,将他们保存在OV7670文件夹下,并将这个文件夹参与头文件包含路径。另外,还须要用到exti.c和timer.c,所以把这两个文件也参与HARDWARE组下。初始化OV7670相关的IO口,然后最主要是完成OV7670的存放器序列初始化。局部程序如下:u8OV7670_Init(void){ u8temp; u16i=0; { delay_ms(200); } delay_ms(1500); //设置IO口 RCC->APB2ENR|=1<<2; //先使能外设PORTA时钟 RCC->APB2ENR|=1<<3; //先使能外设PORTB时钟 GPIOA->CRL|=0X00030033; //PA0/1/4输出 GPIOA->CRH|=0X83033000; //PA15输入、PA11/12/14输出 GPIOB->CRL=0X88888888; //PC0~7输入 SCCB_Init(); //初始化SCCB的IO口 if(SCCB_WR_Reg(0x12,0x80))return1; //复位SCCBMian函数局部代码如下:Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,115200); //串口初始化为115200 delay_init(72); //延时初始化OV7670_Init(); //初始化摄像头 LED_Init(); //初始化和LED连接的硬件接口 while(OV7670_Init())//初始化OV7670 EXTI15_Init(); //使能定时器捕获 OV7670_Window_Set(10,174,240,240); //设置窗口 GPIOB->CRL=0X88888888;//设置数据IO口为输入 while(1) { //设置IO口 RCC->APB2ENR|=1<<2; //先使能外设PORTA时钟 RCC->APB2ENR|=1<<3; //先使能外设PORTB时钟 GPIOA->CRL|=0X00030033; //PA0/1/4输出 GPIOA->CRH|=0X83033000; //PA15输入、PA11/12/14输出 GPIOB->CRL=0X88888888; //PC0~7输入 SCCB_Init(); //初始化SCCB的IO口 if(SCCB_WR_Reg(0x12,0x80))return1; //复位SCCBMian函数局部代码如下:Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,115200); //串口初始化为115200 delay_init(72); //延时初始化OV7670_Init(); //初始化摄像头 LED_Init(); //初始化和LED连接的硬件接口 while(OV7670_Init())//初始化OV7670 camera_refresh(); //更新显示 if(i!=ov_frame) //DS0闪烁运行实现ALIENTEKSTM32开发板和摄像头模块的连接,是通过杜邦线连接的,由于线比拟长,简洁受到外界干扰,导致图像显示错乱甚至显示不出来,所以本次设计接受不同方式对这些杜邦线进展分开处理,须要将数据线:首先D0~D7捆绑在一起,然后将其他线捆绑在一起,这样处理以后,可以有效防止图像错乱,甚至不出图像的问题。最终,程序编写完成,编译、运行无错,下载代码到STM32开发板上,在摄像头模块初始化成功之后,调整焦距等即可显示出图像,最终截图保存到上位机。图像显示如图4-5所示:图4-5上位机显示图像

图像保存到上位机后如图4-6所示:图4-6上位机保存后图像图片保存到上位机后,在识别系统时可以进展解码应用。

5二维码识别系统设计5.1二维码识别系统译码流程图如下列图所示:图5-1二维码译码流程图通过图像的采集设备,得到含有条码的图像,此后主要经过图像预处理、条码定位、读取数据、纠错和解码等步骤实现条码的识别。〔1〕图像预处理二维码图像预处理可分为三个局部:彩色图像灰度化、利用中值滤波进展图像平滑以及利用灰度图像二值化技术分割图像。假如原始采集图像为彩色图像。首先须要进展灰度化处理。XiongZou等[13]将二维码的图像预处理算法整体上分为两类,即MBF算法和MFB算法。MBF算法是指先进展二值化处理,然后进展中值滤波;MFB算法指先进展中值滤波,然后在对滤波结果进展二值化处理。〔2〕彩色图像灰度化通常干脆采集到的是彩色图像,每个像素有R〔红〕、G〔绿〕、B〔蓝〕三个颜色重量,每个颜色重量的取值范围为0到255,而二维码是以黑白模块构成,而颜色不包含任何信息,所以首先要对采集到的彩色图像进展灰度化处理,通常接受式5.1进展灰度化处理,其中Cr、Cg、Cb分别R、G、B三个颜色重量的权值,且满足Cr+Cg+Cb。〔5.1〕〔3〕二维码的定位定位算法就是在图像中找到二维码图形的精确位置方法,同时得到二维码的尺寸、所覆盖的区域范围、边缘等信息。二维码一般为矩形,所以二维码的定位过程实际就是求矩形四个顶点的坐标值的过程。二维码的定位算法的主要探究方向有两个:一是利用不同二维码的构造特征来定位二维码,即在图像中找寻二维码构造中的寻像图像,通过寻像图像来定位二维码;二是利用二维码的形态特征,二维码通常是矩形,而且边缘较为整齐,可以先通过图像识别技术确定二维码的边缘,在通过边缘的信息计算出二维码的精确位置。在QR码图像的左上角、右上角和左下角各分布了一个位置探测图形,定位图像的模块序列遵照“黑-白-黑-白-黑”次序排列,且各模块相对宽度满足比例1:1:3:1:1,该算法分别从X方向和Y方向进展直线扫描,找到满足“黑-白-黑-白-黑”次序且宽度比例为1:1:3:1:1的模块序列;综合X方向的扫描结果和Y方向的扫描结果,分别确定三个定位图像的中心坐标;最终通过计算得到4个顶点的坐标[14]。〔4〕二维码的校正假如图像仅仅是位置和角度上发生变更,可以干脆通过图像的平移和旋转来进展校正。但是实际状况下,往往由于图像采集角度和QR码本身的不平整,导致采集到得图像发生畸变,所以须要更为困难的校正操作。假如二维码图形仅仅是方向上发生变更,而几何形态没有太大变更,可以通过简洁的图像旋转来校正图像。将图像逆时针旋转°的表达式如下:〔5.2〕5.2识别程序实现译码运用C++编写,需下载运用MFC类库。识别程序运行后应当实现对第四章采集到图像的译码。复原所携带的信息。程序运行支持版本VC++5.0以上,本设计运用VC++6.0,所以需下载安装VC++6.0软件,译码是编码的反过程,需对生成过程进展反向编译。首先须要创立新的工程。程序中QRcode版本相关信息,纠错信息局部代码如下: intncRSBlock; //纠错块数 intncAllCodeWord; //块内码字数 intncDataCodeWord; //数据码字数〔码字数-RS码字数〕}RS_BLOCKINFO,*LPRS_BLOCKINFO;//QRcode版本相关信息t intnAlignPoint[6]; //校正图形中心坐标 RS_BLOCKINFORS_BlockInfo1[4];//纠错块信息 RS_BLOCKINFORS_BlockInfo2[4];//纠错块信息数据指针,颜色过滤局部代码如下:public: BYTE**bitmap;//位图数据指针 BYTE**bitMatrix;//矩阵数据指针 intDECIMAL_POINT;//小数点

5.3运行实现程序编写完成后,要进展保存,检查是否有编写错误,编译无错误后,运行程序,形成QRcodeDecoder.exe可执行图标,翻开后界面显示如图5-2所示:图5-2运行显示界面点击图5-2中选择图片,弹出界面后,选择第四章中采集到的图片,内容信息就会显示二维码所携带的信息如图5-3所示:图5-3正常译码显示假设译码不正常那么显示如图5-4所示:图5-4译码显示乱码对于译码出现乱码状况,可能是采集图像时数据丢失,图像显示不清晰或者是译码程序对图像处理未做好。采集图像运用的辨别率为240*240,采集出来的图像较为模糊,对译码造成影响。假设图像数据有丢失,译码时对图像旋转、纠错、定位、校正等可能处理不恰当,造成译码异样状况。对于译码还需进展改良,如今显示异样,和生成所携带信息不否,程序还需进展完善修改。

6总结二维码由于具有高密度、大容量、纠错实力强、可表示文字图像信息、可加密等优点,已广泛应用于传统的工业自动化生产线、医疗效劳、收费系统、商品管理系统及信息查询系统等各个领域。而且随着当今信息技术的开展和网络的普及,二维码将有更大的商机。经过三个月的努力,根本上完成了毕业设计的任务要求,实现了二维码的编码、图像采集和译码的根本功能。经过这次的努力学习和设计,让我对二维条码的学问,有了更深一步的了解,让我知道了它在生活中的重要性及给我们带来的便利。本文主要对二维条码的编码、图像采集以及译码系统进展设计,介绍了QR码的编码构造,运用JAVA语言进展了二维码的生成系统的编码,能够做到根本信息的编码,对图像采集和译码系统的设计,采集图像运用的OV7670摄像头相对来说辨别率较低,采集到的图像相对说可能不是特别清晰,译码局部假设运用干脆生成的二维码图片可以进展译码,但是运用采集到的图片时,显示和所携带信息不否,对图像的定位和校正等还存在问题,程序可能存在运行不稳定译码错误等状况。盼望以后可以进展改良。

致谢历时三个月,从论文选题到搜集材料,从开题报告、写初稿到论文反反复复的修改,在这期间阅历了喜悦、苦痛和彷徨。如今,伴随着这篇毕业论文最终成稿,困难的心情烟消云散。本文是在导师陈登峰老师悉心指导下完成的,陈老师渊博的学问、严谨的治学看法、勤奋的工作作风深深的感染着我,我将在今后的人生道路上牢记导师的训诲,踏踏实实的做好每一件事。老师对我进展了无私的指导和帮助,不厌其烦的帮助进展论文的修改和改良。在整个毕业设计和论文写作过程中,对我进展了耐性的指导和帮助,提出严格要求,引导我不断开阔思路,为我答疑解惑,鼓舞我大胆创新,使我在这一段宝贵的时间中,既增长了学问、开阔了视野、熬炼了心态,又造就了良好的学习习惯。在此,我向我的指导老师陈登峰老师表示最真挚的感谢!其次,感谢这篇论文所涉及到的各位学者,本文引用了数位学者的探究文献,假如没有各位学者的探究成果的帮助和启发,我将很难完本钱篇论文的写作。最终,我要感谢四年的高校生活,感谢我的全部老师、同学和家人,以及那些我恒久不能遗忘的挚友,他们的支持和情感,是我恒久的财产。

参考文献张得煜.二维条码技术、标准及应用[J].信息技术和标准化,2007〔10,12-13于明,李惠然.VisualC++程序设计教[M].北京:海洋出版社.2002马忠梅,马岩.单片机的C语言应用程序设计[M].北京:北京航空航天高校出版社.2003徐杰民,肖云.二维条码技术现状及开展前景[J].计算机和现代化,2004〔12〕,15-16百度百科.二维码[EB/OL].-11-13中国物品编码中心.条码技术和应用[M].北京:清华高校出版社,2003张思民.Java语言程序设计.[M]北京:清华高校出版社,2007周娣.浅谈二维码的应用[J].山东轻工业学院报告,2011〔2〕,8-9王毅.二维条码技术应用及标准化状况介绍[J].中国标准化,2006〔5〕,25-26ButnariuD,KlementEP.Triangularnorm-basedmeasuresandgameswithfuzzycoalitions[M].KluwerAcademicPublishers,1993.JensenK.Anintroductiontothepracticaluseofcolouredpetrinets[J].LectureNotesinComputerScience,Springer-Verlag,1998〔1〕20-21DanielWaish,AdrianE.Rafterf.AeeurateandeffiejenteurvedeteCtioninimages:theimPortanl:esamPlingHoughtransform[J].PattemReeognition,2002.35,24-25GB/T21049-2007.中华人民共和国标准-汉信码[S].GB/T18284-2000.快速响应矩阵码[S]周晓伟.二维条码识别技术探究[D].上海:上海交通高校,2007梁勇.Java语言程序设计:根底篇.[M]北京:机械工业出版社,2011雍俊海.Java程序设计.[M]北京:清华高校出版社,2004杨佳丽,高美凤.一种QR码的预处理方法[J].计算机工程,2011,37〔2〕,218-220陈杰.QR码图像预处理技术探究[J].计算机工程,2010,31〔6〕,16-17孙少林,马志强.灰度图像二值化算法探究[J].ValueEngineering,2010,142-143周利红,刘书家.QR码图像处理和译码方法探究[J].北京工商高校学报〔自然科学版〕,2008,26〔1〕,65-66

附录1:生成源程序importjava.awt.Color;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.io.UnsupportedEncodingException;iimportjavax.imageio.ImageIO;importjavax.servlet..Servlet;importcom.swetake.util.Qrcode;publicclassQRcodeDemoextendsServlet{mportjavax.servlet..ServletRequest;importjavax.servlet..ServletResponse; //重写Servlet里面的service方法 publicvoidservice(ServletRequestrequest,ServletResponseresponse){ try{ //设置编码 request.setCharacterEncoding("utf-8"); //获得文本框内容 Stringcontent=request.getParameter("content"); //创立qrcode对象 Qrcodeqrcode=newQrcode(); //设置纠错实力L%7M%15Q%25H%30 qrcode.setQrcodeErrorCorrect('M'); //设置编码B代表二进制来存储信息 qrcode.setQrcodeEncodeMode('B'); //设置二维码的版本号 qrcode.setQrcodeVersion(7); //以ISO-8859-1解码后转为UTF-8 byte[]bt=newString(content.getBytes("ISO-8859-1"),"UTF-8") .getBytes(); //创立图像数据缓冲区 //BufferedImage.TYPE_INT_ARGB创立一个具有8位rgb颜色的重量图像 BufferedImageimage=newBufferedImage(140,140, BufferedImage.TYPE_INT_RGB); //获得画笔工具 Graphics2Dg2D=image.createGraphics(); //设置背风光 g2D.setBackground(newColor(255,255,255)); //绘制矩形 g2D.clearRect(0,0,140,140); //设置前风光 g2D.setColor(Color.BLACK); if(bt.length>0){ //返回表示二维码的数组 boolean[][]s=qrcode.calQrcode(bt); for(inti=0;i<s.length;i++){ for(intj=0;j<s.length;j++){ if(s[j][i]){ //依据布尔数组填充图片的格点 g2D.fillRect(j*3+2,i*3+2,3,3);//+2-偏移量 } } } } g2D.dispose();//释放画笔工具 image.flush();//去除残留数据 //以流的方式将image输出 ImageIO.write(image,"bmp",response.getOutputStream()); }catch(UnsupportedEncodingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }}

附录2:采集源程序及原理图图2-1OV7670摄像头模块原理图图2-2STM32开发板原理图#include"sys.h"#include"usart.h"#include"delay.h"#include"led.h"#include"ov7670.h"#include"exti.h"#include"timer.h"u8Flag=0;u8Flag_Temp=0;u8DMA_Turn_OK=0;externu8ov_sta; //在exit.c里面定义externu8ov_frame; //在timer.c里面定义voidcamera_refresh(void){ u32j; u16color; if(ov_sta==2)//当采集数据状态成立,采集数据 { Uart_Send_Data(0x01); //发送图像起始叮嘱 Uart_Send_Data(0xfe);OV7670_RRST=0; //起先复位读指针 OV7670_RCK=0; OV7670_RCK=1; OV7670_RCK=0; OV7670_RRST=1; //复位读指针完毕 Uart_Send_Data(0x01); }} intmain(void){ u8i;Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,115200); //串口初始化为115200 delay_init(72); //延时初始化OV7670_Init(); //初始化摄像头 LED_Init(); //初始化和LED连接的硬件接口 while(OV7670_Init())//初始化OV7670 if(i!=ov_frame) //DS0闪烁 { i=ov_frame; LED0=!LED0; } }}#include"sys.h"#include"ov7670.h"#include"ov7670cfg.h"#include"timer.h"#include"delay.h"#include"usart.h" { delay_ms(200); } delay_ms(1500); EXTI15_Init(); //使能定时器捕获 OV7670_Window_Set(10,174,240,240); //设置窗口OV7670_CS=0; GPIOB->CRL=0X88888888;//设置数据IO口为输入 while(1) OV7670_RCK=1; for(j=0;j<57600;j++) { OV7670_RCK=0; color=OV7670_DATA; //读数据 OV7670_RCK=1; color<<=8; OV7670_RCK=0; color|=OV7670_DATA; //读数据 OV7670_RCK=1;Uart_Send_Data((u8)((color&0XFF00)>>8));//先发送高字节 Uart_Send_Data((u8)color); //发送低字节 } ov_sta=0; //清零帧中断标记 ov_frame++;Uart_Send_Data(0xfe); //发送图像完毕叮嘱{ camera_refresh(); //更新显示#include"sccb.h"#include"exti.h"//初始化OV7670//返回0:成功//返回其他值:错误代码u8OV7670_Init(void){ u8temp; u16i=0; //设置IO RCC->APB2ENR|=1<<2; //先使能外设PORTA时钟 RCC->APB2ENR|=1<<3; //先使能外设PORTB时钟 GPIOA->CRL&=0XFFF0FF00; GPIOA->CRL|=0X00030033; //PA0/1/4输出 GPIOA->CRH&=0X00F00FFF; GPIOA->CRH|=0X83033000; //PA15输入/PA11/12/14输出 GPIOB->CRL=0X88888888; //PC0~7输入 SCCB_Init(); //初始化SCCB的IO口 if(SCCB_WR_Reg(0x12,0x80))return1; //复位SCCB //初始化序列 for(i=0;i<sizeof(ov7670_init_reg_tbl)/sizeof(ov7670_init_reg_tbl[0]);i++) { SCCB_WR_Reg(ov7670_init_reg_tbl[i][0],ov7670_init_reg_tbl[i][1]); delay_ms(2); } return0x00; //ok} } SCCB_WR_Reg(0X3A,reg3aval);//TSLB设置 SCCB_WR_Reg(0X68,reg67val);//MANU,手动U值 if(endy>784)endy-=784; temp=SCCB_RD_Reg(0X03); //读取Verf之前的值 temp|=((endx&0X03)<<2)|(sx&0X03); SCCB_WR_Reg(0X03,temp); //设置Verf的start和end的最低2位 SCCB_WR_Reg(0X19,sx>>2); //设置Verfde的start高8位 SCCB_WR_Reg(0X1A,endx>>2); //设置Verfde的end的高8位 temp=SCCB_RD_Reg(0X32); //读取Herf之前的值 temp|=((endy&0X07)<<3)|(sy&0X07); SCCB_WR_Reg(0X17,sy>>3); //设置Herf的start高8位 SCCB_WR_Reg(0X18,endy>>3); //设置Herf的end高8位}

附录3:识别源程序#include"stdafx.h"#include"QRcodeDecoder.h"#include"QRcodeDecoderDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//CAboutDlg对话框用于应用程序classCAboutDlg:publicCDialog{public: CAboutDlg();//对话框数据 //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX数据 //ClassWizard生成的虚函数 //{{AFX_VIRTUAL(CAboutDlg) SCCB_WR_Reg(0X67,reg68val);//MANU,手动V值} //设置图像输出窗口//对QVGA设置?voidOV7670_Window_Set(u16sx,u16sy,u16width,u16height){ u16endx; u16endy; u8temp; endx=sx+width*2; //V*2 endy=sy+height*2; protected: virtualvoidDoDataExchange(CDataExchange*pDX);//支持DDX/DDV//}}AFX虚拟//实现protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP()};CQRcodeDecoderDlg::CQRcodeDecoderDlg(CWnd*pParent/*=NULL*/) :CDialog(CQRcodeDecoderDlg::IDD,pParent){ //{{AFX_DATA_INIT(CQRcodeDecoderDlg) //}}AFX_DATA_INIT //留意,LoadIcon不须要后续DestroyIconWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCQRcodeDecoderDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CQRcodeDecoderDlg) //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CQRcodeDecoderDlg,CDialog) //{{AFX_MSG_MAP(CQRcodeDecoderDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_FILE,OnButtonFile)CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){ //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT}vo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论