C#'ta QR Kod Üretici Uygulaması Nasıl Oluşturulur
C# kullanarak QR kodları oluşturma rehberimize hoş geldiniz! QR kodları ve .NET barkod DLL, bilgiyi hızlı ve verimli bir şekilde paylaşmanın popüler yolları haline geldi. İster bir uygulama geliştiriyor olun, ister bir web sitesi yönetiyor olun, ister bağlantıları paylaşmanın düzgün bir yolunu arıyor olun, bu kodlar son derece kullanışlı olabilir. Bu kılavuzda, IronQR kullanarak QR kodlarının nasıl verimli bir şekilde oluşturulacağını göstereceğiz, böylece ihtiyaçlarınıza uygun QR kodları oluşturabilirsiniz. Bu kütüphane, C# ile çalışan herkes için karmaşık mantıklara girmeden QR kodları oluşturmayı kolaylaştırır. Her şeye başlangıç için ihtiyaç duyduğunuz şeyleri sağlayarak sizi adım adım yönlendireceğiz. Bu işlevselliği uygulamanıza eklemek için mi, yoksa sadece nasıl yapıldığını mı merak ediyorsunuz, doğru yerdesiniz. Hadi başlayalım.
C#'ta QR Kod Oluşturucu Nasıl Oluşturulur
- Visual Studio'da bir Windows Forms Uygulaması oluşturun
- NuGet kullanarak QR Kütüphanesini kurun
- Form ön yüz unsurlarını tasarlayın
- QR oluşturma mantığını yazın
- Uygulamayı çalıştırın ve QR kodları oluşturmaya başlayın
IronQR: C# QR Kütüphanesi
IronQR, .NET uygulamalarına QR kodu işlevselliği entegre etmek için bir C# QR Kod kütüphanesidir. IronQR, Windows, Linux, macOS, iOS ve Android gibi çeşitli geliştirme ortamlarında uyumluluğu sağlamak için C#, VB.NET, F#, .NET Core, .NET Standard, .NET Framework gibi çok çeşitli .NET sürümlerini ve proje türlerini destekler.
IronQR, QR kodu okuma ve QR kodu oluşturma yetenekleri, birden fazla resim formatı için destek ve QR kodlarına boyutlandırma, stil ve logolar ekleme gibi özelleştirme seçenekleri dahil olmak üzere gelişmiş özelliklerle ayrılır.
IronQR'nin Bazı Ana Özellikleri
IronQR, temel QR kodu oluşturmanın ötesinde işlevselliğini genişleterek geniş bir QR koduyla ilgili görevi karşılamak için tasarlanmış bir dizi özellik sunar. Bu özellikleri değerlendirelim ve örnek kodlarını kontrol edelim; bunları herhangi bir .NET uygulama şablonu türüne, örneğin bir konsol uygulamasına entegre edebileceksiniz.
QR Kodları Oku
IronQR, QR kodlarını çözme konusunda üstünlük sağlar ve kullanıcılar için QR kodları içindeki bilgilere kolay bir şekilde erişim sağlar. Basit URL'lerden karmaşık gömülü bilgilere kadar QR kodlarından veri çıkartabilir.
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
// Set the license key for IronQR
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);
// Print the value of each QR code found in the image
foreach (var result in qrResults)
{
Console.WriteLine(result.Value);
}
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
// Set the license key for IronQR
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);
// Print the value of each QR code found in the image
foreach (var result in qrResults)
{
Console.WriteLine(result.Value);
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color
' Set the license key for IronQR
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)
' Print the value of each QR code found in the image
For Each result In qrResults
Console.WriteLine(result.Value)
Next result
Tarama için aşağıdaki QR'yi kullanıyoruz:

Ve bu çıktıyı aldık:

Süreç, gerekli namespace'leri ekleyerek başlar: IronQr ve IronSoftware.Drawing, ve görüntü manipülasyonlarını ele almak için IronSoftware.Drawing namespace'inden Color'in özel olarak kullanılmasıyla.
QR kod okuma sürecine dalmadan önce, lisans anahtarınızı IronQr.License.LicenseKey'ye atayarak yazılımı etkinleştirmeniz çok önemlidir. Kod daha sonra dosyadan QR kod görüntüsünü yüklemek için AnyBitmap.FromFile("QRCode.png") kullanıyor.
Resim yüklendiğinde, QR kodu tespiti için hazırlama adımı gelir. Bu hazırlık, görüntü için bir kap olarak hizmet veren bir QrImageInput nesnesi oluşturarak yapılır.
Bu özelliğin özü, QR kod okuma işlemi gerçekleştirmek için kullanılan QrReader sınıfında yatar. Okuyucu hazırlanan görüntüyü analiz eder, qrInput, içerdiği QR kodlarını arar. Bu işlemin sonucu, görüntüde tespit edilen her QR kodunu temsil eden QrResult nesnelerinin bir koleksiyonudur.
QR kodlarına kodlanmış verilere erişmek ve bunları kullanmak için, kod bir foreach döngüsü kullanarak sonuçların koleksiyonu üzerinde yineleniyor. Her QrResult nesnesi, erişilebilecek ve görüntülenebilecek olan QR kodunun değeri gibi özellikler içerir.
Özel QR Okuma Modu Seçenekleri
IronQR, görüntülerden QR kodlarını okumanın farklı yollarını sunar, bu da onu çeşitli ihtiyaçlar için çok yönlü hale getirir. Bir seçenek, hızı ve doğruluğu dengeleyen Karışık Tarama Modu olup, QR kodları tam net değilse veya kısmen gizliyse kullanışlıdır.
Diğeri ise, QR kodlarının zarar gördüğü veya normalde kolay okunmadığı durumlarda okuma akıllı teknolojisi kullanan Makine Öğrenimi (ML) Tarama Modudur. Bu mod, QR kodlarının tespitinin zor olduğu zorlu durumlar için harikadır.
Son olarak, en hızlı ve en basit yolu olan Temel Tarama Modu vardır; açık ve kolay anlaşılan QR kodlarını taramak için. Hızlı sonuçlar gerektiğinde ve QR kodları okunması kolay olduğunda en uygundur.
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";
// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");
// Using mixed scan mode
QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);
// Using machine learning scan mode
QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);
// Using basic scan mode
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;
// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";
// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");
// Using mixed scan mode
QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);
// Using machine learning scan mode
QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);
// Using basic scan mode
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
' Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key"
' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")
' Using mixed scan mode
Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mixedScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mixedScanInput)
' Using machine learning scan mode
Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mlScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mlScanInput)
' Using basic scan mode
Dim basicScanInput As New QrImageInput(inputImage, QrScanMode.OnlyBasicScan)
Dim basicScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(basicScanInput)
Gelişmiş QR Kodları Oku
IronQR'nin gelişmiş QR kodu okuma yetenekleri, QR kodu tarama ve çözme konusunda kapsamlı ve ayrıntılı bir yaklaşım sağlamak için tasarlanmıştır. Bu özellik seti, temel QR kodu okuma işlevselliğinin ötesine geçiyor ve daha derin bir etkileşim ve veri çıkarma düzeyi sağlıyor.
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";
// Load the image to scan
var imageToScan = AnyBitmap.FromFile("QRCode.png");
// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(imageToScan);
// Initialize the QR Code reader
QrReader qrScanner = new QrReader();
// Execute QR Code reading on the provided image
IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);
// Print the value, URL, and coordinates of each QR code found in the image
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;
// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";
// Load the image to scan
var imageToScan = AnyBitmap.FromFile("QRCode.png");
// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(imageToScan);
// Initialize the QR Code reader
QrReader qrScanner = new QrReader();
// Execute QR Code reading on the provided image
IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);
// Print the value, URL, and coordinates of each QR code found in the image
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
' Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key"
' Load the image to scan
Dim imageToScan = AnyBitmap.FromFile("QRCode.png")
' Prepare the image for QR code detection
Dim qrInput As New QrImageInput(imageToScan)
' Initialize the QR Code reader
Dim qrScanner As New QrReader()
' Execute QR Code reading on the provided image
Dim scanResults As IEnumerable(Of QrResult) = qrScanner.Read(qrInput)
' Print the value, URL, and coordinates of each QR code found in the image
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
IronQR kullanarak QR kodunu taradığımızda çıkan sonuç:

