Neredeyse tüm bilgisayarlarda web kamerası bulunmaktadır. Bu kamera aracılığıyla qr code okuma işlemi yapan bir uygulama yapacağız. Öncelikle projeye AFroge, Zen ve zxing kütüphanelerini dahil edelim. Daha sonra aşağıdaki kodları yazalım.
using AForge.Video.DirectShow;
using System;
using System.Drawing;
using System.Windows.Forms;
using ZXing;
namespace qrcodeWebCamOku
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//FilterInfoCollection ve VideoCaptureDevice sınıfından nesnelerimi türettim. FilterInfoCollection cihazımdaki tüm kameraları, yakalama cihazlarını vs bulur. VideoCaptureDevice ise benim kullanacağım kamera için değişkenim olacak.
FilterInfoCollection Cihazlar;
VideoCaptureDevice kameram;
//Formun load olayında bilgisayarıma bağlı olan dahili ve harici kameraları tarıyorum ve comboboxa ekliyorum.
private void Form1_Load(object sender, EventArgs e)
{
Cihazlar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
//FilterInfo cihazdaki görüntü yakalama cihazları hakkında bilgi tutar.
foreach (FilterInfo cihaz in Cihazlar)
{
comboBox1.Items.Add(cihaz.Name);
}
//İlk bulduğu kamera ismi görünsün diye ilk atamayı yaptık, 0 verdik.
comboBox1.SelectedIndex = 0;
string aa = "https://www.maarificedid.com/admin/default.aspx";
Zen.Barcode.CodeQrBarcodeDraw qrcode = Zen.Barcode.BarcodeDrawFactory.CodeQr;
pictureBox1.Image = qrcode.Draw(aa, 50);
}
//Kamerayı başlatmak için yazılan kodlar. NewFrame Her bir görüntü için yeni bir frame başlatır.
private void btnQRKodOku_Click(object sender, EventArgs e)
{
kameram = new VideoCaptureDevice(Cihazlar[comboBox1.SelectedIndex].MonikerString);
kameram.NewFrame += CaptureDevice_NewFrame;
kameram.Start();
timer1.Start();
}
//Kullanılan cihazın metodunu oluşturuyorum
private void CaptureDevice_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
}
//Form kapanırken kameramı kapatıyorum.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (kameram.IsRunning)
{
kameram.Stop();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
//BarcodeReader sınıfı ile QR Barkodumu çözüyorum.
BarcodeReader qrBarkodOkuyucu = new BarcodeReader();
Result sonuc = qrBarkodOkuyucu.Decode((Bitmap)pictureBox1.Image);
//Eğer okuma işlemi başarılı ise timer ve kameramı durduruyorum.
if (sonuc != null)
{
richTextBox1.Text = sonuc.ToString();
timer1.Stop();
if (kameram.IsRunning)
{
kameram.Stop();
}
}
}
}
}
}
|