GcLibsComparison.vb
C# VB
'''' This code is part of Document Solutions for Imaging demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports SystemImports System.IOImports System.DrawingImports System.Collections.GenericImports System.LinqImports GrapeCity.Documents.DrawingImports GrapeCity.Documents.TextImports GrapeCity.Documents.ImagingImports GrapeCity.Documents.Imaging.SkiaImports GrapeCity.Documents.Imaging.WindowsImports GCTEXT = GrapeCity.Documents.Text
'' This example demonstrates the differences in fidelity between texts'' rendered on bitmaps using the different DsImaging libraries:'' - DsImaging (cross-platform, package GrapeCity.Documents.Imaging);'' - DsImaging.Skia (cross-platform, package GrapeCity.Documents.Imaging.Skia);'' - DsImaging.Windows (Windows only, package GrapeCity.Documents.Imaging.Windows).'' Note that the results are rather noticeable here because the text is rendered'' using a very small font, and then significantly enlarged when drawn on the'' resulting image generated by the sample. In most real-life applications'' the differences are very subtle if noticeable at all.Public Class GcLibsComparison Public Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap
Const text As String = "Skia is an open source 2D graphics library which provides common APIs that work across a variety of hardware and software platforms." Dim q As Integer = 4 Dim width As Integer = pixelSize.Width \ q Dim height As Integer = pixelSize.Height \ (q * 3) Dim margin As Integer = 12 Dim tf As New TextFormat() With { .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSans.ttf")), .FontSize = 10 } Dim msg As String = $"Text with font size {tf.FontSize} rendered using {{0}} and enlarged x{q}:"
Using gcBmp As New GcBitmap(width, height, False) Using g = gcBmp.CreateGraphics(Color.Transparent) Dim tl = g.CreateTextLayout() tl.MaxWidth = width tl.MarginAll = margin tl.Append(text, tf) g.DrawTextLayout(tl, PointF.Empty) End Using
Using gcSkiaBmp As New GcSkiaBitmap(width, height, False) Using g = gcSkiaBmp.CreateGraphics(Color.Transparent) Dim tl = g.CreateTextLayout() tl.MaxWidth = width tl.MarginAll = margin tl.Append(text, tf) g.DrawTextLayout(tl, PointF.Empty) End Using
Dim gcWicBmp As GcWicBitmap = Nothing If GcWicBitmap.IsSupported Then gcWicBmp = New GcWicBitmap(width, height, False) Using g = gcWicBmp.CreateGraphics(Color.Transparent) Dim tl = g.CreateTextLayout() tl.MaxWidth = width tl.MarginAll = margin tl.Append(text, tf) g.DrawTextLayout(tl, PointF.Empty) End Using End If
Dim bmp As New GcBitmap(pixelSize.Width, pixelSize.Height, opaque) Using g = bmp.CreateGraphics(Color.White) g.Renderer.InterpolationMode = InterpolationMode.NearestNeighbor Dim fs As Integer = 16 Dim dy As Integer = pixelSize.Height \ 3 tf.FontSize = fs
g.DrawString(String.Format(msg, "GcBitmapGraphics (cross-platform)"), tf, New PointF(margin / 3.0F, margin / 3.0F)) Dim rc As New RectangleF(0, fs * 2, width * q, height * q - fs * 2) rc.Inflate(-margin, -margin) g.DrawImage(gcBmp, rc, Nothing, ImageAlign.StretchImage) g.DrawRoundRect(rc, margin, Color.MediumVioletRed)
g.DrawString(String.Format(msg, "GcSkiaGraphics (cross-platform)"), tf, New PointF(margin / 3.0F, dy + margin / 3.0F)) rc = New RectangleF(0, fs * 2 + dy, width * q, height * q - fs * 2) rc.Inflate(-margin, -margin) g.DrawImage(gcSkiaBmp, rc, Nothing, ImageAlign.StretchImage) g.DrawRoundRect(rc, margin, Color.MediumVioletRed)
g.DrawString(String.Format(msg, "GcWicBitmapGraphics (Windows-only)"), tf, New PointF(margin / 3.0F, dy * 2 + margin / 3.0F)) rc = New RectangleF(0, fs * 2 + dy * 2, width * q, height * q - fs * 2) rc.Inflate(-margin, -margin) If gcWicBmp IsNot Nothing Then g.DrawImage(gcWicBmp, rc, Nothing, ImageAlign.StretchImage) Else Dim tl = g.CreateTextLayout() tl.MaxWidth = rc.Width tl.MarginAll = margin tl.DefaultFormat.Font = tf.Font tl.DefaultFormat.FontSize = 16 tl.DefaultFormat.ForeColor = Color.OrangeRed tl.AppendLine( "Looks like this demo is not running on a Windows system, so WIC (GcWicBitmap, GcWicBitmapGraphics) " & "is not supported. To see how text rendered using GcWicBitmapGraphics looks, download this demo project " & "and run it on a Windows system.") g.DrawTextLayout(tl, rc.Location) End If g.DrawRoundRect(rc, margin, Color.MediumVioletRed) End Using
If gcWicBmp IsNot Nothing Then gcWicBmp.Dispose() End If
Return bmp End Using End Using End FunctionEnd Class