.NET MAUI 二维码扫描器
简介
.NET MAUI(.NET 多平台应用 UI)是一个跨平台框架,用于基于单一 C# 代码库构建原生移动和桌面应用程序。 一个项目可以同时面向 Android、iOS、macOS 和 Windows 平台,并在所有平台上共享 UI 布局和业务逻辑。 MAUI 与 .NET 生态系统的深度集成,意味着开发人员无需放弃熟悉的工具或语言,即可触达移动端用户。
在本文中,我们将讲解如何在 .NET MAUI 应用程序中使用 IronQR 构建原生二维码扫描器,以解码从设备照片库中选定的二维码。
如何在 .NET MAUI 中构建二维码扫描器
- 安装 IronQR C# 库,在移动设备上扫描二维码
- 在
MainPage.xaml中设计应用程序布局 - 使用
FilePicker让用户从设备中选择 QR 码图片 - 加载图片并将其封装在
QrImageInput中 - 调用
Read方法,并在Label中显示解码后的值
IronQR:C# QR码库
要在应用程序中读取二维码,我们将使用 IronQR .NET 库。 它提供了一个直观的 API,用于从任何图像源(包括移动设备上选定的文件)中检测和解码二维码。IronQR 可在所有 MAUI 目标平台上运行,集成时无需具备 BarCode 领域的专业知识。
IronQR 能够解码标准 QR 码、Micro QR 码和 rMQR 码,并支持以文件、流或位图形式输入图像。 可通过 NuGet 包管理器在几秒钟内完成安装。
在 .NET MAUI 中构建二维码扫描器的步骤
请按照以下步骤在 .NET MAUI 应用程序中添加二维码扫描功能。
前提条件
- 安装了 .NET MAUI 工作负载的 Visual Studio 2022
- 面向 Android 或 iOS 的 .NET MAUI 项目
安装 IronQR
请通过 Visual Studio 中的 NuGet 包管理器控制台安装 IronQR 库。 导航至 Tools > NuGet Package Manager > Package Manager Console 并运行:
Install-Package IronQR
或者,在 NuGet 上搜索 IronQR 并安装最新版本。
前端设计
扫描器界面包含一个用于触发图像选择的按钮、一个用于预览所选二维码的图像视图,以及一个用于显示解码结果的标签。
将 MainPage.xaml 中的内容替换为以下内容:
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiQrScanner.MainPage">
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Button
x:Name="scanButton"
Text="Select QR Code Image"
SemanticProperties.Hint="Select Image"
Clicked="OnScanButtonClicked"
HorizontalOptions="Center" />
<Image
x:Name="qrImage"
SemanticProperties.Description="Selected QR Code"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
x:Name="resultLabel"
Text="Scanned Text: "
HorizontalOptions="Center"
VerticalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiQrScanner.MainPage">
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Button
x:Name="scanButton"
Text="Select QR Code Image"
SemanticProperties.Hint="Select Image"
Clicked="OnScanButtonClicked"
HorizontalOptions="Center" />
<Image
x:Name="qrImage"
SemanticProperties.Description="Selected QR Code"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
x:Name="resultLabel"
Text="Scanned Text: "
HorizontalOptions="Center"
VerticalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
示例输入
请使用下方的二维码作为测试图片。 将其保存到设备中,然后通过应用的文件选择器进行选择。 解码后的值应显示为 https://ironsoftware.com。
示例二维码 — 编码地址:https://ironsoftware.com
使用 IronQR 扫描二维码
点击扫描按钮时,FilePicker 将打开设备的图片库。 用户选择照片后,完整路径会被加载到 AnyBitmap 中,并传递给 QrReader.Read()。 从第一个检测到的二维码中解码出的值将显示在结果标签中。
请在 MainPage.xaml.cs 中添加以下方法:
using IronQr;
using IronSoftware.Drawing;
private async void OnScanButtonClicked(object sender, EventArgs e)
{
// Start scanning QR codes
var images = await FilePicker.Default.PickAsync(new PickOptions
{
PickerTitle = "Pick image",
FileTypes = FilePickerFileType.Images
});
var imageSource = images.FullPath.ToString();
var inputBmp = AnyBitmap.FromFile(imageSource);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(inputBmp);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the input and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display the first result
resultLabel.Text = "Scanned Text: " + results.First().Value;
}
using IronQr;
using IronSoftware.Drawing;
private async void OnScanButtonClicked(object sender, EventArgs e)
{
// Start scanning QR codes
var images = await FilePicker.Default.PickAsync(new PickOptions
{
PickerTitle = "Pick image",
FileTypes = FilePickerFileType.Images
});
var imageSource = images.FullPath.ToString();
var inputBmp = AnyBitmap.FromFile(imageSource);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(inputBmp);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the input and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display the first result
resultLabel.Text = "Scanned Text: " + results.First().Value;
}
Imports IronQr
Imports IronSoftware.Drawing
Private Async Sub OnScanButtonClicked(sender As Object, e As EventArgs)
' Start scanning QR codes
Dim images = Await FilePicker.Default.PickAsync(New PickOptions With {
.PickerTitle = "Pick image",
.FileTypes = FilePickerFileType.Images
})
Dim imageSource = images.FullPath.ToString()
Dim inputBmp = AnyBitmap.FromFile(imageSource)
' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(inputBmp)
' Create a QR Reader object
Dim reader As New QrReader()
' Read the input and get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
' Display the first result
resultLabel.Text = "Scanned Text: " & results.First().Value
End Sub
FilePicker.Default.PickAsync 由 MAUI 平台抽象层提供,可在 Android、iOS 和 Windows 上运行,无需任何平台专属代码。 AnyBitmap.FromFile 负责图像解码,而 QrReader.Read 会返回一个 IEnumerable<QrResult> 对象,其中包含图像中每个 QR 码对应的一条记录。
输出
选择二维码图片即可触发扫描。 解码后的值显示在图片预览下方的结果标签中。
结果标签中显示已选中并解码的二维码值
下载项目
结论
在本文中,我们演示了如何使用 IronQR 在 .NET MAUI 应用程序中构建原生二维码扫描器。 FilePicker API 在 Android、iOS 和 Windows 平台上提供原生图像选择功能,而 IronQR 的 QrReader.Read 则通过单次调用即可完成解码。 通过遍历完整的结果集合(而非调用 .First()),该方法同样适用于每张图片中包含多个QR码的情况。
IronQR 要求在开发和商业使用时获得许可。 许可详情请参见此处。
常见问题解答
.NET MAUI QR代码扫描器教程的内容是什么?
.NET MAUI QR代码扫描器教程提供了如何使用IronQR构建QR代码扫描器的指导,并针对Android、iOS和Windows平台上的.NET MAUI应用程序提供说明。
.NET MAUI QR代码扫描器支持哪些平台?
.NET MAUI QR代码扫描器支持Android、iOS和Windows平台,允许开发人员使用IronQR创建跨平台应用程序。
我如何在.NET MAUI应用程序中选择图像进行QR代码扫描?
您可以在.NET MAUI应用程序中使用FilePicker组件选择图像,然后通过IronQR的QrReader.Read()方法处理这些图像以解码QR代码。
教程中用于解码QR代码的函数是什么?
在教程中,使用IronQR的QrReader.Read()函数从.NET MAUI应用程序中的选定图像解码QR代码。
我可以在跨平台应用程序中使用IronQR进行QR代码扫描吗?
是的,IronQR旨在用于跨平台应用程序,您可以使用.NET MAUI框架为Android、iOS和Windows创建QR代码扫描器。
.NET MAUI是否有特定的QR代码阅读器功能?
是的,教程展示了如何在.NET MAUI应用程序中使用IronQR的QrReader.Read()功能来读取和解码QR代码。
IronQR是否支持在移动设备上扫描QR代码?
IronQR支持在移动设备上扫描QR代码,包括Android和iOS,如.NET MAUI QR代码扫描器教程中所示。
FilePicker在QR代码扫描过程中的作用是什么?
FilePicker用于从设备存储中选择图像,然后传递给IronQR的QrReader.Read()进行QR代码解码的,在.NET MAUI应用程序中。
是否可以使用.NET MAUI将QR代码扫描器集成到Windows应用程序中?
是的,.NET MAUI QR代码扫描器教程展示了如何使用IronQR将QR代码扫描器集成到Windows应用程序中。

