Рисуем гладкий текст в GraphicsPath в C#

Вы можете установить свойство TextRenderingHint объекта Graphics для AntiAliasGridFit, чтобы нарисовать гладкий текст. Однако, если вы поместите текст в объект GraphicsPath и нарисуете GraphicsPath, свойство TextRenderHint не даст вам гладкого текста. Вместо этого вам нужно установить свойство SmoothingMode объекта Graphics при рисовании GraphicsPath. Этот пример демонстрирует эти свойства.

Когда форма загружается, следующий код дает форму большого шрифта.

Этот код устанавливает для свойства AutoScale формы значение None, поэтому форма не изменяется сама по себе, когда код изменяет шрифт. Затем он устанавливает шрифт в 30 пикселей Times New Roman жирным шрифтом. (Я измеряю шрифт в пикселях здесь, чтобы размер шрифта соответствовал размеру, используемому графикой, описанной в ближайшее время.)

Следующий обработчик события Paint рисует образец текста.

Сначала код рисует текст при использовании значения по умолчанию для TextRenderingHint. Результат довольно хороший.

Затем код устанавливает TextRenderHint в AntiAliasGridFit и рисует еще один текст. Это дает лучший результат, но результат, заданный настройкой по умолчанию, также очень хорош. Фактически, вам нужно очень внимательно посмотреть на изображение, показанное здесь, чтобы заметить любую разницу вообще. Посмотрите внимательно на вершину символов D и S, чтобы увидеть небольшую разницу.

Также обратите внимание, что изменение TextRenderingHint изменило способ размещения текста, поэтому текст «DrawString» имеет разную ширину в двух образцах. В общем случае изменение параметров чертежа может изменить точное позиционирование текста.

Затем программа создает объект StringFormat, который необходим для рисования текста в GraphicsPath. Затем код создает объект GraphicsPath, добавляет к нему образец текста, а затем рисует GraphicsPath. Этот первый образец, который использует значение SmoothingMode по умолчанию, дает довольно уродливый результат.

Наконец, программа повторяет эти шаги, чтобы нарисовать еще один образец в GraphicsPath, на этот раз после установки SmoothingMode в AntiAlias. Этот результат превосходный.

Опять же, если вы посмотрите внимательно, вы увидите, что интервал между символами немного изменился. Текст, нарисованный графическим изображением, похоже, использует интервал, аналогичный используемому DrawString со стандартным TextRenderingHint.

Мораль заключается в том, что если вы хотите нарисовать гладкий текст в GraphicsPath, вам нужно установить SmoothingMode вместо TextRenderingHint.

Источник: http://csharphelper.com/blog/2017/07/draw-smooth-text-in-a-graphicspath-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *