C# ile Barkod Oluşturma ve Barkod Okuma işlemi
Merhaba arkadaşlar bu yazımızda Zxing.NET kütüphanesi kullanarak C#’ta görsel üzerinden barkod nasıl okunur buna değinelim.
Şimdi projemiz için bir Windows form projesi açalım. Burada formumuza 3 adet buton, 1 adet picturebox ve 2 adet textbox ekleyelim. Tasarımım aşağıdaki şekilde gerçekleştirdım.

Bu basit arayüzü bitirdikten sonra işlemlerimize başlayabiliriz. Amacımız picturebox üzerindeki barkodu aslında bir string texte çevirmek.
Daha sonra solution explorer penceresinde projeme sağ tıklıyorum ve Manage Nuget Packages diyorum.

Daha sonra orta kısımda Browse seçip, arama kutusuna Zxing yazıyorum. Zxing.NET kütüphanesini seçip, install diyerek yüklüyorum.

Değişikliklere izin verin. Yükleme bitince başarı ile tamamlandı şeklinde bir uyarı verecek, ayrıca projenizde referanslar alanında Zxing referanslarını da görmelisiniz.

Zxing.NET temelinde JAVA tarafından hazırlanmş olan açık kaynak kodlu bir kütüphanedir. 1 ve 2 boyutlu barkod görüntü işleme amaçlı kullanılmaktadır. Bir çok projede kullanılmaktadır. Bu arada Zxing, deyimi zebra crossing anlamına gelmektedir. Zebraların siyah beyaz çizgilerini bilirsiniz.
Şimdi kodlara geçelim. Öncelikle ne yapacağımı özetlersek; referanslarım içinde üst kısma;
Using Zxing;
Diyerek ilgili referans kütüphanesini ekliyorum. Öncelikle amacım bilgisayarımda var olan bir görsel, yani bir barkod dosyasını açmak olacak. Burada jpg türündeki dosyaları filtreleme yapacağım.
Eğer bir doküman seçildi ise o dokümanı picturebox kontrolüme alacağım. Daha sonra Barcode classından yeni bir nesne türeteceğim. Bu nesne vasıtası ile Picturebox kontrolümde yer alan görseli decode ederek, yani çözerek bir sonuç elde edip, bu sonuç değerini textboxa yazdıracağım. Barkod görselini stringe çevirebilmek için Barcode classı kullanılır.
Bu arada PictureBox üzerinde sağ tıklayarak sağda açılan alanda sizemode alanını ScretchImage yaptım.
İlk olarak barkod oluşturma işlemini ve bu barkodun görsel olarak görmek için kodlarını aşağıdaki gibi yazıyoruz.
private void btnBarkodOlustur_Click(object sender, EventArgs e)
{
string metin = txtBarkodOlustur.Text;
if (!string.IsNullOrEmpty(metin))
{
BarcodeWriter barcodeWriter = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new ZXing.Common.EncodingOptions
{
Width = 800,
Height = 450,
Margin = 10,
PureBarcode = false
}
};
Bitmap barcodeBitmap = barcodeWriter.Write(metin);
pictureBox1.Image = barcodeBitmap;
}
else
{
MessageBox.Show("Metin girin.");
}
txtBarkodOlustur.Text = string.Empty;
}
daha sonrasında bu barkodumuzu kaydetme işlemini yapıyoruz.
private void btnKaydet_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "PNG Image|*.png";
saveFileDialog.Filter = "JPG Image|*.jpg";
saveFileDialog.Title = "Barkodu Kaydet";
saveFileDialog.FileName = "Barkod";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Png);
MessageBox.Show("Barkod kaydedildi.");
}
}
else
{
MessageBox.Show("Önce barkodu oluşturun.");
}
pictureBox1.Image = null;
}


ve daha sonrasında ise bu oluşturulmuş ve kayıt edilmiş barkodumuzu okuma işlemi yapacağız.
private void btnBarkod_Click(object sender, EventArgs e)
{
using (OpenFileDialog DosyaAc = new OpenFileDialog() { Filter = "*.JPG|*.jpg|*.PNG|*.png" })
{
if (DosyaAc.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(DosyaAc.FileName);
BarcodeReader okuyucu = new BarcodeReader();
var sonuc = okuyucu.Decode((Bitmap)pictureBox1.Image);
if (sonuc != null)
{
txtBarkod.Text = sonuc.ToString();
}
}
}
}
belirtiğim 3 işlem ile kodlarımızı tamamlamış olduk. Umarım yararlı bir paylaşım olmuştur.

Kodlamanın tamamı aşağıdaki gibidir.
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ZXing;
namespace DenemeYedekleme
{
public partial class Barkod_Okuyucu : DevExpress.XtraEditors.XtraForm
{
public Barkod_Okuyucu()
{
InitializeComponent();
}
private void btnBarkod_Click(object sender, EventArgs e)
{
using (OpenFileDialog DosyaAc = new OpenFileDialog() { Filter = "*.JPG|*.jpg|*.PNG|*.png" })
{
if (DosyaAc.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(DosyaAc.FileName);
BarcodeReader okuyucu = new BarcodeReader();
var sonuc = okuyucu.Decode((Bitmap)pictureBox1.Image);
if (sonuc != null)
{
txtBarkod.Text = sonuc.ToString();
}
}
}
}
private void btnBarkodOlustur_Click(object sender, EventArgs e)
{
string metin = txtBarkodOlustur.Text;
if (!string.IsNullOrEmpty(metin))
{
BarcodeWriter barcodeWriter = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new ZXing.Common.EncodingOptions
{
Width = 800,
Height = 450,
Margin = 10,
PureBarcode = false
}
};
Bitmap barcodeBitmap = barcodeWriter.Write(metin);
pictureBox1.Image = barcodeBitmap;
}
else
{
MessageBox.Show("Metin girin.");
}
txtBarkodOlustur.Text = string.Empty;
}
private void btnKaydet_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "PNG Image|*.png";
saveFileDialog.Filter = "JPG Image|*.jpg";
saveFileDialog.Title = "Barkodu Kaydet";
saveFileDialog.FileName = "Barkod";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Png);
MessageBox.Show("Barkod kaydedildi.");
}
}
else
{
MessageBox.Show("Önce barkodu oluşturun.");
}
pictureBox1.Image = null;
}
}
}

