System.Drawing.Graphics обрезать конец строки?

Работая над алгоритмом рендеринга текста, я наткнулся на странное поведение Graphics.MeasureString() метод.

Кажется, что он внутренне обрезает конец строки.

g.MeasureString("d", font).Width //is 13.289278
g.MeasureString("d ", font).Width //is 13.2892771
g.MeasureString(" d", font).Width //is 17.4858913
//font.Size = 11; font.FontFamily = "Arial";

Может кто-нибудь объяснить это поведение?

1 ответ

Решение

Как из описания MSDN MeasureTrailingSpaces флаг формата:

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

Так что если вы предоставите этот флаг - результаты будут такими же

var fmt = new StringFormat(StringFormatFlags.MeasureTrailingSpaces);
var x2 = g.MeasureString("d ", font, 0, fmt).Width;
var x3 = g.MeasureString(" d", font, 0, fmt).Width;
Другие вопросы по тегам