Вопрос

Я чувствую, что прочитал вопрос, похожий на это, но я не могу его найти, поэтому, пожалуйста, закройте, если дублируйте.

Я пытаюсь нарисовать текст с Graphics::DrawString с шрифтом Monospace (Consolas). Однако, когда я нарисую текст, буквы не распределены равномерно. Вот как это выглядит:

enter image description here

Как видите, буквы сгруппированы в группы двух и трех. Я читаю эта статья и я подумал, что предпринял достаточные шаги, чтобы избежать этого, используя 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)

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top