TrueTypeHinting.vb
''
'' This code is part of Document Solutions for Imaging demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Imaging
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' This sample demonstrates how to use TrueType font hinting instructions.
''
'' Many TrueType fonts include low-level hinting instructions.
'' The original purpose of introducing hinting instructions was 
'' to improve the look of glyphs when the font size is comparable
'' to the device resolution.
'' Such instructions are also used (especially in CJK fonts)
'' to reuse some glyph parts in different glyphs regardless of the font size.
'' GcGraphics supports hinting instructions. To enable it, set
'' TextFormat.EnableFontHinting property to true when rendering text.
'' 
'' This sample renders a string using small sans-serif and serif fonts
'' with hinting turned OFF and ON.
Public Class TrueTypeHinting
    Function GenerateImage(
        ByVal pixelSize As Size,
        ByVal dpi As Single,
        ByVal opaque As Boolean,
        Optional ByVal sampleParams As String() = Nothing) As GcBitmap

        Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi)
        Dim dy = dpi / 2
        Dim ip = New PointF(dpi, dpi)
        Using g = bmp.CreateGraphics(Color.White)
            '' Turning anti-aliasing off makes the hinting effect on small text more obvious:
            g.Renderer.Aliased = True

            Const sOff = "Hinting OFF: "
            Const sOn = "Hinting ON: "

            '' Draw a string with hinting instructions off and on:
            Const text = "The quick brown fox jumps over the lazy dog."

            Dim tf = New TextFormat() With
                {
                    .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSans.ttf")),
                    .FontSize = 12,
                    .EnableFontHinting = False
                }
            g.DrawString(sOff + text, tf, ip)
            ip.Y += dy
            tf.FontSize = 10
            g.DrawString(sOff + text, tf, ip)
            ip.Y += dy * 2

            tf.EnableFontHinting = True
            tf.FontSize = 12
            g.DrawString(sOn + text, tf, ip)
            ip.Y += dy
            tf.FontSize = 10
            g.DrawString(sOn + text, tf, ip)
            ip.Y += dy * 2

            '' Draw the same string with a serif font
            tf.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSerif.ttf"))
            tf.EnableFontHinting = False
            tf.FontSize = 12
            g.DrawString(sOff + text, tf, ip)
            ip.Y += dy
            tf.FontSize = 10
            g.DrawString(sOff + text, tf, ip)
            ip.Y += dy * 2

            tf.EnableFontHinting = True
            tf.FontSize = 12
            g.DrawString(sOn + text, tf, ip)
            ip.Y += dy
            tf.FontSize = 10
            g.DrawString(sOn + text, tf, ip)
            ip.Y += dy * 2
        End Using
        '' Done
        Return bmp
    End Function
End Class