Android / iOS Image Resizer

Hola monstruos del código!

Aquí traigo la solución a las roturas cerebrales de muchos compañeros programadores / diseñadores que tienen que dedicar horas de trabajo a generar los recursos gráficos necesarios para la dolorosa fragmentación de dispositivos móviles que existe hoy en día.

Esta utilidad simplemente parte de los recursos gráficos generados con calidad 320dpi y máximo tamaño, y los reduce en tamaño y dpi para ajustarlos a las principales densidades de pantalla existentes en el mercado según la guía android (ldpi/mdpi/hdpi/xhdpi) y las de los dispositivos iOS (Retina y no Retina).

Como bien se ve en la imagen es tan sencillo como seleccionar la carpeta origen donde se encuentran los recursos en alta calidad, después seleccionamos las calidades y tamaños resultantes, y especificamos finalmente la carpeta de destino donde queremos que vuelque las imágenes con la preciosa y magnifica estructura de android e iOS. Y después de esto pulsamos ZUMBAR!!!, y el programa nos generara la estructura en un periquete.

Podéis bajarlo desde la siguiente URL: https://drive.google.com/file/d/0B07QD84p_9jfMjBORFFpMzFEYlE/edit?usp=sharing

Y os preguntareis, ¿donde esta la chicha de esto? y ¿por que no perdemos calidad de imagen?, pues bien esto es debido principalmente a las siguientes lineas:

graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

using (ImageAttributes wrapMode = new ImageAttributes())
{
	wrapMode.SetWrapMode(System.Drawing.Drawing2D.WrapMode.TileFlipXY);
	graphics.DrawImage(img, new Rectangle(0, 0, newWidth, newHeight), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, wrapMode);
}

Para concretar mas estamos ajustando la calidad para la composición de la nueva imagen, así como el modo de composición como copia del origen. Así como también definir el modo de interpolación y difuminado a la mayor calidad posible.

Pero con esto no termina la cosa, ya que, es muy importante y decisivo definir el como el framework de .NET va a hacer la reducción de la imagen, pues bien esto se lo estamos indicando con el WRAPMODE, donde en nuestro caso le estamos indicando que haga la reducción proporcional de los ejes X y Y.

Espero lo hayáis entendido monstruos del código!!

Un saludete.