Aşağıdaki QR Kodunu kullanıyoruz:

Her QrResult nesnesi, kod çözülen verilere (Value), gömülü URL'lere (Url) ve görüntü içindeki QR kodunun uzaysal koordinatlarına (Points) erişim sağlar.
Tespit edilen her QR kodu için IronQR, QR kodunun içeriği ve içerdiği herhangi bir URL dahil olmak üzere ayrıntılı bilgi sunar. Ayrıca, kütüphane, görüntüdeki QR kodunun köşelerinin tam koordinatlarını (Points özelliğiyle) sağlar.
C# uygulamasında IronQR kütüphanesini kullanarak bir QR Kod üretici oluşturmak için bu adımları dikkatlice izleyin. Bu kılavuz, bir Windows formu uygulaması kurulumunu, IronQR kütüphanesinin yüklenmesini, bir QR kodu oluşturmak için kod yazmayı ve çıktıyı anlamayı gösterecektir.
Adım 1: Visual Studio'da Bir Windows Uygulaması Oluşturun
- Bilgisayarınızda Visual Studio'yu başlatarak başlayın.
- 'Yeni Proje Oluştur' butonuna tıklayın.
- Proje tipi olarak Windows Forms App seçin. Dil olarak C# seçtiğinizden emin olun.

- Projeye bir isim girin ve kaydetmek için konumu seçin. Sonraki ekranda .NET framework seçin. Sonra Oluştur üzerine tıklayın.

Bu, Visual Studio'da bir Windows forms uygulaması oluşturacak ve açacaktır.
Adım 2: IronQR Kütüphanesini Yükleyin
Şimdi projeye IronQR kütüphanesini yükleme zamanı. IronQR kütüphanesini farklı yöntemlerle yükleyebilirsiniz. Tercihinize uygun olanı seçin:
NuGet Paket Yöneticisini Kullanarak Yükleme
- Çözüm Gezgini'nde projenizin üzerine sağ tıklayın ve NuGet Paketlerini Yönet seçeneğini seçin.
- Arama kutusuna IronQR yazın ve Enter'a basın.

- Listedeki IronQR'u bulun ve yanındaki Yükle üzerine tıklayın.

NuGet Paket Yöneticisi Konsolu Kullanarak Yükleme
- Araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu kısmına gidin.

Install-Package IronQryazın ve Enter'a basın.

Adım 3: Arayüz Tasarla

3.1 Başlık Başlığı

QR Kod Üretici uygulamasını başlattıklarında, kullanıcılar hemen 'QR Generator IronQR' başlıklı etkileyici bir başlıkla karşılaşırlar, bu başlık kalın ve otoriter bir yazı tipinde ayarlanmıştır. Temizlik ve modern çizgiler sağlayan Agency FB yazı tipi, etkinlik ve kesinlik hissi ile seçilmiştir. 48 punto büyüklüğündeki başlık hem belirgin hem de iddialı, kullanıcının dikkatini çeker ve uygulamanın kimliğini sağlam bir şekilde oluşturur.
3.2 Giriş Bölümü
QR Kod için Metin Girişi

Giriş bölümünün merkezinde basit fakat temel bir bileşen bulunur: metin giriş kutusu. Burada kullanıcılar, QR kodlarına kodlamak istedikleri verileri girebilir. Kutu, önemli miktarda metni karşılayacak kadar geniştir ve üst kısma yakın bir şekilde konumlanmıştır.
Logo Seçimi

Metin girişinin altında, 'Logo Seç' alanı kişiselleştirilme için ek bir katman sunar. Kullanıcılar, QR kodlarına gömülecek bir logo yükleyebilir, bu, marka tanınırlığını artırır veya kodu kişiselleştirir. Yanındaki resim kutusu, seçilen logonun ön izlemesini sunar, hemen görsel bir geri bildirim sağlar.
Renk Yapılandırması

