使用 IRONQR

如何使用 .NET MAUI 進行 QR Code 掃描器

發佈 2024年7月1日
分享:

介紹

在無所不在的移動計算時代,QR 碼成為了順暢且快速的信息共享的必要工具。QR 碼應用於從數字支付到產品包裝的各個方面。作為開發人員,為您的移動應用程式添加 QR 碼掃描功能,可以改善用戶體驗並帶來大量機遇。本文將引導您使用 IronQR 創建 .NET MAUI 條碼掃描器和 QR 碼讀取器。

如何使用 .NET MAUI 進行 QR Code 掃描器:圖 1 - IronQR:C# QR Code 庫

如何使用 .NET MAUI 作為 QR Code 掃描器

  1. 安裝 .NET MAUI 和 IronQR NuGet 套件

  2. 建立主頁面佈局

  3. 初始化攝像頭

  4. 捕捉影像

  5. 讀取 QR Code

  6. 顯示結果

  7. 處理權限

了解 .NET MAUI

一個叫做 .NET Multi-platform App UI 的框架 (.NET MAUI) 允許使用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# 的熱重載。借助此功能,開發人員可以即時查看 UI 更改,而不必重啟程式。熱重載有助於快速迭代和即時反饋,加快開發過程。

Blazor 整合

由於 Blazor 和 .NET MAUI 的整合,開發人員可以使用 Blazor 元件來創建混合應用程序。通過這種整合,將 Blazor 的網頁開發功能與 MAUI 在原生移動開發方面的專長相結合,使得創建現代應用程序變得更加靈活。

資源管理

.NET MAUI使跨多個平台的資源管理變得更容易,包含圖片、字體和樣式。通過只定義一次資源,開發者可以將其用於所有目標平台,減少冗餘並確保一致的外觀和感覺。

依賴注入

依賴注入由 .NET MAUI 原生支持,這有助於開發人員構建更可測試和可維護的代碼。構建需要明確職責劃分和模塊化架構的複雜應用程序需要此功能。

IronQR 是什麼?

IronQR 是一個功能強大且靈活的 .NET 庫,用於創建和讀取 QR 碼。通過提供可靠且易於使用的創建和讀取 QR 碼功能,IronQR 簡化了在 .NET 應用程序中使用 QR 碼的過程。包含 IronQR 的 Iron Software 包是一組旨在改善 .NET 編程的庫。

IronQR 的功能

IronQR 是開發者處理 QR 碼的實用工具,因其功能強大而廣受歡迎。以下是其幾個突出的特點:

QR Code 生成

IronQR 讓生成 QR Code 變得簡單。開發人員可以快速有效地從文本、URL 和其他類型的數據生成 QR Code。

  • 優質 QR Code: 該庫生成的 QR Code 質量高、解析度高,適用於各種應用,如數字顯示和打印。
  • 自定義選項: 您可以更改 QR Code 的顏色、大小、邊距和其他外觀方面。

QR Code Reading

IronQR在從圖片和流中讀取QR碼方面提供強大的功能。

  • 支持多種格式: JPEG、PNG、BMP和GIF只是該庫能讀取QR碼的圖片格式中的幾種。
  • 糾錯功能: IronQR內置了先進的錯誤糾正功能,即使QR碼部分損壞或被遮擋,它也能正確讀取。

高級自訂功能

透過 IronQR 所提供的廣泛自訂可能性,開發人員可以創建並解析特別針對其需求設計的 QR 碼。

  • 樣式: 您可以在 QR 碼中添加標誌或照片,並更改背景和前景顏色。
  • 數據編碼: 通過支持多種數據編碼選項,提供與多種信息格式的互操作性。

批次處理

IronQR 支援批次處理,能夠同時創建和讀取多個 QR 碼。需要有效處理大量 QR 碼的應用程序可能會發現此功能特別有幫助。

性能和效率

由於該庫的高性能設計,創建和讀取 QR 碼可以快速完成。對於需要實時處理 QR 碼的應用程式,這一點至關重要。

與 .NET 生態系統的整合

IronQR 因為與 .NET 環境的順暢整合,在 ASP.NET、Windows Forms、WPF 和 Xamarin 應用程式以及其他 .NET 應用程式類型中使用都非常簡單。

開始使用 .NET MAUI 應用程式

安裝 Visual Studio 2022 和 .NET 6 框架是建立 C#.NET MAUI 應用程式所必需的。然後,請按照以下步驟建構 .NET MAUI 應用程式。

