在 C# 中将 SVG 字符串转换为位图(理想情况下在内存中)

cs0*_*815 3 c# svg bitmap

我使用下面的代码将 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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

tot*_*aka 6

您可以从字符串创建一个 SvgDocument var mySvg = SvgDocument.FromSvg<SvgDocument>(svgString);,然后使用 SvgDocument 提供的 Draw() 方法将其绘制为位图,就像这样,var myBmp = mySvg.Draw();无需接触硬盘。