图片模糊解决之道整理

时间:2022-06-28 08:20:47

原因分析与解决方案:

1. 检查图片,png, DPI=72,Stretch="None",,原图尺寸和xaml里面写的尺寸一致。如果替换为大尺寸的原图,使用时,size写的小一点,同比例缩小,没问题。

2. 像素对齐,SnapsToDevicePixels="True"。

3. 把图片拷贝到空白的项目里面,发现有的图片模糊,有的不模糊。布局复杂一点,模糊的概率大。

4. 改变项目中的xaml 布局,神奇的出现了,左右两个边清晰了,上下还是模糊的,换个地方,上下左右都模糊。

左边是原图,右边是WPF的图。

5.<Image>属性RenderOptions.BitmapScalingMode里面枚举值:

Unspecified使用默认位图缩放模式,即 Linear。 LowQuality使用双线性位图缩放,虽然速度比 HighQuality 快,但输出质量较低。 LowQuality 模式与 Linear 模式相同。 HighQuality使用高质量位图缩放,虽然速度比 LowQuality 模式慢,但输出质量更高。 HighQuality 模式与 Fant 模式相同。 Linear使用线性位图缩放,虽然速度比 HighQuality 模式快,但输出质量较低。 Fant使用超高质量 Fant 位图缩放,虽然速度比所有其他位图缩放模式都慢,但输出质量更高。 NearestNeighbor使用最近邻域位图缩放,当使用软件光栅器时,该缩放提供优于 LowQuality 模式的性能。 该模式常用于放大位图。

 

6. 圆圆图片,锯齿明显:

7.用Rectangle+ImageBrush,我觉得替换工作量有点大。

8、

1.Grid容器里的GridSplitter设置粗细一样, 但截屏放大后发现线条不一样粗并且明暗不一致,导致打印出来有问题。

2.自定义控件的边缘在某些窗体中显示模糊。

 

导致以上问题的原因是:1)UserLayoutRounding为False,导致控件布局相对屏幕若不是整数则不会四舍五入,导致边缘模糊。2)SnapsToDevicePixels默认为false, 为true可以让元素像素级对齐。

 UIElement.UseLayoutRounding 属性

获取或设置一个值,该值确定对象及其可视化子树的呈现是否应使用将呈现与整像素对齐的舍入行为。(一般在容器元素上设置, 发生在Measure&Arrange期间)

UIElement.SnapsToDevicePixels 属性

获取或设置一个值,该值决定呈现元素期间是否应使用设备特定的像素设置。这是一个依赖项属性。(一般在根元素设置, 发生在Render, 不是容器元素)

WPF_界面_图片模糊解决之道整理