C# İle Resim Boyutlandırma (En Boy Oranı Bozulmadan)


Bu yazımızda sizlere C#’da fotoğraf boyutlandırma hakkında bilgiler vereceğim.

C# yapısı gereği bizlere bir nesneden başka nesneler türetmemizi ve bu türetilen nesnelerinde farklı özellikler barındırabilmesini sağlamaktadır. Bu yazımızda ise bir image nesnesini alıp boyutlarını değiştirerek kullanmayı göstereceğim. İlk olarak projemize ResizeClass adında yeni bir class oluşturup içine bu kodları yazıyoruz.

using System.Drawing;

 

public class ResizeImage
{
 public static Image Resize(Image imgToResize, int h, int w)
  {
  Size size = new Size(w, h);
  int sourceWidth = imgToResize.Width;
  int sourceHeight = imgToResize.Height;

  float nPercent = 0;
  float nPercentW = 0;
  float nPercentH = 0;

  nPercentW = ((float)size.Width / (float)sourceWidth);
  nPercentH = ((float)size.Height / (float)sourceHeight);

  if (nPercentH < nPercentW)
    nPercent = nPercentH;
  else
    nPercent = nPercentW;

  int destWidth = (int)(sourceWidth * nPercent);
  int destHeight = (int)(sourceHeight * nPercent);

  Bitmap b = new Bitmap(destWidth, destHeight);
  Graphics g = Graphics.FromImage((Image)b);
  g.InterpolationMode = InterpolationMode.HighQualityBicubic;

  g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
  g.Dispose();
  return (Image)b;
 }
}

Kodları açıklamak gerekirse size adında ve parametre olarak alınan boyutlarda bir alan tanımlıyoruz. Daha sonra uzunluk ve genişlik yüzdelerini hesaplamak için kaynak image nesnesinin uzunluk ve genişlik bilgilerini geçici değişkenlere atıyoruz. Daha sonra uzunlukları birbirine bölerek yüzdeyi hesaplıyoruz bu sayede yeni image da ki en boy oranını koruyabileceğiz. Daha sonra daha küçük olan yüzdeyi kullanarak yeni çözünürlüğümüzü oluşturuyoruz. Bu sayede image nesnemizde en boy oranı korunuyor ve görseldeki pürüzlerin önüne geçmiş oluyoruz. Uzunluk hesaplamalarından sonra sıra geldi image nesnemizi yeni bir nesneye aktarmaya. İlk olarak bir bitmap nesnesi oluşturup yeni uzunluk ve genişlikleri ekliyoruz. Bitmap nesnesini doldurmak için birde graphics nesnesi oluşturup içeriğini bitmap nesnemiz ile dolduruyoruz. Asıl görüntü bitmap nesnesinde tutulacak. Ve son olarak DrwaImage komutu ile kaynak image ı yeni image nesnesine sol üst köşeden itibaren yeni çözünürlükte sıkıştırarak çizdirip return ile geri döndürüyoruz. Kodun kullanımı ise şu şekilde:

Not: kodları kullanmak için formunuza 2 adet PictureBox yerleştirmelisiniz.
OpenFileDialog dialog = new OpenFileDialog();
if (DialogResult.OK == dialog.ShowDialog())
    pictureBox1.ImageLocation = dialog.FileName;

pictureBox2.Image = ResizeImage.Resize(pictureBox1.Image, 300, 300);