Graphics.MeasureString允许太多的空格

时间:2009-04-28 14:43:28

标签: .net gdi

我正在使用一个函数来调用要在区域内呈现的文本。 该功能的基本工作是:

Dim measureSize as Size
Do
    myFont = new Font(myFont.Name, myFont.Size - 1, FontStyle.Regular, GraphicsUnit.Document)
    'Initial font size is set insanely high for the moment, during testing.
    'Low initial font size is not the problem.
    measureSize = g.MeasureString(myString, myFont)
Loop until (measuredSize.width < desiredSize.width AND measuredSize.height < desiredSize.height)

这个问题是MeasureString在它绘制的字符串周围添加了很多空格,而最终的字体渲染得太小了。

我确信我记得一个可以摆弄的参数,以便从MeasureString方法中删除所有填充,但我的搜索目前没有发现任何东西。

有没有人知道如何使用MeasureString测量字符串的EXACT大小而没有任何边界?

3 个答案:

答案 0 :(得分:5)

StringFormat.GenericTypographic传递给MeasureString。我建议不要使用TextRenderer,因为它在渲染到内存中的位图时会出现clear-type问题。

使用TextRenderer进行测量,使用DrawString进行绘图无疑会让你迟早遇到不一致。

答案 1 :(得分:2)

有一篇CodeProject的文章绕过了这个:http://www.codeproject.com/KB/GDI-plus/measurestring.aspx

答案 2 :(得分:0)

您应该尝试使用TextRenderer.MeasureText,因为它会返回文本的大小,而不是反锯齿时文本的大小。

MSDN Article