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

WPF v4中的图像调整别名,但不在v3.5下,wpf,.net-4.0,antialiasing,dithering,Wpf,.net 4.0,Antialiasing,Dithering,我将WPF用于图像大小调整管道,该管道在.NETV3.5下运行良好。我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有严重的别名。图像管道代码均未更改 在v3.5和v4.0之间是否更改了默认WPF设置 如何控制WPF中已调整大小的位图图像的抖动 我正在使用BitmapImage,DrawingVisual,DrawingContext,RenderTargetBitmap,BitmapEncoder和BitmapFrame,但我没有看到任何与抖动相关的属性。GDI+有很多设置,所以我猜

我将WPF用于图像大小调整管道,该管道在.NETV3.5下运行良好。我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有严重的别名。图像管道代码均未更改

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

  • 如何控制WPF中已调整大小的位图图像的抖动

  • 我正在使用
    BitmapImage
    DrawingVisual
    DrawingContext
    RenderTargetBitmap
    BitmapEncoder
    BitmapFrame
    ,但我没有看到任何与抖动相关的属性。GDI+有很多设置,所以我猜我遗漏了一些东西

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


    我特意从GDI+切换到WPF,因为GDI+在服务和web应用等长时间运行的进程中存在内存泄漏。

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

    我能够影响
    位图缩放模式设置的唯一方法是从
    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窗口运行时之外意味着它无法设置适当的值。

    该链接与我正在使用的上下文不完全一致。我使用这些类并以编程方式而不是声明方式调用它们。我已经尝试在上面实现
    DependencyObject的所有对象上调用
    RenderOptions.SetBitmapScalingMode(…,BitmapScalingMode.HighQuality)
    RenderOptions.SetBitmapScalingMode(…,BitmapScalingMode.Fant)
    。似乎没有任何效果。文档暗示该对象应该是
    UIElement
    DrawingGroup
    的后代。我两者都不用。