C Sharp Resim Boyutlandırma , Resize Image

  1. Eslem78
    7
    815
    20.05.2019 14:11:00

    C# da resmi yeniden boyutlandırma işlemini nasıl yapabilirim ? Resim küçültme yada bazı durumlarda da resim büyütme kodlarına ihtiyacım var , efektif bir yol ne var

    c# .net 3 ay önce 365 Görüntüleme

( 2 ) Cevap

  1. koraydrk
    7
    2060
    20.05.2019 15:57:00

    aşağıdaki metotda verdiğim yöntem ile boyutlandırma yaparken çok fazla kalite kaybı yaşamadan sonuca ulaşabilirsin

    //c# resim yeniden boyutlandırma
    //yüksek kalite ile
    public Bitmap ImageResize(Image oldImage, int newWidth, int newHeight)
    {
        //yeni resim için rectangle ve bitmap objesi oluşturma
        var rectangle = new Rectangle(0, 0, newWidth, newHeight);
        var newImage = new Bitmap(newWidth, newHeight);
    
        newImage.SetResolution(oldImage.HorizontalResolution, oldImage.VerticalResolution);
    
        using (var graphics = Graphics.FromImage(newImage))
        {
            //resmin kaliteli olarak boyutlanrılması ayarları
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.CompositingMode = CompositingMode.SourceCopy;
            graphics.CompositingQuality = CompositingQuality.HighQuality;        
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
    
            using (var wrapMode = new ImageAttributes())
            {
                wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                graphics.DrawImage(oldImage, rectangle, 0, 0, oldImage.Width,oldImage.Height, GraphicsUnit.Pixel, wrapMode);
            }
        }
    
        //yeni resim geri dön
        return newImage;
    }
    
  2. askinglr34
    4
    2427
    20.05.2019 17:23:00

    yukardaki kodların biraz daha sadesini paylaşayım bende , Interpolation , PixelOffset ve Smoothing Mode ayarları yapılsa yeterli diye düşünüyorum , bu ayarların açıklamalarını kodda ekledim

    //code.replyfeed.com , resimyeniden boyutlandırma
    public Bitmap ResizeImage(Image oldImage, int newWidth, int newHeight)
    {
        Bitmap newImage = new Bitmap(newWidth, newHeight);
        using (Graphics grph = Graphics.FromImage(newImage))
        {
            //enterpolasyon modu ayarı
            grph.InterpolationMode = InterpolationMode.HighQualityBicubic;
            //yeni resmin kalite ayarı
            grph.SmoothingMode = SmoothingMode.HighQuality;
            //piksellerin nasıl kaydırılacağı ayarı
            grph.PixelOffsetMode = PixelOffsetMode.HighQuality;
            //yeniden boyutlandırma işlemi
            grph.DrawImage(oldImage, new Rectangle(0, 0, newWidth, newHeight));
        }
        return newImage;
    }
    

Cevabınız