如何在.NET中实现精细的字体缩放?

时间:2012-07-05 06:35:44

标签: .net windows system.drawing drawstring

Microsoft Office在缩放字体方面做得非常好。它们可以几乎线性地按0.5分的步长进行缩放(见下图)。

使用Graphics.DrawString我无法重现这一点,但在缩放字体大小时,我看到了不同的步骤。

使用下面的代码,我得到以下输出,表明我无法以与Office一样多的大小绘制文本。有关如何绘制中间字体大小的任何想法吗?

Font size comparison

    Dim baseSize As Single = 16.0F
    Dim inputText As String = "MMMMMMMMMMMMMM"

    Dim stringFormat As Drawing.StringFormat = Drawing.StringFormat.GenericTypographic()

    Dim pos As Single
    Dim i As Integer

    Do
        Using font As Drawing.Font = New Drawing.Font("Calibri", (baseSize + i / 10.0F), FontStyle.Regular, GraphicsUnit.Pixel)
            Dim text As String = inputText & " " & font.Size.ToString() & "px"
            Dim textSize As SizeF = e.Graphics.MeasureString(text, font, New PointF(0, 0), stringFormat)
            e.Graphics.DrawString(text, font, Brushes.Black, New Drawing.RectangleF(10, pos, textSize.Width, textSize.Height), stringFormat)
            pos += font.Height
        End Using
        i += 1
    Loop While pos < ClientRectangle.Height

1 个答案:

答案 0 :(得分:1)

设置文字渲染提示:

e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;

几乎连续缩放需要消除锯齿。但是 - 你的评论 - 网格拟合导致字体大小四舍五入到一些阻止它的离散值。