|
Posted on
2007-08-07 14:57
车神
阅读( 141)
评论()
收藏
举报
![]() /**//// <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(0, 0, 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();
}
}
|