Sağa doğru hareket ederken, arayüz renk seçimi seçeneklerini sunar. QR kodunun rengi için bir düğme ve arka plan rengi için diğer düğme, kullanıcıların QR kodlarının paletini özelleştirmelerine olanak tanır. Bu düğmelerin yanındaki zengin metin kutuları, şu anda seçili olan rengi gösterir.
Metin, logo ve renk seçenekleri ile giriş kısmının dikkatli düzeni, kullanıcı önceliklerinin QR kodu oluştururken net bir şekilde anlaşılmasını yansıtır. İşlevselliği esneklikle birleştirir, kullanıcılara gerekli bilgileri hızla ve verimli bir şekilde girmelerine olanak tanırken aynı zamanda yaratıcılık için alan sunar.
3.3 Stil Parametreleri

Boyut Ayarları
Renk özelleştirme araçlarının yanına, kullanıcılar 'Boyutlar' girişi bulacaklar. Bu sayısal ayar, QR kodunun genel boyutunu belirlediğinden, iş kartı, afiş veya dijital ekran gibi hedeflenen görüntüleme bağlamına mükemmel bir şekilde uyum sağlamasını garanti eder.
Margin Ayarları
Boyut girişinin yanında, 'Referans Çizgileri' alanı, kullanıcıların QR kodunun çevresini saran beyaz alanı belirtmelerine olanak tanır. Referans çizgileri sadece estetik bir tercih değil; tarayıcılar tarafından QR kodunun okunabilirliğini etkileyen işlevsel bir unsurdur. Uygulama, bu parametreyi kolayca ayarlamak için kullanıcıların kullanabileceği sayısal yukarı-aşağı kontrol sağlar.
3.4 Çıktı Önizleme

Kullanıcı QR kodu üretimini başlattığında, formun sol tarafında, 'Çıktı' olarak etiketlenmiş büyük resim kutusu odak noktası haline gelir. Gerçek zamanlı bir ön izleme sağlayarak, üretilmiş QR kodunu dinamik bir ekran olarak hizmet eder. Bu anlık görsel geri bildirim, kullanıcıların tasarım tercihlerini doğrulaması ve QR kodunun, kaydetmeden önce beklentilerini karşıladığından emin olmaları için önemlidir.
3.5 Eylem Düğmeleri
QR Üret

"QR Üret" düğmesi, uygulamanın yüzeyindeki önemli bir kontrol elemanıdır. Form içinde stratejik olarak konumlandırılan bu düğme, QR kodu oluşturma sürecinin katalizörüdür. Bu düğmeye tıklayınca, uygulama kullanıcının tanımladığı tüm giriş verilerini ve stil parametrelerini alarak özel bir QR kodunun oluşturulmasına başlar.
QR Kod Kaydet

Bir QR kodu üretildiğinde ve çıktı ön izleme alanında gösterildiğinde, "QR Kaydet" düğmesi devreye girer. Tıklandığında bir kaydetme iletişim kutusu açarak kullanıcının istenen dosya formatını ve kaydetme konumunu seçmesine olanak tanır.
Formu Sıfırla

