2013-04-04 2 views
8

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

Мой код выглядит так:

GraphicsPath gp = new GraphicsPath(); 

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

g.DrawPath(pen, gp); 
+2

Что вы установили в FormatFlags в параметре StringFormat? – plinth

+0

спасибо за плинтус за ответ, StringFromat - это _format = StringFormat.GenericDefault; есть ли что-то, что может решить проблему во флагах? – MHMr

+0

http://stackoverflow.com/questions/118686/measurestring-pads-the-text-on-the-left-and-the-right –

ответ

2

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

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

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

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

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

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

Смежные вопросы