技不如人

Welcome to Rickel's blog.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

生成高品质的缩略图

Posted on 2007-02-04 16:02  Rickel  阅读(531)  评论(0编辑  收藏  举报
转自:http://hi.baidu.com/zhaoyf/blog/item/06d6b812175371cec2fd7812.html

高品质,就是指定Graphic的
InterpolationMode属性为HighQualityBicubic

public static void myGetThumbnailImage(string SourceFile, string strSavePathFile, int ThumbWidth, int ThumbHeight, string BgColor) 
    { 
        System.Drawing.Image oImg 
= System.Drawing.Image.FromFile(SourceFile); 
        
//小图 
        int intwidth, intheight; 
        
if (oImg.Width > oImg.Height) 
        { 
            
if (oImg.Width > ThumbWidth) 
            { 
                intwidth 
= ThumbWidth; 
                intheight 
= (oImg.Height * ThumbWidth) / oImg.Width; 
            } 
            
else 
            { 
                intwidth 
= oImg.Width; 
                intheight 
= oImg.Height; 
            } 
        } 
        
else 
        { 
            
if (oImg.Height > ThumbHeight) 
            { 
                intwidth 
= (oImg.Width * ThumbHeight) / oImg.Height; 
                intheight 
= ThumbHeight; 
            } 
            
else 
            { 
                intwidth 
= oImg.Width; 
                intheight 
= oImg.Height; 
            } 
        } 
        
//构造一个指定宽高的Bitmap 
        Bitmap bitmay = new Bitmap(intwidth, intheight); 
        Graphics g 
= Graphics.FromImage(bitmay); 
        Color myColor; 
        
if (BgColor == null
            myColor 
= Color.FromName("white"); 
        
else 
            myColor 
= Color.FromName(BgColor); 
        
//用指定的颜色填充Bitmap 
        g.Clear(myColor); 
        g.InterpolationMode 
= InterpolationMode.HighQualityBicubic;  
        
//开始画图 
        g.DrawImage(oImg, new Rectangle(00, intwidth, intheight), new Rectangle(00, oImg.Width, oImg.Height), GraphicsUnit.Pixel); 
        bitmay.Save(strSavePathFile, System.Drawing.Imaging.ImageFormat.Jpeg); 
        g.Dispose(); 
        bitmay.Dispose(); 
        oImg.Dispose(); 
        
//删除源图 
        try 
        { 
            File.Delete(SourceFile); 
        } 
        
catch 
        { 
        } 
    }