在不进行像素插值的情况下,将 BitmapSource 渲染到 DrawingContext。
问题的原因是在使用 .NET 3.5 sp1 版本时,渲染模糊图像的最简单解决方案是使用 RenderOptions,并将其在代码中指定。但对于第三方组件来说,将其作为应用程序级资源的样式设置是更有意义的解决方法。在应用程序级资源中设置样式,可以将 RenderOptions.BitmapScalingMode 属性设置为 "NearestNeighbor",从而解决模糊图像的问题。
解决方法是在应用程序级资源中创建一个样式,目标类型为 Image。在样式中,设置一个 Setter,将 Property 属性设置为 RenderOptions.BitmapScalingMode,将 Value 属性设置为 "NearestNeighbor"。
这种解决方法在 AvalonDock 组件中也可以使用,因为它也会导致图标模糊的问题。即使在使用 .NET 3.5 版本时,这个解决方案也可以很好地解决问题。
问题出现的原因是在WPF4中,当使用NearestNeighbor属性进行缩放时,会导致位图出现锯齿状,同时也无法解决图标大小调整的问题。解决方法是在根元素上添加UseLayoutRounding属性,并设置为True。这个属性之前只在Silverlight中可用,但现在已经修复了所有位图大小调整的问题。
在WPF4中,有一个新的属性可以解决这个问题。只需将RenderOptions.BitmapScalingMode设置为HighQuality或不声明即可。但是,如果使用NearestNeighbor属性进行缩放,则会导致位图出现锯齿状并且无法解决图标大小调整的问题。
在根元素上添加UseLayoutRounding属性并将其设置为True,可以解决位图大小调整的问题。这个属性之前只在Silverlight中可用,但现在已经修复了所有位图大小调整的问题。
更多关于这个新属性的信息可以在这里找到:blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx
使用UseLayoutRounding属性并将其设置为True,可以解决模糊图像的问题。感谢Domokun!
对于仍然使用.NET 3.5的人来说,似乎没有其他选择。
将UseLayoutRounding属性设置为True,可以在所有其他情况下修复模糊问题。但是,在WPF中,即使关闭了高质量图像渲染和反锯齿,图像的拉伸仍然不理想。但是,至少对于非拉伸的图像,这个问题已经得到了解决(本来就不应该是个问题)。