如何在没有填充的情况下获得绘制字符串的尺寸?

时间:2010-04-21 00:38:18

标签: .net graphics text drawing c#-2.0

我正在尝试创建一个带有一些文字的图像,我希望图像的大小与渲染文本的大小相匹配。

当我使用System.Windows.Forms.TextRenderer.MeasureText(...)来测量文本时,我会得到包含字体填充的维度。渲染文本时,似乎使用相同的填充。

有没有办法确定文本字符串的大小,然后在没有任何填充的情况下呈现它?

这是我尝试过的代码:

// Measure the text dimensions
var text = "Hello World";
var fontFamily = new Font("Arial", 30, FontStyle.Regular);
var textColor = new SolidBrush(Color.Black);
Size textSize = TextRenderer.MeasureText(text, fontFamily, 
                             Size.Empty, TextFormatFlags.NoPadding);

// Render the text with the given dimensions
Bitmap bmp = new Bitmap(textSize.Width, textSize.Height);
Graphics g = Graphics.FromImage(bmp);
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
g.DrawString(text, fontFamily, textColor, new PointF(0, 0));            
bmp.Save("output.png", ImageFormat.Png);

这是当前呈现的内容:

  

Current Output

这就是我要呈现的内容:

  

Desired Output

我也调查了Graphics.MeasureString(...),但这只能用于现有的Graphics对象。我想在创建图像之前知道尺寸。另外,调用Graphics.MeasureString(...)会返回相同的尺寸,因此对我没有任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为这是因为30磅字体的字体高度为46 这样你就可以拥有特殊的大写字符(ÉÖÄÅ)和情人字符(gqp) 前导和尾随空格也可能与此有关。