Странное поведение MeasureString

Если я рассчитываю размер по ширине для текста, используя ниже, он дает мне 500

intWidth = (int)objGraphics.MeasureString(String.concat(sImageText1, sImageText2), objFont).Width;

но если я сделаю так

intWidth = (int)objGraphics.MeasureString(sImageText1, objFont).Width + (int)objGraphics.MeasureString(sImageText2, objFont).Width;

Я много ищу и сделал много разных сценариев, но все равно получаю разницу, если мы измеряем ширину строки, используя «MeasureString» с полным текстом или по частям.

Почему это?


person Community    schedule 01.11.2012    source источник
comment
'но если я сделаю вот так'... что ты получишь?   -  person Andras Zoltan    schedule 01.11.2012


Ответы (1)


В документации есть ответ:

Метод MeasureString предназначен для использования с отдельными строками и предусматривает небольшое дополнительное пространство до и после строки, чтобы глифы могли выступать за пределы строки. Кроме того, метод DrawString настраивает точки глифов для оптимизации качества отображения и может отображать более узкую строку, чем сообщает MeasureString. Чтобы получить метрики, подходящие для смежных строк в макете (например, при реализации форматированного текста), используйте метод MeasureCharacterRanges или один из методов MeasureString, принимающих StringFormat, и передайте GenericTypographic. Также убедитесь, что TextRenderingHint для графики - AntiAlias.

Здесь важны выделенные части.

Чтобы исправить свой код, добавьте необходимые параметры:

intWidth = (int)objGraphics.MeasureString(sImageText1, objFont, 1024, Stringformat.GenericTypographic).Width
           + (int)objGraphics.MeasureString(sImageText2, objFont, 1024, StringFormat.GenericTypographic).Width;
person Lasse V. Karlsen    schedule 01.11.2012