生成后有的缩略图很模糊
/// <param name="pPath">图片路径</param>
/// <param name="pSavePath">保存路径</param>
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
/// <param name="pPartWidth">目标图片的宽度</param>
/// <param name="pPartHeight">目标图片的高度</param>
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
/// <param name="imageWidth">缩放后的宽度</param>
/// <param name="imageHeight">缩放后的高度</param>
/// <param name="houzhui">图片格式</param>
public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY, int imageWidth, int imageHeight,string houzhui)
{
string normalJpgPath = pSavedPath;
using (Image originalImg = Image.FromFile(pPath))
{
if (originalImg.Width == imageWidth && originalImg.Height == imageHeight)
{
GetPart(pPath, pSavedPath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight, pOrigStartPointX, pOrigStartPointY);
return;
} Image.GetThumbnailImageAbort callback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
Image zoomImg = originalImg.GetThumbnailImage(imageWidth, imageHeight, callback, IntPtr.Zero);//缩放
Bitmap partImg = new Bitmap(pPartWidth, pPartHeight); Graphics graphics = Graphics.FromImage(partImg);
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小) graphics.DrawImage(zoomImg, destRect, origRect, GraphicsUnit.Pixel); originalImg.Dispose();
if (File.Exists(normalJpgPath))
{
File.SetAttributes(normalJpgPath, FileAttributes.Normal);
File.Delete(normalJpgPath);
}
partImg.Save(normalJpgPath);
//switch (houzhui)
//{
// case "gif": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Gif); break;
// case "jpg": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
// case "bmp": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
// case "png": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Png); break;
// case "GIF": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Gif); break;
// case "JPG": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
// case "BMP": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
// case "PDG": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Png); break;
//}
}
}
/// <param name="pPath">图片路径</param>
/// <param name="pSavePath">保存路径</param>
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
/// <param name="pPartWidth">目标图片的宽度</param>
/// <param name="pPartHeight">目标图片的高度</param>
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
/// <param name="imageWidth">缩放后的宽度</param>
/// <param name="imageHeight">缩放后的高度</param>
/// <param name="houzhui">图片格式</param>
public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY, int imageWidth, int imageHeight,string houzhui)
{
string normalJpgPath = pSavedPath;
using (Image originalImg = Image.FromFile(pPath))
{
if (originalImg.Width == imageWidth && originalImg.Height == imageHeight)
{
GetPart(pPath, pSavedPath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight, pOrigStartPointX, pOrigStartPointY);
return;
} Image.GetThumbnailImageAbort callback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
Image zoomImg = originalImg.GetThumbnailImage(imageWidth, imageHeight, callback, IntPtr.Zero);//缩放
Bitmap partImg = new Bitmap(pPartWidth, pPartHeight); Graphics graphics = Graphics.FromImage(partImg);
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小) graphics.DrawImage(zoomImg, destRect, origRect, GraphicsUnit.Pixel); originalImg.Dispose();
if (File.Exists(normalJpgPath))
{
File.SetAttributes(normalJpgPath, FileAttributes.Normal);
File.Delete(normalJpgPath);
}
partImg.Save(normalJpgPath);
//switch (houzhui)
//{
// case "gif": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Gif); break;
// case "jpg": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
// case "bmp": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
// case "png": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Png); break;
// case "GIF": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Gif); break;
// case "JPG": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
// case "BMP": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
// case "PDG": partImg.Save(normalJpgPath, System.Drawing.Imaging.ImageFormat.Png); break;
//}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货