GraphicsTransforms.cs
// // This code is part of Document Solutions for Imaging demos. // Copyright (c) MESCIUS inc. All rights reserved. // using System; using System.IO; using System.Drawing; using System.Numerics; using GrapeCity.Documents.Drawing; using GrapeCity.Documents.Text; using GrapeCity.Documents.Imaging; using GCTEXT = GrapeCity.Documents.Text; using GCDRAW = GrapeCity.Documents.Drawing; namespace DsImagingWeb.Demos { // Shows how to use graphics transformations (GcGraphics.Transform property). public class GraphicsTransforms { private void DrawBox(string text, GcGraphics g, RectangleF box) { 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() { Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSerif.ttf")), FontSize = 14, }, box); } public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null) { const string baseTxt = "Text drawn at (0,36) in a 4\"x2\" box"; var Inch = dpi; var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi); using (var g = bmp.CreateGraphics(Color.White)) { var box = new RectangleF(0, 36, dpi * 4, dpi * 2); // #1: DrawBox($"Box 1: {baseTxt}, no transformations.", g, box); // var translate0 = Matrix3x2.CreateTranslation(Inch * 1, Inch * 4); var 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); // var translate1 = Matrix3x2.CreateTranslation(Inch * 3, Inch * 5); var scale1 = Matrix3x2.CreateScale(0.7f); var rotate0 = Matrix3x2.CreateRotation((float)(-70 * Math.PI) / 180f); // 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 = // rotate0 * Matrix3x2.CreateSkew((float)(-45 * Math.PI) / 180f, (float)(20 * Math.PI) / 180f) * 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((float)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); } // Done: return bmp; } } }