C# QR code 生成器應用程序

This article was translated from English: Does it need improvement?
Translated
View the article in English

歡迎閱讀我們的建立指南 QR碼 使用 C#! QR碼和.NET barcode DLL已成為快速且高效地分享信息的流行方式。無論您是在開發應用程式、管理網站,亦或只是尋找一種整潔的方式來分享鏈接,這些代碼都非常實用。在本指南中,我們將演示如何高效生成QR碼。 IronQR,確保您可以生成適合您需求的 QR 碼。該庫使任何使用 C# 的人都能輕鬆創建 QR 碼,而無需進入複雜的邏輯。我們將引導您完成所有步驟,確保您擁有開始所需的一切。無論您是想為應用程式添加 QR 碼生成功能,還是只是對其工作原理感到好奇,您都來對了地方。讓我們開始吧。

在C中安裝QR Code生成庫

C# NuGet 程式庫用于

安裝與 NuGet

Install-Package IronQR
C# NuGet 程式庫用于

安裝與 NuGet

Install-Package IronQR
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

立即開始在您的專案中使用IronPDF,並享受免費試用。

第一步:
green arrow pointer

查看 IronQRNuget 快速安裝和部署。已被下載超過800萬次,它正用C#改變。

C# NuGet 程式庫用于 nuget.org/packages/IronQR/
Install-Package IronQR

在開始之前,我們需要安裝 IronQR NuGet 套件。

Install-Package IronQR

IronQR:C# QR 庫

IronQR 是一個 C# QR Code 庫,用於將 QR 碼功能整合到 .NET 應用程式中。IronQR 支援廣泛的 .NET 版本和專案類型,包括 C#、VB.NET、F#、.NET Core、.NET Standard、.NET Framework 等,確保與各種開發環境相容,例如 Windows、Linux、macOS、iOS 和 Android。

IronQR 具有先進的功能,使其與眾不同,包括能够 讀取 QR 條碼生成 QR 碼支援多種影像格式,並且提供像是調整大小、設計樣式和添加商標至QR碼的自訂選項。

IronQR的主要特點

IronQR的功能超越了基本的QR碼生成,提供了多種特性以滿足各種與QR碼相關的任務需求。讓我們來看看這些功能以及其示例代碼,這些代碼您可以整合到任何類型的.NET應用程序模板中,比如控制台應用程序。

讀取 QR 碼

IronQR 在解碼 QR 碼方面表現出色,為用戶提供了一種簡單的方式來訪問嵌入 QR 碼中的資訊。您可以快速且準確地提取 QR 碼中的數據,從簡單的 URL 到複雜的嵌入資訊。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-1.cs
using IronQr;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");

// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(inputImage);

// Initialize the QR Code reader
QrReader qrReader = new QrReader();

// Execute QR Code reading on the provided image
IEnumerable<QrResult> qrResults = qrReader.Read(qrInput);

// Assuming you have the QR results in qrResults as before
foreach (var result in qrResults)
{
    Console.WriteLine(result.Value); // Print the QR code content to the console
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")

' Prepare the image for QR code detection
Dim qrInput As New QrImageInput(inputImage)

' Initialize the QR Code reader
Dim qrReader As New QrReader()

' Execute QR Code reading on the provided image
Dim qrResults As IEnumerable(Of QrResult) = qrReader.Read(qrInput)

' Assuming you have the QR results in qrResults as before
For Each result In qrResults
	Console.WriteLine(result.Value) ' Print the QR code content to the console
Next result
VB   C#

我們使用以下的QR碼進行掃描:

C# 建立 QR Code 圖片

我們得到了這個輸出:

C# QR 值

該過程首先通過引入必要的命名空間來開始,IronQR 和 IronSoftware.Drawing,特別提到來自 IronSoftware.Drawing 命名空間的 Color 以處理圖像操作。

在進入 QR 碼讀取過程之前,必須通過將許可證密鑰分配給 IronQR.License.LicenseKey 來激活軟件。然後代碼繼續使用 AnyBitmap.FromFile 從文件中加載 QR 碼圖像。("QRCode.png")加載影像後,下一步是準備它進行 QR 碼檢測。這個準備工作是通過創建一個 QrImageInput 物件來完成的,該物件用作影像的容器。

這個功能的核心在於 QrReader 類別,它是用來執行 QR 碼讀取操作的。讀取器會分析已準備好的影像 qrInput,搜索其中包含的任何 QR 碼。這個操作的結果是一個 QrResult 物件的集合,每個物件代表影像中檢測到的一個 QR 碼。

為了存取並利用 QR 碼中編碼的資料,程式碼通過 foreach 迴圈遍歷結果集合。每個 QrResult 物件包含諸如 QR 碼值之類的屬性,可以被存取和顯示。

自訂 QR 讀取模式選項

IronQR 提供了多種從圖像中讀取 QR 碼的方法,使其能滿足各種需求。一個選項是混合掃描模式,它在速度和準確性之間取得平衡,適用於 QR 碼不清晰或部分被遮擋的情況。

另一個選項是機器學習 (機器學習) 掃描模式,使用智能技術讀取受損或通常不易讀取的 QR 碼。這種模式非常適合在 QR 碼難以檢測的艱難情況下使用。

最後,是基本掃描模式,這是掃描清晰且簡單 QR 碼的最快、最簡單的方法。當需要快速結果並且 QR 碼易於讀取時,這是最佳選擇。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-2.cs
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");

QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);

QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);

QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")

Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mixedScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mixedScanInput)

Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mlScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mlScanInput)

Dim basicScanInput As New QrImageInput(inputImage, QrScanMode.OnlyBasicScan)
Dim basicScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(basicScanInput)
VB   C#

掃描高級 QR 碼

IronQR 的高級 QR 碼掃描功能旨在提供全面且細緻的 QR 碼掃描和解碼方法。這組功能不僅超越基本的 QR 碼讀取功能,還提供更深入的互動和資料擷取。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-3.cs
using IronQr;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

var imageToScan = AnyBitmap.FromFile("QRCode.png");

QrImageInput qrInput = new QrImageInput(imageToScan);

QrReader qrScanner = new QrReader();

IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);

foreach (QrResult qrResult in scanResults)
{

    Console.WriteLine(qrResult.Value);

    Console.WriteLine(qrResult.Url);

    foreach (IronSoftware.Drawing.PointF coordinate in qrResult.Points)
    {
        Console.WriteLine($"{coordinate.X}, {coordinate.Y}");
    }
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

Dim imageToScan = AnyBitmap.FromFile("QRCode.png")

Dim qrInput As New QrImageInput(imageToScan)

Dim qrScanner As New QrReader()

Dim scanResults As IEnumerable(Of QrResult) = qrScanner.Read(qrInput)

For Each qrResult As QrResult In scanResults

	Console.WriteLine(qrResult.Value)

	Console.WriteLine(qrResult.Url)

	For Each coordinate As IronSoftware.Drawing.PointF In qrResult.Points
		Console.WriteLine($"{coordinate.X}, {coordinate.Y}")
	Next coordinate
Next qrResult
VB   C#

當我們使用 IronQR 掃描 QR 碼時,這是輸出的結果:

C# 讀取 QR Code 結果

我們使用以下的QR Code:

C# 建立 QR Code 圖片

每個 QrResult 物件提供解碼後的數據存取 (價值)任何嵌入的網址 (URL),與空間座標 (點) 圖片中 QR code 的內容。

對於每個檢測到的 QR code,IronQR 提供詳細資訊,包括精確內容和 QR code 中包含的任何網址。此外,該庫還提供 QR code 在圖片中的角點的精確坐標。 (通過Points屬性)要在 C# 應用程式中使用 IronQR 庫來創建 QR 碼生成器,請仔細按照以下步驟操作。此指南將帶您完成設置 Windows 表單應用程式、安裝 IronQR 庫、編寫生成 QR 碼的代碼,以及理解輸出。

第一步:在 Visual Studio 中創建一個 Windows 應用程序

  • 首先在你的電腦上啟動 Visual Studio。
  • 點擊「創建新專案」按鈕。
  • 選擇 Windows Forms App 作爲專案類型。請確保選擇 C# 作爲語言。
Windows Forms 應用程式

輸入專案的名稱並選擇儲存的位置。接著在下一個畫面中選擇 .NET 框架。然後點擊 Create

專案配置

它會在 Visual Studio 中建立並打開一個 Windows 表單應用程式。

第2步:安裝 IronQR 函式庫

現在是時候在專案中安裝 IronQR 函式庫了。您可以通過不同的方法來安裝 IronQR 函式庫。選擇一個適合您偏好的方法:

使用 NuGet 套件管理器安裝

  • 在方案總管中右鍵點擊您的專案,然後選擇 管理 NuGet 套件
  • 在搜索框中輸入 IronQR,然後按 Enter
管理 NuGet 套件

在列表中找到 IronQR,然後點擊旁邊的 Install

安裝 IronQR

使用NuGet包管理控制台安裝

進入 工具 > NuGet包管理器 > 套件管理控制台

NuGet 套件管理器

鍵入 Install-Package IronQR,然後按 Enter。

安裝 IronQR

步驟3:設計前端

QR Code 生成器

3.1 標題欄位

生成 QR 碼

一啟動 QR 碼生成器應用程式,使用者立即會看到一個引人注目的標題「QR Generator IronQR」,設置在一種粗體且權威的字型中。選擇了字型 Agency FB,因其清晰、現代的線條傳達了效率和精確性的感覺。標題的字體大小為 48 點,既顯眼又有力,引起使用者的注意,並牢牢確立了應用程式的標識。

3.2 輸入部分

QR Code 的文字輸入

QR Code 文字輸入

在輸入部分的核心是一個簡單但基本的元件:文字輸入框。在這裡,用戶可以輸入他們希望編碼到QR碼中的數據。該框非常寬敞,可以容納大量文字,並且位於頁面頂部顯眼的位置。

Logo 選擇

選擇標誌

在文字輸入框下方,“選擇標誌”區域允許進行額外的自定義。用戶可以上傳將嵌入到 QR 碼中的標誌,以增強品牌識別或個性化代碼。旁邊的圖片框提供了所選標誌的預覽,從而提供即時的視覺反饋。

顏色配置

背景顏色

向右移動,界面會顯示顏色選擇選項。兩個按鈕,一個用於選擇QR碼的顏色,另一個用於選擇背景顏色,使用戶能夠自訂其QR碼的色調。這些按鈕旁邊的富文本框顯示當前選擇的顏色。

輸入部分的精心佈局,包含文本、標誌和顏色選項,反映了在創建QR碼時對用戶優先事項的清晰理解。它結合了功能性和靈活性,使用戶能夠快速高效地輸入必要信息,同時也提供了創造性的空間。

3.3 樣式參數

樣式

尺寸設置

在顏色自訂工具旁,使用者會找到「尺寸」的輸入框。這個數值設置至關重要,因為它決定了 QR 碼的整體大小,確保它能完美適應預期的顯示環境,無論是名片、傳單還是數位屏幕。

邊距設定

在尺寸輸入旁邊,「邊距」欄位允許使用者指定圍繞 QR 碼的白色空間。邊距不僅僅是一種美觀的選擇;它們是一個功能元素,會影響掃描器對 QR 碼的可讀性。應用程序提供了一個數字上下控制,方便使用者輕鬆調整此參數。

3.4 輸出預覽

QR 輸出

當使用者開始生成 QR 碼時,表單左側標有「輸出」的大圖片框將成為焦點。它用作動態顯示,提供生成 QR 碼的實時預覽。這種即時的視覺反饋對於使用者確認其設計選擇並確保 QR 碼在保存之前符合其期望非常重要。

3.5 動作按鈕

生成 QR

C# 中的 QR Code

「生成 QR」按鈕是應用程式介面中的關鍵控制元素。該按鈕被策略性地放置在表單內,是觸發 QR 碼創建過程的催化劑。單擊此按鈕後,應用程式會採集所有由使用者定義的輸入數據和樣式參數,並開始生成自訂的 QR 碼。

保存 QR Code

節省

一旦生成了QR碼並顯示在輸出預覽區域,"Save QR"按鈕就會啟用。點擊時,它會打開保存對話框,允許用戶選擇所需的文件格式和保存位置。

重置表單

重置

只需單擊此按鈕,即可清除所有先前的輸入和選擇,將所有設置恢復為默認值。這是表單的重要方面,提供了一種快速重新初始化應用程序的方法,而不需手動調整每個選項。

步驟四:編寫後端邏輯

4.1 設置與初始化

首先,應用程式開始包含必要的命名空間:IronQR 和 IronSoftware.Drawing。這些命名空間至關重要,因為它們提供了在應用程式中生成和操作QR碼和顏色所需的功能。自定義的 Color 類別被定義來促進 QR 碼生成中的顏色管理,重寫了預設的 System.Drawing.Color 以確保與 IronQR 的需求兼容。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-4.cs
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;


Imports IronQr
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color
VB   C#

QR_Generator 類別的建構函式在準備應用程式使用方面起著至關重要的作用。應用程式的元件在此初始化,這是設定 Windows Forms 應用程式的使用者介面元素的一個標準步驟。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-5.cs
public QR_Generator()
{
    InitializeComponent();
    SetLicenseKey();
    EnsureDirectoryExists(qrCodesDirectory);
}
'INSTANT VB WARNING: The following constructor is declared outside of its associated class:
'ORIGINAL LINE: public QR_Generator()
Public Sub New()
	InitializeComponent()
	SetLicenseKey()
	EnsureDirectoryExists(qrCodesDirectory)
End Sub
VB   C#

SetLicenseKey: 此方法被用來應用IronQR庫的有效許可金鑰。對於商業應用程序,使用許可金鑰是強制性的,並且可以解鎖IronQR庫的全部功能。

EnsureDirectoryExists: 鑒於需要保存生成的QR碼,此方法確保有專用目錄可用。它會檢查在應用程序的啟動路徑中是否存在“QR Codes”目錄,如果不存在則會創建它。

4.2 許可證密鑰配置

為了確保 IronQR 能無限制地運行,必須應用有效的許可證密鑰。這可以通過 SetLicenseKey 方法來完成,這是一個用於將您的購買或試用許可證密鑰配置到庫中的靜態方法。下面的代碼片段演示了如何設置許可證密鑰:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-6.cs
private static void SetLicenseKey()
{
    IronQr.License.LicenseKey = "YOUR_LICENSE_KEY";
}
Private Shared Sub SetLicenseKey()
	IronQr.License.LicenseKey = "YOUR_LICENSE_KEY"
End Sub
VB   C#

使用您從 Iron Software 獲得的實際授權金鑰替換 "YOUR_LICENSE_KEY"。該方法在 QR_Generator 類的構造函數中調用,確保應用程序啟動後立即應用授權,且在任何 QR 碼生成之前完成。

4.3 目錄管理

此應用程序使用 EnsureDirectoryExists 方法檢查用於存儲 QR 代碼的指定目錄是否存在。如果不存在,則創建該目錄。此方法接收一個字串參數,即要檢查或創建的目錄路徑。以下是其實現方式:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-7.cs
private static void EnsureDirectoryExists(string path)
{
    if (!System.IO.Directory.Exists(path))
    {
        System.IO.Directory.CreateDirectory(path);
    }
}
Private Shared Sub EnsureDirectoryExists(ByVal path As String)
	If Not System.IO.Directory.Exists(path) Then
		System.IO.Directory.CreateDirectory(path)
	End If
End Sub
VB   C#

此方法使用 System.IO 命名空间与文件系统进行交互。首先使用 Directory.Exists 检查指定路径的目录是否存在。如果该目录不存在 (返回 false)然後,它使用 Directory.CreateDirectory 建立目錄。

QR code 目錄的路徑在 QR_Generator 類的建構函數中定義為 qrCodesDirectory,它將應用程式的啟動路徑與 "QR Codes" 資料夾名稱結合起來:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-8.cs
string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
Dim qrCodesDirectory As String = System.IO.Path.Combine(Application.StartupPath, "QR Codes")
VB   C#

4.4 顏色選擇

應用程式在使用者介面上提供兩個按鈕,每個按鈕都與選擇顏色的方法相關聯:btn_color_Click 用於 QR 碼顏色,btn_background_Click 用於背景顏色。這些方法利用顏色對話框讓使用者選擇顏色。

當使用顏色對話框選擇顏色時,所選顏色會轉換為十六進位字串格式。這是必要的,因為 IronQR 庫要求顏色以十六進位格式指定。轉換是通過 ColorToHex 方法完成的:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-9.cs
private string ColorToHex(System.Drawing.Color color)
{
    return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
Private Function ColorToHex(ByVal color As System.Drawing.Color) As String
	Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"
End Function
VB   C#

UpdateColor 方法將選定的顏色轉換為 IronSoftware.Drawing.Color 格式,使用十六進制字串,並根據選擇更新 QR code 的前景或背景顏色。它還會更新 UI 以反映新的顏色選擇:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-10.cs
private void UpdateColor(ref Color targetColor, Control display, bool isBackground)
{
    if (select_color.ShowDialog() == DialogResult.OK)
    {
        var hexColor = ColorToHex(select_color.Color);
        targetColor = new Color(hexColor);
        display.BackColor = select_color.Color;
    }
}
Private Sub UpdateColor(ByRef targetColor As Color, ByVal display As Control, ByVal isBackground As Boolean)
	If select_color.ShowDialog() = DialogResult.OK Then
		Dim hexColor = ColorToHex(select_color.Color)
		targetColor = New Color(hexColor)
		display.BackColor = select_color.Color
	End If
End Sub
VB   C#

4.5 添加標誌

該應用程式包括一個按鈕 (btn_logo_Click) 當點擊時,會打開一個文件對話框,允許用戶選擇一個圖像文件作為標誌使用。此功能對於希望在其QR碼上進行品牌化的企業或個人來說至關重要。以下是標誌選擇和集成過程的處理方式:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-11.cs
private void btn_logo_Click(object sender, EventArgs e)
{
    if (select_logo.ShowDialog() == DialogResult.OK)
    {
        try
        {
            logoBmp = new AnyBitmap(select_logo.FileName);
            selected_logo.Image = Image.FromFile(select_logo.FileName);
        }
        catch (Exception ex)
        {
            ShowError("An error occurred while loading the logo", ex.Message);
        }
    }
}
Private Sub btn_logo_Click(ByVal sender As Object, ByVal e As EventArgs)
	If select_logo.ShowDialog() = DialogResult.OK Then
		Try
			logoBmp = New AnyBitmap(select_logo.FileName)
			selected_logo.Image = Image.FromFile(select_logo.FileName)
		Catch ex As Exception
			ShowError("An error occurred while loading the logo", ex.Message)
		End Try
	End If
End Sub
VB   C#

成功選取影像後,應用程式會嘗試加載它並顯示預覽。然後將 AnyBitmap 物件 logoBmp 設為選取的影像,後續的 QR 生成邏輯將使用此影像。

4.6 二維碼生成

當使用者點擊 "Generate" 按鈕時,生成過程開始。這個按鈕連結到 btn_generate_Click 方法,該方法作為觸發器,調用包含實際生成邏輯的 GenerateQRCode 函數。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-12.cs
private void btn_generate_Click(object sender, EventArgs e)
{
    GenerateQRCode();
}
Private Sub btn_generate_Click(ByVal sender As Object, ByVal e As EventArgs)
	GenerateQRCode()
End Sub
VB   C#

在 GenerateQRCode 方法中,應用程式根據指定的參數生成 QR 碼,包括輸入文本和樣式選項。該方法封裝了 QR 碼的創建,應用所選的顏色、尺寸、邊距,並可選擇性地添加 logo。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-13.cs
private void GenerateQRCode()
{
    try
    {
        var options = new QrOptions(QrErrorCorrectionLevel.High);
        var myQr = QrWriter.Write(txt_QR.Text, options);
        var style = CreateStyleOptions();
        var qrImage = myQr.Save(style);
        var fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png";
        var fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName);
        qrImage.SaveAs(fullPath);
        pictureBox.Image = Image.FromFile(fullPath);
    }
    catch (Exception ex)
    {
        ShowError("An error occurred during QR code generation or saving", ex.Message);
    }
}
Private Sub GenerateQRCode()
	Try
		Dim options = New QrOptions(QrErrorCorrectionLevel.High)
		Dim myQr = QrWriter.Write(txt_QR.Text, options)
		Dim style = CreateStyleOptions()
		Dim qrImage = myQr.Save(style)
		Dim fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png"
		Dim fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName)
		qrImage.SaveAs(fullPath)
		pictureBox.Image = Image.FromFile(fullPath)
	Catch ex As Exception
		ShowError("An error occurred during QR code generation or saving", ex.Message)
	End Try
