C# Resim Kırpma

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde resmi istediğimiz boyutlarda kırpmayı anlatacağım. Hadi başlayalım !
Öncelikle yapmak istediğimiz işlem resim işlemi olduğu için, C#’ta bu işlemleri yapmamızı sağlayan System.Drawing kütüphanesini form sayfamızda çağıralım. Bunun için sayfanın en başına
using System.Drawing;
kod satırını ekleyelim. C#’ta resimle ilgili neredeyse herşey Bitmap üzerinden gitmekte, bu yüzden bizde Bitmap kullanacağız. Bitmap sınıfını kullanabilmek için de yeni bir nesnesini türetmemiz gerekiyor. Bitmap’ın constructor yani yapıcı metodu Image nesnesi istiyor ve Image nesnesini de direk olarak dosyadan alabiliyoruz. Örneğin yazımızın kapak resmini sol alt köşeden 100×100 boyutunda bi alanını kırpalım. Bu resminde masaüstünde bulunduğunu varsayalım. Gelin şimdi bu bilgilere göre yeni bir Bitmap nesnesi oluşturalım;
Image image = Image.FromFile("c:/users/kullanici/desktop/c-resim-kirpma.png");
Bitmap bmp = new Bitmap(image);
Resim kırpmanın birçok yolu var fakat biz en basit ve kullanışlı olanı kullanalım. Bu da yeni bir Bitmap nesnesi oluşturmak fakat daha önce oluşturduğumuz Bitmap nesnesini klonlayıp kesmek. Yani bmp nesnesine ait olan Clone() fonksiyonunu kullanmak.
Bu fonksiyon ise kesilecek bilgileri tutan Rectangle nesnesi ve kesilip alınacak parçanın pixel formatını belirten PixelFormat nesnesi olmak üzere 2 parametre istiyor. Rectangle için yeni bir nesne türetmemiz gerekiyor ve constructor metodu ise kırpmanın yapılacağı lokasyon (x ve y noktaları) ve kesilecek boyut (genişlik ve yükseklik) olmak üzere 4 parametre istiyor. Örneğin bizim resmimizi resmin (0, 0) noktasından başlayarak (100, 100) boyutunda keselim. Buna uygun Rectangle nesnesi türetimi şöyle olacak;
Rectangle rec = new Rectangle(0, 0, 100, 100);
Şimdi tüm hazırlıklarımız tamamlandı, artık oluşturduğumuz bmp nesnesi klonlayalım.
Bitmap clone = bmp.Clone(rec, bmp.PixelFormat);
rec parametresini zaten anlattık, peki ya bmp.PixelFormat ? Clone() fonksiyonu PixelFormat nesnesi istiyordu ve bizim gönderdiğimiz parametre ile kırpmak istediğimiz resmin pixel formatı ne ise, kırptıktan sonra oluşan resmin pixel formatı da o olsun diyoruz. Pixel formatı değiştirmek resimde bozulmalara yol açabileceği için böyle yaptık. Evet resmi de kırptık, şimdi dilersek kırpılmış resmi kaydedebiliriz yada dilersek PictureBox içinde gösterebiliriz.
Kaydetmek için clone nesnesi içerisinde bulunan Save() metodunu kullanacağız. Bu metod string tipte dosya adı ve resmin uzantısını belirten ImageFormat tipinde 2 tane parametre alıyor. ImageFormat ile resmin karakter kodlamasını belirtiyoruz (png, jpg, bmp vs) ve resim ona göre oluşturuluyor. Örnek kullanımı şöyle olacak;
clone.Save("c:/users/kullanici/desktop/kırpılmış.png", ImageFormat.Png);
Resmin adında belirttiğimiz uzantı ile ImageFormat içerisinde belirttiğimiz uzantının aynı olmasına dikkat edin, çünkü resim oluşturulur fakat açarken sorunlar yaşayabilirsiniz. PictureBox içerisinde göstermek için ise örneğin form üzerinde pictureBox1 isimli bir PictureBox olduğunu varsayarsak;
pictureBox1.Image = clone;
kod satırını kullanmaktayız.
Evet bu dersimizde bu kadardı, yazdığımız tüm kodları daha toplu olması için aşağıya bırakıyorum;
Image image = Image.FromFile("c:/users/kullanici/desktop/c-resim-kirpma.png");
Bitmap bmp = new Bitmap(image);
Rectangle rec = new Rectangle(0, 0, 100, 100);
Bitmap clone = bmp.Clone(rec, bmp.PixelFormat);
clone.Save("c:/users/kullanici/desktop/kırpılmış.png", ImageFormat.Png); // Kırpılmış resmi kaydetmek için
pictureBox1.Image = clone; // Kırpılmış resmi PictureBox içinde göstermek için
Tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.