wpf - 使用 WPF 绘图时如何摆脱这些 'spike' 视觉伪影?

标签 wpf drawing visual-artifacts

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

我正在使用 WPF 在这些磁贴上绘制形状。

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

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

这些图块是在不同的细节级别上创建的。

在大多数这些细节层次上,绘图都很好;但在某些级别上,视觉伪影以尖峰或线的形式出现。

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

这个图像是最高的细节级别,是可以的:

Ok Image

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

Bad Image

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

enter image description here

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

我们已经检查了源数据并且这些工件不存在(这也被它大部分时间正确呈现的事实所证实)。

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

这让 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.penlinejoin.aspx

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

关于wpf - 使用 WPF 绘图时如何摆脱这些 'spike' 视觉伪影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642502/

相关文章:

wpf - 如何从 GridView 中绑定(bind)到 ViewModel 的属性

C# 将颜色应用于字体

Android 动画留下伪影

c# - .net native 用于桌面应用程序

WPF TreeView : Using ItemTemplateSelector and ItemContainerStyle Not Working At Same Time

c# - 嵌套的 ObservableCollection - 将通知从 child 传播到 parent

java - 如何在 android 中录制视频的同时绘制视频,并保存视频和绘图?

windows - 如何创建用于绘图的子矩形设备上下文

java - PaintComponent 中使用 BorderFactory 的图形工件

android - 如何从绘制到位图中的文本中删除伪影