Как я могу избавиться от этих "всплесков" визуальных артефактов при рисовании с помощью WPF?

Сейчас я рисую плитку (маленькие квадратные изображения) для картографического приложения.

Я использую WPF для рисования фигур на этих плитках.

У меня есть список геопространственных координат, которые составляют нарисованные полигоны.

Геопространственные координаты, составляющие эти многоугольники, преобразуются в пиксельные координаты.

Плитки создаются на разных уровнях детализации.

На большинстве этих уровней детализации рисунок хорош; но на определенных уровнях визуальный артефакт появляется в форме шипа или линии.

Вот пример, эти изображения находятся на трех разных уровнях детализации, один из которых показывает проблему, а два - по обе стороны, где проблема не возникает.

Это изображение с наивысшим уровнем детализации.

Хорошо изображение

Это изображение со средней степенью детализации и показывает шипы (ту, что вдоль дороги 85, легче всего обнаружить):

Плохой имидж

Это изображение на самом низком уровне детализации и в порядке:

введите описание изображения здесь

Пики появляются, когда две линии в многоугольнике сближаются и / или образуют плотную точку (сходимость).

Мы проверили исходные данные, и эти артефакты не существуют (это также подтверждается тем фактом, что они визуализируются правильно большую часть времени).

Следующим подозреваемым был процесс преобразования координат, но мы снова проверили его, и полученные точки не должны рисоваться таким образом.

Это делает WPF виновником, который ставит нас в затруднительное положение, поскольку мы не можем просто исправить проблему, как могли бы, с помощью нашего собственного кода.

Ребята, вы видели это раньше?

Исправление было бы фантастическим;)

На данный момент похоже, что мы должны смириться с этой проблемой или перейти на использование Direct2D. Мы уже отошли от рендеринга GDI+, так как он является однопоточным в процессе.

1 ответ

Решение

Решение состоит в том, чтобы изменить свойство LineJoin объекта Pen на "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, который предоставил этот ответ в комментариях.

Другие вопросы по тегам