Estoy intentando cambiar el tamaño de una imagen conservando la relación de aspecto de la imagen original para que la nueva imagen no se vea aplastada.
p.ej:
Convierta una imagen de 150 * 100 en una imagen de 150 * 150.
Los 50 píxeles adicionales de la altura deben rellenarse con un color de fondo blanco.
Este es el código actual que estoy usando.
Funciona bien para cambiar el tamaño, pero cambiar la relación de aspecto de la imagen original aplasta la nueva imagen.
private void resizeImage(string path, string originalFilename,
int width, int height)
{
Image image = Image.FromFile(path + originalFilename);
System.Drawing.Image thumbnail = new Bitmap(width, height);
System.Drawing.Graphics graphic =
System.Drawing.Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, width, height);
System.Drawing.Imaging.ImageCodecInfo[] info =
ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality,
100L);
thumbnail.Save(path + width + "." + originalFilename, info[1],
encoderParameters);
}
EDITAR: Me gustaría que la imagen se rellene en lugar de recortar