使用GetThumbnailImage进行图片缩放操作
/// <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);