/// <summary> /// 图片按比列缩放 /// </summary> /// <param name="M_OldPath">源图片路径</param> /// <param name="M_NewPath">新图片路径</param> /// <param name="M_Width">新图片的宽度</param> /// <param name="M_Height">新图片的高度</param> public static void SmartZoom(string M_OldPath, string M_NewPath, int M_Width, int M_Height) { System.Drawing.Image originalImage = System.Drawing.Image.FromFile(M_OldPath); int towidth = 0; int toheight = 0; int OldWidth = originalImage.Width; int OldHeight = originalImage.Height; //OldWidth:OldHeight=X: if (OldWidth <= M_Width && OldHeight <= M_Height) { towidth = OldWidth; toheight = OldHeight; } if (OldWidth <= M_Width && OldHeight > M_Height) { towidth = M_Height * OldWidth / OldHeight; toheight = M_Height; //OldWidth:OldHeight=:X } if (OldWidth > M_Width && OldHeight <= M_Height) { towidth = M_Height;//OldWidth:OldHeight=X: toheight = M_Width * OldHeight / OldWidth; } if (OldWidth > M_Width && OldHeight > M_Height) { if (OldWidth > OldHeight) { towidth = M_Width; toheight = M_Width * OldHeight / OldWidth; } if (OldWidth < OldHeight) { towidth = M_Height * OldWidth / OldHeight; toheight = M_Height; } if (OldWidth == OldHeight) { towidth = M_Width; toheight = M_Height; } } int x = 0;//左上角的x坐标 int y = 0;//左上角的y坐标 //新建一个bmp图片 System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight); //新建一个画板 Graphics g = System.Drawing.Graphics.FromImage(bitmap); //设置高质量插值法 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //清空画布并以透明背景色填充 g.Clear(Color.Transparent); //在指定位置并且按指定大小绘制原图片的指定部分 g.DrawImage(originalImage, x, y, towidth, toheight); try { //以jpg格式保存缩略图 bitmap.Save(M_NewPath, System.Drawing.Imaging.ImageFormat.Jpeg); } catch (System.Exception e) { throw e; } finally { originalImage.Dispose(); bitmap.Dispose(); g.Dispose(); } }