ZXing是一个开源项目,由Java实现,主要提供二维码的生成和识别功能。支持类型有:QR Code, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar等。后续作者移植到.NET平台,进行 了许多优化和改进,在CSharp中可以直接使用 ZXing.Net 库来实现二维码的生成和解析功能。
应用步骤如下:
1. 安装 ZXing.Net 库:
通过 NuGet 包管理器在 Visual Studio 中安装 “ZXing.Net” 包和“ZXing.Net Bindings for Windows Compatibility”包。
还可以使用包管理器控制台执行以下命令:
Install-Package ZXing.Net
Install-Package ZXing.Net Bindings for Windows Compatibility
2. 生成二维码:
使用 ZXing 的“BarcodeWriter”类来生成二维码。可以设置二维码的格式、大小、前景色和背景色等。
引入命名空间
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using ZXing.QrCode.Internal;
using ZXing.Windows.Compatibility;
生成Bitmap,可以设置二维码的高度,宽度,编码格式等信息。
public static Bitmap CreateQrCode1(string data, int width, int height)
{
var writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
DisableECI = true,
CharacterSet = "UTF-8",
Width = width,
Height = height,
Margin = 0,
ErrorCorrection = ErrorCorrectionLevel.L
}
};
var bitmap = writer.Write(data);
return bitmap;
}
将Bitmap转为ImageSource,可在Image中显示。
public ImageSource ChangeBitmapToImageSource(Bitmap bitmap)
{
IntPtr hBitmap = bitmap.GetHbitmap();
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
3. 集成到 WPF 或 Windows Forms 应用程序:
可以在 WPF 或 Windows Forms 应用程序中显示生成的二维码。可以将生成的二维码图像设置为图片框(PictureBox)的图像,或者在 WPF 中使用“Image” 控件显示。
WPF的xaml
<Image x:Name="imgQRCode" Width="100" Height="100"/>
C#实现
imgQRCode.Source = ChangeBitmapToImageSource(CreateQrCode1("Hello World", 100, 100));
4. 解析二维码:
使用 ZXing 的“BarcodeReader” 类来解析二维码图像。你可以处理图像文件或图像流。
public string DecodeQRCode(string filePath)
{
// 创建一个BitMatrix对象,该对象表示二维码的位矩阵
BitMatrix bitMatrix = new BitMatrix();
// 使用文件流读取二维码图片
using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedSource(stream)));
// 创建二维码解码器
QRCodeReader qrCodeReader = new QRCodeReader();
// 解码二维码
Result result = qrCodeReader.Decode(binaryBitmap, new ResultPointCallback(point => { }));
// 获取解码结果
string resultText = result.GetText();
return resultText;
}
}
调用“DecodeQRCode”方法
string filePath = "path_to_your_qrcode_image.png";
string decodedText = DecodeQRCode(filePath);
在这个例子中,定义了一个DecodeQRCode方法,它接受二维码图片的文件路径作为输入,并返回解码后的文本。我们使用BinaryBitmap类来读取二维码图片的位矩阵,然后使用QRCodeReader类来解码二维码。最后输出文本。在使用时替换filePath变量的值为实际二维码图片文件路径。
通过上述步骤,使用 C# 和 ZXing.Net ,可以轻松实现二维码的读写功能。另外,这个库提供了许多高级选项,比如定制生成的二维码,包括调整其大小、边距、错误纠正等级等。