Я пытаюсь рисовать карты с помощью Java2D. Когда моя карта уменьшена, мои дороги полны артефактов рисования. Это небольшая часть экрана при рисовании полного штата США:
Это похожий участок дороги при увеличении:
Используемый стиль линии - это сплошная синяя линия с шириной, масштабированной до 2 пикселей. Я пробовал различные подсказки рендеринга и правила соединения строк, и ничего не помогло.
Я использую Open JDK 1.7 на Mac под управлением OS / X 10.8, и это также можно воспроизвести на машине Linux с Sun JDK 1.6.
Все формы и преобразования имеют двойную точность, насколько это возможно с Java2D. Геометрия линии имеет много близко расположенных точек, и я подозреваю, что причиной артефактов отрисовки является то, что средство визуализации сбивается с толку из-за последовательных точек, расположенных ближе, чем на один пиксель.
Есть ли способ улучшить внешний вид уменьшенных фигур без утончения точек?
Редактировать Артефакты рисования находятся в точках пересечения отдельных сегментов линии, поэтому недостающие пиксели связаны с несовпадением концов (концов) линий, даже если конечные точки идентичны. На этом изображении показана точка встречи двух отрезков линии. Я выделил каждый сегмент линии в стиле масштабированной линии 7 пикселей (XOR-ed с белым), но если вы посмотрите очень внимательно, вы все равно можете увидеть часть исходной синей линии (это связано с перекрытием закругленных заглавных букв и режимом рисования XOR .) В обычных масштабах кажется, что концы перекрываются, но при уменьшении и возврате в обычном режиме рисования появляется эффект ломаной линии.
Одним из обходных путей было бы объединить все смежные линейные сегменты перед их рисованием, но я все же хотел бы знать настоящую причину артефактов рисования.