PushClip.vb
C# VB
'''' This code is part of Document Solutions for Imaging demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports GrapeCity.Documents.DrawingImports GrapeCity.Documents.TextImports GrapeCity.Documents.ImagingImports GCTEXT = GrapeCity.Documents.TextImports GCDRAW = GrapeCity.Documents.Drawing
'' This sample demonstrates how to use GcGraphics.PushClip/PopClip'' methods to specify clipping.Public Class PushClip Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap
Dim backColor = Color.FromArgb(&HFF0066CC) Dim foreColor = Color.FromArgb(&HFFFFCC00) Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi) Dim cw = 400, ch = 300, pad = 10, bord = 4 Dim clipRc = New RectangleF(pixelSize.Width - cw - pad, pad, cw, ch) Using 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 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 cliprgn = g.CreateClipRegion(gpath) Using img = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "clivia.jpg")) g.PushClip(cliprgn) g.DrawImage( img, New RectangleF(0, 0, pixelSize.Width, pixelSize.Height), Nothing, ImageAlign.StretchImage) g.PopClip(cliprgn) End Using End Using End Using '' 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)) g.DrawString( Util.LoremIpsum(), New TextFormat() With { .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSerif.ttf")), .FontSize = 16, .ForeColor = foreColor }, clipRc ) End Using '' 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)) End Using '' Done Return bmp End FunctionEnd Class