我注意到如果我在我的WPF应用程序中包含一个Image元素,图像会在屏幕上显得模糊不清。为了测试这一点,我将我的程序减少到最低限度并创建了一个测试图像。我在一个浏览器外的Silverlight应用程序和常规的WPF应用程序中尝试了这个。我针对.NET 4和4.5。在所有情况下都看到相同的结果。
3像素宽,3像素高。中间像素为红色。所有其他像素均为蓝色。您也可以在http://imageshack.com/a/img538/5335/GM4B8I.png
看到它整个XAML页面如下所示。我在图像上方和图像的左侧添加了一个空标签,使其远离窗口边缘。
<Page x:Class="Demo.Home"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="486" d:DesignWidth="864"
Title="Demo">
<StackPanel Background="white" Orientation="Vertical">
<Label FontSize="10" Content=" "/>
<StackPanel Orientation="Horizontal">
<Label FontSize="10" Content=" "/>
<Image Source="/Demo;component/test.png
HorizontalAlignment="Left" VerticalAlignment="Top"
Stretch="None" />
</StackPanel>
</StackPanel>
3x3图像被模糊成4x4图像。而不是原始的蓝色和红色像素,像素是不同的紫色阴影。 http://imageshack.com/a/img661/3707/TFdtnF.png
导致模糊的原因是什么?我怎么能避免它?
答案 0 :(得分:0)
尝试添加
RenderOptions.BitmapScalingMode="HighQuality"
到图像。
答案 1 :(得分:0)
WPF使用子像素精度计算图像位置的模糊结果。三像素图像最终呈现在非整数像素位置,因此WPF将其扩展到4个设备像素。
尝试使用SnapsToDevicePixels修复此问题无法正常工作。 WPF忽略图像的SnapsToDevicePixels。
这是一个有效http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx
的解决方案