一.捕获原图部分视图
/// <summary>
/// 捕获原图部分视图(以中心为起点向四周捕获)
/// </summary>
/// <param name="fromImagePath">原图地址</param>
/// <param name="toImagePath">目标地址</param>
/// <param name="width">要捕获的宽度</param>
/// <param name="height">要捕获的高度</param>
public static void CaptureImage(string fromImagePath, string toImagePath, int width, int height)
{
//原图片文件
Image fromImage = Image.FromFile(fromImagePath);
int originalHeight = fromImage.Height;
int originalWidth = fromImage.Width;
int offsetY = (originalHeight - height) / 2;
int offsetX = (originalWidth - width) / 2;
//创建新图位图
Bitmap bitmap = new Bitmap(width, height);
//创建作图区域
Graphics graphic = Graphics.FromImage(bitmap);
//设置高质量插值法
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清除整个绘图表面,并在其中填充指定背景颜色
graphic.Clear(Color.White);
//截取原图相应区域写入作图区
graphic.DrawImage(fromImage, 0, 0, new Rectangle(offsetX, offsetY, width, height), GraphicsUnit.Pixel);
//从作图区生成新图
Image saveImage = Image.FromHbitmap(bitmap.GetHbitmap());
//保存图片
saveImage.Save(toImagePath, ImageFormat.Png);
//释放资源
saveImage.Dispose();
graphic.Dispose();
bitmap.Dispose();
}
二.生成缩略图
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="serverImagePath">图片地址</param>
/// <param name="thumbnailImagePath">缩略图地址</param>
/// <param name="width">图片宽度</param>
/// <param name="height">图片高度</param>
/// <param name="p"></param>
public static void GetThumbnail(string serverImagePath, string thumbnailImagePath, int width, int height)
{
Image serverImage = Image.FromFile(serverImagePath);
//画板大小
int towidth = width;
int toheight = height;
//原图矩形框的像素点
int ow = serverImage.Width;
int oh = serverImage.Height;
if (ow > oh)
toheight = serverImage.Height * width / serverImage.Width;
else
towidth = serverImage.Width * height / serverImage.Height;
//新建一个bmp图片
Image bm = new Bitmap(width, height);
//新建一个画板
Graphics g = Graphics.FromImage(bm);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(Color.White);
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(serverImage, new Rectangle((width - towidth) / 2, (height - toheight) / 2, towidth, toheight), 0, 0, ow, oh, GraphicsUnit.Pixel);
try
{
//以jpg格式保存缩略图
bm.Save(thumbnailImagePath, ImageFormat.Jpeg);
}
catch (Exception e)
{
throw e;
}
finally
{
serverImage.Dispose();
bm.Dispose();
g.Dispose();
}
}