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

mck*_*mey 5 wpf .net-4.0 antialiasing dithering

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

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

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

我使用BitmapImage,DrawingVisual,DrawingContext,RenderTargetBitmap,BitmapEncoder,和BitmapFrame,但我没有看到相关的抖动的任何属性.GDI +有很多设置,所以我猜我错过了什么.

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

我特意从GDI +切换到WPF,因为GDI +在长期运行的流程(如服务和Web应用程序)中存在内存泄漏.

mck*_*mey 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

看来这可行:

RenderOptions.SetBitmapScalingMode(myDrawingVisual, BitmapScalingMode.HighQuality);
Run Code Online (Sandbox Code Playgroud)

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