C#

C# Kamera Açma

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde bilgisayar kamerasından görüntü alacak ve bu görüntüyü PictureBox üzerinde göstermeyi anlatacağım. Hadi başlayalım !
Öncelikle bu iş için kullanacağımız kütüphane olan Aforge.Net kütüphanesini kurmakla başlayalım. Bu kütüphaneyi elbette .Net Framework’ün paket yöneticisi olan Nuget’i kullanarak kuracağız. Bunun için Nuget paket yöneticisi konsolunu açarak

install-package AForge.Video.DirectShow

yazıp enterlayalım. Bu komut sayesinde Nuget, AForge.Video.DirectShow kütüphanesini ve onun bağımlı olduğu tüm kütüphaneleri indirip başvurular arasına ekleyecek ve projemizde kullanılabilir hâle getirecektir.Kütüphanenin kurulmasının ardından formumuz üzerine bir tane PictureBox ve bir tanede Combobox ekleyelim.
Kameradan görüntü alabilmek için öncelikle kamerayı açmamız gerekiyor, tabi ondanda önce olarak görüntü alacağımız kamerayı belirtmemiz gerekiyor. Çünkü bir bilgisayarda dışarıdan bağlanarakta olsa birden fazla kamera olabilir ve kullanıcı örneğin bilgisayarın kendi kamerası yerine dışarıdan taktığı bir kamerayı kullanmak isteyebilir. İşte bu seçimi biz kullanıcıya bırakalım. Yani bilgisayarda bulunan tüm kameraları bulup bi liste içine (Combobox içine) ekleyelim ve kullanıcının seçtiği kameraya göre, o kameradan görüntü alalım.
Kamera birden fazla olabilir dediğimize göre, bir liste kullanmamız gerekecek ve AForge kütüphanesinde bunun karşılığı FilterInfoCollection.
Hemen bir tane FilterInfoCollection nesnesi oluşturalım ve AForge kütüphanesini kullanarak tüm kameraları bulduktan sonra her birini daha önce forma eklediğimiz Combobox içerisine ekleyelim. Kısacası kodlarımız şöyle olmalı;

FilterInfoCollection kameralar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach(FilterInfo kamera in kameralar)
	comboBox1.Items.Add(kamera.Name);

Bilgisayara bağlı bulunan tüm kameraları bulduk ve bunları Combobox içine ekledik. Kullanıcının Combobox’tan seçtiği kamerayı başlatıp, kameradan gelen görüntüyü daha önce forma eklediğimiz PictureBox içinde gösterelim.
Bunun için Combobox’ın SelectedIndexChanged eventini (olayını) kullanacağız. Hemen Combobox’ın SelectedIndexChanged eventini oluşturalım. Bunun için form tasarımına girip Combobox’a çift tıklayabilir, yada Combobox’ı seçtikten sonra F4 tuşuna basarak açılan sekmeden Events sekmesine geçerek SelectedIndexChanged seçeneğine çift tıklayabiliriz. Bu kadar anlattık, birazda kod yazalım dimi 🙂

void Combobox1_SelectedIndexChanged(object sender, EventArgs e)
{
	VideoCaptureDevice kamera = new VideoCaptureDevice(kameralar[combobox1.SelectedIndex].MonikerString);
	kamera.NewFrame += Camera_NewFrame;
	kamera.Start();
}

Bu yazdığımız koda şöyle bir göz atarsak, VideoCaptureDevice nesnesi ile kullanıcının Combobox’tan seçtiği kameraya göre görüntü alacağımız kamerayı belirledik.
kamera.NewFrame += Camera_NewFrame; ile kameradan gelen görüntüyü takip edebilmemizi sağlayan eventi belirttik ve bu eventide Camera_NewFrame metodu ile yapacağımızı söyledik. Tabiki bu metod şu an ortada yok, onu birazdan anlatacağım.
Son olarak kamera.Start(); satırı ile de kamerayı başlatarak görüntü almaya başladık. Kameradan görüntü almaya başladık fakat bunu henüz Picturebox üzerinde göstermedik, bunuda henüz oluşturmadığımız Camera_NewFrame fonksiyonu ile yapacağız.Buraya kadar bilgisayara bağlı olan tüm kameraları tespit ettik ve hangi kamerayı kullanmak istediğini kullanıcıya bıraktık. Kullanıcının seçtiği kamerayı başlatarak görüntü aldık.
Kameradan görüntü almak, kameradan bilgisayara frame gelmesi demek ve işte bizde bu gelen frameyi Picturebox üzerine aktarırsak, kameradan gelen görüntüyü aldık demektir 🙂

void Camera_NewFrame(object sender, NewFrameEventArgs e) => pictureBox1.Image = e.Frame.Clone() as Bitmap;

Eveett işte bu kadar, artık kameradan gelen görüntü pictureBox1 isimli Picturebox üzerinde görüntülenecektir.
Bu dersimizde bu kadardı, buraya kadar yazdığımız kodları daha toplu olması için aşağıya bırakıyorum;

FilterInfoCollection kameralar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
void Form1_Load(object sender, EventArgs e)
{
	foreach(FilterInfo kamera in kameralar)
	comboBox1.Items.Add(kamera.Name);
}
void Combobox1_SelectedIndexChanged(object sender, EventArgs e)
{
	VideoCaptureDevice kamera = new VideoCaptureDevice(kameralar[combobox1.SelectedIndex].MonikerString);
	kamera.NewFrame += Camera_NewFrame;
	kamera.Start();
}
void Camera_NewFrame(object sender, NewFrameEventArgs e) => pictureBox1.Image = e.Frame.Clone() as Bitmap;

Tüm AForge.Net derslerimize buraya, tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu