IRONQRの使用

C#でQRコード生成アプリケーションを作成する方法

ジョルディ・バルディア
ジョルディ・バルディア
2024年5月20日
共有:

C# を使用して QR コード を作成するためのガイドへようこそ QRコードと.NETバーコードDLLは、情報を迅速かつ効率的に共有するための一般的な方法となっています。 アプリを開発するにしても、ウェブサイトを管理するにしても、あるいは単にリンクを共有するすてきな方法を探しているにしても、これらのコードは驚くほど便利だ。 このガイドでは、IronQR を使用して効率的にQRコードを生成する方法を説明し、ニーズに合わせたQRコードを生成できるようにします。 このライブラリを使えば、C#(シーシャープ)を使っている人なら誰でも、複雑なロジックに触れることなく、簡単にQRコードを作成することができます。 必要なものがすべて揃っていることを確認しながら、順を追ってご説明します。 あなたのアプリにQRコードジェネレーター機能を追加しようとしている方も、QRコードジェネレーターがどのように作られるのか興味がある方も、このサイトをご覧ください。 さあ、始めましょう。

C#(シーシャープ)でQRコードを作成する方法;

  1. Visual StudioでWindowsフォームアプリケーションを作成する

  2. NuGetを使用してQRライブラリをインストールする

  3. フォームのフロントエンド要素をデザインする

  4. QR生成のロジックを書く5.アプリケーションを実行し、QRコードの作成を開始する

IronQR: C# & num; QRライブラリ

IronQR は、QRコード機能を.NETアプリケーションに統合するためのC# QRコードライブラリです。 IronQRは、C#、VB.NET、F#、.NETコア、.NETスタンダード、.NETフレームワークなど、幅広い.NETバージョンとプロジェクトタイプをサポートし、Windows、Linux、macOS、iOS、Androidなど様々な開発環境との互換性を保証します。

IronQRは、高度な機能で際立っており、QRコードを読み取ることやQRコードを生成すること、複数の画像形式のサポート、リサイズ、スタイリング、QRコードにロゴを追加するなどのカスタマイズオプションが含まれています。

IronQRの主な特徴

IronQRは基本的なQRコード生成機能だけでなく、QRコードに関連する様々なタスクに対応するための機能を提供しています。 コンソールアプリのようなあらゆるタイプの.NETアプリケーションテンプレートに統合できるように、これらの機能とそのサンプルコードを確認してみましょう。

QRコードの読み取り

IronQRはQRコードのデコードに優れており、QRコードに埋め込まれた情報にアクセスする簡単な方法をユーザーに提供します。 簡単なURLから複雑な埋め込み情報まで、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
$vbLabelText   $csharpLabel

スキャンには以下のQRを使用する:

C#でQRコードジェネレーターアプリケーションを作成する方法: 図1 - QRコードPNG画像ファイル

そして、こんな出力が出た:

C#でQRコード生成アプリケーションを作成する方法: 図2 - QRコード出力の読み取り

プロセスは、必要な名前空間IronQrIronSoftware.Drawingを組み込むことから始まり、特に画像操作を扱うためにIronSoftware.Drawing名前空間からColorを指定します。

QRコードの読み取りプロセスに入る前に、IronQr.License.LicenseKeyにライセンスキーを割り当てて、ソフトウェアをアクティブ化することが重要です。 その後、コードはAnyBitmap.FromFile("QRCode.png")を使用してファイルからQRコード画像を読み込みます。

画像が読み込まれたら、次のステップではQRコード検出のための準備をします。 この準備は、画像のコンテナとして機能するQrImageInputオブジェクトを作成することによって行われます。

この機能の核心は、QrReaderクラスにあり、このクラスがインスタンス化され、QRコード読み取り操作を実行します。 リーダーは準備された画像、qrInput を分析し、その中に含まれるQRコードを検索します。 この操作の結果は、画像内で検出されたQRコードをそれぞれ表すQrResultオブジェクトのコレクションです。

