VintaSoft Imaging .NET SDK 14.0: Документация для .NET разработчика
В этом разделе
    Рисование 2D-графики
    В этом разделе

    Движок рисования для рисования 2D-графики

    VintaSoft Imaging .NET SDK предоставляет класс DrawingEngine, который определяет интерфейс для рисования 2D-графики:
    Также VintaSoft Imaging .NET SDK предоставляет готовые к применению реализации движка рисования:
    Лицензионная версия VintaSoft Imaging .NET SDK позволяет создавать собственный движок рисования или переопределять поведение существующего движка рисования. Ознакомительная версия SDK не позволяет создавать собственный движок рисования или переопределять поведение существующего движка рисования.


    Вот C#/VB.NET код, который демонстрирует, как рисовать 2D-графику и текст на PDF странице:
    using System.Drawing;
    
    using Vintasoft.Imaging;
    using Vintasoft.Imaging.Drawing;
    using Vintasoft.Imaging.Pdf;
    using Vintasoft.Imaging.Pdf.Drawing;
    using Vintasoft.Imaging.Pdf.Tree;
    
    namespace CSHARP
    {
        class PdfDrawingEngineExample
        {
            /// <summary>
            /// Creates PDF drawing engine on specified PDF page and performs drawing.
            /// </summary>
            /// <param name="width">PDF page width.</param>
            /// <param name="height">PDF page height.</param>
            /// <param name="resultImagePath">A path to save the drawing result.</param>
            public static void DrawWithPdfDrawingEngine(int width, int height, string resultImagePath)
            {
                // create empty PDF document
                using (PdfDocument document = new PdfDocument())
                {
                    // page size
                    RectangleF pageSize = new RectangleF(0, 0, width, height);
                    // create new page of specified size
                    PdfPage page = new PdfPage(document, pageSize);
                    // add page to a PDF document
                    document.Pages.Add(page);
    
                    // create graphics from PDF page
                    using (PdfGraphics graphics = PdfGraphics.FromPage(page))
                    // create drawing engine
                    using (PdfDrawingEngine drawingEngine = new PdfDrawingEngine(graphics, true))
                    {
                        // create drawing area
                        RectangleF drawingArea = new RectangleF(0, 0, width, height);
                        // draw objects
                        DrawingExample(drawingEngine, drawingArea);
                    }
    
                    // save document
                    document.Save(resultImagePath);
                }
            }
    
            /// <summary>
            /// Draws graphic objects using specified drawing engine.
            /// </summary>
            /// <param name="drawingEngine">Drawing engine.</param>
            /// <param name="drawingArea">Image area to draw objects in.</param>
            public static void DrawingExample(DrawingEngine drawingEngine, RectangleF drawingArea)
            {
                // create bounding rectangle for ellipse
                RectangleF ellipseRect = new RectangleF(
                    drawingArea.X + drawingArea.Width * 0.3f,
                    drawingArea.Y + drawingArea.Height * 0.3f,
                    drawingArea.Width * 0.4f,
                    drawingArea.Height * 0.4f);
    
                // create brush and pen to draw ellipse
                using (IDrawingSolidBrush brush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Blue))
                {
                    using (IDrawingPen pen = drawingEngine.DrawingFactory.CreatePen(Color.Red, 4f))
                    {
                        // fill ellipse
                        drawingEngine.FillEllipse(brush, ellipseRect);
                        // stroke ellipse
                        drawingEngine.DrawEllipse(pen, ellipseRect);
                    }
                }
    
                // create brush and font to draw text
                using (IDrawingSolidBrush textBrush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Yellow))
                {
                    using (IDrawingFont font = drawingEngine.DrawingFactory.CreateFont("Arial", 30, true, false))
                    {
                        // create properties to layout text
                        TextLayoutProperties layoutProperties = new TextLayoutProperties(AnchorType.Center);
                        // draw text
                        drawingEngine.DrawText("Text", font, textBrush, ellipseRect, layoutProperties);
                    }
                }
            }
        }
    }
    
    
    Imports System.Drawing
    
    Imports Vintasoft.Imaging
    Imports Vintasoft.Imaging.Drawing
    Imports Vintasoft.Imaging.Pdf
    Imports Vintasoft.Imaging.Pdf.Drawing
    Imports Vintasoft.Imaging.Pdf.Tree
    
    Class PdfDrawingEngineExample
        ''' <summary>
        ''' Creates PDF drawing engine on specified PDF page and performs drawing.
        ''' </summary>
        ''' <param name="width">PDF page width.</param>
        ''' <param name="height">PDF page height.</param>
        ''' <param name="resultImagePath">A path to save the drawing result.</param>
        Public Shared Sub DrawWithPdfDrawingEngine(width As Integer, height As Integer, resultImagePath As String)
            ' create empty PDF document
            Using document As New PdfDocument()
                ' page size
                Dim pageSize As New RectangleF(0, 0, width, height)
                ' create new page of specified size
                Dim page As New PdfPage(document, pageSize)
                ' add page to a PDF document
                document.Pages.Add(page)
    
                ' create graphics from PDF page
                Using graphics As PdfGraphics = PdfGraphics.FromPage(page)
                    ' create drawing engine
                    Using drawingEngine As New PdfDrawingEngine(graphics, True)
                        ' create drawing area
                        Dim drawingArea As New RectangleF(0, 0, width, height)
                        ' draw objects
                        DrawingExample(drawingEngine, drawingArea)
                    End Using
                End Using
    
                ' save document
                document.Save(resultImagePath)
            End Using
        End Sub
    
        ''' <summary>
        ''' Draws graphic objects using specified drawing engine.
        ''' </summary>
        ''' <param name="drawingEngine">Drawing engine.</param>
        ''' <param name="drawingArea">Image area to draw objects in.</param>
        Public Shared Sub DrawingExample(drawingEngine As DrawingEngine, drawingArea As RectangleF)
            ' create bounding rectangle for ellipse
            Dim ellipseRect As New RectangleF(drawingArea.X + drawingArea.Width * 0.3F, drawingArea.Y + drawingArea.Height * 0.3F, drawingArea.Width * 0.4F, drawingArea.Height * 0.4F)
    
            ' create brush and pen to draw ellipse
            Using brush As IDrawingSolidBrush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Blue)
                Using pen As IDrawingPen = drawingEngine.DrawingFactory.CreatePen(Color.Red, 4F)
                    ' fill ellipse
                    drawingEngine.FillEllipse(brush, ellipseRect)
                    ' stroke ellipse
                    drawingEngine.DrawEllipse(pen, ellipseRect)
                End Using
            End Using
    
            ' create brush and font to draw text
            Using textBrush As IDrawingSolidBrush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Yellow)
                Using font As IDrawingFont = drawingEngine.DrawingFactory.CreateFont("Arial", 30, True, False)
                    ' create properties to layout text
                    Dim layoutProperties As New TextLayoutProperties(AnchorType.Center)
                    ' draw text
                    drawingEngine.DrawText("Text", font, textBrush, ellipseRect, layoutProperties)
                End Using
            End Using
        End Sub
    End Class
    
    


    Вот C#/VB.NET код, который демонстрирует, как рисовать 2D-графику и текст на SVG странице:
    using System.Drawing;
    using System.Xml;
    
    using Vintasoft.Imaging;
    using Vintasoft.Imaging.Drawing;
    using Vintasoft.Imaging.Drawing.Svg;
    
    namespace CSHARP
    {
        class SvgDrawingEngineExample
        {
            /// <summary>
            /// Creates SVG drawing engine on specified image and performs drawing.
            /// </summary>
            /// <param name="width">SVG image width.</param>
            /// <param name="height">SVG image height.</param>
            /// <param name="resultImagePath">A path to save the result SVG image.</param>
            public static void DrawWithSvgDrawingEngine(int width, int height, string resultImagePath)
            {
                // create drawing engine
                using (SvgDrawingEngine drawingEngine = new SvgDrawingEngine(width, height))
                {
                    // create drawing area
                    RectangleF drawingArea = new RectangleF(0, 0, width, height);
                    // draw objects
                    DrawingExample(drawingEngine, drawingArea);
    
                    // create XML writer
                    using (XmlWriter xmlWriter = XmlWriter.Create(resultImagePath))
                    {
                        // get SVG content
                        SvgContent content = drawingEngine.GetContent();
                        // save SVG image
                        content.Save(xmlWriter);
                    }
                }
            }
    
            /// <summary>
            /// Draws graphic objects using specified drawing engine.
            /// </summary>
            /// <param name="drawingEngine">Drawing engine.</param>
            /// <param name="drawingArea">Image area to draw objects in.</param>
            public static void DrawingExample(DrawingEngine drawingEngine, RectangleF drawingArea)
            {
                // create bounding rectangle for ellipse
                RectangleF ellipseRect = new RectangleF(
                    drawingArea.X + drawingArea.Width * 0.3f,
                    drawingArea.Y + drawingArea.Height * 0.3f,
                    drawingArea.Width * 0.4f,
                    drawingArea.Height * 0.4f);
    
                // create brush and pen to draw ellipse
                using (IDrawingSolidBrush brush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Blue))
                {
                    using (IDrawingPen pen = drawingEngine.DrawingFactory.CreatePen(Color.Red, 4f))
                    {
                        // fill ellipse
                        drawingEngine.FillEllipse(brush, ellipseRect);
                        // stroke ellipse
                        drawingEngine.DrawEllipse(pen, ellipseRect);
                    }
                }
    
                // create brush and font to draw text
                using (IDrawingSolidBrush textBrush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Yellow))
                {
                    using (IDrawingFont font = drawingEngine.DrawingFactory.CreateFont("Arial", 30, true, false))
                    {
                        // create properties to layout text
                        TextLayoutProperties layoutProperties = new TextLayoutProperties(AnchorType.Center);
                        // draw text
                        drawingEngine.DrawText("Text", font, textBrush, ellipseRect, layoutProperties);
                    }
                }
            }
        }
    }
    
    
    Imports System.Drawing
    Imports System.Xml
    
    Imports Vintasoft.Imaging
    Imports Vintasoft.Imaging.Drawing
    Imports Vintasoft.Imaging.Drawing.Svg
    
    Class SvgDrawingEngineExample
        ''' <summary>
        ''' Creates SVG drawing engine on specified image and performs drawing.
        ''' </summary>
        ''' <param name="width">SVG image width.</param>
        ''' <param name="height">SVG image height.</param>
        ''' <param name="resultImagePath">A path to save the result SVG image.</param>
        Public Shared Sub DrawWithSvgDrawingEngine(width As Integer, height As Integer, resultImagePath As String)
            ' create drawing engine
            Using drawingEngine As New SvgDrawingEngine(width, height)
                ' create drawing area
                Dim drawingArea As New RectangleF(0, 0, width, height)
                ' draw objects
                DrawingExample(drawingEngine, drawingArea)
    
                ' create XML writer
                Using xmlWriter__1 As XmlWriter = XmlWriter.Create(resultImagePath)
                    ' get SVG content
                    Dim content As SvgContent = drawingEngine.GetContent()
                    ' save SVG image
                    content.Save(xmlWriter__1)
                End Using
            End Using
        End Sub
    
        ''' <summary>
        ''' Draws graphic objects using specified drawing engine.
        ''' </summary>
        ''' <param name="drawingEngine">Drawing engine.</param>
        ''' <param name="drawingArea">Image area to draw objects in.</param>
        Public Shared Sub DrawingExample(drawingEngine As DrawingEngine, drawingArea As RectangleF)
            ' create bounding rectangle for ellipse
            Dim ellipseRect As New RectangleF(drawingArea.X + drawingArea.Width * 0.3F, drawingArea.Y + drawingArea.Height * 0.3F, drawingArea.Width * 0.4F, drawingArea.Height * 0.4F)
    
            ' create brush and pen to draw ellipse
            Using brush As IDrawingSolidBrush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Blue)
                Using pen As IDrawingPen = drawingEngine.DrawingFactory.CreatePen(Color.Red, 4F)
                    ' fill ellipse
                    drawingEngine.FillEllipse(brush, ellipseRect)
                    ' stroke ellipse
                    drawingEngine.DrawEllipse(pen, ellipseRect)
                End Using
            End Using
    
            ' create brush and font to draw text
            Using textBrush As IDrawingSolidBrush = drawingEngine.DrawingFactory.CreateSolidBrush(Color.Yellow)
                Using font As IDrawingFont = drawingEngine.DrawingFactory.CreateFont("Arial", 30, True, False)
                    ' create properties to layout text
                    Dim layoutProperties As New TextLayoutProperties(AnchorType.Center)
                    ' draw text
                    drawingEngine.DrawText("Text", font, textBrush, ellipseRect, layoutProperties)
                End Using
            End Using
        End Sub
    End Class
    
    


    Фабрика рисования

    VintaSoft Imaging .NET SDK предоставляет класс DrawingFactory, который определяет интерфейс для создания примитивов рисования (перо, кисть, шрифт, растровое изображение и т. д.) для движка рисования:
    Также VintaSoft Imaging .NET SDK предоставляет готовые к использованию реализации фабрики рисования:
    Свойство DrawingFactory.Default позволяет получить или установить фабрику рисования по умолчанию. Например, можно установить SkiaSharpDrawingFactory в качестве фабрики рисования по умолчанию для Windows.

    Вот C#/VB.NET код, который демонстрирует, как установить фабрику рисования по умолчанию:
    /// <summary>
    /// Sets the SKIA Sharp drawing factory as a default drawing factory.
    /// </summary>
    public static void SetSkiaSharpSdkDrawing()
    {
        // Skia - cross platform drawing engine
        Vintasoft.Imaging.Drawing.SkiaSharp.SkiaSharpDrawingFactory.SetAsDefault();
    }
    
    /// <summary>
    /// Sets the GDI drawing factory as a default drawing factory.
    /// </summary>
    public static void SetGdiSdkDrawing()
    {
        // GDI - Windows graphics
        Vintasoft.Imaging.Drawing.Gdi.GdiGraphicsFactory.SetAsDefault();
    }
    
    ''' <summary>
    ''' Sets the SKIA Sharp drawing factory as a default drawing factory.
    ''' </summary>
    Public Shared Sub SetSkiaSharpSdkDrawing()
        ' Skia - cross platform drawing engine
        Vintasoft.Imaging.Drawing.SkiaSharp.SkiaSharpDrawingFactory.SetAsDefault()
    End Sub
    
    ''' <summary>
    ''' Sets the GDI drawing factory as a default drawing factory.
    ''' </summary>
    Public Shared Sub SetGdiSdkDrawing()
        ' GDI - Windows graphics
        Vintasoft.Imaging.Drawing.Gdi.GdiGraphicsFactory.SetAsDefault()
    End Sub