End Sub
VB   C#

QrOptions 物件定義了錯誤修正等級,增強 QR 碼對破損或遮蔽的抵抗力。CreateStyleOptions 方法生成一個 QrStyleOptions 物件,其中包含用戶的自定義設置,如顏色、尺寸和標誌。以下是該方法的詳細內容:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-14.cs
private QrStyleOptions CreateStyleOptions()
{
    return new QrStyleOptions
    {
        BackgroundColor = bgColor,
        Color = color,
        Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"),
        Margins = Convert.ToInt32(txt_margin.Value),
        Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null
    };
}
Private Function CreateStyleOptions() As QrStyleOptions
'INSTANT VB TODO TASK: Throw expressions are not converted by Instant VB:
'ORIGINAL LINE: return new QrStyleOptions { BackgroundColor = bgColor, Color = color, Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"), Margins = Convert.ToInt32(txt_margin.Value), Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null };
	Return New QrStyleOptions With {
		.BackgroundColor = bgColor,
		.Color = color,
		.Dimensions = If(txt_dimension.Value > 0, Convert.ToInt32(txt_dimension.Value), throw New ArgumentException("Please select valid dimensions!")),
		.Margins = Convert.ToInt32(txt_margin.Value),
		.Logo = If(logoBmp IsNot Nothing, New QrLogo With {
			.Bitmap = logoBmp,
			.Width = 50,
			.Height = 50,
			.CornerRadius = 5
		}, Nothing)
	}
