好好学习,天天向上,一流范文网欢迎您!
当前位置: >> 最新范文 内容页

用于VS2022.NET6.0(版本3.1.0)的QR码编码器和解码器C#解释器

目录

介绍

二维码库容许您的程序创建(编码)二维码图象或读取(解码)包含一个或多个二维码的图象。随附的源代码由两个解决方案组成,一个二维码编码器解决方案和一个二维码解码器解决方案。软件升级到VS2022.NET6.0。源代码是用C#编撰的。它是一个开源代码。

请注意“QRCode”一词是DENSOWAVEINCORPORATED的注册商标。

编码器解决方案解码器解决方案安装

随附的源代码由两个VisualStudio解决方案组成。每位解决方案都由一个库项目和演示/测试项目组成。

将代码集成到您的应用程序须要以下步骤。在您的开发区域中安装QRCodeEncoderLibrary.dll或QRCodeDecoderLibrary.dll。启动VisualStudioC#程序并打开您的应用程序。转入解决方案资源管理器,右键单击References,之后选择AddReference。选择浏览选项卡并将文件系统导航到所需库的位置。当您的应用程序发布时,相关的库文件必须包含并安装在与您的可执行文件(.exe)文件相同的文件夹中。

或则,您可以将相关库的源文件复制到您的项目中。

必须将相关的“using”语句添加到您的所有源文件中:

using QRCodeEncoderLibrary;
// or
using QRCodeDecoderLibrary;

二维码

二维码代表快速响应代码。它是一个二维条形码。从视觉上看,它是一个由黑白相间的方块模块组成的正圆形。正圆形周围环绕着一个黄色的安静区域。二维码由国际标准ISO/IEC18004定义。此标准的免费副本可在此处获得。

ISO标准文件将QR码定义为“QR码是一个矩阵,由以整体圆形纹样排列的名义上的圆形模块阵列组成,包括坐落符号三个角的奇特定位器纹样,借以帮助轻松定位它的位置、大小和倾斜度。提供了范围广泛的符号大小以及四级纠错。模块规格由用户指定,可通过多种技术生成符号。”

ISO标准18004是了解QR码详尽信息的最佳信息来源。搜索互联网会形成更多关于此主题的文章。可以在此处查看有关QR码的维基百科文章。

二维码标准是40个不同大小的正圆形的集合。每位小方块都有一个从1到40的版本号。每位小方块的大小从21x21模块(版本1)到177x177模块(版本40)不等。每位版本的每边比先前的版本多4个模块。

Square-Dimension = 21 + 4 * (Version - 1)

一些模块是固定的。最显著的是三方取景器。其余模块分为数据和纠错。有4个级别的纠错:

数据区中的每位模块代表一位。红色模块为1,黑色模块为0。数据区可以界定为段。每位输入段字节字段以数字、字母数字和字节三种方法之一编码为数据位。注意:二维码标准对汉字字符多了一种编码方式。本项目不支持。

要编码QR码,您须要提供要编码的数据和四个纠错码之一。系统将估算表示数据所需的最小版本号。

不仅数据之外,QR码还可以包含ECI分配编号。分配编号范围是0到999999。该编号不是QR码数据的一部份。它用于对受字节值的取代解释(比如,取代字符集)的数据进行编码。

该程序剖析每位数据段以找到“最佳”编码。倘若您想减少QR码的大小而且您有如上定义的长数字字符串或字母数字数据,则将您的输入分成几个字符串或字节链表。其中一些字符串必须是纯数字或前面定义的字母数字。在解码过程中,所有结果string段将联接在一起。

当库解码包含一个或多个二维码的图象时,结果将是一个string链表或字节链表链表。每位链表项是一个二维码。

二维码编码

编码的主要类是QREncoder。它将字节链表或文本string转换为二维码图象。要创建QR码图象,请执行以下步骤:

