/// <summary> /// 获取等比例缩放图片的方法 /// </summary> /// <param name="imgPath">待缩放图片路径</param> /// <param name="savePath">缩放图片保存路径</param> /// <param name="format">缩放图片保存的格式</param> /// <param name="scaling">要保持的宽度或高度</param> /// <param name="keepWidthOrHeight">如果为true则保持宽度为scaling,否则保持高度为scaling</param> /// <returns></returns> public bool GetThumbnail(string imgPath, string savePath, ImageFormat format, int scaling, bool keepWidthOrHeight) { try { using (Bitmap myBitmap = new Bitmap(imgPath)) { int width = 0; int height = 0; int tw = myBitmap.Width;//图像的实际宽度 int th = myBitmap.Height;//图像的实际高度 if (keepWidthOrHeight)//保持宽度 { #region 自动保持宽度 if (scaling >= tw) { width = tw; height = th; } else { double ti = Convert.ToDouble(tw) / Convert.ToDouble(scaling); if (ti == 0d) { width = tw; height = th; } else { width = scaling; height = Convert.ToInt32(Convert.ToDouble(th) / ti); } } #endregion } else { #region 自动保持高度 if (scaling >= th) { width = tw; height = th; } else { double ti = Convert.ToDouble(th) / Convert.ToDouble(scaling); if (ti == 0d) { width = tw; height = th; } else { width = Convert.ToInt32(Convert.ToDouble(tw) / ti); height = scaling; } } #endregion } using (Image myThumbnail = myBitmap.GetThumbnailImage(width, height, () => { return false; }, IntPtr.Zero)) { myThumbnail.Save(savePath, format); } } return true; } catch { return false; } }
上面的方法适合在vs2008中使用,如果是2005只需将 using (Image myThumbnail = myBitmap.GetThumbnailImage(width, height, () => { return false; }, IntPtr.Zero))这句换成using (Image myThumbnail = myBitmap.GetThumbnailImage(width, height, new Image.GetThumbnailImageAbort(delegate { return false; }), IntPtr.Zero))即可。
使用示例:GetThumbnail("d:/1.jpg", "d:/2.jpg", ImageFormat.Jpeg, 263, false);