车神

专注MS.NET技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

生成缩略图

Posted on 2007-08-07 14:57  车神  阅读(141)  评论(0)    收藏  举报
/// <summary> 
/// 生成缩略图 
/// </summary> 
/// <param name="originalImagePath">源图路径(物理路径)</param> 
/// <param name="thumbnailPath">缩略图路径(物理路径)</param> 
/// <param name="width">缩略图宽度</param> 
/// <param name="height">缩略图高度</param> 
/// <param name="mode">生成缩略图的方式 HW:指定高宽缩放(可能变形),P:按比例缩放</param>     

public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) 

    Image originalImage 
= Image.FromFile(originalImagePath); 
    
    
int towidth = 0;//图象宽度
    int toheight = 0;//图象高度
    int x = 0;//图象在画布中起始x坐标
    int y = 0;//图象在画布中起始y坐标
    int ow = originalImage.Width;//原图宽度
    int oh = originalImage.Height;//原图高度
    double dw = Convert.ToDouble(width);
    
double dh = Convert.ToDouble(height);
    
double dow = Convert.ToDouble(ow);
    
double doh = Convert.ToDouble(oh);

    
switch (mode) 
    
{
        
case "HW"://指定高宽缩放(可能变形)
            towidth = width;
            toheight 
= height;
            
break;
        
case "P"://按比例缩放
            if(dw/dow > dh/doh)
            
{
                towidth 
= ow * height / oh;
                toheight 
= oh * height / oh;
                x 
= (width - towidth) / 2;
            }

            
else
            
{
                towidth 
= ow * width / ow;
                toheight 
= oh * width / ow;
                y 
= (height - toheight) / 2;
            }

            
break
        
default : 
            
break
    }
     
    
    
//新建一个bmp图片 
    Image bitmap = new System.Drawing.Bitmap(width,height); 

    
//新建一个画板 
    Graphics g = System.Drawing.Graphics.FromImage(bitmap); 

    
//设置高质量插值法 
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 

    
//设置高质量,低速度呈现平滑程度 
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

    
//清空画布并以透明背景色填充 
    g.Clear(Color.White);         

    
//在指定位置并且按指定大小绘制原图片的指定部分 
    g.DrawImage(originalImage, new Rectangle(x, y, towidth, toheight),new Rectangle(00, ow,oh), GraphicsUnit.Pixel); 

    
try 
    
{             
        
//以jpg格式保存缩略图 
        bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); 
    }
 
    
catch(System.Exception e) 
    

        
throw e; 
    }
 
    
finally 
    

        originalImage.Dispose(); 
        bitmap.Dispose();                         
        g.Dispose(); 
    }
 
}