使用构造函数或使用Graphics缩放位图的结果?

时间:2012-10-08 15:37:41

标签: c# asp.net .net graphics bitmap

以下两个代码示例相同,因为它们生成缩放图像。那就是说,第二个产生更高质量的缩放图像吗?我使用的是.NET 4.5。

// The short.
using(Bitmap large = new Bitmap(input, width, height))
{
    // Do whatever.
}


// The long.
using(Bitmap large = new Bitmap(width, height))
{
    using(Graphics g = Graphics.FromImage(large))
    {
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.DrawImage(input, 0, 0, width, height);
    }
    // Do whatever.
}

2 个答案:

答案 0 :(得分:2)

两者之间的区别在于前一个使用默认值;

CompositingQuality: Default
SmoothingMode:      None
InterpolationMode:  Bilinear
PixelOffsetMode:    Default

所以,是的,后者肯定会提升图像质量。

简化,Bitmap构造函数中的相关代码(剥离异常处理)类似于;

Graphics graphics = Graphics.FromImage((Image) this);
graphics.Clear(Color.Transparent);
graphics.DrawImage(original, 0, 0, width, height);

......除了你正在调整质量之外,这几乎就是你所拥有的。

答案 1 :(得分:0)

两者之间的质量差异很小。第二个给出了一个稍微清晰的图像(很难看到btw的差异 - 至少在我的测试图像中)。

我猜哪一个最好是主观的,最重要的是,它取决于图像的内容。

例如,较高对比度选项可能在使用树叶减少树的照片时提供更好的细节,但可能对新娘的面纱产生莫尔效果(更清晰的是'不'总是更好)。