Tek bir tıklama ile, bu düğme tüm önceki girişleri ve seçimleri temizleyerek tüm ayarları varsayılan değerlere geri yükler. Her seçeneği manuel olarak ayarlamadan uygulamayı yeniden başlatmanın hızlı bir yolunu sunarak formun önemli bir yönünü oluşturur.
Adım 4: Arka Uç Mantığını Yazın
4.1 Kurulum ve Başlatma
İlk olarak, uygulama gerekli namespace'lerin dahil edilmesiyle başlar: IronQr ve IronSoftware.Drawing. Bu ad alanları, uygulama içinde QR kodları ve renklerini oluşturmak ve bunları manipüle etmek için gereken işlevsellikleri sağladıklarından, esastır. QR kod üretiminde renk yönetimini kolaylaştırmak için özel bir Color sınıfı tanımlanır, IronQR'ın gereksinimleriyle uyumluluğu sağlamak adına varsayılan System.Drawing.Color'yu değiştirir.
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
QR_Generator sınıfının yapıcı metodu, uygulamanın kullanıma hazırlanmasında kritik bir rol oynar. Windows Forms uygulamalarında, formun arayüz öğelerini kurmak ve düzenlemek için standart bir adım olan bir uygulamanın bileşenlerinin burada başlatılmasıdır.
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
-
SetLicenseKey: Bu yöntem, IronQR kütüphanesi için geçerli bir lisans anahtarı uygulamak için çağrılır. Ticari uygulamalar için lisans anahtarı kullanımı zorunludur ve IronQR kütüphanesinin tüm yeteneklerini açar. EnsureDirectoryExists: Üretilen QR kodlarının kaydedilmesi gerektiği göz önünde bulundurularak, bu yöntem ayrılmış bir dizin olduğundan emin olur. Uygulamanın başlangıç yolunda "QR Kodlar" dizininin mevcut olup olmadığını kontrol eder ve mevcut değilse oluşturur.
4.2 Lisans Anahtarı Yapılandırması
IronQR'nin sınırsız çalışmasını sağlamak için geçerli bir lisans anahtarı uygulanmalıdır. Bu, kütüphaneyi satın aldığınız veya deneme lisans anahtarınızla yapılandırmak için tasarlanmış bir statik yöntem olan SetLicenseKey yöntemiyle gerçekleştirilir. Aşağıdaki kod örneği lisans anahtarını nasıl ayarlayacağınızı göstermektedir:
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
"YOUR_LICENSE_KEY"'yi Iron Software'den aldığınız gerçek lisans anahtarı ile değiştirin. Yöntem, QR_Generator sınıfının yapıcı metodunda çağrılır, bu şekilde lisans, uygulama başlar başlamaz ve herhangi bir QR kod üretiminden önce uygulanır.
4.3 Dizin Yönetimi
Uygulama, QR kodlarının saklanacağı belirtilen dizinin var olup olmadığını kontrol etmek için EnsureDirectoryExists yöntemini kullanır. Eğer yoksa, dizini oluşturur. Bu yöntem, kontrol edilecek veya oluşturulacak dizinin yolu olan bir string parametresi alır. İşte bunun uygulanış şekli:
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
Bu yöntem, dosya sistemi ile etkileşimde bulunmak için System.IO namespace'ini kullanır. Önce, belirtilen yolda dizinin var olup olmadığını Directory.Exists kullanarak kontrol eder. Dizin yoksa (false döner), daha sonra Directory.CreateDirectory kullanarak dizini oluşturur.
QR kodları dizininin yolu, uygulamanın başlangıç yolu ile bir 'QR Kodları' klasör adını birleştiren qrCodesDirectory olarak QR_Generator sınıfının yapıcı metodunda tanımlanır:
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")
4.4 Renk Seçimi
Uygulama, her biri renk seçimi için bir yönteme bağlı kullanıcı arayüzünde iki buton sağlar: QR kod rengi için btn_color_Click ve arka plan rengi için btn_background_Click. Bu yöntemler, kullanıcıların renk seçmesine olanak tanımak için bir renk iletişim kutusundan yararlanır.
Renk iletişim kutusu kullanılarak bir renk seçildiğinde, seçilen renk ardından onaltılık dize biçimine dönüştürülür. Bu gereklidir çünkü IronQR kütüphanesi renklerin onaltılık formatta belirtilmesini gerektirir. Dönüştürme, ColorToHex methodu aracılığıyla yapılır:
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
UpdateColor methodu, seçilen rengi alır ve onu IronSoftware.Drawing.Color formatına onaltılık dize kullanarak dönüştürür, ve seçime bağlı olarak ya QR kodunun ön planını ya da arka planını günceller. Ayrıca kullanıcı arayüzü, yeni renk tercihinin yansıtılması için güncellenir:
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
4.5 Logo Ekleme
Uygulama, tıklandığında kullanıcıya logo olarak kullanılacak bir resim dosyası seçmesine olanak tanıyan bir dosya iletişim kutusu açan bir düğme (btn_logo_Click) içerir. Bu işlevsellik, iş veya kişisel olarak QR kodlarını markalamak isteyenler için kritiktir. İşte logo seçimi ve entegrasyon süreci yönetilmektedir:
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
Bir görüntü başarıyla seçildiğinde, uygulama onu yüklemeye ve bir önizleme sağlamaya çalışır. AnyBitmap nesnesi, logoBmp, daha sonra seçilen görüntü ile ayarlanır, bu da QR üretim mantığı tarafından daha sonra kullanılır.
4.6 QR Kod Üretimi
Üretim süreci, kullanıcı 'Üret' düğmesine tıkladığında başlar ve bu, btn_generate_Click methoduna bağlanmıştır. Bu yöntem, gerçek üretim mantığının bulunduğu GenerateQRCode fonksiyonunu çağırarak bir tetikleyici görevi görür.
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
GenerateQRCode yönteminin içinde, uygulama, girilen metin ve stil seçenekleri gibi belirlenen parametrelere dayanan bir QR kodu oluşturur. Yöntem, seçilen renkleri, boyutları, marjinleri uygulayarak bir QR kodu oluşturmasını kapsar ve isteğe bağlı olarak bir logo ekler.
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
QrOptions nesnesi, QR kodunun hasara veya örtülmeye karşı dayanıklılığını artıran hata düzeltme seviyesini tanımlar. CreateStyleOptions yöntemi, renkler, boyutlar ve logo gibi kullanıcının özel ayarlarını içeren bir QrStyleOptions nesnesi oluşturur. İşte yöntem detayları:
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
Bu yöntem, kullanıcının tercihlerini uygulamak için QR kod üretim mantığı tarafından daha sonra kullanılacak bir QrStyleOptions nesnesi oluşturur. Seçenekler şunları içerir:
BackgroundColorveColor: Bu özellikler, QR kodunun arka plan ve ön plan renklerini ayarlayarak markalama veya estetik tercihlerle uyumlu olabilecek kişiselleştirilmiş bir görünüm sağlar.Dimensions: Bu özellik, QR kodunun boyutunu belirler ve farklı bağlam veya ortamlara nasıl uyduğunu esnek bir şekilde ayarlar.Margins: Bu özellik, QR kodunun etrafındaki kenar boşluğu boyutunu ayarlayarak, çevresindeki elemanlardan izole edilmesini sağlar ve bu ölçeklenebilirlik için önemli olabilir.Logo: Kullanıcı bir logo eklemeyi seçmişse, burada belirli boyutlar ve köşe yarıçapı ile düzenlenir.
4.7 QR Kodunu Kaydetme
Kaydetme işlevi, btn_save_Click yöntemine bağlı olan 'Kaydet' düğmesi ile tetiklenir. Bu yöntem, kaydetme mantığını uygulayan SaveQRCode çağırır. Bu süreç, kaydedilecek QR kodu için kullanıcıya dosya formatı ve kaydedileceği konumu seçmesine olanak tanıyan bir dosya kaydetme iletişim kutusu göstermeyi içerir.
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
Bu yöntem bir oluşturulan QR kodunun mevcut olup olmadığını kontrol eder. Kullanıcının kaliteyi (PNG) öncelikle mi yoksa dosya boyutunu mu (JPEG) öncelikle mi seçmesine bağlı olarak, onun PNG veya JPEG formatında kaydedilmesi için seçenekler sunar. DetermineImageFormat fonksiyonu, kullanıcının seçtiği dosya uzantısına bağlı olarak görüntünün doğru formatta kaydedilmesini sağlar.
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
Bu esnek yapı, kullanıcıların ihtiyaçlarına en uygun olan formatı seçmelerine olanak tanır.
4.8 Uygulamayı Sıfırlama
Sıfırlama işlevi, btn_reset_Click yöntemini çağıran 'Sıfırla' butonu ile bağlıdır. Bu yöntem, sırasıyla, tüm kullanıcı girişlerini temizlemek ve metin alanları, renk seçimleri ve seçilen logo dahil olmak üzere tüm ayarlar için varsayılan değerleri geri yüklemek için tasarlanmış bir fonksiyon olan ResetFields çağırır.
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 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 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
Bu yöntem QR kodu üretimine dahil olan her bileşeni sıfırlar. Örneğin, QR kodu metnini temizler, boyutları ve marjinleri varsayılan değerlere ayarlar ve herhangi bir seçili rengi veya logoyu kaldırır.
4.9 Hata Yönetimi
Uygulama, hata mesajlarını kullanıcı dostu bir şekilde görüntülemek için ShowError yöntemini kullanır. Bu yöntem, kullanıcıya hata hakkında bağlam sağlar, iki parametre alır: bir başlık ve bir mesaj. İşte bunun uygulanış şekli:
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
Bu yöntem, uygulamanın farklı bölümlerinde kullanılır ve bir hata meydana geldiğinde kullanıcının hemen net ve kısa bir mesajla bilgilendirilmesini sağlar. Örneğin, logo yüklenirken veya QR kod üretim süreci sırasında bir hata meydana gelirse, uygulama ShowError çağırarak sorun hakkında ayrıntıları gösterir.
4.10 Tam Kod Örneği
İşte kodu çok daha kolay anlamanızı sağlayacak tam kod:
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
Adım 5: Uygulamayı Çalıştırın
Uygulama çalıştırıldığında, sağlanan görselde gösterildiği gibi ana pencere görünür. Düzen, giriş, stil, çıktı ve eylemler için bölümlere düzgün bir şekilde düzenlenmiştir.

