Cambiar el tamaño de una imagen en WPF – C#

August 7, 2010

Es muy común que nos veamos en la necesidad de cambiar el tamaño de una imagen antes de, por ejemplo, subirla a la web. Para esto, hay muchos métodos que podemos utilizar, unos más sencillos o con más capacidades que otros.

Para aquellas veces que sólo ocupamos cambiar el tamaño de la imagen manteniendo sus proporciones, WPF nos facilita el trabajo con las propiedades DecodePixelWidth o DecodePixelHeight de la clase BitmapImage.

El siguiente método es todo lo que ocupamos para lograrlo:

 
        public static BitmapImage ResizeImage(BitmapImage image, int newSize)
        {
            BitmapImage i = new BitmapImage();
            i.BeginInit();
            i.UriSource = image.UriSource;
            i.DecodePixelWidth = newSize;
            i.EndInit();
            return i;
        }

De aquí es importante notar tres cosas:

Al método le pasamos una imagen y un nuevo tamaño. El nuevo tamaño se asigna a la propiedad DecodePixelWidth que será la nueva anchura de la imagen.

La altura de la imagen se deja sin asignar para que se ajuste automáticamente y la imagen mantenga sus proporciones.

El método regresa una nueva imagen con el tamaño deseado.

Con esta imagen podemos hacer lo que queramos, por ejemplo, con el siguiente código podemos guardarla en formato JPG en algún lugar de la pc:

 
        public static void SaveDecodeToJPG(string filename, BitmapImage image)
        {
            FileStream stream = new FileStream(filename, FileMode.Create);
            JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
            jpgEncoder.Frames.Add(BitmapFrame.Create(image));
            jpgEncoder.Save(stream);
            stream.Close();
        }

Baja un ejemplo de este código funcionando aquí.

Leave a comment