在处理文本渲染算法时,我偶然发现了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";
有人可以解释这种行为吗?
答案 0 :(得分:2)
从MeasureTrailingSpaces
格式标志的MSDN描述开始:
默认情况下,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;