Graphics.MeasureString позволяет слишком много пробелов - PullRequest
2 голосов
/ 28 апреля 2009

Я использую функцию для вызова фрагмента текста, который будет отображаться внутри области. Основная работа функции:

Dim measureSize as Size
Do
    myFont = new Font(myFont.Name, myFont.Size - 1, FontStyle.Regular, GraphicsUnit.Document)
    'Initial font size is set insanely high for the moment, during testing.
    'Low initial font size is not the problem.
    measureSize = g.MeasureString(myString, myFont)
Loop until (measuredSize.width < desiredSize.width AND measuredSize.height < desiredSize.height)

Проблема заключается в том, что MeasureString добавляет много пробелов вокруг строки, которую рисует, а окончательный шрифт отображается слишком маленьким.

Я уверен, что помню какой-то аргумент, с которым можно поиграться, чтобы удалить все отступы из метода MeasureString, но мои поиски в настоящее время ничего не вызывают.

Кто-нибудь знает, как использовать MeasureString для измерения ТОЧНОГО размера строки без каких-либо границ?

Ответы [ 3 ]

5 голосов
/ 16 октября 2009

Pass StringFormat.GenericTypographic до MeasureString. Я рекомендую использовать TextRenderer, потому что у него есть проблемы с clear-type при рендеринге в растровое изображение в памяти.

Использование TextRenderer для измерения и DrawString для рисования, несомненно, рано или поздно приведет вас к несогласованности.

2 голосов
/ 28 апреля 2009

Есть статья CodeProject, которая обходит это: http://www.codeproject.com/KB/GDI-plus/measurestring.aspx

0 голосов
/ 28 апреля 2009

Вы должны попробовать с TextRenderer.MeasureText, так как он возвращает размер текста, а не размер текста, если сглаживание.

MSDN Артикул

...