PushClip.cs
C# VB
//// This code is part of Document Solutions for Imaging demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.IO;using System.Drawing;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{ // This sample demonstrates how to use GcGraphics.PushClip/PopClip // methods to clip drawing operations to an arbitrary region. public class PushClip { public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null) { var backColor = Color.LightGray; var foreColor = Color.DarkRed; float cw = 400, ch = 300, pad = 40, bord = 4, textpad = 10; var clipRc = new RectangleF(pad, pixelSize.Height - ch - pad, cw, ch); var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi); using (var g = bmp.CreateGraphics(backColor)) { // We create a path consisting of two nested rectangles, // outer for the whole bitmap, inner for a text box. // We then use that path to create a clip region and // draw an image covering the whole bitmap but excluding // the text box: using (var gpath = g.CreatePath()) { gpath.BeginFigure(PointF.Empty); gpath.AddLine(new PointF(pixelSize.Width, 0)); gpath.AddLine(new PointF(pixelSize.Width, pixelSize.Height)); gpath.AddLine(new PointF(0, pixelSize.Height)); gpath.EndFigure(FigureEnd.Closed); gpath.BeginFigure(new PointF(clipRc.Left, clipRc.Top)); gpath.AddLine(new PointF(clipRc.Right, clipRc.Top)); gpath.AddLine(new PointF(clipRc.Right, clipRc.Bottom)); gpath.AddLine(new PointF(clipRc.Left, clipRc.Bottom)); gpath.EndFigure(FigureEnd.Closed); using (var cliprgn = g.CreateClipRegion(gpath)) using (var img = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "clivia.jpg"))) { g.PushClip(cliprgn); g.DrawImage( img, new RectangleF(0, 0, pixelSize.Width, pixelSize.Height), null, ImageAlign.StretchImage); g.PopClip(cliprgn); } } // We now draw some text inside the text box, // clipping to it (this overload of PushClip // returns an IDisposable that removes the clipping // when disposed): using (g.PushClip(clipRc)) { clipRc.Inflate(-textpad, -textpad); g.DrawString( Common.Util.LoremIpsum(1, 3, 4, 10, 20), new TextFormat() { Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSerif.ttf")), FontSize = 16, ForeColor = foreColor }, clipRc ); } // Draw a border around the whole image, // demonstrating that the clip has been removed: g.DrawRectangle( new RectangleF(bord / 2, bord / 2, pixelSize.Width - bord, pixelSize.Height - bord), new GCDRAW.Pen(foreColor, bord)); } return bmp; } }}