//// This code is part of Document Solutions for Imaging demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem.IO;usingSystem.Drawing;usingGrapeCity.Documents.Drawing;usingGrapeCity.Documents.Text;usingGrapeCity.Documents.Imaging;usingGCTEXT = GrapeCity.Documents.Text;usingGCDRAW = GrapeCity.Documents.Drawing; namespaceDsImagingWeb.Demos{// This sample demonstrates how to use GcGraphics.PushClip/PopClip// methods to clip drawing operations to an arbitrary region.publicclassPushClip {publicGcBitmapGenerateImage(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 = newRectangleF(pad, pixelSize.Height - ch - pad, cw, ch);var bmp = newGcBitmap(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(newPointF(pixelSize.Width, 0)); gpath.AddLine(newPointF(pixelSize.Width, pixelSize.Height)); gpath.AddLine(newPointF(0, pixelSize.Height)); gpath.EndFigure(FigureEnd.Closed); gpath.BeginFigure(newPointF(clipRc.Left, clipRc.Top)); gpath.AddLine(newPointF(clipRc.Right, clipRc.Top)); gpath.AddLine(newPointF(clipRc.Right, clipRc.Bottom)); gpath.AddLine(newPointF(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,newRectangleF(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),newTextFormat() {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(newRectangleF(bord / 2, bord / 2, pixelSize.Width - bord, pixelSize.Height - bord),newGCDRAW.Pen(foreColor, bord)); }return bmp; } }}