BlendText.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.Drawing Imports GrapeCity.Documents.Text Imports GrapeCity.Documents.Imaging Imports GCTEXT = GrapeCity.Documents.Text Imports GCDRAW = GrapeCity.Documents.Drawing Public Class BlendText Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap Dim ispectr = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "spectrum-500x500.png")) Const margin As Integer = 36 Const NCOLS As Integer = 4 Dim w As Integer = CInt((pixelSize.Width - margin * 2) / NCOLS) Dim h As Integer = w \ 2 Dim row As Integer = 0, col As Integer = 0 Dim bottomy As Single = 0.0F Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi) Using g = bmp.CreateGraphics(Color.White) ' Text layout for captions: Dim tl = g.CreateTextLayout() tl.DefaultFormat.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeMonoBold.ttf")) tl.DefaultFormat.FontSize = 22 tl.ParagraphAlignment = ParagraphAlignment.Center tl.TextAlignment = TextAlignment.Center tl.MaxWidth = w tl.MaxHeight = h tl.MarginTop = CSng((h - h / 1.4F) / 2.0F) tl.DefaultFormat.ForeColor = Color.Black Dim tfWhite = New TextFormat(tl.DefaultFormat) With {.ForeColor = Color.White} ' Render all blend modes in a grid: For Each mode In [Enum].GetValues(GetType(BlendMode)) Dim blendMode As BlendMode = CType(mode, BlendMode) If Not g.IsBlendModeSupported(blendMode) Then Continue For Dim x As Integer = margin + w * col Dim y As Integer = margin + h * row Dim r = New RectangleF(x, y, w, h) ' Draw spectrum image normally: g.BlendMode = BlendMode.Normal g.DrawImage(ispectr, r, Nothing, ImageAlign.StretchImage) ' Draw blend mode name using the current blend mode: tl.Clear() tl.AppendLine("B: " & blendMode.ToString()) tl.Append("W: " & blendMode.ToString(), tfWhite) tl.PerformLayout(True) Dim rc = tl.ContentRectangle rc.Offset(x, y) rc.Inflate(4, 2) ' Current blend mode: g.BlendMode = blendMode g.DrawTextLayout(tl, New PointF(x, y)) ' Draw spectrum image again using BlendMode.Difference ' to produce (mostly) colorful text on black background: g.BlendMode = BlendMode.Difference g.DrawImage(ispectr, r, Nothing, ImageAlign.StretchImage) ' Draw a rectangle to mark the current area: g.BlendMode = BlendMode.Normal g.DrawRectangle(r, Color.Gray) bottomy = r.Bottom col += 1 If col = NCOLS Then col = 0 row += 1 End If Next ' For reference, draw the backdrop: tl.Clear() tl.MarginAll = 0 tl.MaxWidth = bmp.PixelWidth tl.MaxHeight = Nothing tl.DefaultFormat.FontSize = 14 tl.TextAlignment = TextAlignment.Leading tl.ParagraphAlignment = ParagraphAlignment.Near tl.Append("The spectrum image used as the backdrop for the texts above:") g.DrawTextLayout(tl, New PointF(margin, bottomy + margin)) g.DrawImage(ispectr, New RectangleF(margin, bottomy + margin + tl.ContentHeight + 24, w, w), Nothing, ImageAlign.StretchImage) End Using Return bmp End Function End Class