End Function
VB   C#

此方法會創建一個 QrStyleOptions 對象,然後由 QR 代碼生成邏輯使用該對象來應用用戶的偏好。這些選項包括:

  • BackgroundColor 和 Color:這些屬性設置 QR 代碼的背景色和前景色,允許 QR 代碼具有個性化的外觀,可以符合品牌或美學偏好。
  • Dimensions:此屬性決定 QR 代碼的大小,提供靈活性,使 QR 代碼適合不同的上下文或媒介。
  • Margins:此屬性設置 QR 代碼周圍的邊距大小,確保其與周圍元素隔離,這對可擴展性至關重要。
  • Logo:如果用戶選擇包含標誌,則在這裡配置,具有特定的尺寸和角半徑,以獲得精緻的外觀。

4.7 保存 QR 碼

儲存功能由「儲存」按鈕觸發,該按鈕連結到 btn_save_Click 方法。此方法會調用 SaveQRCode,該方法實現了儲存邏輯。該過程包括顯示一個保存文件對話框,允許用戶選擇儲存 QR 碼的文件格式和位置。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-15.cs
private void btn_save_Click(object sender, EventArgs e)
{
    SaveQRCode();
}

private void SaveQRCode()
{
    if (pictureBox.Image == null)
    {
        MessageBox.Show("There is no QR code to save.", "Error");
        return;
    }

    saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg";
    saveFileDialog.Title = "Save QR Code";
    saveFileDialog.FileName = "QRCode";

    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        try
        {
            pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName));
            MessageBox.Show("QR Code has been saved!", "Success");
        }
        catch (Exception ex)
        {
            ShowError("An error occurred while saving the QR code", ex.Message);
        }
    }
}
Private Sub btn_save_Click(ByVal sender As Object, ByVal e As EventArgs)
	SaveQRCode()
