преобразовать SVG-строку в Bitmap в идеале в памяти в C # - PullRequest
0 голосов
/ 23 декабря 2018

Я использую приведенный ниже код для преобразования строки SVG (svgString) в растровое изображение (myBitmap).В идеале, я хочу избежать поездки на жесткий диск.Считаете ли вы, что это возможно (не нашел много документации SVG пакет nuget).Кстати, я знаю, что могу также записать bmp на жесткий диск, но я выбрал png, поскольку фон bmp по какой-то причине всегда черный.

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using Svg;

namespace Bla
{
  class Program
  {
    static void Main(string[] args)
    {
      var svgPath = @"d:\test.svg";
      var pngPath = @"d:\test.png";
      var svgString = @"
      <!DOCTYPE html>
      <html>
      <body>
      <svg height='200' width='500'>
        <polyline points='20,20 40,25 60,40 80,120 120,140 200,180' style='fill:none;stroke:black;stroke-width:3' />
        Sorry, your browser does not support inline SVG.
      </svg>
      </body>
      </html>
      ";

      File.WriteAllText(svgPath, svgString);

      var svgDocument = SvgDocument.Open(svgPath);  
      svgDocument.ShapeRendering = SvgShapeRendering.Auto;

      var bmp = svgDocument.Draw();              
      bmp.Save(pngPath, ImageFormat.Png);

      var myBitmap = new Bitmap(pngPath);
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 18 августа 2019

Когда вы читаете SvgDocument.cs , вы можете найти 'SvgDocument.Open (path)', поэтому я пишу следующий метод.

private void TextToBitmap(string text)
{
    try
    {
        byte[] bytes = Encoding.UTF8.GetBytes(text);
        using (var stream = new MemoryStream(bytes))
        {
            svgDoc = SvgDocument.Open<SvgDocument>(stream, null);
        }
        pictureBox1.Image = svgDoc.Draw();
    }
    catch { }
}
0 голосов
/ 23 декабря 2018

Вы можете создать SvgDocument из строки с var mySvg = SvgDocument.FromSvg<SvgDocument>(svgString);, которую затем можете нарисовать в растровом изображении с помощью метода Draw (), предоставляемого SvgDocument, например, var myBmp = mySvg.Draw(); Все, не касаясь жесткого диска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...