WPF图片模糊的解决之路

摘要:
原始图纸的大小与xaml中的大小一致。3.将图片复制到空白项目。发现有些照片模糊了。这些图片放置在网格中。未指定使用默认位图缩放模式,LowQuality使用双线性位图缩放,HighQuality使用高质量位图缩放,Linear使用线性位图缩放,Fant使用超高质量Fant位图缩放。虽然速度比所有其他位图缩放模式都慢,但“最近邻居”使用最近邻居位图进行缩放。

设计稿转为xaml后,设计师开始review UI了,发现图片都模糊了。

这一张很神奇,三个图片都是同一张,中间的那个最清楚,上面的这个左右两边清楚,下面的那个四个边都不清楚。

WPF图片模糊的解决之路第1张

这一张,右边是原图,左边是模糊的图,同比放大的。

WPF图片模糊的解决之路第2张

于是开始查原因:

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

2. 第一反应是像素对齐,SnapsToDevicePixels="True", 搞上去,没用。

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

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

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

WPF图片模糊的解决之路第3张

神奇啊,估计是布局的问题。

Grid里面放了这些图片,如果像素里面有小数点,可能会出现这种情况。但是没想到那个可爱的属性啊。

5.开始在Image上下功夫,发现了这个属性, RenderOptions.BitmapScalingMode,里面几个枚举值,一个一个试。

Unspecified使用默认位图缩放模式,即 Linear

LowQuality使用双线性位图缩放,虽然速度比 HighQuality 快,但输出质量较低。 LowQuality 模式与 Linear 模式相同。

HighQuality使用高质量位图缩放,虽然速度比 LowQuality 模式慢,但输出质量更高。 HighQuality 模式与 Fant 模式相同。

Linear使用线性位图缩放,虽然速度比 HighQuality 模式快,但输出质量较低。

Fant使用超高质量 Fant 位图缩放,虽然速度比所有其他位图缩放模式都慢,但输出质量更高。

NearestNeighbor使用最近邻域位图缩放,当使用软件光栅器时,该缩放提供优于 LowQuality 模式的性能。 该模式常用于放大位图。

MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.media.bitmapscalingmode(v=vs.100).aspx

当我试到最后一个时,奇迹发生了,图片居然不模糊了!上面那些问题都不存在了。

 6. 小小的兴奋之后,发现圆圆的图片出问题了,锯齿明显:

WPF图片模糊的解决之路第4张

这么简单的图片居然锯齿了.....

7.于是开始了各种猜想,别的同事也在一起看。

有的提议用Rectangle+ImageBrush,我觉得替换工作量有点大。

有同事说 用UseLayoutRounding="True", 这个试了之后,问题马上解决了。
MSDN查了,发现解释和我们碰到的情况一样:


获取或设置一个值,该值确定对象及其可视化子树的呈现是否应使用将呈现与整像素对齐的舍入行为。

msdn:http://msdn.microsoft.com/zh-cn/library/system.windows.uielement.uselayoutrounding(v=VS.95).aspx

目的就是为了把不足一个像素的,设为一个像素。

到此问题解决。

教训:刚想到【像素对齐】时,没有使劲儿的 查资料,自己瞎搞,浪费了时间。

免责声明:文章转载自《WPF图片模糊的解决之路》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇线段树->面积并 Atlantis HDUiOS 学习资料整理集合下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql8.0只能本地连接解决方法

最近,在安装好新版本的mysql后,使用java程序连接出现几个问题,首先是数据库连接url的问题,新的连接url需要加上时区这个参数,例如: jdbc:mysql://127.0.0.1:3306/localmysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/...

Intellj Idea使用tomcat部署不成功,死活也找不到解决办法的看这里

Intellij 周六晚上开发一个简单web项目的,使用tomcat打包部署,死活也没法部署成功,和这个问题怼了6个小时,也没搞清楚具体为什么不能访问页面,但是好在最后还是找了个方法把问题解决了。以下是问题的一些问题的描述和解决办法,如果你也遇到了相似问题,希望可以给你帮助: 问题描述: 1:部署看起来是成功的,启动的时候控制台不报任何错误,显示的是应用启...

从核函数到SVM原理--sklearn-SVM实现

SVM核函数及sklearn实现SVM 在SVM中,其中最重要的也是最核心的就是核函数的选取和参数选择,当然这个需要大量的经验来支撑。今天我们就是抛砖引玉形象的讲解一下什么是核函数,及在SVM中在哪用到。 我们知道,SVM相对感知机而言,它可以解决线性不可分的问题,那么它是怎么解决的呢?它的解决思想很简单,就是对原始数据的维度变换,一般是扩维变换,使得原样...

vue 在nginx下页面刷新出现404问题解决和在nginx下页面加载了js但是页面显示空白问题解决

一、vue 在nginx下页面刷新出现404   在网上翻遍了所有这样问题的解决办法,全都是一个解决办法也是正确的解决办法,(后来在vue官网上关于history方式出现404解决方法也是这样说的),只是没有表达完整,可能会让比较急于解决这个问题的人简单复制却始终解决不了问题 nginx正确的配置: 1、如果是在根目录则配置如下 location / { ...

如何通过Word在博客园发布博客

目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客。使用Word写博客需要在第三方博客平台注册帐号,且需要第三方博客平台提供API接口。目前的有的博客平台均已关闭博客接口,所以无法使用Word来发布博客。 2.发布到博客或公...

robotframework自动化测试框架搭建及问题汇总

1.安装python RF框架是基于python 的,所以一定要有python环境,python与rf存在兼容性问题,我安装的是python3.7.5,robotframework3.1.2。 选择添加到path,或者自己手动配置环境变量,打开cmd 输入python -V可以看到安装的版本 官网https://www.python.org/下载比较慢,...