MertkanElpeze
Asistan
- Katılım
- 6 Ekim 2010
- Mesajlar
- 151
- Reaksiyon puanı
- 4
- Puanları
- 18
Kaynak : http://wp.me/p1dKsd-4v
Bugün basit bir uygulama yazmam gerekti. Senaryo şuydu ; kullanıcının bazı yerlerden print screen alması gerekiyor ve normal şartlarda Alt+PrintScreen tuşuna basıp paint dosyasına Ctrl+V dediğimizde hallolan bu işlemi daha az uğraş gerektirerek nasıl yapabiliriz onu düşündük. C#ta basit bir application yazmaya karar verdik.
Normalde bir uygulama yapmadan bu işlemi 5 adımda yapıyoruz ;
1-Sayfaya alt+printscreen
2-Paint dosyası aç
3-Painte yapıştır.
4- Paintten kaydet
5- İstediğin klasöre kopyala
Yazdığımız minik uygulama ile;
1-Resmini çekmek istediğin alanı seç
2-Kaydete bas.
Şimdi bazılarınız diyebilir ki paintle yapmak daha kolay, benim buna cevabım ise eğer 259 tane resim çekmek zorunda kalsaydınız.
259*5=1295 işlem edecekti. yazdığımız uygulama ile bu sayı 518′e düşecek.
Bu kadar teorik bilgi yeter sanırım
Öncelikle Visual Studiomuzdan yeni bir Windows Application oluşturuyoruz.
PrintScreen işlemizi şu şekilde yapcağız ; formumuzu ekran görüntüsü almak istediğimiz yerin üzerine getireceğiz. ve üzerine iki kez tıkladığımızda otomatik olarak görüntümüzü istediğimiz formatta alacağız(jpg,bmp,png). Mesala formu bir resin üzerine getirdiğimizde formun arkasında kalan resmi göremeyeceğiz bu sorunuda Formun Opacity değeriyle oynarak çözeceğiz.
GetCapture adında void türünde bir metot yazacağız bu metot formun bulunduğu yerin lokasyon bilgilerini tutacak. ve bu türde görünmez bir nesne oluşturacağız bu nesnenin lokasyon bilgisini formunki ile dolduracağız. yani this.Bounds;
Daha sonra bitmap sınıfını kullanacağız ve daha önce formun bulundugu noktayı doldurdugumuz nesnemiz olan Rectangleın yükseklik genişlik bilgilerini buradan tamamlayacağız. Biraz daha ilerdiğimizde artık kendi grafiğimizi kaydetmemiz adına Graphics türünde bir nesne daha oluşturup,CopyFromScreen diyerek formun kapsadığı alanlarını resim olarak elimizde barındıracağız.
Yani GetCapture fonksiyonumuzun kodu aşağıdaki gibi olacaktır ;
Üstte Bitmap.Save Derken C://nin altına kaydettim bazı bilgisayarlarda bu kayıt işlemine izin vermez eğer bir hata alırsanız bilesiniz ki bundandır.
@C:\ + yazı dizisini silerseniz projenizin .exesinin çalıştığı yere sorunsuz bir şekilde printScreen alacaktır.
Ayrıda her alınan görüntü üst üste kaydolmasın diye string türünde dd diye bir değişken tanımladım ve tarihi saniyeyle birlikte verdim dolayısıyla oluşan her dosya adı farklı olacak .Replace(:,.); diyerek karakter değişimi yaptım ki resim dosyası düzgün kaydolsun(windows herhangi bir dosya kaydolurken ismi içerisibnde : / gibi karakterlerin olmasına izin vermiyor ).
Şimdi formun DoubleClick Eventinde GetCapture metotumuzu çağıralım;
Şimdi ise projeyi çalıştırıyorum ;
Bu şekilde karşıma geldi. Yalnız yazımızın başında bahsettiğim sorun var bu şekilde forma çift tıklarsam ekran görüntümü kaydedecek ama şuan sadece formun kapadığı yerleri alacak ve kapadığı yerlerin altında ne var göremiyorum bu pek sağlıklı bir görüntü değil.
İkinci sorunumuz ise Ekran Çıktısını alırken ne yazık ki formumuz orada olduğu için formumuzun resmini çekecek dolayısıyla burada bir cinlik yapıp, çift click olduğunda ÖNCE formu görünmez yapmalı daha sonra GetCapture fonksiyonumu çağırmalıyım.
Yani formumuzun MouseDoubleClick eventi şu şekilde olmalı ;
Şimdi formumuzun opacity oranını biraz kısmalı ve kullanıcının resmini çektiği alanı daha iyi görmesini sağlamalıyız ;
Şimdi projemi çalıştırıyorum ve ekran görüntümü sizinle paylaşıyorum ;
Gördüğünüz gibi formumuz saydam bir yapı aldı yani kullanıcı artık nerenin görüntüsünü alabileceğini belirleyebilecek halde. Şimdi formum bu haldeyken üzerine doubleClick yapıp oluşan ekran görüntüsünü sizinle paylaşıyorum ve bu yazımıza son veriyoruz ;
Projeyi indirmek için http://mertkanelpeze.net/ders/PrintScreen.rar
Bugün basit bir uygulama yazmam gerekti. Senaryo şuydu ; kullanıcının bazı yerlerden print screen alması gerekiyor ve normal şartlarda Alt+PrintScreen tuşuna basıp paint dosyasına Ctrl+V dediğimizde hallolan bu işlemi daha az uğraş gerektirerek nasıl yapabiliriz onu düşündük. C#ta basit bir application yazmaya karar verdik.
Normalde bir uygulama yapmadan bu işlemi 5 adımda yapıyoruz ;
1-Sayfaya alt+printscreen
2-Paint dosyası aç
3-Painte yapıştır.
4- Paintten kaydet
5- İstediğin klasöre kopyala
Yazdığımız minik uygulama ile;
1-Resmini çekmek istediğin alanı seç
2-Kaydete bas.
Şimdi bazılarınız diyebilir ki paintle yapmak daha kolay, benim buna cevabım ise eğer 259 tane resim çekmek zorunda kalsaydınız.
259*5=1295 işlem edecekti. yazdığımız uygulama ile bu sayı 518′e düşecek.
Bu kadar teorik bilgi yeter sanırım
Öncelikle Visual Studiomuzdan yeni bir Windows Application oluşturuyoruz.
PrintScreen işlemizi şu şekilde yapcağız ; formumuzu ekran görüntüsü almak istediğimiz yerin üzerine getireceğiz. ve üzerine iki kez tıkladığımızda otomatik olarak görüntümüzü istediğimiz formatta alacağız(jpg,bmp,png). Mesala formu bir resin üzerine getirdiğimizde formun arkasında kalan resmi göremeyeceğiz bu sorunuda Formun Opacity değeriyle oynarak çözeceğiz.
GetCapture adında void türünde bir metot yazacağız bu metot formun bulunduğu yerin lokasyon bilgilerini tutacak. ve bu türde görünmez bir nesne oluşturacağız bu nesnenin lokasyon bilgisini formunki ile dolduracağız. yani this.Bounds;
Daha sonra bitmap sınıfını kullanacağız ve daha önce formun bulundugu noktayı doldurdugumuz nesnemiz olan Rectangleın yükseklik genişlik bilgilerini buradan tamamlayacağız. Biraz daha ilerdiğimizde artık kendi grafiğimizi kaydetmemiz adına Graphics türünde bir nesne daha oluşturup,CopyFromScreen diyerek formun kapsadığı alanlarını resim olarak elimizde barındıracağız.
Yani GetCapture fonksiyonumuzun kodu aşağıdaki gibi olacaktır ;