End Sub

Private Sub SaveQRCode()
	If pictureBox.Image Is Nothing Then
		MessageBox.Show("There is no QR code to save.", "Error")
		Return
	End If

	saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg"
	saveFileDialog.Title = "Save QR Code"
	saveFileDialog.FileName = "QRCode"

	If saveFileDialog.ShowDialog() = DialogResult.OK Then
		Try
			pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))
			MessageBox.Show("QR Code has been saved!", "Success")
		Catch ex As Exception
			ShowError("An error occurred while saving the QR code", ex.Message)
		End Try
	End If
End Sub
VB   C#

此方法檢查是否有可用的生成QR碼。如果有,它會讓用戶選擇將文件保存為PNG或JPEG格式。DetermineImageFormat函數確保根據用戶選擇的文件擴展名,以正確的格式保存圖像。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-16.cs
private System.Drawing.Imaging.ImageFormat DetermineImageFormat(string filePath)
{
    return System.IO.Path.GetExtension(filePath).ToLower() == ".jpg" ? System.Drawing.Imaging.ImageFormat.Jpeg : System.Drawing.Imaging.ImageFormat.Png;
}
Private Function DetermineImageFormat(ByVal filePath As String) As System.Drawing.Imaging.ImageFormat
	Return If(System.IO.Path.GetExtension(filePath).ToLower() = ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg, System.Drawing.Imaging.ImageFormat.Png)
