visual una tiempo tamaño tag que imagen hacer ejecucion con como cambie cambiar boton ajustar c# .net graphics image-manipulation

c# - una - ¿Cómo cambiar el tamaño proporcional de la imagen de cualquier tipo en.NET?



como hacer que un picturebox cambie de imagen (2)

¿Es posible cambiar el tamaño de la imagen proporcionalmente de forma independiente del tipo de imagen (bmp, jpg, png, etc.)?

Tengo este código y sé que falta algo (pero no sé qué):

public bool ResizeImage(string fileName, string imgFileName, ImageFormat format, int width, int height) { try { using (Image img = Image.FromFile(fileName)) { Image thumbNail = new Bitmap(width, height, img.PixelFormat); Graphics g = Graphics.FromImage(thumbNail); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle rect = new Rectangle(0, 0, width, height); g.DrawImage(img, rect); thumbNail.Save(imgFileName, format); } return true; } catch (Exception) { return false; } }

Si no es posible, ¿cómo puedo cambiar el tamaño proporcional de una imagen JPEG?

Sé que usando este método , pero no sé dónde poner esto (!).


Creo que tu código está bien, pero teniendo en cuenta el ancho y la altura como parámetros es donde te equivocas en mi opinión. ¿Por qué la persona que llama de este método debe decidir qué tan grande quieren el ancho y la altura? Sugeriría cambiarlo a un porcentaje:

public bool ResizeImage(string fileName, string imgFileName, ImageFormat format, int percent) { try { using (Image img = Image.FromFile(fileName)) { int width = img.Width * (percent * .01); int height = img.Height * (percent * .01); Image thumbNail = new Bitmap(width, height, img.PixelFormat); Graphics g = Graphics.FromImage(thumbNail); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle rect = new Rectangle(0, 0, width, height); g.DrawImage(img, rect); thumbNail.Save(imgFileName, format); } return true; } catch (Exception) { return false; } }


En primer lugar, no está tomando la altura y el ancho ACTUAL de la imagen. Para poder redimensionar proporcionalmente, necesitará obtener el alto / ancho actual de la imagen y cambiar el tamaño de acuerdo con eso.

A partir de ahí, encuentre el atributo más grande y redimensione proporcionalmente en función de eso.

Por ejemplo, digamos que la imagen actual es de 800 x 600 y que desea cambiar el tamaño proporcionalmente en un espacio de 400 x 400. Coge la mayor proporción (800) y encuentra su relación con el nuevo tamaño. 800 -> 400 = .5 Ahora tome esa proporción y multiplique por la segunda dimensión (600 * .5 = 300).

Su nuevo tamaño es 400 x 300. Aquí hay un ejemplo de PHP (lo siento ... pero lo conseguirá)

$thumb_width = 400; $thumb_height = 400; $orig_w=imagesx($src_img); $orig_h=imagesy($src_img); if ($orig_w>$orig_h){//find the greater proportion $ratio=$thumb_width/$orig_w; $thumb_height=$orig_h*$ratio; }else{ $ratio=$thumb_height/$orig_h; $thumb_width=$orig_w*$ratio; }