用于 VS 2022 .NET 6.0(版本 3.1.0)的 QR 码编码器和解码器 C# 类库 您所在的位置:网站首页 aps胶卷机 用于 VS 2022 .NET 6.0(版本 3.1.0)的 QR 码编码器和解码器 C# 类库

用于 VS 2022 .NET 6.0(版本 3.1.0)的 QR 码编码器和解码器 C# 类库

2023-08-12 20:29| 来源: 网络整理| 查看: 265

二维码编码

编码的主要类是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 数组也可作为类的公共成员QRCodeMatrix使用QREncode。每个元素将黑色模块表示为true,将白色模块表示为false。矩阵维度在 public member 中给出QRCodeDimension。如果编码失败,将抛出异常。

下一步是将二维码符号保存到文件中,或者创建一个Bitmap. 以下示例显示如何将其保存QRCodeMatrix为 PNG 图像文件。将二维码图像保存为 PNG 文件不需要使用Bitmap类,适用于 net-core 和 net-standard。PNG 图像文件比Bitmap.QRSaveBitmapImage

// 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 图像文件。

下面列出了命令行参数。参数设置编码选项。

命令行参数格式:

命令行:exefile [可选参数] input-file output-file输出文件必须具有.png扩展名选项格式 /code:value 或 -code:value (: 可以是 =)纠错级别。代码=[错误|e],值=低|l|中|m|季|q|高|h],默认=m模块尺寸。代码=[模块|m],值=[1-100],默认值=2安静区域。代码=[安静|q],值=[4-400],默认=8,最小=4*宽度ECI 赋值:code=[value|v], value=[0-999999],默认为无ECI值。文本文件格式。code=[text|t] 见下面的注释。除非指定了文本文件选项,否则输入文件是二进制文件如果输入文件格式是文本或 t,则字符串将被编码为字节数组。 二维码编码器演示

QR Code Encoder Demo 是一个测试程序,展示了如何对 QR 码进行编码并将其保存为图像文件。

选择纠错级别。设置 ECI 分配值或将其留空。在数据框中输入文本。您可以使用竖线|字符将string数字、字母数字和一般文本分段。按编码。将显示二维码。将QRCodeMatrix被创建。按保存图像按钮或复制到剪贴板按钮。如果按下复制到剪贴板,模块宽度为 2、静区为 8 的 QR 图像将被加载到剪贴板。如果按保存图像,将显示保存二维码图像对话框。设置模块大小。设置静区。设置图像格式(压缩 PNG 不需要)。按四个保存按钮之一。按Save Compressed PNG以不使用位图的 PNG 格式保存图像。或者,按位图图像。或者,按Save Special。将显示保存特殊屏幕。此选项用于创建用于解码测试的图像文件。保存 QR 码图像屏幕允许您将 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 二维码解码器演示

QR Code Decoder Demo 是一个测试程序,展示如何扫描图像文件或视频图像以获取 QR 码。接下来,它将展示如何将解码后的数据转换为文本string。视频解码器是一个测试/演示应用程序,它将使用系统中第一个找到的网络摄像头。一个结合了二维码解码器和摄像机图像捕获的演示程序。摄像机软件基于 Direct Show Library。

单击图像文件按钮或摄像机按钮。对于图像文件,将显示一个打开文件对话框。将显示图像。对于视频,请将您的二维码放在相机前面。如果解码成功,解码数据区会显示结果。如果解码不成功,Decoded data 区域将为空白。如果图像包含多个二维码,解码数据将显示所有二维码的结果。

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

请注意,我只在我自己的摄像机上测试过这个应用程序。我的相机是罗技高清网络摄像头 C615。我正在使用 640 x 480 像素的帧大小。

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有