【WPF】Image控件锯齿问题

1 现象:
使用Image控件显示图片,对于灰度的一个图片,发现出现了锯齿,在灰度逐渐减淡的地带,出现了类似于马赛克的锯齿过度。

2 解决方法
在网上找了下原因,最终发现是一个属性设置的问题:

RenderOptions.BitmapScalingMode="NearestNeighbor"

将这个属性默认不做设置就能解决,或者改为以下设置也可以解决。

RenerOptions.BitmapScalingMode="HighQuality"

关于该属性的几个值与物理意义:摘自参考文件(2).
Unspecified使用默认位图缩放模式,即 Linear。
LowQuality使用双线性位图缩放,虽然速度比 HighQuality 快,但输出质量较低。 LowQuality 模式与 Linear 模式相同。
HighQuality使用高质量位图缩放,虽然速度比 LowQuality 模式慢,但输出质量更高。 HighQuality 模式与 Fant 模式相同。
Linear使用线性位图缩放,虽然速度比 HighQuality 模式快,但输出质量较低。
Fant使用超高质量 Fant 位图缩放,虽然速度比所有其他位图缩放模式都慢,但输出质量更高。
NearestNeighbor使用最近邻域位图缩放,当使用软件光栅器时,该缩放提供优于 LowQuality 模式的性能。 该模式常用于放大位图。

3 锯齿模糊等显示问题的其他解决方案
在查的过程中,也找了一些关于模糊、锯齿的设置的东西。当然也有人说不管用的,当然,另几个对我这个不适用。
列举以下:
1.设置 SnapToDevicePixels=“True”
之前利用解决过有的显示器上会出现一条线。
2.设置 RenerOptions.BitmapScalingMode=“HighQuality”
3.设置 UserLayoutRounding=“True”
网上说有人能解决,但是我设置了上边的NearestNeighbor以后没用。其他人可以试试。

当然,还有人说这个wpf的缺陷,建议用其他方式实现图片显示。具体可参考:
(1)WPF中Image控件图像模糊的解决方案
介绍了多种情况。
(2)WPF图片模糊的解决之路

4 关于选择那种方式的问题

wpf提供了多种处理放大的显示问题。
因为放大后,有许多新的像素点在原来图片中没有值,这就需要新插值进去,这就涉及到如何插值的问题。这里有多种插值的算法。可以看这个地方了解这些原理:
https://blog.csdn.net/okaimee/article/details/5830546
这里的最近邻域法就是咱们这里的RenderOptions.BitmapScalingMode=“NearestNeighbor”
他的特点:
(1)简单,运算起来快;
(2)放大后图片中的像素值都是之前图片中有的。保留了最原汁原味的东西。
因为第2个原因,所以在图片编辑中,一般都选用这个,例如画图、PS工具等。

而这个方法的缺点也正是其会因为过渡突然,造成锯齿、马赛克的情况,放大后,看的图片不连续、不美观。所以,使用别的方法,改进这种情况,就是一般的高质量的插值方法,按照一定的算法算出一个中间值来填充,所以连续、美观。但因为插值算法复杂,所以也比较耗资源、耗时,实时处理时可能会有卡顿等情况。
但是新的值是原来图片中没有的!

总之:如果像素级的编辑用原生的,为了显示美观用后者。那么,在实际工程中,看咱们的实际用途是什么、及资源的情况来选择吧。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值