WPF中的图像变得模糊

38 c# wpf xaml image image-processing

我正在使用C#在WPF中开发一个应用程序.我将图像放在一个WrapPanel中,并在一个Grid中显示另一个Border,并在Buttons中使用图像.问题是我的图像控制失去了它的质量.我无法在此发布我的图片,所以我只是在这里描述.

我用过SnapsToDevicePixels="True"图像,但看起来仍然很模糊.

更新:

在这里,我分享了下面的图片: 在此输入图像描述

Sha*_*ain 72

我认为Markus所说的是解决问题的一种方法,并尝试RenderOptions.EdgeMode="Aliased"为每个图像添加一个属性,我的意思是:

<Image Source="/LoginPanel;component/Icons/icoLogin.ico"
       RenderOptions.BitmapScalingMode="NearestNeighbor"
       RenderOptions.EdgeMode="Aliased"/>
Run Code Online (Sandbox Code Playgroud)

如果您仍然无法解决问题,那么可以参考http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx来创建自定义Bitmap类并申请所有给你造成麻烦的图片.

您还可以看到此Stack Overflow问题


小智 26

SnapsToDevicePixels似乎不适用于位图.

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

在WPF 4中,引入了FrameworkElement上的属性" UseLayoutRounding "来解决此问题.

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

<Window UseLayoutRounding="True">...</Window>
Run Code Online (Sandbox Code Playgroud)


Mar*_*kus 14

这适合我

<Image Source="/LoginPanel;component/Icons/icoLogin.ico"
       RenderOptions.BitmapScalingMode="NearestNeighbor"</Image>
Run Code Online (Sandbox Code Playgroud)

为每个图像设置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>
Run Code Online (Sandbox Code Playgroud)

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

  • 它对于图像来说是完美的,但是在图像周围得到折腾,我的意思是边框渐渐消失,一条带就会出现.如果您不介意,那么请您分享您拥有的任何示例应用程序 (2认同)
  • 我看不到我的示例代码有任何问题.也许你可以尝试一小部分?你可以发布更多的代码吗? (2认同)

小智 7

如果将image用作内容,请在父元素上使用UseLayoutRounding ="True"属性.在你的情况下它是按钮.