以下两个代码示例相同,因为它们生成缩放图像。那就是说,第二个产生更高质量的缩放图像吗?我使用的是.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.
}
答案 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的差异 - 至少在我的测试图像中)。
我猜哪一个最好是主观的,最重要的是,它取决于图像的内容。
例如,较高对比度选项可能在使用树叶减少树的照片时提供更好的细节,但可能对新娘的面纱产生莫尔效果(更清晰的是'不'总是更好)。