如何使用TexTrenderer在字符串中正确测量字符



我正在尝试绘制一个多色字符串。

由于没有默认方法可以执行此操作,因此我正在尝试使用textrenderer.drawText绘制Char本人的字符串char,但是,当我尝试测量字符串时,它并未正确报告第一个字符宽度。

通过字符串测量以前的字符宽度来绘制char i的字符,以找到下一个字符的位置。

要获得宽度,我使用:

       TextRenderer.MeasureText(word.Substring(0, i),
                    drawFont,
                    new Size(int.MaxValue, int.MaxValue),
                    (TextFormatFlags.Left | TextFormatFlags.NoPadding)).Width

正常工作但对于第一个字符,产生输出类似:

      L OREMIPSUM

基本上,如果只有一个字符 - 尽管有我的旗帜,但它还是用填充物测量。

我可以使用:

      TextRenderer.MeasureText(String.Concat("*", chr.ToString(), "*"), font).Width - TextRenderer.MeasureText("**", font).Width

测量第一个字符并获得正确的宽度值,但是当我应该有更好的方法时,我感觉就像在做一些黑客。

我也可以在上面的方法中使用字符串来避免使用TexTrenderer.measuretext,并且在没有第一个字符问题的情况下仍然可以获得正确的结果。

在我的情况下,如何测量字符的正确方法?

您应该使用来自图形对象的测量线。还要查看TexTrenderer.measuretext和Graphics.measurestring的大小不匹配。它将解释差异。

最新更新