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

posted @ 2014-02-26 13:02  zzg168  阅读(170)  评论(0编辑  收藏  举报