我正在使用WPF作为图像大小调整管道,它在.NET v3.5下运行良好。我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有很多别名。没有任何图像管道代码发生了变化。
在v3.5和v4.0之间是否更改了默认WPF设置?
如何在WPF中控制调整大小的位图图像的抖动?
我正在使用BitmapImage
,DrawingVisual
,DrawingContext
,RenderTargetBitmap
,BitmapEncoder
和BitmapFrame
,但我没有看到任何内容与抖动有关的属性。 GDI +有一堆设置,所以我猜我错过了什么。
更新:看来我见过的所有解决方案都假设是Window对象或XAML环境。这在没有UI的Windows服务中运行。我需要一种以编程方式影响此设置的方法。
我特意从GDI +切换到WPF,因为GDI +在长期运行的进程中有内存泄漏,例如服务&网络应用。
答案 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。