GDI+ MeasureString() неправильно обрезает текст

Я пытаюсь завершить код, который может размещать текст на экране. Следующий код C# помещен в Paint Например, обработчик события пустой формы Windows:

string[] s = new string[] { "Sample text ", "to test", " this layout ", "algorithm" };
PointF[] pts = new PointF[s.Length];
PointF start = new PointF(10, 10);
StringFormat f = new StringFormat(StringFormat.GenericTypographic);
float x = start.X;
float y = start.Y;
for (int i = 0; i < pts.Length; i++)
{
    pts[i] = new PointF(x, y);
    SizeF sz = e.Graphics.MeasureString(s[i], Font, pts[i], f);
    x += sz.Width;
    e.Graphics.DrawString(s[i], Font, Brushes.Black, pts[i]);
}

Он работает правильно, за исключением обрезки пробелов до и после каждого фрагмента текста в s массив. Он должен отображаться так:

Пример текста для проверки этого алгоритма компоновки

Но вместо этого это выглядит так:

Пример текста для проверки этого алгоритма компоновки

Я подтвердил, что f.Trimming свойство установлено в None, Я бы предположил, что это добавит пробел и открывающий пробел в меру строк, но это все еще обрезает его. Любые идеи о том, как сделать MeasureString метод включить пробел? В противном случае кернинг обрабатывается отлично.

1 ответ

StringFormat f = new StringFormat(StringFormat.GenericTypographic)
                     { FormatFlags = StringFormatFlags.MeasureTrailingSpaces };
Другие вопросы по тегам