WPF中的图像变得模糊

我正在使用C#开发WPF中的应用程序。 我把图片放在一个WrapPanel中,并在一个Grid中显示一个边框,并在Button中使用图片。 问题是我的图像控制失去其质量。 我不能在这里发表我的形象,所以我只是在这里描述。

我使用SnapsToDevicePixels="True"作为图像,但仍然看起来很模糊。

更新:

在这里我分享了下面的图片: 在这里输入图像说明

我想马库斯告诉你的是解决你的问题的一种方法,并尝试在其中添加一个属性RenderOptions.EdgeMode="Aliased"我的意思是:

 <Image Source="/LoginPanel;component/Icons/icoLogin.ico" RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased"/> 

如果你仍然无法解决你的问题,那么你可以参考这个http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx来创build一个自定义的位图类,并申请所有的图像都在为你制造麻烦。;

你也可以看到这个堆栈溢出问题

SnapsToDevicePixels似乎不适用于位图。

NearestNeighbor选项实际上将转换位图,并将最终与原始位图不同。

在WPF 4中,引入了FrameworkElement上的一个属性“ UseLayoutRounding ”来解决这个问题。

通过在根元素上将此属性设置为True,例如Window将在子像素的边缘上alignment子元素。

 <Window UseLayoutRounding="True">...</Window> 

这对我有用

 <Image Source="/LoginPanel;component/Icons/icoLogin.ico" RenderOptions.BitmapScalingMode="NearestNeighbor"</Image> 

为每个图像设置RenderOptions.BitmapScalingMode =“NearestNeighbor”。 或者在StackOverflow上看到这个问题 。

编辑:
这是我的示例代码

 <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="661"> <WrapPanel> <Button VerticalAlignment="Center"> <Image Source="/WpfApplication1;component/icoChip32x32.ico" RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image> </Button> <Button VerticalAlignment="Center"> <Image Source="/WpfApplication1;component/icoChip32x32.ico" RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image> </Button> <Button VerticalAlignment="Center"> <Image Source="/WpfApplication1;component/Presentation-Edit.png" RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image> </Button> <Button VerticalAlignment="Center"> <Image Source="/WpfApplication1;component/Presentation-Edit.png" RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image> </Button> </WrapPanel> </Window> 

这是我的结果:
...这是我的结果

如果图像用作内容,请在父元素上使用UseLayoutRounding =“True”属性。 在你的情况下,它是button。

我遇到了由缩放导致的图像背景的模糊问题,解决scheme比您想像的要简单得多。 虽然起初我想知道它是否被放大到了2的幂的纹理尺寸,缩放实际上与系统DPI(96):Image DPI(72,这是许多编辑器的默认设置)的比例相匹配。 如果将图像调整为96 DPI,则应使用默认的Windows设置显示像素完美。

编辑:试图与高细节对比度的图像,它稍微软化。

我有同样的问题,但在我的情况下,我已经下载图标,发现他们都有错误的新闻部太… 110,56和116,XX和95,99等…

当我将DPI更改为96时,一切都很好!

WPF不使用具体的像素值进行大小和定位,以便DPI可以很好地扩展。

这可能会导致一个问题,即它试图使用一个不对应于离散的屏幕像素的位置; 一些图像像素被渲染成多个屏幕上的像素,我们看到的是模糊。

UseLayoutRendering = true与SnapToDevicePixels = false应该解决这个问题。 您还需要将其设置在主窗口级别,以便计算级联到图像级别。

你可以通过一个窗口创build一个简单的WPF应用程序和你的图像来试试。 将图像边距设置为(10.452,0.736,0,0)这样的愚蠢将会导致模糊。 这在图像上使用UseLayoutRendering = true消失。

如果您在InitializeComponent()之后再次在窗口的构造函数中设置边距,则无论您在图像上是否设置了UseLayoutRendering = true,都会模糊不清,因为在移动图像之前已经完成了与屏幕像素alignment的计算到与这些不匹配的位置。

我不完全确定UseLayoutRendering和SnapToDevicePixels有什么区别 – 我想这只是计算的时间。 UseLayoutRendering似乎是更好的图像。

从原始尺寸拉伸/挤压图像也会导致模糊问题。