使用 IRONQR

如何在C#中創建QR碼生成器應用程式

發佈 2024年5月20日
分享:

歡迎閱讀我們的建立指南QR碼使用 C#! QR 碼和 .NET 條碼 DLL 已成為快速有效共享資訊的流行方式。 如果您正在開發應用程式、管理網站,或只是尋找一個整潔的方式來分享連結,這些代碼可能非常有用。 在本指南中,我們將展示如何使用IronQR,確保您可以生成符合您需求的QR碼。 這個庫讓任何使用C#的人都能輕鬆創建QR碼,無需涉及複雜的邏輯。 我們將引導您完成步驟,確保您擁有開始所需的一切。 不論您是想在您的應用程式中新增 QR 碼生成功能,還是僅僅對它的實現方法感到好奇,您都來對地方了。 讓我們開始吧。

如何在C#中創建QR碼生成器

  1. 在 Visual Studio 中建立 Windows Forms 應用程式

  2. 使用 NuGet 安裝 QR Library

  3. 設計表單前端元素

  4. 編寫 QR 生成邏輯5. 執行應用程式並開始創建 QR 碼

IronQR:C# QR 庫

IronQRIronQR 是一個用於將 QR 碼功能整合進 .NET 應用程式的 C# QR 碼庫。 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碼中提取數據,範圍從簡單的網址到複雜的嵌入信息。

using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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
}
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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

如何在 C# 中創建 QR 碼生成應用程式:圖 1 - QR 碼 PNG 圖片檔案

我們得到了這個輸出:

如何在C#中創建QR碼生成器應用程序:圖2 - 讀取QR碼輸出

此過程首先需納入必要的命名空間,包括IronQrIronSoftware.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 碼易於讀取時,這是最佳選擇。

using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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);
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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 Color = IronSoftware.Drawing.Color
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 碼讀取功能,提供更深層次的互動和數據提取。

using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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}");
    }
}
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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 IronQr.Enum
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color
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碼生成器應用程式:圖3 - 掃描QR碼輸出

我們使用以下的QR Code:

如何在C#中創建 QR 碼生成應用程序:圖4 - QR 碼輸入

每個 QrResult 物件提供對解碼資料的存取權限()任何嵌入的網址(網址),與空間座標(積分)圖像中的QR碼。

對於每個檢測到的QR碼,IronQR提供詳細資訊,包括QR碼中的確切內容和任何包含的網址。 此外,該庫提供影像中 QR 碼角落的精確座標。(通過 Points 屬性).

要在 C# 應用程式中使用 IronQR QR 碼庫創建 QR 碼生成器,請仔細遵循以下步驟。 本指南將引導您設置 Windows 表單應用程式,安裝 IronQR 庫,編寫生成 QR 碼的代碼,並理解輸出。

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

  • 首先在您的電腦上啟動 Visual Studio。
  • 點擊「創建新項目」按鈕。
  • 選擇 Windows Forms App 作為專案類型。 確保選擇C#作為語言。

    如何在 C# 中创建 QR 代码生成器应用程序:图 5 - Windows 窗体应用程序

  • 輸入您的專案名稱並選擇儲存位置。 然後在下一個螢幕上,選擇 .NET framework。 然後點擊建立

    如何在 C# 中建立 QR Code 生成應用程式:圖6 - 專案配置

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

步驟 2:安裝 IronQR 庫

現在是時候在項目中安裝IronQR庫了。 您可以透過不同的方法安裝 IronQR 程式庫。 選擇一個符合您的偏好:

使用 NuGet 套件管理器安裝

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

    如何在 C# 中創建 QR 代碼生成器應用程序:圖 7 - 管理 NuGet 套件

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

    如何在C#中創建一個QR碼生成器應用程序:圖8 - 安裝IronQR

使用 NuGet 套件管理器主控台進行安裝

  • 前往 工具 > NuGet 套件管理員 > 套件管理員主控台

    如何在 C# 中創建 QR 碼生成器應用程序:圖 9 - NuGet 套件管理器

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

    如何在C#中创建QR码生成器应用程式:图10 - 安装IronQR

步驟3:設計前端

如何在 C# 中創建 QR Code 生成器應用程序:圖 11 - QR Code 生成器

3.1 標題欄位

如何在 C# 中創建 QR Code 生成器應用程式:圖 12 - 生成 QR Code

在啟動 QR Code 生成器應用程序時,用戶會立即看到一個名為“QR Generator IronQR”的醒目標題,該標題使用了粗體和權威的字體。 所選的字型Agency FB,以其乾淨、現代的線條而著稱,傳達出效率和精確性的感覺。 在一個相當大的48點字體大小,標題既突出又有力,捕捉用戶的注意力並牢固地確立應用的身份。

3.2 輸入部分

QR Code 的文字輸入

如何在 C# 中創建 QR 碼生成器應用程式: 圖 13 - QR 碼文字輸入

