使用GDI + Graphics.MeasureString问题以编程方式测量文本长度

时间:2011-06-03 10:55:31

标签: c# graphics drawing gdi+

我有以下代码在我的本地计算机上工作(Win 7,.NET 4),但它似乎在服务器上不起作用。我想以编程方式测量文本长度

有人可以帮忙吗?

private float GetTextSize(string text, float textSize)
{
    using (Bitmap bmp = new Bitmap(1, 1))
    {
        bmp.SetResolution(96, 96);

        using (Graphics g = Graphics.FromImage(bmp)) 
        {
            using (System.Drawing.Font font = new System.Drawing.Font(fontName, textSize))
            {
                return g.MeasureString(text, font).Width;
            }
        }
    }
}

我会考虑任何更好的解决方案。

更新

如何检测机器上是否有可用的字体类型?

更新2:

为什么我的问题得到减分?任何人都可以请它投票​​。

提前致谢!

1 个答案:

答案 0 :(得分:0)

问题是即使对于具有相同数字字符的文本,它也会返回不同的文本长度,例如对于某些字体类型,1234比abcd长。我之前的逻辑是比较每个文本的字符数,并将最长的文本传递给方法,基于这个原因这是不正确的。

解决方案是为每个文本调用方法,并且从方法返回的文本长度是可靠的比较。