2011-11-21 26 views

Respuesta

1

Si reduce el ancho en un 25 por ciento a un valor fijo, debe reducir la altura en un 25 por ciento.

Si está aumentando el ancho en un 25 por ciento a un valor fijo, debe aumentar la altura en un 25 por ciento.

Es realmente sencillo.

0

Creo que hay muchas muestras de esto si las buscas. Aquí está el que yo utilizo habitualmente ...

public static Stream ResizeGdi(Stream stream, System.Drawing.Size size) 
    { 
     Image image = Image.FromStream(stream); 

     int width = image.Width; 
     int height = image.Height; 

     int sourceX = 0, sourceY = 0, destX = 0, destY = 0; 

     float percent = 0, percentWidth = 0, percentHeight = 0; 
     percentWidth = ((float)size.Width/(float)width); 
     percentHeight = ((float)size.Height/(float)height); 

     int destW = 0; 
     int destH = 0; 

     if (percentHeight < percentWidth) 
     { 
      percent = percentHeight; 
     } 
     else 
     { 
      percent = percentWidth; 
     } 

     destW = (int)(width * percent); 
     destH = (int)(height * percent); 

     MemoryStream mStream = new MemoryStream(); 

     if (destW == 0 
      && destH == 0) 
     { 
      image.Save(mStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
      return mStream; 
     } 

     using (Bitmap bitmap = new Bitmap(destW, destH, System.Drawing.Imaging.PixelFormat.Format48bppRgb)) 
     { 
      using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap)) 
      { 
       //graphics.Clear(Color.Red); 
       graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
       graphics.DrawImage(image, 
        new Rectangle(destX, destY, destW, destH), 
        new Rectangle(sourceX, sourceY, width, height), 
        GraphicsUnit.Pixel); 
      } 

      bitmap.Save(mStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 

     mStream.Position = 0; 
     return mStream as Stream; 
    } 

Ejemplo del código de llamada ...

Stream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None); 

resizedStream = ImageUtility.ResizeGdi(stream, new System.Drawing.Size(resizeWidth, resizeHeight)); 
+0

El quiere mantener constante la anchura, esto no va a funcionar – rboarman

0

Una búsqueda rápida en el proyecto de código se ha encontrado el siguiente artículo. Permite cambiar el tamaño de las imágenes, que acepta un booleano para restringir la nueva imagen y mantener la relación de aspecto de los originales. No estoy seguro de cómo es la calidad, ya que no se proporcionaron capturas de pantalla. Véase el artículo here

1

Suponiendo que hay un (double width) Variable:

Image imgOriginal = Bitmap.FromFile(path); 
double height = (imgOriginal.Height * width)/imgOriginal.Width; 
Image imgnew = new Bitmap((int)width, (int)height, PixelFormat.Format32bppArgb); 
Graphics g = Graphics.FromImage(imgnew); 
g.DrawImage(imgOriginal, new Point[]{new Point(0,0), new Point(width, 0), new Point(0, height)}, new Rectangle(0,0,imgOriginal.Width, imgOriginal.Height), GraphicsUnit.Pixel); 

Al final se le realizarán una nueva imagen con widthxheight, entonces, que tenga; necesitará para limpiar el gráfico guardar el correo imgnew

17

Esto escala en el eje vertical única:

public static Image ResizeImageFixedWidth(Image imgToResize, int width) 
    { 
     int sourceWidth = imgToResize.Width; 
     int sourceHeight = imgToResize.Height; 

     float nPercent = ((float)width/(float)sourceWidth); 

     int destWidth = (int)(sourceWidth * nPercent); 
     int destHeight = (int)(sourceHeight * nPercent); 

     Bitmap b = new Bitmap(destWidth, destHeight); 
     Graphics g = Graphics.FromImage((Image)b); 
     g.InterpolationMode = InterpolationMode.HighQualityBicubic; 

     g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); 
     g.Dispose(); 

     return (Image)b; 
    } 
Cuestiones relacionadas