在輸入部分的核心是一個簡單但基本的元件:文本輸入框。 在這裡,使用者可以輸入他們希望編碼到 QR 碼中的數據。 此框架寬敞,可容納大量文字,並顯著地位於頂部附近。

Logo 選擇

在 C# 中如何建立 QR 程式生成器應用程式:圖14 - 選擇標誌

在文字輸入下方的「選擇標誌」區域允許進行額外的自訂層次。 使用者可以上傳商標,該商標將嵌入QR碼中,增強品牌識別或個性化該代碼。 相鄰的圖片框提供了所選標誌的預覽,可提供即時的視覺反饋。

顏色配置

如何用C#創建QR碼生成應用程序:圖15 - 背景顏色

向右移動,介面呈現了顏色選擇的選項。 兩個按鈕,一個用於設定 QR 碼的顏色,另一個用於設定背景顏色,使用者可以自訂他們的 QR 碼色彩配置。 旁邊這些按鈕的富文本框顯示了當前選擇的顏色。

輸入區域的周到布局,包括其文字、標誌和顏色選項,反映出在創建 QR 碼時對用戶優先順序的清晰理解。 它將功能與靈活性結合在一起,讓使用者可以快速且有效地輸入所需的信息,同時也提供了發揮創意的空間。

3.3 樣式參數

如何在 C# 中創建 QR 碼生成器應用程式:圖 16 - 樣式

尺寸設定

在顏色自訂工具旁邊,用戶會找到“尺寸”的輸入。這個數值設置至關重要,因為它決定了 QR 碼的整體大小,確保它完美適合於預期的展示環境,無論是名片、傳單還是數字屏幕。

邊界設定

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

3.4 輸出預覽

如何在C#中創建QR碼生成應用程序:圖17 - QR輸出

一旦用戶啟動 QR 碼生成後,表單左側標有“輸出”的大圖片框將成為焦點。 它充當動態顯示,提供生成的二維碼的實時預覽。 這種即時的視覺回饋對於使用者來說是必須的,以驗證他們的設計選擇並確保 QR 碼符合他們的期望,然後才進行儲存。

3.5 動作按鈕

生成 QR

如何在C#中建立一個QR Code生成器應用程式:圖18 - C#中的QR Code

"生成 QR" 按鈕是應用程式介面中的一個關鍵控制元素。 位於表單中的策略性位置,此按鈕是 QR 碼創建過程的催化劑。 點擊此按鈕後,應用程式將會根據用戶定義的所有輸入數據和樣式參數開始生成自定義QR碼。

保存 QR Code

如何在C#中创建二维码生成器應用程式:圖19 - 儲存

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

重置表單

如何用C#創建一個QR碼生成應用程式:圖20 - 重置

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

步驟四:編寫後端邏輯

4.1 設定與初始化

首先,應用程式包含必要的命名空間:IronQrIronSoftware.Drawing。 這些命名空間是必要的,因為它們提供了在應用程式內生成和操作QR碼和顏色所需的功能。 自定義的 Color 類別被定義以便於在 QR 碼生成中進行顏色管理,覆蓋默認的 System.Drawing.Color 以確保與 IronQR 的需求兼容。

using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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應用程式中設置表單UI元素的標準步驟。

public QR_Generator()
{
    InitializeComponent();
    SetLicenseKey();
    EnsureDirectoryExists(qrCodesDirectory);
}
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 方法來實現的,這是一個靜態方法,旨在使用您購買的或試用的許可證金鑰來配置庫。 下面的代碼片段說明了如何設置許可證密鑰:

private static void SetLicenseKey()
{
    IronQr.License.LicenseKey = "YOUR_LICENSE_KEY";
}
private static void SetLicenseKey()
{
    IronQr.License.LicenseKey = "YOUR_LICENSE_KEY";
}
Private Shared Sub SetLicenseKey()
	IronQr.License.LicenseKey = "YOUR_LICENSE_KEY"
End Sub
VB   C#

"YOUR\_LICENSE\_KEY" 替換為您從 Iron Software 獲得的實際授權金鑰。 該方法在 QR_Generator 類別的建構函式中被調用,確保在應用程式啟動且任何 QR 代碼生成之前就先行啟用許可。

4.3 目錄管理

該應用程式使用 EnsureDirectoryExists 方法來檢查指定的儲存 QR 碼的目錄是否存在。 如果不存在,則創建該目錄。 此方法接受一個 string 參數,即要檢查或創建的目錄路徑。 這是實作方式:

private static void EnsureDirectoryExists(string path)
{
    if (!System.IO.Directory.Exists(path))
    {
        System.IO.Directory.CreateDirectory(path);
    }
}
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碼目錄的路徑在 QR_Generator 類的構造函數中被定義為 qrCodesDirectory,它將應用程式的啟動路徑與一個名為 "QR Codes" 的文件夾名稱結合起來。

string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
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 方法進行轉換:

private string ColorToHex(System.Drawing.Color color)
{
    return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
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 代碼的前景色或背景色。 它還更新了 UI 以反映新的顏色選擇:

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 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 碼的企業或個人至關重要。 以下是徽標選擇和整合過程的處理方式:

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_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 生成 QR 碼

生成過程開始於使用者點擊「Generate」按鈕,該按鈕鏈接到 btn_generate_Click 方法。 此方法作為觸發器,調用包含實際生成邏輯的 GenerateQRCode 函數。

private void btn_generate_Click(object sender, EventArgs e)
{
    GenerateQRCode();
}
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 碼的過程,應用選定的顏色、尺寸、邊距,並可選地添加標誌。

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 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 對象,其中包括用戶的自定義設置,如顏色、尺寸和標誌。 以下是詳細的方法:

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 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 代碼生成邏輯使用以套用使用者的偏好設定。 選項包括:

  • BackgroundColorColor:這些屬性設置 QR 碼的背景色和前景色,允許個性化外觀以配合品牌或美學偏好。
  • Dimensions:此屬性決定 QR 碼的大小,提供 QR 碼在不同情境或媒介中適應的靈活性。
  • Margins:此屬性設置 QR 碼周圍的邊距大小,確保其與周圍元素隔離,這對於可擴展性非常重要。
  • Logo:如果使用者選擇包含標誌,則可以在此配置,指定尺寸和角半徑以達到精緻的外觀。

4.7 儲存 QR 碼

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

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 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 函數確保圖像根據用戶選擇的文件擴展名以正確的格式保存。

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 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 重設應用程式

重置功能與「Reset」按鈕連結,這會調用btn_reset_Click方法。 此方法依次調用 ResetFields,該函數旨在清除所有用戶輸入並恢復所有設置的默認值,包括文本字段、顏色選擇和所選徽標。

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 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 方法以用戶友好的方式顯示錯誤訊息。 此方法接受兩個參數:標題和消息,這為用戶提供了有關錯誤的上下文。 這是實作方式:

private static void ShowError(string title, string message)
{
    MessageBox.Show($"{title}: {message}", "Error");
}
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 完整程式碼範例

以下是完整的代碼,將幫助您更容易理解代碼:

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");
        }
    }
}
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#

步驟 5:運行應用程式

當應用程序執行時,主窗口會如所提供圖片中展示的那樣出現。 佈局整齊地劃分為輸入、樣式、輸出和操作幾個部分。

如何在C#中創建QR碼生成器應用程式: 圖21 - 應用程式輸出

首先,您需要在“輸入 QR 文本”欄位中輸入數據。 此數據將形成 QR 碼的內容,例如 URL 或文字信息。 接下來,要個性化 QR 碼,我們點擊「選擇標誌」按鈕來選擇一個標誌。 選擇後,標誌將顯示在按鈕旁的預覽框中,確認已將其納入 QR 碼設計中。

如何在C#中創建一個QR碼生成器應用程式:圖22 - Logo

在選擇標誌後,我們選擇 QR 碼的前景和背景顏色。 在点击各自的按钮后,所选的颜色会反映在每个按钮旁边的颜色显示框中,使我们能立即 visually 确认我们的选择。

如何在C#中創建 QR Code 生成器應用程式:圖 23 - 顏色選擇

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

如何在C#中創建一個QR碼生成應用程式:圖24 - 尺寸

在設定所有輸入和樣式選項後,我們點擊“生成 QR 碼”按鈕以生成 QR 碼。 應用程式處理我們的輸入並在輸出圖片框中顯示新生成的QR碼。

如何在 C# 中創建 QR 碼生成器應用程式:圖 25 - 讀取 QR 碼輸出

要保存生成的QR碼,我們只需點擊“保存QR”按鈕。 此操作將開啟一個保存對話框,讓我們可以選擇 QR 碼圖片的目的地和文件格式。

如何在C#中創建二維碼生成應用程式:圖26 - 儲存對話框

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

如何在 C# 中創建 QR 碼生成應用程序:圖 27 - 成功消息

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

如何在 C# 中創建 QR Code 生成器應用程式:圖 28 - 重置表單

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

如何在C#中創建QR碼生成應用程序:圖29 - QR碼輸出

結論

總結來說,本指南已經引導您通過在 C# 應用程序中使用 IronQR 庫生成 QR 碼的過程。 通過分解在 Visual Studio 中設置您的項目、整合 IronQR 函式庫、設計用戶友好的介面以及編寫後端邏輯的步驟,我們展示了將 QR 碼功能添加到您的應用程式中的可行性。

對於那些有興趣進一步探索 IronQR 功能的人,值得注意的是 IronQR 提供了一個免費試用開始使用。 如果您決定將IronQR整合到您的項目中,授權起始價為$749,為專業級QR碼生成提供了經濟實惠的解決方案。

< 上一頁
如何在 C# 中读取 QR 代码
下一個 >
如何在 .NET 6 中使用 QRCoder 和 IronQR 生成 QR 碼

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

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