Благодаря подсказкам от Ганса, возможное решение состоит в том, чтобы установить Graphics.TextRenderingHint
в SingleBitPerPixel
или SingleBitPerPixelGridFit
- это помогает, и визуализированный текст всегда выглядит как первый. Но антиалиасинга нет, и текст выглядит некрасиво (как во втором примере).
К сожалению, это не решает мою проблему, потому что текст позже конвертируется в GraphicsPath
, и результат всегда похож на второй, показанный на примере изображения. Однако есть альтернативное решение этой проблемы: сначала преобразовать текст в GraphicsPath
, а затем нарисовать его.
Однако возможны некоторые проблемы:
- Убедитесь, что
GraphicsPath
обновляется только при изменении текста,
поэтому общие накладные расходы будут минимальными.
- Имейте в виду, что накладные расходы резко возрастут во время
изменение текста - но это важно, только если вы постоянно отображаете текст во время пользователя
ввод, как в приложении WYSIWYG.
GraphicsPath
должно быть
воссоздается при каждом нажатии клавиши во время ввода текста. Это может быть
узкое место серьезной производительности. Убедитесь, что вы проверяете на цель
Конфигурация зависит от вашего пробега.
Graphics.SmoothingMode
необходимо установить на AntiAlias
(или HighQuality
что то же самое), чтобы получить плавные кривые - еще одна вещь, которая
может повлиять на производительность.
Самое интересное, что решение с текстом, преобразованным в GraphicsPath
, превосходит традиционный метод Graphics.DrawString
. Также обратите внимание, что сам шрифт является важным фактором - более сложные шрифты с причудливыми буквами использует больше точек кривой, следовательно, им нужно больше процессорного времени для рисования.
Во время моих тестов я заметил заметное замедление, когда строки были длиннее нескольких тысяч символов (i5 760 CPU, только один большой GraphicsPath для рисования)