QRコードにエンコードされたデータにアクセスして利用するために、コードはforeachループを使用して結果のコレクションを反復します。各QrResultオブジェクトには、QRコードの値などのプロパティが含まれており、それにアクセスして表示することができます。

カスタムQRリードモードオプション

IronQRは画像からQRコードを読み取る様々な方法を提供し、様々なニーズに対応します。 一つのオプションは混合スキャンモードで、これは速度と精度のバランスをとるもので、QRコードが不明瞭または一部隠れている場合に便利です。

もう一つは機械学習 (ML) スキャンモードで、これは損傷していたり、通常の読み取りが難しい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)
$vbLabelText   $csharpLabel

アドバンス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
$vbLabelText   $csharpLabel

これはIronQRを使ってQRコードをスキャンしたときの出力です:

C#でQRコード生成アプリケーションを作成する方法:図3 - QRコード出力をスキャン

以下のQRコードを使用しています:

C#でQRコードジェネレーターアプリケーションを作成する方法: 図4 - QRコード入力

QrResultオブジェクトは、デコードされたデータ(Value)、埋め込まれたURL(Url)、および画像内のQRコードの空間座標(Points)へのアクセスを提供します。

IronQRは検出されたQRコードごとに、正確な内容やQRコードに含まれるURLなどの詳細情報を提供します。 さらに、ライブラリは画像内のQRコードのコーナーの正確な座標をPointsプロパティを通じて提供します。

C#アプリケーションでQRコードのIronQRライブラリを使用してQRコードジェネレータを作成するには、以下の手順に従ってください。 このガイドでは、Windowsフォーム・アプリケーションのセットアップ、IronQRライブラリのインストール、QRコードを生成するコードの記述、出力の理解について説明します。

ステップ1:Visual StudioでWindowsアプリケーションを作成する

  • まず、お使いのコンピューターでVisual Studioを起動します。
  • 「新しいプロジェクトを作成」ボタンをクリックしてください。
  • プロジェクトの種類としてWindows Forms Appを選択します。 言語は必ずC#(シーシャープ)を選択してください。

    C#でQRコードジェネレーターアプリケーションを作成する方法: 図5 - Windows Formsアプリ

  • プロジェクトの名前を入力し、保存場所を選択します。 そして次の画面で、.NETフレームワークを選択する。 次に、作成 をクリックします。

    C#でQRコードジェネレーターアプリケーションを作成する方法: 図6 - プロジェクト設定

    Visual StudioでWindowsフォーム・アプリケーションを作成し、開きます。

ステップ2: IronQRライブラリのインストール

それでは、いよいよIronQRライブラリをプロジェクトにインストールします。 IronQRライブラリはさまざまな方法でインストールできます。 好みに合わせて選んでください:

NuGetパッケージマネージャを使用してインストールする

  • ソリューション エクスプローラーでプロジェクトを右クリックし、NuGet パッケージの管理を選択します。
  • 検索ボックスにIronQRと入力し、Enterキーを押してください。

    C#でQRコードジェネレーターアプリケーションを作成する方法: 図7 - NuGetパッケージの管理

  • リスト内でIronQRを見つけ、その横にあるインストールをクリックします。

    C#でQRコードジェネレーターアプリケーションを作成する方法: 図8 - IronQRをインストール

NuGetパッケージマネージャーコンソールを使用してインストールする

  • ツール > NuGet パッケージ マネージャー > パッケージ マネージャー コンソール に移動します。

    C#でQRコードジェネレーターアプリケーションを作成する方法: 図9 - NuGetパッケージマネージャー

  • Install-Package IronQR と入力し、Enterキーを押します。

    C#でQRコードジェネレーターアプリケーションを作成する方法: 図10 - IronQRをインストール

ステップ3:フロントエンドのデザイン

C#でQRコードジェネレーターアプリケーションを作成する方法: 図11 - QRコードジェネレーター

3.1 タイトルヘッダー

QRコードジェネレーターアプリケーションをC#で作成するには: 図12 - QRコードを生成する

