Самый быстрый способ нарисовать обводку / контур вокруг текста в SharpDX c #? - PullRequest
0 голосов
/ 07 мая 2018

Я могу нарисовать обводку вокруг текста в sharpDX, но это очень медленно.

Вот мой код:

d2dRenderTarget.DrawTextLayout(new Vector2(298, 300), textLayout0, textBrush1,DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(302, 300), textLayout0, textBrush1, DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(300, 302), textLayout0, textBrush1, DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(300, 298), textLayout0, textBrush1, DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(300, 300), textLayout0, textBrush, DrawTextOptions.NoSnap);

Вот мой вывод:

enter image description here

Есть ли другое решение для рисования одного и того же текста вокруг текста?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

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

Реализация SDF требует некоторых знаний программирования шейдеров. Надеюсь, мой ответ поможет

0 голосов
/ 16 мая 2018

Я кратко расскажу вам о том, как я на него напал, скорее всего, это совсем не будет соответствовать вашей текущей реализации. Но я нашел быстрее.

Я использую генератор растровых шрифтов Codehead, чтобы использовать текстуры для визуализации моего пользовательского рендера. Это для DirectX 11 Direct3d. Затем я отображаю их как плитки на экране в пространстве экрана. Обычно шейдер представляет собой рендер размером от 1 до 1 пикселя, но в этом случае вы хотите обрезать текстуру другим цветом. Это само по себе похоже на метод сглаживания. Для этого я использую алгоритм «Percentage Closer Filter», который в основном выбирает 5 точек по 1 пикселю в каждом направлении плюс центр. если я получу 1 черный пиксель, возвращенный в любом направлении, я получу удар по краю и цвету соответственно. Здесь есть гораздо лучшие версии, но я так и подошел.

...