Orhan Gazi Kılıç

"Allah'ım sen beni, milletime ve devletime faydam dokunmadan alma"

C# İle Web Kamerasından Görüntü Almak/Kaydetmek

Yazar: Orhan Gazi Kılıç — 3 Mart 2012 Cumartesi — Saat: 05:04:00

       C# ile merak ettiğim konudan bir tanesiyse kameradan görüntü alıp nasıl kaydedebileceğimdi. Bunu da biraz araştırdıktan sonra kolayca halledilebileceğini öğrenmek benim için sevindirici oldu. Aslında programın öz kodunu anlatayım:
Bir C# Windows projesi açın ve araç kutusuna (toolbox) sağ tıklayıp öğeleri seç'ten webcam_capture.dll dosyasını seçip ekleyin (Programın tam kodlarını verdiğim klasörün bin/debug klasörünün içinde bulabilirsiniz). Sonra  bir webcamcapture bileşenini forma ekleyin. Bu bileşenin olaylarını kullanarak çok farklı uygulamalar geliştirebilirsiniz. Sonra araç kutusundan bir de resim kutusu (picturebox) ekleyin. Sonra bir başlat bir durdur düğmesi olması için iki tane tuş (button) ekleyin. webcamcapture1 bileşeninin ImageCaptured olayını kullanarak web kameramızdan görüntüyü alacağız. Webcamcapture1'i seçip, olaylardan bu olaya çift tıklayın ve picturebox1'in image özelliğine ImageCaptured olayındaki WebCamImage argümanı atayarak bu işi halledebiliriz:
        private void webCamCapture1_ImageCaptured(object source, WebCam_Capture.WebcamEventArgs e)
        {
            pictureBox1.Image = e.WebCamImage;
        }
        Fakat şimdi ekranımıza görüntü hâlâ gelmedi çünkü bu işi başlatmadık. Formumuzdaki başlat düğmesine çift tıklayıp düğmenin tıklama olayına da webcamcapture1 nesnesinin start özelliğini yazalım:
        private void button1_Click(object sender, EventArgs e)
        {
            webCamCapture1.Start(0);
        }
        Durdurma düğmesinin tıklama olayına da aynı şekilde durdur işlevini verelim:
        private void button2_Click(object sender, EventArgs e)
        {
            webCamCapture1.Stop();
        }
        Şimdi tek ihtiyacımız olan şey bir kaydet düğmesi. forma bir düğme ekleyip ismini kaydet diye yazdıktan sonra çift tıklayıp az önce görüntü akışını tanımladığımız picturebox1.image'nin save özelliğini kullanacağız. Tabi kaydet tuşuna birden fazla basıldığında aynı isimle öncekinin üstüne yazacaktır. Buna bir çözüm olarak a adında bir sayaç yapabiliriz. Ama a, kaydet düğmesinin kod bloğu dışında olsun ki her seferinde 0 değerini tekrar almasın. Şöyle bir şey olabilir mesela:
        int a=0;
        private void button4_Click(object sender, EventArgs e)
        {
            pictureBox1.Image.Save(string.Format("hırsız{0}.png",a));
            a=a+1;
        }
       String biçimlendirme işlemlerini biliyorsanız string.Format("hırsız{0}.png",a)'ın "hırsız"+a.toString()+".png"; ile aynı işlevde olduğunu biliyorsunuzdur. string.Format daha kullanışlı.       
       Evet, tamamdır. Şimdi en kısa ve yalın haliyle programımız çalışacaktır.
       Aşağıda programın satır satır açıklanmış haliyle biraz daha geliştirilmiş, pencereye saydamlık ayarı eklenmiş halini indirip inceleyebilirsiniz.
       Bir ön izleme:
Her 20 saniyede 1 fotoğraf çekiyor. Ayrıca Kaydet tuşuna tıklayarak da an için fotoğraf çekilebilirsiniz. Kendimden daha iyi bir hilal çizmeyi beklerdim ama ancak bu kadar. :)

       Programı ve kodlarını buradan indirebilirsiniz. webcam_capture.dll dosyasını da program klasörünün bin/debug klasöründe bulabilirsiniz:


#orhangazikılıç #yazılımcı #programcı #mühendis #oyuncu #vatanperver