WPF中的图像变得模糊

问题描述

|| 我正在使用C#在WPF中开发应用程序。我将图像放在WrapPanel中,并在带有一个边框的网格内显示,并且还在Buttons中使用图像。问题是我的图像控件失去了质量。我无法在此处发布图片,因此仅在此处进行描述。 我为图像使用了“ 0”,但看起来仍然模糊。 更新: 在这里,我分享了下面的图片:     

解决方法

我认为Markus所说的是解决您的问题并尝试在其中添加每个属性(property1ѭ)的一种方法:
<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来创建自定义Bitmap类并应用于所有给您带来麻烦的图片。 您还可以看到此堆栈溢出问题     ,SnapsToDevicePixels似乎不适用于位图。 NearestNeighbor选项实际上会转换位图,并最终以与原始位图不同的位图结束。 在WPF 4中,引入了FrameworkElement上的属性“ UseLayoutRounding \”来解决此问题。 通过在根元素上将此属性设置为True,例如Window可以将子元素在像素边缘对齐。
<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 \”属性。您的情况是按钮。     ,我遇到了缩放引起的图像背景模糊问题,解决方案比您想象的要简单得多。起初,我想知道是否将其缩放为2的幂,但是缩放比例实际上与系统DPI(96):图像DPI(72,这是许多编辑器的默认值)的比率匹配。如果将图像调整为96 DPI,它将使用默认的Windows设置显示完美的像素。 编辑:尝试了具有高细节对比度的图像,并且图像被稍微柔化了。     ,我遇到了同样的问题,但就我而言,我已经下载了Icon并发现它们也都具有错误的DPI ... 110,56和116,xx和95,99等... 当我将DPI全部更改为96时,一切都很好!     ,WPF不会将具体的像素值用于大小和位置,因此可以与DPI很好地缩放。 在尝试使用与离散的屏幕像素不对应的位置时,可能会导致问题。一些图像像素在多个屏幕像素上渲染,我们认为这是模糊的。 UseLayoutRendering = true且SnapToDevicePixels = false可以解决此问题。您还需要将其设置在主窗口级别,以便计算级联到图像级别。 您可以通过使用一个窗口和图像创建一个简单的WPF应用程序来进行尝试。将图像边缘设置为类似(10.452、0.736、0、0)的愚蠢内容会导致模糊。图像上的UseLayoutRendering = true消失了。 如果您随后在InitializeComponent()之后在窗口的构造函数中再次设置边距,则无论是否在图像上设置UseLayoutRendering = true都将导致模糊,因为在此之前已进行了与屏幕像素对齐的计算将图片移到与这些图片不符的位置。 我不完全确定UseLayoutRendering和SnapToDevicePixels之间有什么区别-我认为这只是进行计算的时候。 UseLayoutRendering似乎更适合图像。 从原始尺寸拉伸/挤压图像也会导致模糊问题。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...