/// <summary> /// Resize image with a directory as source /// </summary> /// <param name="OriginalFileLocation">Image location</param> /// <param name="heigth">new height</param> /// <param name="width">new width</param> /// <param name="keepAspectRatio">keep the aspect ratio</param> /// <param name="getCenter">return the center bit of the image</param> /// <returns>image with new dimentions</returns> public Image resizeImageFromFile(String OriginalFileLocation, int heigth, int width, Boolean keepAspectRatio, Boolean getCenter) { int newheigth = heigth; System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(OriginalFileLocation); // Prevent using images internal thumbnail FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone); FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone); if (keepAspectRatio || getCenter) { int bmpY = 0; double resize = (double)FullsizeImage.Width / (double)width;//get the resize vector if (getCenter) { bmpY = (int)((FullsizeImage.Height - (heigth * resize)) / 2);// gives the Y value of the part that will be cut off, to show only the part in the center Rectangle section = new Rectangle(new Point(0, bmpY), new Size(FullsizeImage.Width, (int)(heigth * resize)));// create the section to cut of the original image //System.Console.WriteLine("the section that will be cut off: " + section.Size.ToString() + " the Y value is minimized by: " + bmpY); Bitmap orImg = new Bitmap((Bitmap)FullsizeImage);//for the correct effect convert image to bitmap. FullsizeImage.Dispose();//clear the original image using (Bitmap tempImg = new Bitmap(section.Width, section.Height)) { Graphics cutImg = Graphics.FromImage(tempImg);// set the file to save the new image to. cutImg.DrawImage(orImg, 0, 0, section, GraphicsUnit.Pixel);// cut the image and save it to tempImg FullsizeImage = tempImg;//save the tempImg as FullsizeImage for resizing later orImg.Dispose(); cutImg.Dispose(); return FullsizeImage.GetThumbnailImage(width, heigth, null, IntPtr.Zero); } } else newheigth = (int)(FullsizeImage.Height / resize);// set the new heigth of the current image }//return the image resized to the given heigth and width return FullsizeImage.GetThumbnailImage(width, newheigth, null, IntPtr.Zero); } /// <summary> /// Resize image with a directory as source /// </summary> /// <param name="OriginalFileLocation">Image location</param> /// <param name="heigth">new height</param> /// <param name="width">new width</param> /// <returns>image with new dimentions</returns> public Image resizeImageFromFile(String OriginalFileLocation, int heigth, int width) { return resizeImageFromFile(OriginalFileLocation, heigth, width, false, false); } /// <summary> /// Resize image with a directory as source /// </summary> /// <param name="OriginalFileLocation">Image location</param> /// <param name="heigth">new height</param> /// <param name="width">new width</param> /// <param name="keepAspectRatio">keep the aspect ratio</param> /// <returns>image with new dimentions</returns> public Image resizeImageFromFile(String OriginalFileLocation, int heigth, int width, Boolean keepAspectRatio) { return resizeImageFromFile(OriginalFileLocation, heigth, width, keepAspectRatio, false); }
方法很不错,可以保持高宽比例,还可以按照比例把原图片放到中间
引用:http://stackoverflow.com/questions/1922040/resize-an-image-c-sharp