C# WebCam Kullanarak Fotoğraf Çekme

Temmuz 29, 2020 0 Yazar: admin

Bu yazımızda Aforge kütüphanelerini kullanarak C# Windows Formda WebCam kullanarak görüntü alma yani fotoğraf çekme ve kaydetme işlemlerini gerçekleştiren bir örnek gerçekleştireceğiz.

Örneğimizi gerçekleştirmek üzere aşağıdaki formu oluşturalım.

Form tasarımını incelediğimizde bilgisayara bağlı olan kameraları listeleyeceğimiz 1 adet Combobox, Görüntüleme işlemleri için 2 adet PictureBox, Kayıt işleminde kullanacağımız 1 adet SaveFileDialog ve Button’ larımızı görüyoruz. “Kamera Aç” kamerayı açarak pictureBox kontrolünde görüntünün oluşmasını, “Fotoğraf Çek” butonu o andaki görüntünün yakalanarak PictureBox2‘ye aktarılmasını, “Kamerayı Kapat” butonu ise kameranın açık ise kapatılamasını sağlıyor. Kameranın kapatılması işlemini eğer unutulursa Form kapatılırken de gerçekleştireceğiz. Bu işlemi Form_Closing eventında gerçekleştireceğiz.

Şimdi Adım adım kodlarımıza geçelim.
İlk olarak Aforge kütüphanesini buradan indirerek başlayalım. İndirme yaptıktan sonra Visual Studio’dan başvuru eklemesi yapalım. Bu iki başvuru : AForgeVideoDirectShow.dll ve AForgeVideo.dll dosyalarıdır.

Yada Buradan İndir :AForge.NET Framework-2.2.5-(libs only).zip

Browse diyerek zip içerisinde çıkardığımız Release klasörü altında Aforge.Video.DirectShow.dll ve Aforge.Video.dll dosyalarını referans olarak ekliyoruz. Şimdi kodlarımıza geçebiliriz. Kodların tamamını aşağıya kopyalıyorum. Gerekli açıklamaları bu bölümden de görebilirsiniz.

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 AForge.Video;  //Referansları ekliyoruz
using AForge.Video.DirectShow; //Referansları ekliyoruz
 
 
namespace webcam_foto
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private FilterInfoCollection webcam;//webcam isminde tanımladığımız değişken bilgisayara kaç kamera bağlıysa onları tutan bir dizi. 
        private VideoCaptureDevice cam;//cam ise bizim kullanacağımız aygıt.
 
        private void Form1_Load(object sender, EventArgs e)
        {
            webcam = new FilterInfoCollection(FilterCategory.VideoInputDevice);//webcam dizisine mevcut kameraları dolduruyoruz.
            foreach (FilterInfo videocapturedevice in webcam)
            {
                comboBox1.Items.Add(videocapturedevice.Name);//kameraları combobox a dolduruyoruz.
            }
            comboBox1.SelectedIndex = 0; //Comboboxtaki ilk index numaralı kameranın ekranda görünmesi için
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            cam = new VideoCaptureDevice(webcam[comboBox1.SelectedIndex].MonikerString);
            cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
            cam.Start();
        }
 
        private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap bit = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = bit;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (cam.IsRunning) //kamera açıksa kapatıyoruz.
            {
                cam.Stop();
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            pictureBox2.Image = pictureBox1.Image;
        } //www.yazilimkodlama.com
 
        private void button4_Click(object sender, EventArgs e)
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image.Save(saveFileDialog1.FileName);//Picturebox'taki görüntüyü kaydediyoruz.
            }
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        { //For kapatılırken kamera açıksa kapatıyoruz.
            if (cam.IsRunning)
            {
                cam.Stop();
            }
        }
    }
}