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   —

本文标签: 二维码控件信息图片解码