Süreçteki ilk adım, "Giriş QR Metni" alanına veri girmekten oluşur. Bu veriler, URL veya metinsel bilgi gibi QR kodunun içeriğini oluşturacaktır. Sonra, QR kodunu özelleştirmek için "Logo Seç" düğmesine tıklayarak bir logo seçiyoruz. Seçim yapıldıktan sonra, logo, düğme yanındaki önizleme kutusuna yerleştirilerek, QR kodu tasarımına dahil edildiğini onaylar.

Logo seçiminden sonra, QR kodunun ön plan ve arka plan renklerini seçiyoruz. İlgili düğmelere tıklayıp, seçilen renkler, tercihlerimizin anında görsel teyidini veren her bir düğmenin yanındaki renk görüntüleme kutularına yansır.

Bu belirli QR kodu için, ihtiyaçlarımıza uygun bir boyutta olduğundan emin olmak amacıyla boyutları 500 olarak ayarladık ve QR kodunun etrafında bir tampon sağlamak için marjinleri 20'ye ayarladık, böylece tarama sorunlarından kaçınıyoruz.

Tüm girişler ve stil seçenekleri ayarlandığında, "QR Üret" düğmesine tıklayarak QR kodunu üretmeye devam ediyoruz. Uygulama girişlerimizi işler ve çıkış resim kutusunda yeni oluşturulmuş QR kodunu gösterir.

