Merhaba. Bu konuda C# ve Visual Basic .NET (VB.NET) kodlama dillerinde nasıl basit bir Kamera (Webcam) programı kodlayacağımızı göstereceğim. Bu işlem için AForge kullanacağız. Programımız aynalamayı kullanacak ve kameramızdan fotoğraf çekmemize olanak sağlayacak. Hemen başlayalım.
1. ADIM
İlk önce AForge'yi projemize eklememiz gerekiyor. NuGet üzerinden AForge.Video.DirectShow paketini yükleyebilirsiniz. Ben DLL dosyalarını paylaşacağım. DLL İndir VirusTotal 1 VirusTotal 2 VirusTotal 3
2. ADIM
Şimdi DLL dosyalarını projemize ekleyeceğiz. Solution Explorer kısmındaki References'e sağ tıklayıp Add Reference düğmesine tıklıyoruz. Ardından Browse Kısmına gelip Browse düğmesine tıklıyoruz. DLL dosyalarını seçtikten sonra tikli olduğundan emin oluyoruz ve OK düğmesine tıklıyoruz.
3. ADIM
Şimdi formumuza bir adet PictureBox, bir adet ComboBox ve 3 adet Button ekliyoruz. PictureBox'u kameradan gelen çıktıyı göstermek için, ComboBox'u bilgisayardaki kameraları listelemek için, birinci Button'u kamerayı çalıştırmak için, ikinci Button'u kamerayı durdurmak için, üçüncü Button'u ise kameradan fotoğraf çekmek için kullanacağız.
4. ADIM
PictureBox bileşenine tıklayıp Properties kısmından SizeMode ayarını StretchImage olarak ayarlıyoruz. İsterseniz Dock ayarını Fill olarak ayarlayarak PictureBox'un formun tamamını kaplamasını sağlayabilirsiniz. ComboBox bileşeninde ise DropDownStyle ayarını DropDownList olarak ayarlamanızı öneriyorum.
-- C# --
İlk önce en yukarıya şu kodu yazıyoruz:
public partial class Form1 : Form kodunu altına şu kodu yazıyoruz:
Şimdi VideoKaynağı_YeniKare adında bir void ekliyoruz:
Form açılınca çalışacak kodlar:
Programın düzgün kapanması için Public Form1() kodunun içine şu kodu ekliyoruz:
Başlat Button'a basılınca çalışacak kodlar:
Durdur Button'a basılınca çalışacak kod:
Fotoğraf Çek Button'a basılınca çalışacak kod:
İsterseniz fotoğrafın nereye kaydedileceğini seçmek için OpenFileDialog kullanabilirsiniz.
Programın düzgün kapanması için bir void ekliyoruz:
Kodun Tamamı:
-- VB.NET --
Kodun Tamamı:
Okuduğunuz için teşekkür ederim.
1. ADIM
İlk önce AForge'yi projemize eklememiz gerekiyor. NuGet üzerinden AForge.Video.DirectShow paketini yükleyebilirsiniz. Ben DLL dosyalarını paylaşacağım. DLL İndir VirusTotal 1 VirusTotal 2 VirusTotal 3
2. ADIM
Şimdi DLL dosyalarını projemize ekleyeceğiz. Solution Explorer kısmındaki References'e sağ tıklayıp Add Reference düğmesine tıklıyoruz. Ardından Browse Kısmına gelip Browse düğmesine tıklıyoruz. DLL dosyalarını seçtikten sonra tikli olduğundan emin oluyoruz ve OK düğmesine tıklıyoruz.
3. ADIM
Şimdi formumuza bir adet PictureBox, bir adet ComboBox ve 3 adet Button ekliyoruz. PictureBox'u kameradan gelen çıktıyı göstermek için, ComboBox'u bilgisayardaki kameraları listelemek için, birinci Button'u kamerayı çalıştırmak için, ikinci Button'u kamerayı durdurmak için, üçüncü Button'u ise kameradan fotoğraf çekmek için kullanacağız.
4. ADIM
PictureBox bileşenine tıklayıp Properties kısmından SizeMode ayarını StretchImage olarak ayarlıyoruz. İsterseniz Dock ayarını Fill olarak ayarlayarak PictureBox'un formun tamamını kaplamasını sağlayabilirsiniz. ComboBox bileşeninde ise DropDownStyle ayarını DropDownList olarak ayarlamanızı öneriyorum.
-- C# --
İlk önce en yukarıya şu kodu yazıyoruz:
C#:
using System.Drawing;
using AForge.Video;
using AForge.Video.DirectShow;
public partial class Form1 : Form kodunu altına şu kodu yazıyoruz:
C#:
private FilterInfoCollection kameralar;
private VideoCaptureDevice videoKaynağı;
Şimdi VideoKaynağı_YeniKare adında bir void ekliyoruz:
C#:
private void VideoKaynağı_YeniKare(object sender, NewFrameEventArgs eventArgs)
{
Bitmap kare = (Bitmap)eventArgs.Frame.Clone();
Bitmap aynalanmışKare = new Bitmap(kare.Width, kare.Height);
using (Graphics grafik = Graphics.FromImage(aynalanmışKare))
{
grafik.TranslateTransform(kare.Width, 0);
grafik.ScaleTransform(-1, 1);
grafik.DrawImage(kare, 0, 0);
}
pictureBox1.Image = aynalanmışKare;
kare.Dispose();
}
Form açılınca çalışacak kodlar:
C#:
try
{
kameralar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo kamera in kameralar)
{
comboBox1.Items.Add(kamera.Name);
}
comboBox1.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show("Hata: " + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
Programın düzgün kapanması için Public Form1() kodunun içine şu kodu ekliyoruz:
C#:
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
Başlat Button'a basılınca çalışacak kodlar:
C#:
videoKaynağı = new VideoCaptureDevice();
videoKaynağı = new VideoCaptureDevice(kameralar[comboBox1.SelectedIndex].MonikerString);
videoKaynağı.NewFrame += new NewFrameEventHandler(VideoKaynağı_YeniKare);
videoKaynağı.Start();
Durdur Button'a basılınca çalışacak kod:
C#:
videoKaynağı.Stop();
Fotoğraf Çek Button'a basılınca çalışacak kod:
C#:
pictureBox1.Image.Save(@"dosyanınkonumu");
İsterseniz fotoğrafın nereye kaydedileceğini seçmek için OpenFileDialog kullanabilirsiniz.
Programın düzgün kapanması için bir void ekliyoruz:
C#:
private void Form1_FormClosing(object sender, EventArgs e)
{
if (videoKaynağı.IsRunning == true)
{
videoKaynağı.Stop();
}
}
Kodun Tamamı:
C#:
using System;
using System.Drawing;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
private FilterInfoCollection kameralar;
private VideoCaptureDevice videoKaynağı;
public Form1()
{
InitializeComponent();
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
kameralar = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo kamera in kameralar)
{
comboBox1.Items.Add(kamera.Name);
}
comboBox1.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show("Hata: " + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
}
private void button1_Click(object sender, EventArgs e)
{
videoKaynağı = new VideoCaptureDevice();
videoKaynağı = new VideoCaptureDevice(kameralar[comboBox1.SelectedIndex].MonikerString);
videoKaynağı.NewFrame += new NewFrameEventHandler(VideoKaynağı_YeniKare);
videoKaynağı.Start();
}
private void VideoKaynağı_YeniKare(object sender, NewFrameEventArgs eventArgs)
{
Bitmap kare = (Bitmap)eventArgs.Frame.Clone();
Bitmap aynalanmışKare = new Bitmap(kare.Width, kare.Height);
using (Graphics grafik = Graphics.FromImage(aynalanmışKare))
{
grafik.TranslateTransform(kare.Width, 0);
grafik.ScaleTransform(-1, 1);
grafik.DrawImage(kare, 0, 0);
}
pictureBox1.Image = aynalanmışKare;
kare.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
videoKaynağı.Stop();
pictureBox1.Image = null;
pictureBox1.Invalidate();
}
private void button4_Click(object sender, EventArgs e)
{
videoKaynağı.Stop();
}
private void button5_Click(object sender, EventArgs e)
{
if (videoKaynağı.IsRunning == true)
{
videoKaynağı.Stop();
}
Application.Exit();
}
private void button3_Click(object sender, EventArgs e)
{
pictureBox1.Image.Save(@"dosyanınkonumu");
}
private void Form1_FormClosing(object sender, EventArgs e)
{
if (videoKaynağı.IsRunning == true)
{
videoKaynağı.Stop();
}
}
}
}
-- VB.NET --
Kodun Tamamı:
Kod:
Imports System.Drawing
Imports AForge.Video
Imports AForge.Video.DirectShow
Public Class Form1
Private kameralar As FilterInfoCollection
Private videoKaynağı As VideoCaptureDevice
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Form açılınca çalışacak kodlar.
Try
kameralar = New FilterInfoCollection(FilterCategory.VideoInputDevice)
For Each kamera As FilterInfo In kameralar
ComboBox1.Items.Add(kamera.Name)
Next
ComboBox1.SelectedIndex = 0
Catch ex As Exception
MsgBox("Hata: " & ex.Message, MsgBoxStyle.Critical, "Hata")
Environment.Exit(-1)
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Başlat düğmesine basılınca çalışacak kodlar.
videoKaynağı = New VideoCaptureDevice
videoKaynağı = New VideoCaptureDevice(kameralar(ComboBox1.SelectedIndex).MonikerString)
AddHandler videoKaynağı.NewFrame, AddressOf VideoKaynağı_YeniKare
videoKaynağı.Start()
End Sub
Private Sub VideoKaynağı_YeniKare(ByVal sender As Object, ByVal eventArgs As NewFrameEventArgs)
'Aynalama kodları.
Dim kare As Bitmap = CType(eventArgs.Frame.Clone(), Bitmap)
Dim aynalanmışKare As New Bitmap(kare.Width, kare.Height)
Using grafik As Graphics = Graphics.FromImage(aynalanmışKare)
grafik.TranslateTransform(kare.Width, 0)
grafik.ScaleTransform(-1, 1)
grafik.DrawImage(kare, 0, 0)
End Using
PictureBox1.Image = aynalanmışKare
kare.Dispose()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Durdur düğmesine basılınca çalışacak kod.
videoKaynağı.Stop()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Fotoğraf çek düğmesine basılınca çalışacak kod.
PictureBox1.Image.Save("dosyanınkonumu")
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'Form kapanırken çalışacak kod.
If videoKaynağı.IsRunning = True Then
videoKaynağı.Stop()
End If
End Sub
End Class
Okuduğunuz için teşekkür ederim.
Son düzenleme:


