在使用WPF绘图时,如何摆脱这些“尖峰”视觉伪像?

时间:2012-09-28 14:59:52

标签: wpf drawing visual-artifacts

我正在为地图应用绘制一些瓷砖(小方形图像)。

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

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

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

以各种设定的细节级别创建切片。

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

这是一个例子,这些图像有三个不同的细节层次,一个显示问题,另外两个问题没有发生。

此图片是最高细节级别,可以:

Ok Image

此图片处于中等细节水平并显示尖峰(沿着85号公路最容易发现):

Bad Image

此图片处于最低细节级别并且没问题:

enter image description here

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

我们检查了源数据并且这些工件不存在(大多数情况下它都正确呈现的事实证实了这一点。)

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

这使得WPF成为罪魁祸首,因为我们不能简单地用我们自己的代码解决问题所在。

你们之前见过这种事吗?

修复很棒;)

目前看起来我们不得不忍受这个问题或转而使用Direct2D。我们已经放弃了GDI +渲染,因为它在一个进程中是单线程的。

1 个答案:

答案 0 :(得分:0)

解决方案是将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.penlinejoin.aspx

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