End Function
VB   C#

這種彈性讓使用者可以選擇最適合他們需求的格式,無論是優先考慮品質 (PNG) 或檔案大小 (JPEG).

4.8 重置應用程式

重置功能與一個「重置」按鈕相關聯,該按鈕會調用 btn_reset_Click 方法。此方法進而調用 ResetFields 函數,該函數旨在清除所有使用者輸入並恢復所有設定的預設值,包括文字欄位、顏色選擇以及所選標誌。

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-17.cs
private void btn_reset_Click(object sender, EventArgs e)
{
    ResetFields();
}

private void ResetFields()
{
    txt_QR.Text = string.Empty;
    txt_dimension.Value = 200;
    txt_margin.Value = 0;
    bgColor = Color.White;
    color = Color.Black;
    txt_selected_color.BackColor = System.Drawing.Color.White;
    txt_selected_bgcolor.BackColor = System.Drawing.Color.Black;
    logoBmp = null;
    selected_logo.Image = null;
    pictureBox.Image = null;
}
Private Sub btn_reset_Click(ByVal sender As Object, ByVal e As EventArgs)
	ResetFields()
End Sub

Private Sub ResetFields()
	txt_QR.Text = String.Empty
	txt_dimension.Value = 200
	txt_margin.Value = 0
	bgColor = Color.White
	color = Color.Black
	txt_selected_color.BackColor = System.Drawing.Color.White
	txt_selected_bgcolor.BackColor = System.Drawing.Color.Black
	logoBmp = Nothing
	selected_logo.Image = Nothing
	pictureBox.Image = Nothing
End Sub
VB   C#

此方法會重置 QR 碼生成中涉及的每個元件。例如,它會清除 QR 碼文字,將尺寸和邊界設置為預設值,並移除任何選定的顏色或標誌。

4.9 錯誤處理

應用程式使用 ShowError 方法以一種使用者友好的方式顯示錯誤訊息。此方法接受兩個參數:標題和訊息,這些參數為使用者提供錯誤的背景。其實作如下:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-18.cs
private static void ShowError(string title, string message)
{
    MessageBox.Show($"{title}: {message}", "Error");
}
Private Shared Sub ShowError(ByVal title As String, ByVal message As String)
	MessageBox.Show($"{title}: {message}", "Error")
End Sub
VB   C#

此方法在應用程式的不同部分中使用,確保當發生錯誤時,能夠及時以清晰和簡潔的訊息通知用戶。例如,如果在加載標誌或生成 QR 碼的過程中發生錯誤,應用程式會調用 ShowError 來顯示有關問題的詳細資訊。

4.10 完整程式碼範例

以下是完整的程式碼,它將幫助您更容易地理解程式碼:

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-19.cs
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

namespace IronQR_QR_Generator_WinForms
{
    public partial class QR_Generator : Form
    {
        string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
        Color bgColor = Color.White;
        Color color = Color.Black;
        AnyBitmap? logoBmp = null;

        public QR_Generator()
        {
            InitializeComponent();
            SetLicenseKey();
            EnsureDirectoryExists(qrCodesDirectory);
        }

        private static void SetLicenseKey()
        {
            IronQr.License.LicenseKey = "License-Key";
        }

        private static void EnsureDirectoryExists(string path)
        {
            if (!System.IO.Directory.Exists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
        }

        private void btn_color_Click(object sender, EventArgs e)
        {
            UpdateColor(ref color, txt_selected_color, false);
        }

        private void btn_background_Click(object sender, EventArgs e)
        {
            UpdateColor(ref bgColor, txt_selected_bgcolor, true);
        }

        private string ColorToHex(System.Drawing.Color color)
        {
            return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
        }
        private void UpdateColor(ref Color targetColor, Control display, bool isBackground)
        {
            if (select_color.ShowDialog() == DialogResult.OK)
            {

                var hexColor = ColorToHex(select_color.Color);
                targetColor = new Color(hexColor);
                display.BackColor = select_color.Color;
            }
        }

        private void btn_logo_Click(object sender, EventArgs e)
        {
            if (select_logo.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    logoBmp = new AnyBitmap(select_logo.FileName);
                    selected_logo.Image = Image.FromFile(select_logo.FileName);
                }
                catch (Exception ex)
                {
                    ShowError("An error occurred while loading the logo", ex.Message);
                }
            }
        }

        private void btn_generate_Click(object sender, EventArgs e)
        {
            GenerateQRCode();
        }

