使用 WPF 绘图时如何消除这些“尖峰”视觉伪影?

2023-12-21

我当前正在为地图应用程序绘制一些图块(小方形图像)。

我正在使用 WPF 在这些图块上绘制形状。

我有一个地理空间坐标列表,它们组成了绘制的多边形。

组成这些多边形的地理空间坐标被转换为像素坐标。

这些图块是按照各种设定的细节级别创建的。

在大多数细节层次上,绘图都很好。但在某些水平上,视觉伪像会以尖峰或线条的形式出现。

这是一个示例,这些图像具有三个不同的细节级别,一个显示问题,另外两个显示问题未发生的情况。

该图像是最高细节级别并且还可以:

此图像的细节级别为中等,并显示出尖峰(85 号公路沿线的图像最容易发现):

该图像处于最低细节级别并且还可以:

当多边形中的两条线彼此靠近和/或形成密集点(收敛)时,就会出现尖峰。

我们已经检查了源数据,并且这些工件不存在(这也被它大多数时候正确渲染的事实所证实)。

下一个嫌疑点是坐标转换过程,但我们再次检查了它,并且生成的点不应该以这种方式绘制。

这使得 WPF 成为罪魁祸首,让我们陷入困境,因为我们无法像使用自己的代码那样简单地解决问题。

你们以前见过这样的事情吗?

如果能修复就太好了;)

目前看来我们要么必须忍受这个问题,要么改用 Direct2D。我们已经放弃了 GDI+ 渲染,因为它是进程内的单线程。


解决方案是将 Pen 对象上的 LineJoin 属性更改为“Round”。

http://msdn.microsoft.com/en-us/library/system.windows.media.pen.linejoin.aspx http://msdn.microsoft.com/en-us/library/system.windows.media.pen.linejoin.aspx

http://msdn.microsoft.com/en-us/library/system.windows.media.penlinejoin.aspx http://msdn.microsoft.com/en-us/library/system.windows.media.penlinejoin.aspx

非常感谢 Moozhe 在评论中提供了这个答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WPF 绘图时如何消除这些“尖峰”视觉伪影? 的相关文章

随机推荐