QRコード生成アプリケーションを起動すると、すぐに「QR Generator IronQR」と題された印象的なヘッダーが表示され、太く権威のあるフォントで設定されています。 エージェンシーFBというフォントは、そのクリーンでモダンなラインが、効率性と正確さを伝えるために選ばれた。 48ポイントという大きめのフォントのタイトルは、目立つと同時に主張があり、ユーザーの注意を引きつけ、アプリケーションのアイデンティティをしっかりと確立します。

3.2 入力セクション

QRコードのテキスト入力

C#でQRコードジェネレーターアプリケーションを作成する方法: 図13 - QRコードテキスト入力

入力セクションの中心にあるのは、シンプルかつ基本的な構成要素であるテキスト入力ボックスである。 ここでユーザーは、QRコードにエンコードしたいデータを入力することができる。 ボックスは広々としており、かなりの量のテキストを収容し、上部付近に目立つように配置されている。

ロゴの選択

C#でQRコードジェネレーターアプリケーションを作成する方法: 図14 - ロゴを選択

テキスト入力の下にある "ロゴ選択 "エリアでは、さらにカスタマイズが可能です。 ユーザーは、QRコードに埋め込まれるロゴをアップロードして、ブランド認知度を高めたり、コードをパーソナライズすることができる。 隣接する画像ボックスは、選択したロゴのプレビューを提供し、即座に視覚的なフィードバックを提供します。

カラー構成

C#でQRコード生成アプリケーションを作成する方法: 図15 - 背景色

右側に移動すると、インターフェイスに色選択のオプションが表示される。 QRコードの色と背景色の2つのボタンで、QRコードのパレットをカスタマイズできます。 これらのボタンの隣にあるリッチテキストボックスには、現在選択されている色が表示されます。

テキスト、ロゴ、色のオプションを備えた入力セクションの入念なレイアウトは、QRコードを作成する際のユーザーの優先順位を明確に理解していることを反映している。 機能性と柔軟性を兼ね備えており、ユーザーは必要な情報を素早く効率的に入力できる一方、創造性を発揮する余地もある。

3.3 スタイリング・パラメーター

C#でQRコードジェネレーターアプリケーションを作成する方法: 図16 - スタイリング

寸法設定

カラー・カスタマイズ・ツールに隣接して、ユーザーは "Dimensions"(寸法)の入力を見つける。この数値設定は、QRコードの全体的なサイズを決定するため非常に重要であり、名刺、チラシ、デジタル画面など、意図された表示コンテキストに完全に収まるようにします。

マージン設定

寸法入力の隣にある「余白」フィールドでは、QRコードを囲む余白を指定することができます。 余白は単なる美的選択ではなく、スキャナーによるQRコードの読み取りやすさに影響を与える機能的要素です。 このアプリケーションは、ユーザーがこのパラメーターを簡単に調整できるように、数値によるアップダウンコントロールを提供する。

3.4 出力プレビュー

C#でQRコードジェネレーターアプリケーションを作成する方法: 図17 - QR出力

ユーザーがQRコードの生成を開始すると、フォームの左側にある「出力」と書かれた大きな画像ボックスが焦点となる。 これはダイナミック・ディスプレイとして機能し、生成されたQRコードのリアルタイム・プレビューを提供する。 この即時の視覚的フィードバックは、ユーザーがデザインの選択を確認し、保存する前にQRコードが期待に応えていることを確認するために不可欠である。

3.5つのアクションボタン

QRの生成

C#でQRコード生成アプリケーションを作成する方法: 図18 - C#のQRコード

QR生成」ボタンは、アプリケーションのインターフェイスにおける極めて重要な制御要素です。 フォーム内に戦略的に配置されたこのボタンは、QRコード作成プロセスのきっかけとなります。 このボタンをクリックすると、アプリケーションはユーザーによって定義されたすべての入力データとスタイリングパラメータを受け取り、カスタムQRコードの生成を開始します。

QRコードの保存