创建QREncoder对象。设置两个可选参数。纠错码和ECI分配编号。这个对象是可重复使用的。倘若您想创建许多QR码,只需重用此对象即可。没有初始化或处置要求。可选参数将保留先前运行时的值。

二维码解码器下载_二维码解码器免费版_二维码解码器

// create QR Code encoder object
QRCodeEncoder Encoder = new();

假如须要,设置两个可选参数:

// Error correction
// error correction low (7%)
Encoder.ErrorCorrection = ErrorCorrection.L;
// or, error correction medium (15%) The Default
Encoder.ErrorCorrection = ErrorCorrection.M;
// or, error correction quarter (25%)
Encoder.ErrorCorrection = ErrorCorrection.Q;
// or, error correction high (30%)
Encoder.ErrorCorrection = ErrorCorrection.H;
// ECI Assignment Value (default is -1 not used)
// The ECI value is a number in the range of 0 to 999999.
// or -1 if it is not used
Encoder.ECIAssignValue = -1;

更高的纠错比率为您提供更好的保护,避免受损的QR码图象。成本是降低的QR符号的大小。

调用以下四种Encode方式之一:

// single text string input
public void Encode(string StringDataSegment);
// multiple text strings input
public void Encode(string[] StringDataSegments);
// single byte array input

二维码解码器免费版_二维码解码器下载_二维码解码器

public void Encode(byte[] ByteDataSegment); // multiple byte arrays input public void Encode(byte[][] ByteDataSegments);

倘若输入数据是文本字符串或文本字符串字段。文本将使用以下方式转换为字节字段。

// the encoder converts text string to byte array
// using the conversion method
byte[] ByteArray = Encoding.UTF8.GetBytes(Text);

实际上,库软件会将第一种和第二种Encode方式分别转换为第三种和第四种方式。

QRCodeEncoderLibrary将扫描每位传入数据字节字段段以确定最佳编码方式。该程序不会尝试断掉单个段以最小化QR码矩阵的大小。您可以以借助长字符串数字或字母数字数据的形式递交段链表。

该Encode方式返回bool[,],一个布尔元素链表的方阵。返回的二维bool链表也可作为QREncode类的公共成员QRCodeMatrix使用。每位元素将红色模块表示为true,将黑色模块表示为false。矩阵维度在公共方式QRCodeDimension中给出。假如编码失败,将抛出异常。

下一步是将二维码符号保存到文件中,或则创建一个Bitmap。以下示例显示怎样将其QRCodeMatrix保存为PNG图象文件。将二维码图象保存为PNG文件不须要使用Bitmap类,适用于net-core和net-standard。PNG图象文件显著大于QRSaveBitmapImage中Bitmap类创建的PNG文件。

// save image as png file
// create save PNG image class 
// and load the QR Code matrix 
QRSavePngImage PngImage = new(QRCodeMatrix);
// set the module size in pixels
PngImage.ModuleSize = ModuleSize;
// set the quiet zone in pixels
PngImage.QuietZone = QuietZone;
// save the QR Code PNG image to file name
// or to open file stream
PngImage.SaveQRCodeToPngFile(Dialog.FileName);

使用Bitmap类保存二维码。Bitmap类容许您选择文件格式。

// save image as any file format supported by Bitmap class.
// create image class for the QR Code matrix 

二维码解码器下载_二维码解码器免费版_二维码解码器

QRSaveBitmapImage Image = new(QRCodeMatrix); // set the module size in pixels Image.ModuleSize = ModuleSize; // set the quiet zone in pixels Image.QuietZone = QuietZone; // save the QR Code image to file name // or to open file stream Image.SaveQRCodeToBitmapFile(Dialog.FileName, ImageFormat);

使用命令行类创建PNG图象文件。

下边列举了命令行参数。参数设置编码选项。

命令行参数格式:

二维码编码器演示

QRCodeEncoderDemo是一个测试程序,展示了怎样对QR码进行编码并将其保存为图象文件。

二维码编码器演示

二维码保存对话框

保存特殊二维码图片

二维码解码

