Resim Boyutlandırma , C#

Merhabalar,
Görüntü işleme konusunda lisanstan mezun olurken tezimi  yaparken uğraşmıştım. Tekrar görüntü işlemeye  merak  saldığım şu aralar öğrendiklerimi hem yeni  başlayanlara faydası olması  için hemde kendime kaynak  oluşturmak için  düzenli  bir şekilde  paylaşmaya çalışacağım.

Gelelim resmi boyutlandırmaya…tabki ilk akla gelen soru " Resmin boyutlarını değiştirdiğimizde ÇÖZÜNÜRLÜK BOZULACAK MI ? ". 

Elbetteki  çözünürkte bir bozulma söz konusu ama bu gözle görülür  bir  bozuklukmu olacak? Bu sorunun cevabı ise kullanacağınız yönteme  bağlı … 

Yöntem1 :

Aşağada kodlarını paylaştığım yöntemle resmi istediğiniz ölçülere getirebilirsiniz.Örneğin  400*400 px'lik bir resmi  20*800px gibi  absürt bir formata çevirebilirsiniz ama resimde gözle görülür bir bozulma oluşacaktır. Eğer mantıklı bir ölçüye dönüştürürseniz göze batmıyacak  şekilde bir bozulma ile resmi oluşturabilirsiniz.

public void  yontem1  (System.Drawing.Image img, int genislik, int yukseklik)
        {
            Bitmap yeniimg = new Bitmap(genislik, yukseklik);
            using (Graphics g = Graphics.FromImage((System.Drawing.Image)yeniimg))
                      g.DrawImage(img, 0, 0, genislik, yukseklik);
            yeniimg.Save(Server.MapPath("resimler/") + "yontem1.jpeg");
        }

Yukarıdaki yöntemde img ile gelen resmi istenilen ölçülerde resimler klasörünün altına yontem1.jpg adında kaydediyor.

Yöntem 2 :

Bu yöntemde ise  işler biraz daha farklılaşıyor.İstediğimiz ölçüleri yolluyoruz fakat resmin çözünürlüğünü koruyabilmek için yolladığımız resmin genişlik ve yuksekliğini istediğimiz ölçülerle oranlayıp  yeni bir genişlik ve yüksekli oranı hesaplıyor ve resmi  bu ölçüde büyütüyor veya küçültüyor.Daha kısa ifade eecek olursak  resmin genişlik ve yükseklik oranını   bozmadan  ouşturmak isteiğimiz  genişlik  ve yükselik  ölçüsünün  içine  sığacak şekild  aynı oranda resmi  tekrar çiziyor. ÖRnek olarak 100*200 px olan bir  resimi 50*50px  boyutlarına getirmeye çalışırsak resmi  bize 50*25px olarak  küçültüyor. yöntem1 de ise aynı resim 50*50px olarak tam istenen  şekilde kçültülüyordu.

 

 public void yontem2 (System.Drawing.Image img, int istenenEn, int istenenBoy)
        {
            Size istenenimg = new Size(istenenBoy, istenenEn);
            int genislik = img.Width;
            int yukseklik = img.Height;

            float Oran = 0;
            float genislikOranı = 0;
            float yukseklikOranı = 0;

            genislikOranı = ((float)istenenimg.Width / (float)genislik);
            yukseklikOranı = ((float)istenenimg.Height / (float)yukseklik);

            if (yukseklikOranı < genislikOranı)
                Oran = yukseklikOranı;
            else
                Oran = genislikOranı;

            int yenigenislik = (int)(genislik * Oran);
            int yeniyukseklik = (int)(yukseklik * Oran);

            Bitmap sonimg = new Bitmap(yenigenislik, yeniyukseklik);
            Graphics g = Graphics.FromImage((System.Drawing.Image)sonimg);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(img, 0, 0, yenigenislik, yeniyukseklik);

            sonimg.Save(Server.MapPath("Resimler/") + "yontem2.jpg");
        }

Umarım faydalı bir yazı olmuştur…

5 Cevaplar

  1. Burak dedi ki:

    Teşekkürler.

  2. murat dedi ki:

    medodu çağıramadım img parametresini bir türlü veremiyorum

    yontem1(“resimler/foto1.jpg”,150,100);

    böyle olması gerekmiyormu?

  3. aydın gokcukur dedi ki:

    kardeş sagol yayın için

    3d printer programı için

    resmin xyz koordinatlarının bulunması gerekiyor. xy olur yardımcı olursan çok iyi olur

  4. aydın gokcukur dedi ki:

    mail atarsan süper olur

Burak için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir