Scale an Image in C# Preserving Aspect Ratio

If you need to change the size of an Image without changing the ratio of X to Y then this function should do what you want.

The input parameters maxWidth and maxHeight define the largest values that you want to get back out of the image after it has been scaled.

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

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

    var newImage = new Bitmap(newWidth, newHeight);

    using (var graphics = Graphics.FromImage(newImage))
        graphics.DrawImage(bmp, 0, 0, newWidth, newHeight);

    return newImage;
}

Results of Scaling an Image

Here is a test image that we loaded into the scale function.

test-image

And here it is after calling for a maxWidth of 5000 and a maxHeight of 200.

image-scaled-down

You can see that the maxHeight of 200 was obeyed and the image was scaled while maintaining a proper aspect ratio.

Other Image Processing Guides

You may want to check out some of our other Image Processing Guides in C#.

One comment

Leave a Reply

Your email address will not be published. Required fields are marked *