OutlinedText.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 System.Collections.Generic
Imports System.Linq
Imports System.Numerics
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' Creating outlined text
Public Class OutlinedText
    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, opaque, dpi, dpi)
        Using g = bmp.CreateGraphics(Color.White)
            Dim tl = g.CreateTextLayout()

            '' Set up text layout:
            tl.MaxWidth = g.Width
            tl.MaxHeight = g.Height
            tl.MarginAll = g.Resolution / 2
            Const fontSize = 64

            Dim rcBack = New RectangleF(0, 0, pixelSize.Width, pixelSize.Height)
            g.DrawImage(GCDRAW.Image.FromFile(Path.Combine("Resources", "Images", "purples.jpg")), rcBack, Nothing, ImageAlign.StretchImage)

            Dim tf0 = New TextFormat() With
            {
                .ForeColor = Color.LemonChiffon,
                .Hollow = True,
                .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "GOTHICB.TTF")),
                .FontSize = fontSize
            }
            tl.AppendLine("Hollow Text", tf0)

            Dim tf1 = New TextFormat() With
            {
                .StrokePen = Color.DarkMagenta,
                .FillBrush = New GCDRAW.SolidBrush(Color.Yellow),
                .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FoglihtenNo07.otf")),
                .FontSize = fontSize
            }
            tl.AppendLine("Outlined Text", tf1)

            Dim grad0 = New LinearGradientBrush(Color.Red, New PointF(0, 0), Color.Blue, New PointF(1, 0))
            Dim tf2 = New TextFormat() With
            {
                .FillBrush = grad0,
                .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "cambriab.ttf")),
                .FontSize = fontSize
            }
            tl.AppendLine("Gradient Fill", tf2)

            Dim grad1 = New LinearGradientBrush(Color.Red, Color.Purple)
            grad1.GradientStops = New List(Of GradientStop)() From
            {
                New GradientStop(Color.Orange, 1 / 6.0F),
                New GradientStop(Color.Yellow, 2 / 6.0F),
                New GradientStop(Color.Green, 3 / 6.0F),
                New GradientStop(Color.Cyan, 4 / 6.0F),
                New GradientStop(Color.Blue, 5 / 6.0F)
            }
            Dim tf3 = New TextFormat() With
            {
                .FillBrush = grad1,
                .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "cambriab.ttf")),
                .FontSize = fontSize
            }
            tl.AppendLine("Multi-stop gradient", tf3)

            Dim tf4 = New TextFormat(tf3)
            tf4.StrokePen = Color.GreenYellow
            tl.AppendLine("Multi-stop gradient with outline", tf4)

            Dim tf5 = New TextFormat(tf4)
            tf5.Hollow = True
            tf5.StrokePen = New GCDRAW.Pen(Color.DarkRed, g.Resolution / 72)
            tl.AppendLine("Text outlined with 1pt wide pen", tf5)

            '' It is not necessary to call PerformLayout() for a newly created TextLayout
            '' or after a call to TextLayout.Clear():
            g.DrawTextLayout(tl, PointF.Empty)
        End Using
        '' Done:
        Return bmp
    End Function
End Class