QRDecoder将包含QR码符号的图象文件或位图转换为QRCodeResult链表。每位结果项包含QR码数据字节链表和ECI分配值。要解码包含一个或多个QR码图象的图象文件,请执行以下步骤。

创建QRDecoder对象。这个对象是可重复使用的。假如你想解码一些图象,只需重用这个对象。没有初始化或处置要求。

// create QR Code decoder object
QRDecoder Decoder = new QRDecoder();
// call image decoder method with file name
QRCodeResult[] ResultArray = Decoder.ImageDecoder(FileName)

每位成功解码的QRCode符号就会返回一个QRCodeResult元素。在大多数情况下二维码解码器,它将是一个包含一个元素的字段。结果定义如下。DataArray代表二维码的内容。并且,在个别情况下,您可能对其他成员感兴趣。假如返回值为null,则表示未检查到二维码。

// QR Code result 
public class QRCodeResult
    {
    // QR Code Data array
    public byte[] DataArray;
    // ECI Assignment Value
    public int ECIAssignValue;
    // the next members are for information only
    // QR Code matrix version
    public int QRCodeVersion;
    // QR Code matrix dimension in bits
    public int QRCodeDimension;
    // QR Code error correction code (L, M, Q, H)
    public ErrorCorrection ErrorCorrection;
    }

要将数据字节链表QRCodeResult.DataArray转换为string文本二维码解码器,请使用:

// convert binary result to text string
string TextResult = QRCode.ByteArrayToStr(ResultArray[Index].DataArray);

该ByteArrayToStr方式将字节链表通过以下方法转换为string:

// The QRDecoder converts byte array to text string 
// using this conversion
public static string ByteArrayToStr(byte[] DataArray)
	{
	Decoder = Encoding.UTF8.GetDecoder();
	int CharCount = Decoder.GetCharCount(DataArray, 0, DataArray.Length);
	char[] CharArray = new char[CharCount];
	Decoder.GetChars(DataArray, 0, DataArray.Length, CharArray, 0);
	return new string(CharArray);
	}

比如,右图是两个QR码一个内一个。大的数据是:大二维码,小的数据是:小二维码。大的将纠错设置为高。该程序将找到两个QR码并使用纠错恢复大的缺位区域以获得正确的内容。

QR Code 1
Big QR Code
QR Code 2
Small QR Code

三个二维码的另一个反例。解码器在图片中找到9个查找器。测试所有可能的9个查找器中的3个。结果是三组三个查找器测试有效的二维码结构。结果如右图所示。

QR Code 1
Top left corner
QR Code 2
Top right corner
QR Code 3
Bottom left corner

二维码解码器演示

QRCodeDecoderDemo是一个测试程序,展示怎样扫描图象文件或视频图象以获取QR码。接出来,它将展示怎样将解码后的数据转换为string文本。视频解码器是一个测试/演示应用程序,它将使用系统中第一个找到的网路摄像头。一个结合了二维码解码器和摄像机图象捕获的演示程序。摄像机软件基于DirectShowLibrary。

供您参考,视频捕获使用了在CodeProject.com和Github上发布的Camera_Net项目的一些源模块。该项目基于DirectShowLib。请注意,这个项目中的DirectShowLib是原始源模块的更改子集。

请注意,我只在我自己的摄像机上测试过这个应用程序。我的单反是雷蛇高清网路摄像头C615。我正在使用640x480象素的帧大小。

该程序设置单反软件在屏幕的预览区域显示视频流。扫描速率为每秒5帧。每位帧都被捕获并测试一个QR码。找到QR码后,结果将显示在解码数据文本框中。假如解码的数据是URI,则启用“转到URI”按钮,您可以在默认Web浏览器上显示此URI。

为了使视频解码成功,每位QR码模块必须由几个摄像头象素表示。诸如,4x4或更多象素。QR码必须相当清晰、平坦且与单反平行。右图说明了该软件将图象转换为正圆形的功能,其中取景器符号坐落正确的位置。