我正在尝试创建一个带有一些文字的图像,我希望图像的大小与渲染文本的大小相匹配。
当我使用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);
这是当前呈现的内容:
这就是我要呈现的内容:
我也调查了Graphics.MeasureString(...)
,但这只能用于现有的Graphics
对象。我想在创建图像之前知道尺寸。另外,调用Graphics.MeasureString(...)
会返回相同的尺寸,因此对我没有任何帮助。
答案 0 :(得分:1)
我认为这是因为30磅字体的字体高度为46 这样你就可以拥有特殊的大写字符(ÉÖÄÅ)和情人字符(gqp) 前导和尾随空格也可能与此有关。