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;