C# Kameradan Görüntü Alma
C# Kameradan Görüntü Alma
Daha fazla bilgi için : www.gorselprogramlama.com
İlk olarak AForge kütüphanesini buradan indiriyoruz. Daha sonra projemizin solution’una gelip sağ tıklıyoruz. “Add” diyip “Reference” diyip “AForge.Video.VFW.dll” ve “AForge.video.DirectShow.dll” referanslarını ekliyoruz. Ardından Form sınıfımızde en üst kısıma “using AForge.Video” , “using AForge.Video.DirectShow” yazıyoruz ve referans ekleme işlemimiz tamamlanmış oluyor.
AForge Özellikleri: AForge.NET kütüphanesi, Image Processing(Görüntü İşleme) dediğimiz aslında doğası gereği pixel işleme sanatının icra edildiği Open Source(Açık Kaynak) olan bir kütüphanedir.
Örnek: Butona tıklandığında kameranın görüntüsünü Form ekranına kaydedecek bir uygulama yapalım. Bunun için Form Application açalım. İçine iki adet pictureBox, bir adet comboBox ve bir adet button ekleyelim. Kafamız karışmaması için Form elemanlarımızın isimleri ise şu şekilde olsun:
picturebox1=pcBox_video,
pictureBox2=pcBox_photo,
combobox1=cmbxCam,
button1=btnPhotoRecord.
Şimdi cmbxCam elemanımızın içini dolduralım. İlk olarak FilterInfoColletion sınıfından “devices” adlı bir nesne oluşturalım. Bu nesne yardımıyla bilgisayara video elemanlarını okuyalım ardından VideoCaptureDevice sınıfından “camera” bir nesne oluşturalım. okuduğumuz kameraları cmbxcam adlı elemanımızın içine katalım:
public FilterInfoCollection devices; public VideoCaptureDevice camera; private void Form1_Load(object sender, EventArgs e) { devices = new FilterInfoCollection(FilterCategory.VideoInputDevice);//devices nesnemize tüm video giriş elemanlarını attık. foreach (FilterInfo item in devices) { cmbxCam.Items.Add(item.Name);//foreach döngüsü ile cmbxCam elemanımıza sırayla video giriş elemanlarını kaydedelim. } camera = new VideoCaptureDevice();//camera adlı Nesnemizi burada nitelemiş olduk. }
cmbxCam adlı comboboxtaki seçili eleman değiştiği zaman kamera açılması için cmbxCam elemanımızın SelectedIndexChanged metodunu kullanalım:
private void cmbxCam_SelectedIndexChanged(object sender, EventArgs e) { try//Her ihtimale karşı hata fırlatalım { if (camera.IsRunning==false)//"Eğer seçilen Kamera çalışmıyorsa aşağıdaki işlemleri gerçekleştirsin" diyoruz { camera = new VideoCaptureDevice(devices[cmbxCam1.SelectedIndex].MonikerString);//Seçili Kameramıza isim lakap tanıttık. camera.NewFrame += Camera_NewFrame;//Kameramıza çerçeve tanıttık.İlk olarak hata verecektir. Otomatik düzenle kısmından yeni bir "Camera_NemFrame" adlı metot oluşturacağız camera.Start();//Kameramızı başlattık } } catch (Exception exc)//Eğer Hata alırsak aşağıdaki işlemleri gerçekleştirelim { MessageBox.Show(exc.Message + "");//Hata mesajını yayınladık. } }
Camera_NewFrame adlı metodumuzu tanımlayalım:
private void Camera_NewFrame(object sender, NewFrameEventArgs eventArgs) { Bitmap image = (Bitmap)eventArgs.Frame.Clone();//Bitmap sınıfımızdan image adlı nesne oluşturup, o nesneye Kameramızdan aldığımız çerçeveyi aktırıyoruz. pcBox_video.Image = image;//image nesnemizi pcBox_video adlı pictureBoxımıza aktarıyoruz. }
Bu işlemlerden sonra btnPhotoRecord adlı butonumuzun Click olayını etkinleştirelim:
private void btnPhotoRecord_Click(object sender, EventArgs e) { pcBox_photo.Image = pcBox_video.Image;//pcBox_video adlı pictureBoxımızdaki görüntüyü pcBox_photo adlı pictureBoxımıza atıyoruz ve Projemizi tamamlıyoruz. }
Projemizin çıkış yaparken kameramızı durdurmak için Form1’imizin Form_Closing özelliğini etkinleştirelim:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { camera.Stop(); }
Projemizin tüm kaynak kodları:
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 AForge.Video; using AForge.Video.DirectShow; using System.Windows.Forms; namespace kameradanGoruntuAlma { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public FilterInfoCollection devices; public VideoCaptureDevice camera; private void Form1_Load(object sender, EventArgs e) { devices = new FilterInfoCollection(FilterCategory.VideoInputDevice); foreach (FilterInfo item in devices) { comboBox1.Items.Add(item.Name); } camera = new VideoCaptureDevice(); } private void button1_Click(object sender, EventArgs e) { pcBox_photo.Image = pcBox_video.Image; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { try { if (camera.IsRunning==false) { camera = new VideoCaptureDevice(devices[comboBox1.SelectedIndex].MonikerString); camera.NewFrame += Camera_NewFrame; camera.Start(); } } catch (Exception exc) { MessageBox.Show(exc.Message + ""); } } private void Camera_NewFrame(object sender, NewFrameEventArgs eventArgs) { Bitmap image = (Bitmap)eventArgs.Frame.Clone(); pcBox_video.Image = image; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { camera.Stop(); } } }//Daha fazlası için www.gorselprogramlama.com;
slm paylasım için tşkler // güzel çalışma olmuş //
sizden bir ricam var buna bir buton daha eklesek kayıt yapması için ama kodu
paylasa bilirmisin rica etsem//