为什么WPF会将我的蓝色和红色图像变成模糊的紫色

时间:2014-10-18 23:51:06

标签: css wpf image xaml

我注意到如果我在我的WPF应用程序中包含一个Image元素,图像会在屏幕上显得模糊不清。为了测试这一点,我将我的程序减少到最低限度并创建了一个测试图像。我在一个浏览器外的Silverlight应用程序和常规的WPF应用程序中尝试了这个。我针对.NET 4和4.5。在所有情况下都看到相同的结果。

测试图像

3像素宽,3像素高。中间像素为红色。所有其他像素均为蓝色。您也可以在http://imageshack.com/a/img538/5335/GM4B8I.png

看到它

XAML

整个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

导致模糊的原因是什么?我怎么能避免它?

2 个答案:

答案 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

的解决方案