1

在研究文本渲染算法时,我偶然发现了该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";

有人可以解释这种行为吗?

4

1 回答 1

2

从格式标志的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;
于 2014-11-20T14:57:01.937 回答