zoukankan      html  css  js  c++  java
  • 原比例生成缩略图实例

            public Image GetThumb(int w,int h,Image source)
            {
                try
                {
                    double zoom=1;
                    if (source.Size.Height >= source.Size.Width)
                    {
                        if (source.Size.Height > 70)
                        {
                            zoom = source.Size.Height / 70;
                            w = Convert.ToInt32(source.Size.Width / (zoom));
                        }
                        else
                        {
                            w = source.Size.Width;
                            h = source.Size.Height;
                        }
                    }
                    else
                    {
                        if (source.Size.Width > 70)
                        {
                            zoom =  source.Size.Width/70;
                            h = Convert.ToInt32(source.Size.Height / (zoom));
                        }
                        else
                        {
                            w = source.Size.Width;
                            h = source.Size.Height;
                        }
                    }
    
                    Bitmap bmp = new Bitmap(70, 70);
                    Bitmap oldBmp = new Bitmap(source); // 加载原图片       
                    Bitmap newbmp = new Bitmap(w, h); // 创建新图片   
                    Graphics grap = Graphics.FromImage(newbmp); // 绑定画板     
                    // 原图片的开始绘制位置,及宽和高 (控制Rectangle的组成参数,便可实现对图片的剪切)    
                    Rectangle oldRect = new Rectangle(0, 0, oldBmp.Width, oldBmp.Height);           
                    // 绘制在新画板中的位置,及宽和高 (在这里是完全填充)            
                    Rectangle newRect = new Rectangle(0, 0, w, h);      
                    // 指定新图片的画面质量          
                    grap.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                    //grap.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    //grap.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                    //grap.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    // 把原图片指定位置的图像绘制到新画板中     
                    grap.DrawImage(oldBmp, newRect, oldRect, GraphicsUnit.Pixel);
                    Graphics g = Graphics.FromImage(bmp);
                    Rectangle minRec = new Rectangle(0, 0, newbmp.Width, newbmp.Height);
                    // 绘制在新画板中的位置,及宽和高 (在这里是完全填充)            
                    Rectangle panleRec = new Rectangle((70-newbmp.Width)/2, (70-newbmp.Height)/2, 70, 70);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    //g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                    //g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    
                    g.DrawImage(newbmp, panleRec, minRec, GraphicsUnit.Pixel);
                    //float startpw = (70 - w) / 2 / newbmp.HorizontalResolution * dpi_x;
                    //float startph = (70 - h) / 2 / newbmp.VerticalResolution * dpi_y;
                    //float pw = w / newbmp.HorizontalResolution * dpi_x;
                    //float ph = h / newbmp.VerticalResolution * dpi_y;
                    //g.DrawImage(newbmp, startpw, startph, pw, ph);
                    g.Dispose();
                    grap.Dispose();
                   
                    source.Dispose();
                    return bmp;
                }
                catch (Exception ex)
                {
    
                    ErrHandle.ErrHandler(ex.ToString(), ErrType.Info);
                    return null;
                }
                
            } 
  • 相关阅读:
    每天一个linux命令
    Python 面向对象-下篇
    Python 面向对象-上篇
    何时会发生隐式类型转换
    C++类型检查
    无符号保留原则
    bool类型为什么可以当做int
    在类的外部定义成员函数注意形式
    局部类
    命名规范
  • 原文地址:https://www.cnblogs.com/bile/p/3304764.html
Copyright © 2011-2022 走看看