Oluşturulan QR kodunu kaydetmek için, basitçe "QR Kaydet" düğmesine tıklıyoruz. Bu işlem bir kaydetme iletişim kutusu açarak, QR kodu görüntüsü için konumu ve dosya formatını seçmemize olanak tanır.

Kaydettikten sonra, QR kodunun başarıyla saklandığını onaylayan bir başarı mesajı hazır.

Baştan başlamak veya yeni bir QR kodu oluşturmak istersek, "Formu Sıfırla" düğmesine tıklayarak, tüm alanları ve seçimleri temizleyerek, bir sonraki QR kodu üretimine hazır olacak şekilde formu orijinal haline döndürür.

İşte IronQR tarafından üretilen kaydedilmiş QR kodu:

Sonuç
Sonuç olarak, bu kılavuz, C# uygulamasında IronQR kütüphanesini kullanarak QR kodları oluşturma sürecinde size rehberlik etti. Projenizi Visual Studio'da kurmaktan, IronQR kütüphanesini entegre etmeye, kullanıcı dostu bir arayüz tasarlamaktan ve arka uç mantığını yazmaya kadar adımları bölerek, uygulamalarınıza QR kodu işlevi eklemenin ne kadar erişilebilir olduğunu gösterdik.
IronQR'nin sunduğu özellikleri daha fazla keşfetmekle ilgilenenler için, IronQR'nin başlamanıza yardımcı olacak bir ücretsiz deneme sunduğunu belirtmekte fayda var. IronQR'yi projelerinize entegre etmeyi düşünüyorsanız, lisanslar $999'dan başlamaktadır ve profesyonel düzeyde QR kod üretimi için uygun maliyetli bir çözüm sunmaktadır.
Sıkça Sorulan Sorular
C#'ta bir QR Kod oluşturucu uygulaması nasıl oluşturulur?
C#'ta bir QR Kod oluşturucu uygulaması oluşturmak için, Visual Studio'da bir Windows Forms Uygulaması kurarak başlayın. IronQR kütüphanesini NuGet üzerinden yükleyin, metin, logo ve renk için giriş alanları olan arayüzü tasarlayın ve ardından IronQR yöntemlerini kullanarak QR kod oluşturma mantığını uygulayın.
C#'ta QR kodları için mevcut özelleştirme seçenekleri nelerdir?
IronQR, QR kodları için renkleri, boyutları ve kenar boşluklarını değiştirme gibi özelleştirme seçenekleri sunar. Ayrıca, QrStyleOptions nesnesinde ayarları değiştirerek QR kodlarına logolar ekleyebilirsiniz.
C# projesine bir QR Kod kütüphanesini nasıl yüklerim?
Visual Studio'daki NuGet Paket Yöneticisi kullanarak C# projenize IronQR kütüphanesini yükleyin. IronQR'ı arayın ve projenize eklemek için 'Yükle' düğmesini tıklayın.
C#'ta oluşturulan QR kodlarını hangi formatlarda kaydedebilirim?
IronQR ile oluşturulan QR kodlarını PNG ve JPEG dahil olmak üzere çeşitli formatlarda kaydedebilirsiniz, böylece kalite ve dosya boyutu bakımından esneklik sağlar.
C# kütüphanesi kullanarak QR kodları okuyabilir miyim?
Evet, IronQR, QR kodlarını okumak için işlevsellik içerir, böylece QR görüntülerinden verileri etkili bir şekilde çözebilir ve çıkarabilirsiniz.
Bir C# QR Kod kütüphanesi kullanmanın faydaları nelerdir?
IronQR gibi bir C# QR Kod kütüphanesi, çok format destek, özelleştirme seçenekleri ve çeşitli .NET sürümleriyle uyumluluk gibi özellikler sunarak QR kodları oluşturma ve okuma sürecini basitleştirir.
C#'ta QR kodları oluştururken hatalar nasıl yönetilir?
C#'ta try-catch blokları kullanarak QR kod oluşturma uygulamanıza hata yönetimini entegre edebilirsiniz. Bu, QR kod oluşturma sırasında ortaya çıkabilecek herhangi bir sorunun sorunsuz bir şekilde yönetilmesini ve kullanıcı dostu geri bildirim sağlanmasını sağlar.
Bir C# uygulamasında bir QR Kod kütüphanesini kullanmak için lisansa ihtiyacım var mı?
Evet, IronQR'ı sınırlama olmadan kullanabilmek için geçerli bir lisans anahtarına ihtiyacınız olacak. Başlangıç testi için bir deneme sürümü mevcuttur ve tam erişim için profesyonel lisanslar satın alınabilir.
C# ile QR kodlarını nasıl logolarla entegre edebilirim?
IronQR ile QR kodlarına logoları entegre edebilirsiniz, QrStyleOptions nesnesinde logo görüntüsünü ayarlayarak QR kodlarını markalama unsurları ile kişiselleştirmenize olanak tanırsınız.
C#'ta bir QR kod oluşturma uygulamasını nasıl çalıştırabilirim?
C#'taki QR kod oluşturucu uygulamanızı kurup özelleştirdikten sonra, Visual Studio'da uygulamayı çalıştırın, QR kodlarını oluşturun ve bunları istediğiniz formatta kaydetmek için sağlanan seçenekleri kullanın.




