GDI+ рисует буквы, сгруппированные вместе
-
26-10-2019 - |
Вопрос
Я чувствую, что прочитал вопрос, похожий на это, но я не могу его найти, поэтому, пожалуйста, закройте, если дублируйте.
Я пытаюсь нарисовать текст с Graphics::DrawString
с шрифтом Monospace (Consolas). Однако, когда я нарисую текст, буквы не распределены равномерно. Вот как это выглядит:
Как видите, буквы сгруппированы в группы двух и трех. Я читаю эта статья и я подумал, что предпринял достаточные шаги, чтобы избежать этого, используя StringFormat::GenericTypographic
, но, видимо, нет. Я также использую TextRenderingHintClearTypeGridFit
Потому что все остальные похожи на мусор (и нет TextRenderingHintClearType
без GridFit
часть).
Как я могу нарисовать текст, как и все другие программы, которые рисуют текст моноспективным шрифтом, чтобы он выглядел правильно?
Решение
Проблема в том, что GDI+ использует другую (и давно заброшенную) систему для рисования текста. Начиная с .NET Framework 2.0, Microsoft изменила все элементы управления, чтобы фактически использовать GDI для рендеринга текста, а не GDI+. Текст рендеринг в GDI ускоряется и продолжает получать улучшения с помощью рендеринга персонажа, лигатур. Текст рендеринг в GDI+ не является аппаратным ускорением и не получает никаких исправлений или улучшений.
GDI также может нарисовать анти-ализированные, использовать cleartype_quality или intialiased_quality.
Вот сравнение
- GDI+ (
Graphics.DrawString
) - GDI (
TextRenderer.DrawText
)