Search code examples
c#asp.netimage-resizingaspect-ratio

C# : How to resize image proportionately with max height


I need to resize my image proportionately without changing aspect ratio.I have the code to resize with fixed hight and width but I need to resize image proportionately with max height(say 600 pixels). How can I modify the code to suit my requirement?

public static void Main()
{
  var image = Image.FromFile(@"c:\logo.png");
  var newImage = ScaleImage(image, 300, 400);
  newImage.Save(@"c:\test.png", ImageFormat.Png);
}

public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
 {
  var ratioX = (double)maxWidth / image.Width;
  var ratioY = (double)maxHeight / image.Height;
  var ratio = Math.Min(ratioX, ratioY);

  var newWidth = (int)(image.Width * ratio);
  var newHeight = (int)(image.Height * ratio);

  var newImage = new Bitmap(newWidth, newHeight);
  Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
  return newImage;
}

Please provide your valuable thoughts.


Solution

  • This almost feels to easy and I feel I'm missing something. Anyway, won't that do the trick?

    public static Image ScaleImage(Image image, int maxHeight) 
    { 
        var ratio = (double)maxHeight / image.Height; 
    
        var newWidth = (int)(image.Width * ratio); 
        var newHeight = (int)(image.Height * ratio); 
    
        var newImage = new Bitmap(newWidth, newHeight); 
        using (var g = Graphics.FromImage(newImage))
        {
            g.DrawImage(image, 0, 0, newWidth, newHeight); 
        }
        return newImage; 
    }