C#でQRコードジェネレーターアプリケーションを作成する方法: 図19 - 保存

QRコードが生成され、出力プレビューエリアに表示されると、「QRを保存」ボタンが登場します。 クリックすると保存ダイアログが開き、希望のファイル形式と保存場所を選択できる。

リセットフォーム

QRコードジェネレーターアプリケーションをC#で作成する方法:図20 - リセット

このボタンを1回クリックするだけで、それまでの入力や選択がすべてクリアされ、すべての設定がデフォルト値に戻ります。 これはフォームの重要な側面であり、各オプションを手動で調整することなく、アプリケーションを再初期化する迅速な方法を提供する。

ステップ4:バックエンドロジックを書く

4.1 セットアップと初期化

まず、アプリケーションは必要な名前空間、IronQrIronSoftware.Drawingをインクルードすることから始まります。 これらの名前空間は、アプリケーション内でQRコードや色を生成・操作するために必要な機能を提供するため、必要不可欠です。 カスタムColorクラスはQRコード生成における色管理を容易にするために定義されており、IronQRの要件との互換性を確保するためにデフォルトのSystem.Drawing.Colorをオーバーライドしています。

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
$vbLabelText   $csharpLabel

QR_Generatorクラスのコンストラクタは、アプリケーションを使用するための準備において重要な役割を果たします。 ここでアプリケーションのコンポーネントが初期化されます。これはWindowsフォームアプリケーションの標準的なステップで、フォームの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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

"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
$vbLabelText   $csharpLabel

このメソッドは、ファイルシステムと対話するために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")
$vbLabelText   $csharpLabel

4.4 色の選択

このアプリケーションはユーザーインターフェースに2つのボタンを提供しています。それぞれが色を選択するためのメソッドに関連付けられています。QRコードの色用はbtn\_color\_Click、背景色用はbtn\_background\_Clickです。 これらのメソッドは、カラー・ダイアログ・ボックスを活用してユーザーに色を選ばせる。

カラーダイアログボックスを使用して色を選択すると、選択した色が16進数文字列形式に変換されます。 これは、IronQRライブラリが色を16進数で指定する必要があるためです。 変換は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
$vbLabelText   $csharpLabel

UpdateColor メソッドは、選択された色を16進数文字列を使用して 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

画像の選択に成功すると、アプリケーションはその画像を読み込み、プレビューを表示しようとします。 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

このメソッドは、QrStyleOptionsオブジェクトを作成し、その後、ユーザーの好みに従ってQRコード生成ロジックによって使用されます。 オプションは以下の通り:

  • BackgroundColorColor: これらのプロパティは、QRコードの背景色と前景色を設定し、ブランドや美的な好みに合った個別の外観を可能にします。
  • Dimensions: このプロパティはQRコードのサイズを決定し、異なるコンテキストや媒体におけるQRコードのフィットの柔軟性を提供します。
  • Margins: このプロパティはQRコードの周囲の余白サイズを設定し、周囲の要素から切り離されることを保証します。これはスケーラビリティにとって重要です。
  • Logo: ユーザーがロゴを含めることを選択した場合、洗練された外観のために特定の寸法と隅の半径でここで設定されます。

4.7 QRコードの保存

保存機能は「保存」ボタンによって起動され、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
$vbLabelText   $csharpLabel

このメソッドは、生成された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
$vbLabelText   $csharpLabel

この柔軟性により、ユーザーは品質(PNG)を優先するか、ファイルサイズ(JPEG)を優先するかに応じて、自分のニーズに最も適した形式を選択できます。

4.8 アプリケーションのリセット

リセット機能は「リセット」ボタンにリンクされており、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
$vbLabelText   $csharpLabel

この方法は、QRコード生成に関わる各コンポーネントをリセットする。 例えば、QRコードのテキストを消去し、寸法と余白をデフォルト値に設定し、選択した色やロゴを削除します。

4.9 エラー処理

