admin管理员组文章数量:1530842
2024年7月25日发(作者:)
2019年第16期
信息与电脑
China Computer & Communication
算法语言
基于.NET的QR二维码高效编解码系统代码设计
夏小翔
(鄂州大学 计算机学院,湖北 鄂州 436000)
摘 要:
基于.NET的QR二维码高效编解码系统代码设计,系统在编解码过程中引入了多线程,该系统能在人机交
互界面模式下对数字、字母、符号及其组合进行高效编解码。基于此,详细分析了编码、解码、多线程核心算法的代码
设计,实验结果表明,软件系统编码、解码功能较强而且高效。
关键词:
编码;解码;多线程
中图分类
号:TP315;TP391.44 文献标识码:A 文章编号:1003-9767(2019)16-043-03
Code Design of QR Two-Dimensional Code Encoding and Decoding System
Based on. NET
Xia Xiaoxiang
Abstract:
The design of QR two-dimensional code efficient encoding and decoding system based on. NET , In the processing of
(College of Computer Science, Ezhou Polytechnic, Ezhou Hubei 436000, China)
coding and decoding, multi-threading is introduced, The system can efficiently encode and decode numbers, letters, symbols and their
combinations under the mode of human-computer interaction interface. Based on this, this paper analyses the core algorithm code
encoding and decoding functions.
Key words:
Code; Decode; Multithreading
文框信息不能同时为空。
if (() == &&
() == )
{ ("内容不能为空!", "链接提示信
息", ancel, MessageBoxIcon.
Warning);
return;}
(3)根据二维码基本信息和参数设置生成相应的二维
码图片。
try{
获取txtAdditionalInfo文本框中和txtWebSite网址中编
码文本信息的字节数,用databyte表示。
databyte = es(txtAdditionalInfo.
() + ());
写入qrcode配置信息options = new QrCodeEncoding
Options{CharacterSet = "UTF-8",ErrorCorrection = ZXing.
orrectionLevel.H};
design of coding, decoding and multi-threading in detail. Experiments result shows that the software system has strong and efficient
0 引言
QR二维码保密防伪性强而且使用非常方便,在工业领
域、网络通信中也有广泛的应用,目前市面上,使用的QR
二维码主要是用C语言和JAVA语言开发,考虑到C#语言
拥有强大的开发功能及与微软各种操作系统能够实现无缝对
接,本系统将使用C#语言来开发《基于.NET的QR二维码
高效编解码系统代码设计》,本文详细分析了编码、解码、
多线程核心算法的代码设计。
1 核心算法设计(Core algorithm design)
1.1 巧妙设置二维码图片大小及参数“QR二维码编码”核
心算法设计
[1-2]
(1)引入ZXing命名空间。
using ing;
(2)判断链接网址txtWebSite和编码信息文本框
txtAdditionalInfo中文本信息是否为空,链接网址和编码信息
基金项目:
湖北省教育厅科学技术研究计划指导性项目(项目编号:B2018469)。
作者简介:
夏小翔(1973—),男,湖北鄂州人,硕士研究生,副教授。研究方向:群体智能算法、数据库系统开发等。
— 43 —
算法语言
创建一个生成对象
writer = new BarcodeWriter();
信息与电脑
China Computer & Communication
2019年第16期
Result result=((Bitmap)PictureQRcode.
Image);
(2)根据图片解码文本框txtPicDecoder中的信息量,
给全局变量解码字节数DecodeByteNumbers赋值。
= ;
DecodeByteNumbers = es
(()).Length;
(3)根据全局变量解码字节数DecodeByteNumbers的
数值,重新规划码元数DecodeModuleNumbers的数值。
double length;
if (DecodeByteNumbers > 1271) {length = g(
DecodeByteNumbers / 76.425); }
else
{length = g( DecodeByteNumbers / 31.775); }
(4)设置解码信息的码元数DecodeModuleNumbers的
初值。
DecodeModuleNumbers = 32(21 +
length * 4);
("恭喜你!解码成功!", "解码提示
信息");}
catch (Exception ex) {
(e, "提示信息");}}
(5)显示图片解码失败的原因。
Else
{("请选择二维码图片!", "提示
信息", ancel, MessageBoxIcon.
Warning); }
1.3 提高QR二维码编码、解码效率“多线程”核心算法设计
(1)自定义显示编码窗体ShowEnCodeForm的线程方法。
public void threadPro1(){
MethodInvoker MethInvo1 = new MethodInvoker(ShowEn
CodeForm);
实例化委托,将主窗体放在此线程中运行
BeginInvoke(MethInvo1); }
(2)自定义显示解码窗体ShowDeCodeForm的线程方法。
public void threadPro2(){
MethodInvoker MethInvo1 = new MethodInvoker(ShowD
eCodeForm);
实例化委托,将解码窗体放在此线程中运行
BeginInvoke(MethInvo1); }
(3)自定义显示信息统计窗体ShowInfoForm的线程方法。
public void threadPro3(){
MethodInvoker MethInvo1 = new MethodInvoker(ShowIn
foForm);
实例化委托,将信息统计窗体放在此线程中运行
(下转第58页)
需要生成的图片格式,这里是QRCODE格式
= ;
导入配置信息qrcode配置信息
s = options;
获取txtAdditionalInfo文本信息和txtWebSite中url生成
二维码位图。
Image img = (.
Trim() + ());
options = new QrCodeEncodingOptions{CharacterS
et = "UTF-8",ErrorCorrection = al.
ErrorCorrectionLevel.H, Width = 32(img.
Width * 2), Height = 32( * 2) };
s = options;
(4)根据文本信息自动选择二维码的版本,设置编码
生成二维码图片版本VersionInfo的初值。
VersionInfo = ( - 57) / 8 + 1;
(5)根据编码生成二维码图片版本VersionInfo的初值,
设置编码信息的码元数ModuleNumbers的初值。
ModuleNumbers = 32(21+(VersionInfo - 1)
* 4);
(6)保存生成二维码图片大小,用于根据二维码图片
比例配置logo图片的大小。
autoSize = ;
(7)将生成二维码图片显示在图片框PictureQRcode中。
img = (() + txtWebSite.
());
= img;
保存原始图片
oldImg = img;
img = null;
return;}
(8)显示生成二维码图片失败的原因。
catch (Exception ex){(e,"提
示信息");
return; }
1.2 巧妙设置参数“QR二维码解码”核心算法设计
[3]
(1)对加载到图片框PictureQRcode中的二维码图片进
行解码。
if ( != null)
{ try {
实例化二维码图片解码类型
BarcodeReader reader = new BarcodeReader();
通过reader对象解码PictureQRcode图片框图片。
— 44 —
软件开发与应用
信息与电脑
China Computer & Communication
2019年第16期
该用例获取了句柄为“panelHandle”、名称为“PANEL_
MAIN”的面板中选择控件CHECKBOX的值。
4.3 控件赋值
控件赋值指对LED控件、列表控件等显示控件进行赋值,
一般用于控制LED指示灯亮、灭和显示接收的串口数据等。
常用赋值指令如下:
int SetCtrlVal (int panelHandle, int controlID, ...)
该指令一般用于为数值显示控件或者LED控件赋值,用
例如下:
static int panelHandle;
SetCtrlVal (panelHandle, PANEL_MAIN _LED, 1);
该用例将句柄为“panelHandle”、名称为“PANEL_
MAIN”的面板中LED控件赋值为1。
int InsertTextBoxLine (int panelHandle, int controlID, int
lineIndex, char text[]);
该指令的作用是向一个列表控件插入字符串,用例如下:
static int panelHandle;
int SendData;
char msg[10];
DeleteTextBoxLines (panelHandle, PANEL_MAIN_
TEXTBOX, 0, 1);
sprintf(msg, "0x%x", SendData);
InsertTextBoxLine (panelHandle, PANEL_MAIN_
TEXTBOX, 1, msg);
向列表控件中插值时,先删除原有数据,再将要插入的
数据转换为字符串,最后将其插入第一行。
4.4 Tab操作
4.4.1 获取句柄
Tab操作的关键是获取面板上Tab控件的句柄,获取指
令如下:
int GetPanelHandleFromTabPage (int panelHandle, int
controlID, int index, int *tabPanelHandle);
用例如下:
static int panelHandle;
static int paneltab;
GetPanelHandleFromTabPage(panelHandle,PANEL_
MAIN_TAB,0,&paneltab);
该用例获取了句柄为“panelHandle”、名称为“PANEL_
MAIN”的面板上Tab控件的句柄。
4.4.2 Tab控件赋值
Tab控件赋值主要是对控件面板上的控件进行赋值,用
例如下:
SetCtrlVal (paneltab, TABPANEL_LED, 1);
该用例将句柄“paneltab”的Tab面板上的LED控件赋
值为1。
5 结 语
本文主要介绍了LabWindows/CVI的基本使用方法,具
体包括工程创建、图形界面创建和通用控件创建。通过学习
基本掌握LabWindows/CVI的使用方法,便于实现软件测试
设计。
参考文献
[1]李丹阳,朱赛.基于COM组件的LabWindows/CVI
与Matlab混合编程[J].中国测试,2012(S1):103-106.
[2]窦颖艳.基于LabWindows/CVI和MATLAB的数据
采集与控制系统[D].株洲:湖南工业大学,2009:80.
[3]许蕾.应用LabWindows/CVI实现USB操纵杆的仿
真[J].自动化仪表,2010,31(1):20-22.
(上接第44页)
BeginInvoke(MethInvo1); }
好的应用前景。
2 结 语
本文提出的《基于.NET QR二维码高效编解码系统》的
设计,QR二维码编码时软件系统能够根据数据信息容量自
动选择二维码的版本、码元数,能够自行设置二维码图片中
间LOGO图片的比例。QR二维码解码时,软件系统能够支
持版本为40、码元数为177乘以177、纠错级别为H级别的
二维码图片;软件系统能够提供编解码时的各种统计信息功
能;系统实现简单、灵活,易于升级,实用性较强,具有较
参考文献
[1]何伟,黄丹玲,张玲,等.适用于嵌入式系统的QR码
识别算法[J].计算机应用,2009,29(3):774-776.
[2]周利华.手机端二维码条码的研究与应用[D].杭州:
浙江工业大学,2007:56.
[3]张新文,李华康,杨一涛,等.基于二维码技术的个人
信息隐私和保护物流系统[J].计算机应用研究,2016(11):3455-
3459.
— 58 —
版权声明:本文标题:基于.NET的QR二维码高效编解码系统代码设计 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1721861913a901712.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论