在asp.net中调整图像大小

时间:2009-09-29 10:27:06

标签: c# asp.net

我有这个代码来调整图像大小,但图像看起来不太好:

public Bitmap ProportionallyResizeBitmap(Bitmap src, int maxWidth, int maxHeight)
{

    // original dimensions
    int w = src.Width;
    int h = src.Height;
    // Longest and shortest dimension
    int longestDimension = (w > h) ? w : h;
    int shortestDimension = (w < h) ? w : h;
    // propotionality
    float factor = ((float)longestDimension) / shortestDimension;
    // default width is greater than height
    double newWidth = maxWidth;
    double newHeight = maxWidth / factor;
    // if height greater than width recalculate
    if (w < h)
    {
        newWidth = maxHeight / factor;
        newHeight = maxHeight;
    }
    // Create new Bitmap at new dimensions
    Bitmap result = new Bitmap((int)newWidth, (int)newHeight);
    using (Graphics g = Graphics.FromImage((System.Drawing.Image)result))
        g.DrawImage(src, 0, 0, (int)newWidth, (int)newHeight);
    return result;
}

2 个答案:

答案 0 :(得分:1)

尝试将图形对象的InterpolationMode设置为某个值,例如HighQualityBicubic。这应该确保调整大小/缩放图像看起来比“默认”好得多。

所以,在您发布的代码中,而不是:

// Create new Bitmap at new dimensions
Bitmap result = new Bitmap((int)newWidth, (int)newHeight);
using (Graphics g = Graphics.FromImage((System.Drawing.Image)result))
   g.DrawImage(src, 0, 0, (int)newWidth, (int)newHeight);
return result;

尝试这样做:

// Create new Bitmap at new dimensions
Bitmap result = new Bitmap((int)newWidth, (int)newHeight);
using (Graphics g = Graphics.FromImage((System.Drawing.Image)result))
{
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.DrawImage(src, 0, 0, (int)newWidth, (int)newHeight);
}
return result;

(注意将InterpolationMode属性设置为InterpolationMode枚举值之一的行。)

请看这个链接:
How to: Use Interpolation Mode to Control Image Quality During Scaling
有关在调整大小/缩放时控制图像质量的更多信息。

另见CodeProject文章:
Resizing a Photographic image with GDI+ for .NET
有关不同视觉效果的信息,各种InterpolationMode枚举设置将在图像上具有。 (大约三分之二的文章,在题为“最后一件事......”)的章节中。

答案 1 :(得分:0)

如果您需要动态调整大小我建议您尝试我最近写的HttpHandler I've posted the code on my blog(对不起,但是是意大利语)。

通过一些修改,您也可以使用该代码将转换后的图像保存在磁盘上。