アプリケーションは、ShowError メソッドを使用して、ユーザーフレンドリーな方法でエラーメッセージを表示します。 このメソッドは、タイトルとメッセージという2つのパラメータを取り、ユーザーにエラーに関するコンテキストを提供する。 その方法はこうだ:

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
$vbLabelText   $csharpLabel

この方法はアプリケーションのさまざまな部分で利用され、エラーが発生した場合、明確で簡潔なメッセージでユーザーに速やかに通知されるようになっている。 例えば、ロゴの読み込み中や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
$vbLabelText   $csharpLabel

ステップ5:アプリケーションの実行

アプリケーションが実行されると、提供された画像に示されているようにメイン・ウィンドウが表示されます。 レイアウトは、入力、スタイリング、出力、アクションの各セクションにきちんと整理されている。

C#でQRコードジェネレーターアプリケーションを作成する方法:図21 - アプリケーション出力

最初のステップでは、"Input QR Text "フィールドにデータを入力する。 このデータは、URLやテキスト情報など、QRコードのコンテンツを形成する。 次に、QRコードをパーソナライズするために、「ロゴを選択」ボタンをクリックしてロゴを選択します。 ロゴを選択すると、ボタンに隣接するプレビューボックスにロゴが表示され、QRコードのデザインに組み込まれていることが確認できます。

C#でQRコードジェネレーターアプリケーションを作成する方法: 図22 - ロゴ

ロゴの選択に続いて、QRコードの前景色と背景色を選択します。 各ボタンをクリックすると、選択した色が各ボタンの横にある色表示ボックスに反映され、選択した色がすぐに視覚的に確認できる。

C#でQRコード生成アプリケーションを作成する方法: 図23 - カラー選択

この特定のQRコードでは、寸法を500に設定し、コードがニーズに適したサイズになるようにし、余白を20に調整してQRコードの周囲にバッファを設け、スキャンの問題を防ぎます。

C#でQRコードジェネレーターアプリケーションを作成する方法: 図24 - 寸法

すべての入力とスタイリング・オプションの設定が完了したら、「Generate QR」ボタンをクリックしてQRコードを生成します。 アプリケーションは入力を処理し、作成したばかりのQRコードを出力画像ボックスに表示します。

C#でQRコードジェネレーターアプリケーションを作成する方法: 図25 - QRコード出力の読み取り

生成されたQRコードを保存するには、「Save QR」ボタンをクリックします。 この操作で保存ダイアログが開き、QRコード画像の保存先とファイル形式を選択できます。

C#でQRコードジェネレーターアプリケーションを作成する方法: 図26 - 保存ダイアログ

保存されると、QRコードが正常に保存されたことを示す成功メッセージが表示されます。

C#でQRコード生成アプリケーションを作成する方法: 図27 - 成功メッセージ

やり直したり、新しいQRコードを作成する必要がある場合、「フォームをリセット」ボタンをクリックすると、フォームが元の状態に戻り、すべてのフィールドと選択項目がクリアされ、次のQRコード生成の準備が整います。

C#でQRコード生成アプリケーションを作成する方法: 図28 - フォームのリセット

保存されたQRコードです:

C#でQRコードジェネレーターアプリケーションを作成する方法: 図29 - QRコード出力

結論

最後に、このガイドではC#アプリケーションでIronQRライブラリを使用してQRコードを生成する手順を説明しました。 Visual Studioでのプロジェクトのセットアップから、IronQRライブラリの統合、ユーザーフレンドリーなインターフェースの設計、バックエンドロジックの記述までのステップを分解することで、アプリケーションにQRコード機能を追加することがいかに身近なものであるかを示しました。

IronQRの機能をさらに探求したい方には、開始するための無料トライアルを提供していることに注目してください。 IronQRをプロジェクトに統合することを決定した場合、ライセンスは$749から始まり、プロフェッショナルレベルのQRコード生成に対する費用対効果の高いソリューションを提供します。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
C#でQRコードを読み取る方法
次へ >
.NET 6でQRCoderとIronQRを比較してQRコードを生成する方法