C# 确定文本宽度
我想找到计算C#中指定字体的文本宽度的正确方法。 我在Java中采用了以下方法,并且它似乎是有效的: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 */,
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;