''
'' 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.Numerics
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' Shows how to use graphics transformations (GcGraphics.Transform property).
Public Class GraphicsTransforms
Private Sub DrawBox(ByVal text As String, ByVal g As GcGraphics, ByVal box As RectangleF)
g.FillRectangle(box, Color.FromArgb(80, 0, 184, 204))
g.DrawRectangle(box, Color.FromArgb(0, 193, 213), 1)
box.Inflate(-6, -6)
g.DrawString(text, New TextFormat() With
{
.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "times.ttf")),
.FontSize = 14
},
box)
End Sub
Function GenerateImage(
ByVal pixelSize As Size,
ByVal dpi As Single,
ByVal opaque As Boolean,
Optional ByVal sampleParams As String() = Nothing) As GcBitmap
Const baseTxt = "Text drawn at (0,36) in a 4""x2"" box"
Dim Inch = dpi
Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi)
Using g = bmp.CreateGraphics(Color.White)
Dim box = New RectangleF(0, 36, dpi * 4, dpi * 2)
'' #1:
DrawBox($"Box 1: {baseTxt}, no transformations.", g, box)
''
Dim translate0 = Matrix3x2.CreateTranslation(Inch * 1, Inch * 4)
Dim scale0 = Matrix3x2.CreateScale(0.5F)
''
'' Transforms are applied in order from last to first.
'' #2:
g.Transform =
scale0 *
translate0
DrawBox($"Box 2: {baseTxt}, translated by (1"", 4"") and scaled by 0.5.", g, box)
'' #3:
g.Transform =
translate0 *
scale0
DrawBox($"Box 3: {baseTxt}, scaled by 0.5 and translated by (1"", 4"").", g, box)
''
Dim translate1 = Matrix3x2.CreateTranslation(Inch * 3, Inch * 5)
Dim scale1 = Matrix3x2.CreateScale(0.7F)
Dim rotate0 = Matrix3x2.CreateRotation((-70 * Math.PI) / 180.0F) '' 70 degrees CCW
'' #4:
g.Transform =
rotate0 *
translate1 *
scale1
DrawBox($"Box 4: {baseTxt}, scaled by 0.7, translated by (3"", 5""), and rotated 70 degrees counterclockwise.", g, box)
'' #5:
g.Transform =
Matrix3x2.CreateTranslation(36, Inch) *
g.Transform
DrawBox($"Box 5: {baseTxt}, applied current transform (Box 4), and translated by (1/2"", 1"").", g, box)
'' #6:
g.Transform =
Matrix3x2.CreateSkew((-45 * Math.PI) / 180.0F, (20 * Math.PI) / 180.0F) *
Matrix3x2.CreateTranslation(Inch * 3, Inch * 6)
DrawBox($"Box 6: {baseTxt}, translated by (3"", 6""), and skewed -45 degrees on axis X and 20 degrees on axis Y.", g, box)
'' #7:
g.Transform =
Matrix3x2.CreateRotation(Math.PI) *
Matrix3x2.CreateTranslation(bmp.Width - dpi, bmp.Height - dpi)
DrawBox($"Box 7: {baseTxt}, translated by (7.5"", 10""), and rotated by 180 degrees.", g, box)
'' We can remove any transformations on a graphics like so:
g.Transform = Matrix3x2.Identity
'' Draw border around the whole image:
g.DrawRectangle(New RectangleF(0, 0, bmp.Width, bmp.Height), Color.DarkSlateBlue, 4)
End Using
'' Done
Return bmp
End Function
End Class