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

 

引用自 http://www.cnblogs.com/sq111433/archive/2009/12/01/1614205.html

posted @ 2012-12-13 10:18  poisson_notes  阅读(8776)  评论(0编辑  收藏  举报