SvgSpecArt.vb
'' 
'' このコードは、DioDocs for Imaging のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System
Imports System.IO
Imports System.Drawing
Imports System.Collections.Generic
Imports System.Linq
Imports System.Numerics
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging
Imports GrapeCity.Documents.Svg
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' GcSvgDocument を使用して、SVG 仕様書で図例として使用されている複数の画像を描画します。
'' これらの画像はSVG specに掲載されているものです。
Public Class SvgSpecArt
    Public Function GenerateImage(
            ByVal pixelSize As Size,
            ByVal dpi As Single,
            ByVal opaque As Boolean,
            Optional ByVal sampleParams As String() = Nothing) As GcBitmap

        '' リソースから画像を読み込みます。
        Dim fnames As New List(Of String) From {
            "dash-path.svg", "opacity.svg", "paths.svg", "shadowstyle.svg", "units.svg"
        }
        Dim images As New List(Of Tuple(Of String, GcSvgDocument))()
        For Each f In fnames
            images.Add(Tuple.Create(f, GcSvgDocument.FromFile(Path.Combine("Resources", "SvgSpecArt", f))))
        Next

        Dim margin As Single = dpi / 2.0F
        Dim gapy As Single = dpi / 4.0F
        Dim ip As New PointF(margin, margin)

        '' サンプル画像を描画します。
        Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi)
        Using g = bmp.CreateGraphics(Color.White)
            For i As Integer = 0 To images.Count() - 1
                Dim svg = images(i).Item2
                Dim s = svg.GetIntrinsicSize(SvgLengthUnits.Pixels)
                g.DrawSvg(svg, ip)
                ip.Y += s.Height + gapy
            Next
        End Using

        '' 結果を保存した後、画像を破棄します。
        images.ForEach(Sub(t_) t_.Item2.Dispose())

        Return bmp
    End Function
End Class