我想使用 C# 生成一个 SVG 文件。我已经有了以 PNG 和 EMF 格式绘制它们的代码(使用框架的标准类System.Drawing.Imaging.Metafile和ZedGraph)。你有什么建议让代码适应 SVG?最好我想找到一些模仿System.Drawing.Graphics界面的库(免费或免费)。
4 回答
查看C# 中的 SVG 框架和 SVG-GDI+ 桥接项目。
从上面的网页...
SvgGdi 桥是一组使用 SvgNet 在 SVG 和 GDI+ 之间转换的类。这意味着任何使用 GDI+ 绘制图形的代码也可以轻松地输出 SVG,只需插入 SvgGraphics 对象即可。此对象与常规 .NET Graphics 对象完全相同,但创建的是 SVG 树。甚至像阴影填充和线锚这样的东西也被实现了。
我们在 Github 上创建了 C# .NET SVG 库的公共分支。
它比你在 Codeplex 上找到的那个有了很大的改进,请看一下并按你喜欢的方式分叉它:
https://github.com/svg-net/SVG
编辑: 只是让您知道,截至 2021 年 1 月:
虽然其他人似乎死了多年,但它仍然活跃。但我们绝对可以使用其他开发人员的帮助。
我使用了这个http://svg.codeplex.com/,我对此非常满意。仍然有一些错误,所以你应该看看http://svg.codeplex.com/SourceControl/PatchList.aspx中的补丁。
当我发现我可以解决的错误时,我会直接将它们发布到那里。但是那里的家伙评估需要一些时间。查看补丁并自己应用它们是一个更好的主意。
该库足以满足大多数常见需求。对于真正花哨的东西,它需要改进思想......
由于 SVG 基本上是一个 XML 文档 - 您可以自己实现“绘图”。查看W3C SVG 规范中的规范。我做了一次来生成 SVG 签名图像,只需要几个小时和一个 Firefox 来测试生成的图像。
当然,如果您从用户输入生成图像,或者您不介意花一些时间从另一种矢量图像格式进行转换,这当然适用。
PS您可以创建自己的包装器来模仿System.Drawing.Graphics,例如DrawLine() 以附加到内部缓冲区等等。