zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    小米9一直无限重启是怎么办
    发现一个大神做了一个ROS-ROUTEROS的中文手册中文使用说明书
    浅谈CN2 GIA和CN2 GT线路的区别
    本地ROS多线访问同一个服务器的IP,比如阿里云的IP,创建冗余线路
    syslog之三:建立Windows下面的syslog日志服务器
    增值税专用发票“抵扣联”和“发票联”丢失怎么办
    在线播放 4K 内容的需要多少带宽?
    戴尔R640服务器用H740P配置阵列
    搞微服务用阿里开源的 Nacos 真香啊!
    保持ssh不自动断开
  • 原文地址:https://www.cnblogs.com/poissonnotes/p/2815822.html
Copyright © 2011-2022 走看看