zoukankan      html  css  js  c++  java
  • C#高质量缩略图

    private static Size NewSize( int maxWidth,
    int maxHeight, int width,
    int height )  
    {
        double w = 0.0;
        double h = 0.0;
        double sw = Convert.ToDouble( width );
        double sh = Convert.ToDouble( height ); double mw = Convert.ToDouble( maxWidth );
        double mh = Convert.ToDouble( maxHeight ); if (sw < mw && sh < mh)
        {
            w = sw;
            h = sh;
        }
        else if (( sw/sh ) > ( mw/mh ))
        {
            w = maxWidth;
            h = ( w * sh )/sw;
        }
        else
        {
            h = maxHeight;
            w = ( h * sw )/sh;
        }
        return new Size( Convert.ToInt32( w ), Convert.ToInt32( h ) );
    }

    public static void SendSmallImage( string fileName,
    string newFile,
    int maxHeight,
    int maxWidth )  
    {
        System.Drawing.Image img = System.Drawing.Image.FromFile( fileName );
        System.Drawing.Imaging.ImageFormat
        thisFormat = img.RawFormat;
        Size newSize = NewSize( maxWidth, maxHeight, img.Width, img.Height );
        Bitmap outBmp = new Bitmap( newSize.Width, newSize.Height );
        Graphics g = Graphics.FromImage( outBmp );
        // 设置画布的描绘质量
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage( img, new Rectangle( 0, 0, newSize.Width, newSize.Height ),
        0, 0, img.Width, img.Height, GraphicsUnit.Pixel );
        g.Dispose( );
        // 以下代码为保存图片时,设置压缩质量
        EncoderParameters encoderParams = new EncoderParameters( );
        long[] quality = new long[1];
        quality[0] = 100;
        EncoderParameter encoderParam = new EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality );
        encoderParams.Param[0] = encoderParam;
        //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.
        ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders( );
        ImageCodecInfo jpegICI = null;
        for ( int x = 0;
        x < arrayICI.Length;
        x++ )
        {
            if ( arrayICI[x].FormatDescription.Equals( "JPEG" ) )
            {
                jpegICI = arrayICI[x];
                //设置JPEG编码
                break;
            }
        }
        if ( jpegICI != null )
        {
            outBmp.Save( newFile, jpegICI, encoderParams );
        }
        else
        {
            outBmp.Save( newFile,
            thisFormat );
        }
        img.Dispose( );
        outBmp.Dispose( );
    }


       本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢

  • 相关阅读:
    4. Qt的容器类
    hdu 4507 数位dp(求和,求平方和)
    MVC3和MVC4中CRUD操作
    SSL 中证书能否够使用IP而不是域名
    TinyXml快速入门(一)
    C++ TinyXml操作(含源码下载)
    Tinyxml 操作XML
    msxml 操作xml
    MFC中全局变量的定义及使用
    VC++中操作XMLWin32实例
  • 原文地址:https://www.cnblogs.com/wzg0319/p/1543050.html
Copyright © 2011-2022 走看看