Asp.net 请帮助我使用image.GetThumbnailImage(它创建的图像质量非常低)

Asp.net 请帮助我使用image.GetThumbnailImage(它创建的图像质量非常低),asp.net,image,thumbnails,system.drawing,Asp.net,Image,Thumbnails,System.drawing,我使用此代码创建缩略图 System.Drawing.Image.GetThumbnailImageAbort abort = new System.Drawing.Image.GetThumbnailImageAbort(this.ThumbnailCallback); System.Drawing.Image image2 = image.GetThumbnailImage((int)Math.Round((double)wid / difference), (int)Math.Round(

我使用此代码创建缩略图

System.Drawing.Image.GetThumbnailImageAbort abort = new System.Drawing.Image.GetThumbnailImageAbort(this.ThumbnailCallback);
System.Drawing.Image image2 = image.GetThumbnailImage((int)Math.Round((double)wid / difference), (int)Math.Round((double)hei / difference), abort, IntPtr.Zero);
image2.Save(str2, System.Drawing.Imaging.ImageFormat.Jpeg);
image2.Dispose();
但是我得到了这张质量很低的照片

但它应该是这样的

我做错了什么
或者如何实现这一点

您的问题实际上不是使用
GetThumbnailImage()
方法,而是如何保存文件。您需要指定要保存的JPEG的质量级别,否则它似乎总是默认为非常低的值

以这段代码为指导(它来自一个旧的.NET2.0项目;代码在4.0下编译仍然可以正常工作,但在4.0中可能有一个更直接的方法;我从来没有理由检查)

ImageCodecInfo[]编码器=ImageCodecInfo.GetImageEncoders();
ImageCodeInfo JPEG编码器=空;
对于(int x=0;x
这里是另一个解决方案,它应该总是在不取出编码器的情况下工作。它调整了宽度和高度之间的关系。。。根据您的需要进行修改

/// <summary>
/// Resize an image with high quality
/// </summary>
public static Image ResizeImage(Image srcImage, int width)
{
    var b = new Bitmap(width, srcImage.Height * width / srcImage.Width);
    using (var g = Graphics.FromImage((Image)b))
    {
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage(srcImage, 0, 0, b.Width, b.Height);
    }
    return b;
}
//
///以高质量调整图像大小
/// 
公共静态图像大小图像(图像srcImage,int-width)
{
var b=新位图(宽度,srcImage.Height*width/srcImage.width);
使用(var g=Graphics.FromImage((Image)b))
{
g、 插值模式=插值模式。高质量双三次;
g、 DrawImage(srcImage,0,0,b.宽度,b.高度);
}
返回b;
}

谢谢-当我靠近电脑时,我会尝试一下,并会向您发送aagain-谢谢
/// <summary>
/// Resize an image with high quality
/// </summary>
public static Image ResizeImage(Image srcImage, int width)
{
    var b = new Bitmap(width, srcImage.Height * width / srcImage.Width);
    using (var g = Graphics.FromImage((Image)b))
    {
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage(srcImage, 0, 0, b.Width, b.Height);
    }
    return b;
}