在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在移动计算无处不在的时代,二维码正成为顺利、快速共享信息的必要工具。 从数字支付到产品包装,QR 码无所不在。 作为开发人员,在移动应用程序中添加 QR 码扫描功能可以改善用户体验,并带来大量机会。 本文将向您介绍如何使用IronQR创建一个 .NET MAUI 条形码扫描器和二维码阅读器。
安装 .NET MAUI 和 IronQR NuGet 软件包
创建主页布局
初始化相机
捕捉图像
阅读二维码
显示结果
一个名为 .NET 多平台应用程序用户界面的框架(.NET MAUI).NET》允许使用 C# 和 XAML 创建本地跨平台应用程序。 现在,开发人员只需使用一个代码库,就可以制作适用于 Windows、macOS、iOS 和 Android 的应用程序。 .NET MAUI 提供了访问本地设备功能的统一 API,使创建跨平台应用程序的过程更加轻松。 以下是 .NET MAUI 使其成为开发人员有效工具的一些关键要素:
使用 .NET MAUI 将特定平台的项目合并为统一的项目结构。 由于这种统一,开发人员可以在一个项目中处理所有特定平台的资源和代码,从而简化开发流程。
您可以设计单个用户界面(用户界面)该译文可在多个平台上使用 .NET MAUI。 该框架提供了一系列布局和控件,与 Windows、macOS、iOS 和 Android 兼容。
在 .NET MAUI 的帮助下,开发人员可以利用本地 API 和特定平台的功能,从而能够使用传感器、摄像头、GPS 和其他设备功能。 通过这样做,应用程序可以跨平台共享大部分代码库,但仍能提供本地用户体验。
.NET MAUI 支持 XAML 和 C# 的热重载。 借助这一功能,开发人员可以即时查看用户界面的变化,而无需重新启动程序。 Hot Reload 可促进快速迭代和即时反馈,从而加快开发进程。
由于 Blazor 与 .NET MAUI 的集成,开发人员可以使用 Blazor 组件创建混合应用程序。有了这种集成,通过将 Blazor 的网络开发能力与 MAUI 在本地移动开发方面的专业知识相结合,创建现代应用程序变得更加灵活。
.NET MAUI 使跨平台的资源管理(包括图片、字体和样式)变得更加容易。 通过只定义一次资源,开发人员可以在所有目标平台上使用这些资源,从而最大限度地减少冗余,并保证外观和感觉的一致性。
.NET MAUI 开箱即支持依赖注入,可帮助开发人员构建测试性和可维护性更强的代码。 构建复杂的应用程序需要明确的职责分工和模块化架构,这就需要这种功能。
用于创建和读取二维码的强大且适应性强的 .NET 库名为 IronQR。 通过为制作和读取 QR 代码提供可靠和用户友好的功能,它简化了在 .NET 应用程序中使用 QR 代码的过程。 包括 IronQR 在内的 Iron Software 软件包是一个旨在改进 .NET 编程的库集合。
IronQR 因其广泛的功能集,对于使用二维码的开发人员来说是一款非常有用的工具。 以下是其几个显著的属性:
IronQR 让创建 QR 代码变得简单。 开发人员可以快速有效地从文本、URL 和其他类型的数据中生成二维码。
IronQR 提供了从图片和数据流中读取二维码的强大功能。
借助 IronQR 提供的广泛定制可能性,开发人员可以创建和解释专门针对其需求的 QR 代码。
IronQR 支持批量处理,可同时创建和读取多个二维码。 需要有效处理大量 QR 代码的应用程序可能会发现这一功能特别有用。
由于该库的高性能设计,创建和读取 QR 代码都可以快速完成。 对于需要实时处理 QR 代码的应用程序来说,这一点至关重要。
IronQR for .NET 可与 ASP.NET、Windows 窗体、WPF 和 Xamarin 应用程序以及其他 .NET 应用程序类型平滑集成,因此使用起来非常简单。
创建 C#.NET MAUI 应用程序需要安装 Visual Studio 2022 和 .NET 6 Framework。 然后,按以下步骤构建 .NET MAUI 应用程序。
打开 Visual Studio 后点击 "创建新项目 "按钮。 接下来,使用搜索栏查找".NET MAUI 项目"。
从 Visual Studio 的搜索结果中选择 .NET MAUI 应用程序模板。 选好之后,给它起一个合适的名字,并决定项目的举办地点。 设置完成后,请按 "下一步 "按钮。
选择必要的框架; 不过,建议使用最新的 .NET Framework 版本。 在 Visual Studio 中选择框架版本后,点击 "创建"。
导航至 "工具 -> NuGet 包管理器 "下的 "包管理器控制台"。 在显示的命令行面板中,键入以下命令并点击 ENTER 键:
Install-Package IronQR
上述命令将把我们的库安装到正在运行的项目中,并下载它。
创建用户界面是开发 QR 码扫描器的初始阶段。 我们的基本用户界面将包括一个启动二维码扫描过程的按钮和一张显示扫描二维码的图片(用户界面)我们将使用 XAML 构建它。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiQrScanner.MainPage">
<StackLayout Padding="20" VerticalOptions="Center">
<Button Text="Scan QR Code" Clicked="OnScanButtonClicked"/>
<Image x:Name="QrCodeImage" WidthRequest="200" HeightRequest="200" VerticalOptions="CenterAndExpand"/>
<Label x:Name="QrCodeResult" Text="Scan Result" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
</StackLayout>
</ContentPage>
然后必须实现使用 IronQR 读取二维码的功能。 我们将编写一个函数来处理按钮点击事件,并用设备的摄像头拍摄二维码。
打开 "MainPage.xaml.cs "后,将以下代码添加到 "MainPage.xaml.cs "中:
using IronQr;
using IronSoftware.Drawing;
using Microsoft.Maui.Controls;
using System;
using System.IO;
using System.Threading.Tasks;
namespace MauiAppQR
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnScanButtonClicked(object sender, EventArgs e)
{
var result = await CaptureAndScanQrCode();
QrCodeResult.Text = result ?? "No QR code found.";
}
private async Task<string> CaptureAndScanQrCode()
{
try
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null)
return null;
using var stream = await photo.OpenReadAsync();
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
var imageData = memoryStream.ToArray();
QrReader reader = new QrReader();
var inputBmp = AnyBitmap.FromBytes(imageData);
QrImageInput imageInput = new QrImageInput(inputBmp);
var barcodeResult = reader.Read(imageInput);
if (barcodeResult?.Count > 0)
{
QrCodeImage.Source = ImageSource.FromStream(() => new MemoryStream(imageData));
return barcodeResult.First().Value;
}
}
catch (Exception ex)
{
Console.WriteLine($"Error scanning QR code: {ex.Message}");
}
return null;
}
}
}
using IronQr;
using IronSoftware.Drawing;
using Microsoft.Maui.Controls;
using System;
using System.IO;
using System.Threading.Tasks;
namespace MauiAppQR
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnScanButtonClicked(object sender, EventArgs e)
{
var result = await CaptureAndScanQrCode();
QrCodeResult.Text = result ?? "No QR code found.";
}
private async Task<string> CaptureAndScanQrCode()
{
try
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null)
return null;
using var stream = await photo.OpenReadAsync();
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
var imageData = memoryStream.ToArray();
QrReader reader = new QrReader();
var inputBmp = AnyBitmap.FromBytes(imageData);
QrImageInput imageInput = new QrImageInput(inputBmp);
var barcodeResult = reader.Read(imageInput);
if (barcodeResult?.Count > 0)
{
QrCodeImage.Source = ImageSource.FromStream(() => new MemoryStream(imageData));
return barcodeResult.First().Value;
}
}
catch (Exception ex)
{
Console.WriteLine($"Error scanning QR code: {ex.Message}");
}
return null;
}
}
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Microsoft.Maui.Controls
Imports System
Imports System.IO
Imports System.Threading.Tasks
Namespace MauiAppQR
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnScanButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
Dim result = Await CaptureAndScanQrCode()
QrCodeResult.Text = If(result, "No QR code found.")
End Sub
Private Async Function CaptureAndScanQrCode() As Task(Of String)
Try
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then
Return Nothing
End If
Dim stream = Await photo.OpenReadAsync()
Dim memoryStream As New MemoryStream()
Await stream.CopyToAsync(memoryStream)
Dim imageData = memoryStream.ToArray()
Dim reader As New QrReader()
Dim inputBmp = AnyBitmap.FromBytes(imageData)
Dim imageInput As New QrImageInput(inputBmp)
Dim barcodeResult = reader.Read(imageInput)
If barcodeResult?.Count > 0 Then
QrCodeImage.Source = ImageSource.FromStream(Function() New MemoryStream(imageData))
Return barcodeResult.First().Value
End If
Catch ex As Exception
Console.WriteLine($"Error scanning QR code: {ex.Message}")
End Try
Return Nothing
End Function
End Class
End Namespace
CaptureAndScanQrCode`:该方法使用设备的摄像头拍照,然后使用 IronQR 从图片中读取二维码。
MediaPicker.CapturePhotoAsync`:此 API 使用设备上的摄像头拍照。
内存流为了便于 IronQR 读取,捕获的图像会加载到一个 MemoryStream
中。
QrReader.Read`:IronQR 方法从图片信息中读取二维码。
QrCodeResult
标签中,图像则显示在 QrCodeImage
元素中。访问设备摄像头需要正确的授权。 通过更新 iOS 和 Android 的项目文件,提出必要的许可请求。
安卓
访问 AndroidManifest.xml
,并包含随后的授权:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在 MainActivity.cs
中请求权限:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Platform.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.RequestPermissions(this, new string[]
{
Android.Manifest.Permission.Camera,
Android.Manifest.Permission.WriteExternalStorage,
Android.Manifest.Permission.ReadExternalStorage
});
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Platform.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.RequestPermissions(this, new string[]
{
Android.Manifest.Permission.Camera,
Android.Manifest.Permission.WriteExternalStorage,
Android.Manifest.Permission.ReadExternalStorage
});
}
Protected Overrides Sub OnCreate(ByVal savedInstanceState As Bundle)
MyBase.OnCreate(savedInstanceState)
Platform.Init(Me, savedInstanceState)
Xamarin.Essentials.Platform.RequestPermissions(Me, New String() { Android.Manifest.Permission.Camera, Android.Manifest.Permission.WriteExternalStorage, Android.Manifest.Permission.ReadExternalStorage })
End Sub
以下是在 Windows 机器环境下生成的输出结果。
扫描后,完成的结果将显示在标签上。
使用 .NET MAUI 和 IronQR 创建一个 .NET MAUI QR 码扫描器是一个简单的过程,可以大大提高移动应用程序的功能。IronQR 处理 QR 代码的强大功能和 .NET MAUI 的跨平台能力让您可以为 Windows、iOS、macOS 和 Android 构建有效可靠的 QR 代码扫描器。
IronQR for .NET 和 .NET MAUI 可共同提供流畅的开发流程,让您专注于创建尖端功能和制作一流的应用程序。 无论您是要创建一个简单的二维码扫描器,还是要创建一个具有尖端二维码功能的复杂应用程序,本教程都将为您的入门提供坚实的基础。
如果您想进一步简化开发流程,请考虑使用 IronQR 满足您的 QR 代码要求。 即使在困难的情况下,IronQR 也能生成清晰、可扩展且具有强大读取能力的 QR 代码。 IronQR 可提供满足您独特需求的解决方案,为个人开发者、小型团队和大型公司提供可定制的 License 选择。 请访问 购买许可证 并查看全面的定价详情,加入依赖 Iron Software 提供基本开发工具的众多开发人员的行列,使用 IronQR 提升您的应用程序。
对于 Iron Software Suite 中的其他类似产品,IronBarcode 可作为扫描条形码的对应工具。 使用 IronBarcode,您可以将高性能条形码扫描功能无缝集成到您的应用程序中,使其成为满足条形码扫描相关需求的绝佳选择。