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