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

如何在.NET中实现精细的字体缩放?,.net,windows,system.drawing,drawstring,.net,Windows,System.drawing,Drawstring,Microsoft Office在字体缩放方面做得非常好。它们几乎可以以0.5点的步长线性缩放(见下图) 使用Graphics.DrawString我无法再现这一点,但在缩放字体大小时,我看到了不同的步骤 通过下面的代码,我得到了以下输出,这表明我不能像Office那样绘制尽可能多的文本。你知道我怎么画那些中等大小的字体吗 Dim baseSize As Single = 16.0F Dim inputText As String = "MMMMMMMMMMMMMM"

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

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

通过下面的代码,我得到了以下输出,这表明我不能像Office那样绘制尽可能多的文本。你知道我怎么画那些中等大小的字体吗

    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

尺寸基准尺寸为单个=16.0F
Dim inputText作为字符串=“mmmmmmmm”
Dim stringFormat作为Drawing.stringFormat=Drawing.stringFormat.GenericTypographic()
将pos变暗为单个
作为整数的Dim i
做
将字体用作绘图。font=New Drawing.font(“Calibri”(基本大小+i/10.0F)、FontStyle.Regular、GraphicsUnit.Pixel)
将文本设置为字符串=inputText&“”&font.Size.ToString()&“px”
Dim textSize As SizeF=e.Graphics.MeasureString(文本、字体、新点F(0,0)、字符串格式)
e、 图形.绘图字符串(文本,字体,画笔.黑色,新绘图.矩形F(10,位置,textSize.Width,textSize.Height),stringFormat)
pos+=字体高度
终端使用
i+=1
当位置
设置文本呈现提示:

e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;

几乎连续缩放都需要反别名。但是-从您的注释中选择-网格拟合会导致字体大小四舍五入到某个离散值,从而阻止它。

尝试不同的选项。反别名或ClearType选项应该会有帮助。事实上,我以前尝试过反别名GridFit、ClearTypeGridFit和SingleBitPerPixel选项,但显然忽略了反别名。使用AntiAlias就可以了,谢谢!PS:如果你想发布你的答案,我很乐意接受。谢谢,我已经添加了一个答案。