Как рисовать в WPF без сглаживания?

163
19 февраля 2019, 17:00

Возникла необходимость нарисовать поверхность на основе примитивов (лаба по компьютерной графике). Поверхность рисуется в собственном контроле через переопределение OnRender (DrawingContext и т.д.). Однако, обнаружился вот такой вот дефект ("прозрачные" полосы между полигонами, конкретно здесь они белые):

Треугольники рисую через PolyLineSegment. Все полигоны использует общий массив точек, и смежные стороны лежат на одних и тех же точках. Так что проблема не в неверных координатах.

Вот тот же дефект на DrawRectangle для сомневающихся.

Предполагаю что проблема в сглаживании. В пограничный пиксель устанавливается цвет занимающий промежуточное значение между фоном и полигоном. Т.к. закрашивание происходит не одновременно, то в качестве фона выступает результат предыдущего покраса.

Упрощенно, если считать что цвета соседних полигонов Red и Blue, которые накрывают пиксель на 0.6 и 0.4 соответственно, то его цвет будет не 0.6*Red + 0.4*Blue, а 0.36*Red + 0.24*Background + 0.4*Blue.

Не знаю есть ли кошерный способ избавится от этого, но очевидно, что при рисовании без сглаживания данного глюка не будет (пиксель будет принадлежать одному/последнему полигону). Вопрос: как отключить сглаживание при рисовании?

// вариант с установкой Stroke не предлагать, в рамках лабы он неприемлем по "идейным" соображениям

Answer 1

По результатам обсуждения в комментариях:

Antialiasing можно отключить при помощи

RenderOptions.SetEdgeMode(element, EdgeMode.Aliased);

на отцовском элементе. В нашем случае, это элемент DrawingGroup, содержащий полигоны.

READ ALSO
Покадровая анимация png

Покадровая анимация png

Есть ~100 файлов png нужно их как бы анимировать, весят они от 8кб до 4мб

165
Visual Studio Installer DotNetFX461

Visual Studio Installer DotNetFX461

Пытаюсь к инталлятору положить DotNetFX461Если не выполнять ни каких действий, то при сборке проекта ругается:

175
YII2 SMTP email Expected response code 354 but got code “554”

YII2 SMTP email Expected response code 354 but got code “554”

Друзья помогите побороть ошибку при отправке email , обычная форма обратной связи

354