2

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
4

1 に答える 1

1

テキスト レンダリング ヒントを設定します。

e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;

ほぼ連続的なスケーリングには、アンチエイリアスが必要です。しかし、あなたのコメントから判断すると、グリッドフィッティングにより、フォントサイズがそれを防ぐ離散値に丸められます。

于 2012-07-05T10:56:38.747 に答える