图像在WPF v4中调整别名,但不在v3.5下调整

时间:2010-06-03 16:33:07

标签: wpf .net-4.0 antialiasing dithering

我正在使用WPF作为图像大小调整管道,它在.NET v3.5下运行良好。我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有很多别名。没有任何图像管道代码发生了变化。

  1. 在v3.5和v4.0之间是否更改了默认WPF设置?

  2. 如何在WPF中控制调整大小的位图图像的抖动?

  3. 我正在使用BitmapImageDrawingVisualDrawingContextRenderTargetBitmapBitmapEncoderBitmapFrame,但我没有看到任何内容与抖动有关的属性。 GDI +有一堆设置,所以我猜我错过了什么。

    更新:看来我见过的所有解决方案都假设是Window对象或XAML环境。这在没有UI的Windows服务中运行。我需要一种以编程方式影响此设置的方法。

    我特意从GDI +切换到WPF,因为GDI +在长期运行的进程中有内存泄漏,例如服务&网络应用。

2 个答案:

答案 0 :(得分:3)

我能够影响BitmapScalingMode设置的唯一方法是从DrawingVisual类继承并通过其受保护的访问器设置它:

// exposes BitmapScalingMode (also works for other protected properties)
public class MyDrawingVisual : DrawingVisual
{
    public BitmapScalingMode BitmapScalingMode
    {
        get { return this.VisualBitmapScalingMode; }
        set { this.VisualBitmapScalingMode = value; }
    }
}

如果有其他人知道更好的方法来设置它,我会很高兴听到它。

这似乎有用:

RenderOptions.SetBitmapScalingMode(myDrawingVisual, BitmapScalingMode.HighQuality);

......但事实并非如此。显然,在XAML窗口运行时之外,必须意味着它无法设置适当的值。

答案 1 :(得分:1)

默认的BitmapScalingMode在3.0中是Fant,但在4.0中它现在是BiLinear。您可以通过几种不同的方式更改默认值。一对described here