        private void GenerateQRCode()
        {
            try
            {
                var options = new QrOptions(QrErrorCorrectionLevel.High);
                var myQr = QrWriter.Write(txt_QR.Text, options);
                var style = CreateStyleOptions();
                var qrImage = myQr.Save(style);
                var fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png";
                var fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName);
                qrImage.SaveAs(fullPath);
                pictureBox.Image = Image.FromFile(fullPath);
            }
            catch (Exception ex)
            {
                ShowError("An error occurred during QR code generation or saving", ex.Message);
            }
        }

        private QrStyleOptions CreateStyleOptions()
        {
            return new QrStyleOptions
            {
                BackgroundColor = bgColor,
                Color = color,
                Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"),
                Margins = Convert.ToInt32(txt_margin.Value),
                Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null
            };
        }

        private void btn_save_Click(object sender, EventArgs e)
        {
            SaveQRCode();
        }

        private void SaveQRCode()
        {
            if (pictureBox.Image == null)
            {
                MessageBox.Show("There is no QR code to save.", "Error");
                return;
            }

            saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg";
            saveFileDialog.Title = "Save QR Code";
            saveFileDialog.FileName = "QRCode";

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName));
                    MessageBox.Show("QR Code has been saved!", "Success");
                }
                catch (Exception ex)
                {
                    ShowError("An error occurred while saving the QR code", ex.Message);
                }
            }
        }

        private System.Drawing.Imaging.ImageFormat DetermineImageFormat(string filePath)
        {
            return System.IO.Path.GetExtension(filePath).ToLower() == ".jpg" ? System.Drawing.Imaging.ImageFormat.Jpeg : System.Drawing.Imaging.ImageFormat.Png;
        }

        private void btn_reset_Click(object sender, EventArgs e)
        {
            ResetFields();
        }

        private void ResetFields()
        {
            txt_QR.Text = string.Empty;
            txt_dimension.Value = 200;
            txt_margin.Value = 0;
            bgColor = Color.White;
            color = Color.Black;
            txt_selected_color.BackColor = bgColor;
            txt_selected_bgcolor.BackColor = color;
            logoBmp = null;
            selected_logo.Image = null;
            pictureBox.Image = null;
        }

        private static void ShowError(string title, string message)
        {
            MessageBox.Show($"{title}: {message}", "Error");
        }
    }
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color

Namespace IronQR_QR_Generator_WinForms
	Partial Public Class QR_Generator
		Inherits Form

		Private qrCodesDirectory As String = System.IO.Path.Combine(Application.StartupPath, "QR Codes")
		Private bgColor As Color = Color.White
		Private color As Color = Color.Black
		Private logoBmp? As AnyBitmap = Nothing

		Public Sub New()
			InitializeComponent()
			SetLicenseKey()
			EnsureDirectoryExists(qrCodesDirectory)
		End Sub

		Private Shared Sub SetLicenseKey()
			IronQr.License.LicenseKey = "License-Key"
		End Sub

		Private Shared Sub EnsureDirectoryExists(ByVal path As String)
			If Not System.IO.Directory.Exists(path) Then
				System.IO.Directory.CreateDirectory(path)
			End If
		End Sub

		Private Sub btn_color_Click(ByVal sender As Object, ByVal e As EventArgs)
			UpdateColor(color, txt_selected_color, False)
		End Sub

		Private Sub btn_background_Click(ByVal sender As Object, ByVal e As EventArgs)
			UpdateColor(bgColor, txt_selected_bgcolor, True)
		End Sub

		Private Function ColorToHex(ByVal color As System.Drawing.Color) As String
			Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"
		End Function
		Private Sub UpdateColor(ByRef targetColor As Color, ByVal display As Control, ByVal isBackground As Boolean)
			If select_color.ShowDialog() = System.Windows.Forms.DialogResult.OK Then

				Dim hexColor = ColorToHex(select_color.Color)
				targetColor = New Color(hexColor)
				display.BackColor = select_color.Color
			End If
		End Sub

		Private Sub btn_logo_Click(ByVal sender As Object, ByVal e As EventArgs)
			If select_logo.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
				Try
					logoBmp = New AnyBitmap(select_logo.FileName)
					selected_logo.Image = Image.FromFile(select_logo.FileName)
				Catch ex As Exception
					ShowError("An error occurred while loading the logo", ex.Message)
				End Try
			End If
		End Sub

		Private Sub btn_generate_Click(ByVal sender As Object, ByVal e As EventArgs)
			GenerateQRCode()
		End Sub

		Private Sub GenerateQRCode()
			Try
				Dim options = New QrOptions(QrErrorCorrectionLevel.High)
				Dim myQr = QrWriter.Write(txt_QR.Text, options)
				Dim style = CreateStyleOptions()
				Dim qrImage = myQr.Save(style)
				Dim fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png"
				Dim fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName)
				qrImage.SaveAs(fullPath)
				pictureBox.Image = Image.FromFile(fullPath)
			Catch ex As Exception
				ShowError("An error occurred during QR code generation or saving", ex.Message)
			End Try
		End Sub

		Private Function CreateStyleOptions() As QrStyleOptions
