Как нарисовать улучшенный текст на кривой в C#
В этом примере показано, как рисовать улучшенный текст вдоль изогнутого пути. Пример
Вторая проблема вызвана методом Graphics класса GraphicsString. Этот метод не позволяет оставлять места для пробелов, потому что они обычно не занимают места при рисовании текста. Например, этот метод дает строкам «A» и «A» такую же ширину, потому что конечные пробелы невидимы.
Чтобы нарисовать улучшенный текст, эта версия программы заменяет вызовы на MeasureString на вызовы следующего метода MeasureText.
// Возвращает размер некоторого текста, добавляя дополнительную комнату для пробелов. private SizeF MeasureText(Graphics gr, string text, Font font) { SizeF size = gr.MeasureString(text, font); int num_spaces = text.Length - text.TrimEnd().Length; size.Width += font.Size * num_spaces; return size; }
Этот код вызывает MeasureString, как и раньше. Затем он вычисляет количество пробельных символов в конце строки и добавляет размер шрифта для каждого из них, прежде чем возвращать результат.
Другое, что этот пример делает для улучшения улучшенного текста, - это отрегулировать расстояние между символами в следующем коде.
float text_width = MeasureText(gr, chars_that_fit, font).Width; const float kern = 0.8f; start_point = new PointF( start_point.X + dx * text_width * kern, start_point.Y + dy * text_width * kern)
Эта версия кода умножает пространство, используемое куском оттянутого текста, на значение кернинга, которое в этом примере задано равным 0,8. Это перемещает символы немного ближе друг к другу.
В целом Кернинг - это процесс настройки расстояния между символами. Многие шрифты используют кернинг для определенных символов или пар символов. Например, шрифт может смещать соседние символы «ij» ближе друг к другу, так что j достигает бит под i.