WPF v4中的图像调整别名,但不在v3.5下
我将WPF用于图像大小调整管道,该管道在.NETV3.5下运行良好。我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有严重的别名。图像管道代码均未更改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+有很多设置,所以我猜
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
的后代。我两者都不用。