2011-11-21 14 views

Odpowiedz

1

Jeśli zmniejszasz szerokość o 25 procent do ustalonej wartości, musisz zmniejszyć wysokość o 25 procent.

Jeśli zwiększasz szerokość o 25 procent do ustalonej wartości, musisz zwiększyć wysokość o 25 procent.

To naprawdę proste.

0

Myślę, że istnieje mnóstwo próbek tego, jeśli ich szukasz. Oto jeden ja powszechnie używać ...

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; 
    } 

Przykład kodu wywołującego ...

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

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

chce zachować stałą szerokość, to nie będzie działać – rboarman

0

Szybkie wyszukiwanie w projekcie kodu znalazła poniższy artykuł. Umożliwia zmianę rozmiaru obrazów, które akceptują wartość logiczną, aby ograniczyć nowy obraz, aby zachować proporcje oryginału. Nie jestem pewien, jaka jest jakość, ponieważ nie dostarczono zrzutu ekranu. Zobacz artykuł here

1

zakładając, że istnieje (double width) Zmienna:

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); 

W końcu będziesz miał nowy obraz z WIDTHxHEIGHT więc you'll trzeba opróżnić grafika e zapisać imgnew.

17

Będzie skalę w osi pionowej tylko:

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; 
    } 
Powiązane problemy