Как нарисовать строку без заполнения

Я использую GraphicsPath.AddString() функция, но он рисует текст с небольшим пространством вокруг текста. Любая идея, как нарисовать строку без этого дополнения, только пути текста?

Мой код такой:

GraphicsPath gp = new GraphicsPath();

gp.AddString(text, font.FontFamily, (int)font.Style, font.Size,
    boundsRectangle, format);

g.DrawPath(pen, gp);

1 ответ

Происходит то, что под капотом, вероятно, используется Graphics.MeasureString() из документации:

GDI+ добавляет небольшое количество (1/6 em) к каждому концу каждой отображаемой строки. Это 1/6 em позволяет> для глифов с нависающими концами (такими как курсив 'f'), а также дает GDI+ небольшое количество> свободы, чтобы помочь с расширением подгонки к сетке.

Действие DrawString по умолчанию будет работать против вас при отображении соседних прогонов:

Сначала StringFormat по умолчанию добавляет дополнительные 1/6 em на каждом конце каждого вывода; Во-вторых, когда ширина сетки меньше запланированной, струне разрешается сокращаться до em. Чтобы избежать этих проблем:

Всегда передавайте MeasureString и DrawString a StringFormat, основываясь на типографском>StringFormat (GenericTypographic). Установите для TextRenderingHint для Graphics значение TextRenderingHintAntiAlias. Этот метод рендеринга> использует сглаживание и расположение субпиксельных символов, чтобы избежать необходимости подгонки к сетке, и, таким образом,> по сути не зависит от разрешения.

Похоже, что вы должны быть в состоянии исправить это, используя правильный StringFormat.

Другие вопросы по тегам