'INSTANT VB TODO TASK: Throw expressions are not converted by Instant VB:
'ORIGINAL LINE: return new QrStyleOptions { BackgroundColor = bgColor, Color = color, Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"), Margins = Convert.ToInt32(txt_margin.Value), Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null };
			Return New QrStyleOptions With {
				.BackgroundColor = bgColor,
				.Color = color,
				.Dimensions = If(txt_dimension.Value > 0, Convert.ToInt32(txt_dimension.Value), throw New ArgumentException("Please select valid dimensions!")),
				.Margins = Convert.ToInt32(txt_margin.Value),
				.Logo = If(logoBmp IsNot Nothing, New QrLogo With {
					.Bitmap = logoBmp,
					.Width = 50,
					.Height = 50,
					.CornerRadius = 5
				}, Nothing)
			}
		End Function

		Private Sub btn_save_Click(ByVal sender As Object, ByVal e As EventArgs)
			SaveQRCode()
		End Sub

		Private Sub SaveQRCode()
			If pictureBox.Image Is Nothing Then
				MessageBox.Show("There is no QR code to save.", "Error")
				Return
			End If

			saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg"
			saveFileDialog.Title = "Save QR Code"
			saveFileDialog.FileName = "QRCode"

			If saveFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
				Try
					pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))
					MessageBox.Show("QR Code has been saved!", "Success")
				Catch ex As Exception
					ShowError("An error occurred while saving the QR code", ex.Message)
				End Try
			End If
		End Sub

		Private Function DetermineImageFormat(ByVal filePath As String) As System.Drawing.Imaging.ImageFormat
			Return If(System.IO.Path.GetExtension(filePath).ToLower() = ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg, System.Drawing.Imaging.ImageFormat.Png)
		End Function

		Private Sub btn_reset_Click(ByVal sender As Object, ByVal e As EventArgs)
			ResetFields()
		End Sub

		Private Sub ResetFields()
			txt_QR.Text = String.Empty
			txt_dimension.Value = 200
			txt_margin.Value = 0
			bgColor = Color.White
			color = Color.Black
			txt_selected_color.BackColor = bgColor
			txt_selected_bgcolor.BackColor = color
			logoBmp = Nothing
			selected_logo.Image = Nothing
			pictureBox.Image = Nothing
		End Sub

		Private Shared Sub ShowError(ByVal title As String, ByVal message As String)
			MessageBox.Show($"{title}: {message}", "Error")
		End Sub
	End Class
End Namespace
VB   C#

第五步:運行應用程序

當應用程式執行時,主視窗如提供的圖像所示出現。佈局井然有序,分為輸入、樣式、輸出和操作幾個部分。

應用程式輸出

過程的第一步涉及將數據輸入到「輸入 QR 文本」欄位。這些數據將形成 QR 碼的內容,例如 URL 或文字信息。接下來,為了個性化 QR 碼,我們點擊「選擇標誌」按鈕,選擇一個標誌。選擇後,標誌會顯示在按鈕旁邊的預覽框中,確認其已被納入 QR 碼設計中。

標誌

在選擇標誌後,我們選擇 QR 碼的前景色和背景色。點擊相應的按鈕後,選擇的顏色將會反映在每個按鈕旁邊的顏色顯示框中,立即確認我們的選擇。

顏色選擇器

對於這個特定的QR碼,我們將尺寸設置為500,確保代碼的大小適合我們的需求,並將邊距調整為20,這樣可以在QR碼周圍提供緩衝區,以防止掃描問題。

尺寸

設置所有輸入和樣式選項後,我們通過點擊 "生成 QR" 按鈕來生成 QR 碼。應用程序處理我們的輸入並在輸出圖片框中顯示新創建的 QR 碼。

讀取QR碼輸出

要保存生成的 QR Code,我們只需點擊 "Save QR" 按鈕。此操作會打開一個存檔對話框,允許我們選擇 QR Code 圖片的保存位置和文件格式。

儲存對話框

保存後,成功訊息確認 QR 碼已成功儲存。

成功訊息

如果我們需要重新開始或建立一個新的 QR 碼,點擊「重置表單」按鈕會將表單恢復到原始狀態,清除所有欄位和選擇,準備生成下一個 QR 碼。

重置表單

以下是由 IronQR 生成的已保存 QR 碼:

QR碼輸出

結論

總之,本指南已經帶您完成在 C# 應用程序中使用 IronQR 庫生成 QR 碼的過程。通過拆解從在 Visual Studio 中設置項目、集成 IronQR 庫、設計用戶友好的界面到編寫後端邏輯的步驟,我們展示了將 QR 碼功能添加到您的應用程序中是多麼簡單。

對於那些有意進一步探索 IronQR 功能的人,值得注意的是,IronQR 提供了多種 免費試用 為了幫助您入門。如果您決定將IronQR整合到您的項目中,許可證價格從 $749 起,提供專業級QR碼生成的經濟高效解決方案。