İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# Ekran Görüntüsü Almak (ScreenShot) – Çalışan Örnekli

C# Ekran Görüntüsü Almak (ScreenShot) – Çalışan Örnekli
+ - 4

C# Ekran Görüntüsü Almak (ScreenShot) – Çalışan Örnekli , yazımızda c sharp ile ekran görüntüsü nasıl alırız onu göreceğiz. Bu işlemi yapacak bir sürü program var elbet ancak bazen proje içerisinde gerek olabilmektedir. Mesela bir keresinde onaylama ekranında her onayda otomatik ekran görüntüsü almak zorunda kalmıştım. Bu ve bunun gibi işlemler için gerekli olabiliyor. Yada isterseniz ekranda hiçbir şey olmadan, arka planda çalışan bir ekran görüntüsü alma aracı da yapabilirsiniz. Program arka planda çalışır bir tuş kombinasyonu ile otomatik ekran görüntüsü alır kaydedersiniz. Bu dersimizde de bunu anlatacağım.  Direk kodları vermeyi düşünüyordum ama bu derse özel proje dosyalarını da paylaşacağım. :D Kodları da vereceğim dersin sonunda projeyi dosyalarını da vereceğim. Hadi gelin C Sharp Ekran Görüntüsü Almak – (ScreenShot) – Çalışan Örnekli dersimize geçelim.

 

C Sharp Ekran Görüntüsü Almak – (ScreenShot) – Çalışan Örnekli

Yapacağımız uygulama şöyle olacak;

Bir form olacak ve W166 x H90 ölçülerinde olacak. (W min 166 oluyor.) Bu formun özellikler sayfasında geliyoruz ve KeyPreview özelliğini true ve  ControlBox özelliğini de false yapıyoruz.

KeyPreview Klavye kısayol kombinasyonu için bu özelliği açıyoruz.

ControlBox From’un sağ üst kısmındaki Minimize, Maksimize ve Kapatma butonlarını kaldırır.

Ben kısayol tuşunu Home Tuşu olarak belirledim. O yüzden Formun başlığına yani Text özelliğine de Home Tuşu SS Alır yazdım.

Formumuza iki buton ekliyoruz ve birine SS Al diğerine de Kapat yazıyoruz. Butonların fontlarını Bold yapıyoruz. SS Al butonun Dock özelliğini Right, Kapat butonunun Dock özelliğini de Fill yapıyoruz.

Sonunda şöyle bir görüntü elde edeceğiz.

c sharp ekran görüntüsü almak

Formumuzun kod kısmına geliyoruz ve aşağıdaki namespace’leri yazıyoruz.

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

Ekran görüntüsünü alan kodlarımız.

 private Bitmap Screenshot()
        {
            // Ekran resmi alınmadan önce formun kaybolmasını sağlıyoruz.
            this.Opacity = 0; 
            
            // SS alan kodlar
            Bitmap Screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics GFX = Graphics.FromImage(Screenshot);
            GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size);
            // SS alan kodlar

            this.Opacity = 1;
            // Ekran resmi alınmadan önce formun görünmesini sağlıyoruz.
            return Screenshot;
            // Ekran resmini geri dönüş yapıyoruz.
        }

Aldığımız ekran görüntüsüne bir isim verip kaydediyoruz.

 string KayitYolu = @"C:\Ekran_Resimleri";
        string ResimAdi()
        {
            return "SS_" + DateTime.Now.ToString().Replace(" ", "_").Replace(":", "_") + ".jpg";
            // Örnek Resim Adı : SS_19.06.2018_12_48_50.jpg 
            // Saniyeye kadar aldıkki resim adları çakışmasın. Çakışma olması durumda eskiyi siler. Üzerine yazar.
        }
        void Kaydet(string resimadi)
        {
            // C dizinine bir klasör açıyoruz. 
            // Klasör varsa hiçbir işlem yapmayacak
            // Klasör yoksa klasör oluşturacak.
            if (!File.Exists(KayitYolu))
                Directory.CreateDirectory(KayitYolu);

            // Aldığımız resmi kayıt ediyoruz.
            Screenshot().Save(KayitYolu + "\\" + resimadi + "", ImageFormat.Jpeg);
        }

Form’un keydown eventine gelelim ve Home Tuşuna basıldığında ekran görüntüsü almasını sağlayalım.

 private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Home)
                Kaydet(ResimAdi());
        }

SS Al butonu ve Kapat butonu click eventlerini yazalım.

 private void button1_Click(object sender, EventArgs e)
        {
            Kaydet(ResimAdi());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

Bu şekilde ekran görüntüsü alan bir uygulama yapmış oluyoruz. :D

NOT: Bu şekilde aldığımız ekran görüntüsü başlat çubuğu almamaktadır. Yani alınan ekran görüntüsünde başlat çubuğu yoktur.

Ayrıca tıklayarak GitHub üzerinden de erişim sağlayabilirsiniz.


C Sharp Ekran Görüntüsü Almak – (ScreenShot) – Çalışan Örnekli dersimizde bu kadar dostlar.

Çok samimi bir şekilde söylüyorum ki, bu proje çok hoşuma gitti. Sürekli kullanacağım programlar arasında yerini aldı :D :D

C Sharp Eğitim Seti ve ERP Programlama eğitimi sayfasına gitmek için tıklayınız.

Sağlıcakla ve takipte kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (4)

  1. uygulama çok güzel fakat optimizasyon için neler yapılabilir
    örn 10 20 resimde bellekten 200-300 mb yiyor bunu nasıl engeleriz

    • Optimizasyon için neler yapılabileceği konusunda araştırmalar yapmak gerek. Resim işleme konusunda hakim değilim. O yüzden bu kadar basit bir uygulama. Kaldı ki zaten windows sisteminde zaten profesyonel bir ekran alıntısı aracı var. Bu ders deneme amaçlı geliştirilen basit bir uygulamadır.

  2. Uygulamanın ekran fotoğrafı aldığı alanı genişletmek, (ekranın tamamının ekran fotoğrafını almak) için ne yapmak gerek?

    • Merhaba,
      GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size);
      satırındaki kodlarla alanı değiştirebilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.