Üstte Bitmap.Save Derken C://nin altına kaydettim bazı bilgisayarlarda bu kayıt işlemine izin vermez eğer bir hata alırsanız bilesiniz ki bundandır.
@C:\ + yazı dizisini silerseniz projenizin .exesinin çalıştığı yere sorunsuz bir şekilde printScreen alacaktır.
Ayrıda her alınan görüntü üst üste kaydolmasın diye string türünde dd diye bir değişken tanımladım ve tarihi saniyeyle birlikte verdim dolayısıyla oluşan her dosya adı farklı olacak .Replace(:,.); diyerek karakter değişimi yaptım ki resim dosyası düzgün kaydolsun(windows herhangi bir dosya kaydolurken ismi içerisibnde : / gibi karakterlerin olmasına izin vermiyor ).
Şimdi formun DoubleClick Eventinde GetCapture metotumuzu çağıralım;

Şimdi ise projeyi çalıştırıyorum ;

Bu şekilde karşıma geldi. Yalnız yazımızın başında bahsettiğim sorun var bu şekilde forma çift tıklarsam ekran görüntümü kaydedecek ama şuan sadece formun kapadığı yerleri alacak ve kapadığı yerlerin altında ne var göremiyorum bu pek sağlıklı bir görüntü değil.
İkinci sorunumuz ise Ekran Çıktısını alırken ne yazık ki formumuz orada olduğu için formumuzun resmini çekecek dolayısıyla burada bir cinlik yapıp, çift click olduğunda ÖNCE formu görünmez yapmalı daha sonra GetCapture fonksiyonumu çağırmalıyım.
Yani formumuzun MouseDoubleClick eventi şu şekilde olmalı ;

Şimdi formumuzun opacity oranını biraz kısmalı ve kullanıcının resmini çektiği alanı daha iyi görmesini sağlamalıyız ;

Şimdi projemi çalıştırıyorum ve ekran görüntümü sizinle paylaşıyorum ;

Gördüğünüz gibi formumuz saydam bir yapı aldı yani kullanıcı artık nerenin görüntüsünü alabileceğini belirleyebilecek halde. Şimdi formum bu haldeyken üzerine doubleClick yapıp oluşan ekran görüntüsünü sizinle paylaşıyorum ve bu yazımıza son veriyoruz ;

Projeyi indirmek için http://mertkanelpeze.net/ders/PrintScreen.rar