開啟 Visual Studio

開啟 Visual Studio 後,點擊「建立新專案」按鈕。接著,使用搜尋欄查找「.NET MAUI 專案」。

如何使用 .NET MAUI 進行 QR Code 掃描:圖 2 - 創建一個新專案

選擇 .NET MAUI 應用程式

從 Visual Studio 的搜尋結果中選擇 .NET MAUI 應用程式範本。一旦選擇了它,為其取一個合適的名稱並決定專案的位置。設置完成後,按下「下一步」按鈕。

如何使用 .NET MAUI 進行 QR 碼掃描:圖 3 - 選擇 .NET MAUI 應用程式範本

選擇框架

選擇所需的框架;不過,建議使用最新版本的 .NET 框架。在 Visual Studio 中選擇框架版本後,點擊 “Create”。

如何使用 .NET MAUI 進行 QR Code 掃描:圖4 - 選擇所需的框架

安裝 IronQR

移至 工具 -> NuGet 套件管理器 下的套件管理器主控台。在顯示的指令欄中,輸入以下指令並按下 ENTER:

Install-Package IronQR

上述命令將安裝我們的庫到正在運行的項目並下載它。

建立 QR 碼掃描器

創建用戶界面是開發 QR 碼掃描器的初始階段。我們的基本用戶界面將包括一個用於啟動 QR 碼掃描過程的按鈕和一個顯示已掃描 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 讀取 QR 碼的功能。我們將編寫一個函數來處理按鈕點擊事件,並使用設備的相機拍攝 QR 碼。

打開 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
VB   C#
  • OnScanButtonClicked: 當用戶點擊「掃描 QR Code」按鈕時,將調用此方法。它調用 CaptureAndScanQrCode 函數以使用設備的相機拍照並搜索 QR 代碼。
  • CaptureAndScanQrCode: 該方法使用設備的相機拍照,然後使用 IronQR 從照片中讀取 QR 代碼。

    • MediaPicker.CapturePhotoAsync: 此 API 使用設備上的相機拍照。

    • MemoryStream: 為了使 IronQR 更容易讀取,捕獲到的圖像被加載到 MemoryStream 中。

    • QrReader.Read: IronQR 方法從圖像信息中讀取 QR 代碼。

    • ImageSource: 如果找到 QR 代碼,QR 代碼文本將顯示在 QrCodeResult 標籤中,並且圖像顯示在 QrCodeImage 元素中。

處理權限

需要合適的授權才能存取設備相機。通過更新iOS和Android專案文件來請求所需的權限。

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" />
XML

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
VB   C#

以下是從 Windows 機器環境生成的輸出。

如何使用 .NET MAUI 掃描 QR 碼:圖 5 - 點擊掃描 QR 碼

掃描完成後,結果將顯示在標籤上。

如何使用.NET MAUI 進行 QR Code 掃描器:圖 6 - 使用 IronQR 掃描 QR Code 的示例輸出

結論

使用 .NET MAUI 和 IronQR 來創建 .NET MAUI QR 碼掃描器是一個簡單的過程,可以極大提升您的移動應用程式的功能。IronQR 龐大的 QR 碼處理功能和 .NET MAUI 的跨平台能力使您能夠為 Windows、iOS、macOS 和 Android 構建高效且可靠的 QR 碼掃描器。

IronQR 和 .NET MAUI 一起提供了一個流暢的開發過程,讓您可以專注於創建尖端功能和製作高質量的應用程式。本教程提供了一個堅實的基礎,無論您是創建一個簡單的 QR 碼掃描器還是具有先進 QR 碼功能的複雜應用程式。

如果您想進一步簡化開發過程,請考慮使用 IronQR 來滿足您的 QR 碼需求。即使在困難的情況下,IronQR 也能生成清晰、可擴展的 QR 碼,並具有強大的讀取能力。IronQR 提供適合獨立開發者、小團隊和大公司的可自定授權選項,滿足您的獨特需求。請訪問購買授權並查看詳細的價格信息,加入依賴 Iron Software 作為其重要開發工具的眾多開發者行列,並通過 IronQR 提升您的應用程式。

在 Iron Software 套件中的其他類似產品中,IronBarcode 是掃描條碼的對應產品。使用 IronBarcode,您可以無縫整合高效的條碼掃描功能到您的應用程式中,是滿足條碼掃描相關需求的理想選擇。

下一個 >
如何在 ASP .NET Core 中生成 QR Code

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 17,050 查看許可證 >