Как нарисовать строку без заполнения
Я использую 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.