C# 确定文本宽度

C# 确定文本宽度,c#,java,C#,Java,我想找到计算C#中指定字体的文本宽度的正确方法。 我在Java中采用了以下方法,并且它似乎是有效的: public static float textWidth(String text, Font font) { // define context used for determining glyph metrics. BufferedImage bufImage = new BufferedImage(2 /* dummy */, 2 /* dummy */,

我想找到计算C#中指定字体的文本宽度的正确方法。 我在Java中采用了以下方法,并且它似乎是有效的:

public static float textWidth(String text, Font font) {

    // define context used for determining glyph metrics.        
    BufferedImage bufImage = new BufferedImage(2 /* dummy */, 2 /* dummy */, BufferedImage.TYPE_4BYTE_ABGR_PRE);
    Graphics2D g2d = (Graphics2D) bufImage.createGraphics();
    FontRenderContext fontRenderContext = g2d.getFontRenderContext();

    // determine width
    Rectangle2D bounds = font.createGlyphVector(fontRenderContext, text).getLogicalBounds();
    return (float) bounds.getWidth();
}
但是请看我的C语言代码:

对于同一字体,上述两个函数的值不同。为什么?在我的案例中,什么是正确的方法


更新文本渲染器.MeasureText方法只提供整数测量值。我需要更多的预使用结果。

使用
textrender

Size size = TextRenderer.MeasureText( < with 6 overloads> );

TextRenderer.DrawText( < with 8 overloads> );
Size Size=TextRenderer.MeasureText();
TextRenderer.DrawText();


中有一篇关于
TextRenderer
的好文章。

除了缺少处理对象之外,没有什么特别突出的:

public static float TextWidth(string text, Font f) {
  float textWidth = 0;

  using (Bitmap bmp = new Bitmap(1,1))
  using (Graphics g = Graphics.FromImage(bmp)) {
    textWidth = g.MeasureString(text, f).Width;
  }

  return textWidth;
}
另一种尝试方法是
textrender
类:

return TextRenderer.MeasureText(text, f).Width;

但它返回的是int,而不是float。

+1在Java中,更好的方法是使用FontMetrics通过stringWidth()函数确定字符串的宽度。可能这三种方法(FontRenderContext、MeasureString和TextRenderer)不仅产生不同的宽度,而且呈现文本的方式也略有不同。但是,测量结果很可能与相应的渲染方法一致。我想说,正确的方法是使用相同的技术进行测量和渲染。Java&“.Net”(c#,VB.Net,else)使用不同的库
return TextRenderer.MeasureText(text, f).Width;