<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Resize images proportionally, with high quality ouput</Title>
      <Shortcut>Resizeimagesproportionally,withhighqualityouput</Shortcut>
      <Description>Resize images proportionally, with high quality ouput [C#]</Description>
      <Author>Ernesto Giralt</Author>
      <HelpUrl>/PreviewSnippet.aspx?SnippetID=b7f2bc8f-d840-4358-a5e5-1c0451678708</HelpUrl>
      <SnippetTypes>
        <SnippetType>SurroundsWith</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Code Language="csharp"><![CDATA[        public Image ResizeImage(Image image, int newWidth, int newHeight)
        {
            // Algorithm to resize proportionally the image
            // 2.) Determine the target image ratio and the file's image ratio (width divided by depth)
            // 3.) If the file's image ratio is greater-than the target image ratio, then we know that 
            // we have to size proportionally based on WIDTH, otherwise we size proportionally based 
            // on HEIGHT (and if it was not a valid image, return an empty resize string) 
            double originalRatio = (double) image.Width / image.Height;
            double standardRatio = (double) newWidth / newHeight;

            // Constraint the sizes
            if (originalRatio > standardRatio)
                newHeight = (int) (image.Height * newWidth / image.Width);
            else
                newWidth = (int) (image.Width * newHeight / image.Height);

            System.Drawing.Image result = new Bitmap(newWidth, newHeight);
            System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(result);

            // Set the quality options
            graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphic.SmoothingMode = SmoothingMode.HighQuality;
            graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphic.CompositingQuality = CompositingQuality.HighQuality;
           
            // Draw the image with the resized dimensions
            graphic.DrawImage(image, 0, 0, newWidth, newHeight);

            return result;
        }]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>