2009-10-06 63 views
59

我想用C#生成一个SVG文件。我已经有了以PNG和EMF格式绘制它们的代码(使用框架的标准类System.Drawing.Imaging.MetafileZedGraph)。你可以推荐做些什么来使代码适应SVG?最好我想找一些能模仿System.Drawing.Graphics界面的库(免费或不可用)。在.NET/C#中绘制SVG?

+28

非常有建设性的问题!,为什么地球上这是封闭的? – 2013-12-10 11:54:40

+2

@gyozokudor:要求推荐图书馆/工具的问题在此处关闭......这是在问题提交时尚未实施的政策。如果您想讨论这项政策,请前往meta.stackexchange.com。 – liori 2013-12-10 13:45:20

+11

我不知道该怎么讨论这个问题,在我看来,应该允许这样的问题。 – 2013-12-10 14:47:29

回答

35

查看SVG framework in C# and an SVG-GDI+ bridge项目。

从上面的网页...

的SvgGdi桥是一组使用SvgNet到 SVG和GDI +之间的转换类 。这意味着使用GDI +绘制 图形的任何代码都可以很容易地将SVG输出为 ,只需插入 SvgGraphics对象即可。此对象与 图形对象完全相同,但创建了SVG 树。甚至像阴影填充 和线锚都实现。

+4

为您的高级Google-fu +1。 – MusiGenesis 2009-10-06 13:03:10

+1

+1,我的google-fu没有找到这个。 – liori 2009-10-06 13:04:33

+0

这似乎是主要的项目页面:http://www.jbrowse.com/svgnet/。看起来图书馆还没有开发6年。我可能还会检查它。 – liori 2009-10-06 13:20:32

7
+0

-1,问题是关于从SVG导出PNG。 SVGPad是一个编辑器,它与文章无关,应用程序和库都无法做到这一点。 (如果是这样,你应该留下的不仅仅是一个链接) – DevTheo 2012-02-07 15:17:50

+0

@DevTheo:你可能想更仔细地阅读这个问题和链接的文章。 OP不会尝试将PNG转换为SVG; OP具有将原语绘制成PNG和EMF格式的代码,并且希望将其用于SVG格式。我链接的样本提供了完全相同的代码。 – MusiGenesis 2012-02-07 15:26:35

+0

好的,对不起..我把我的问题推到了问题上..抱歉..我无法重新投票...我错过了那个点.. – DevTheo 2012-02-09 15:44:09

3

由于SVG基本上是一个XML文档 - 可以实现 “绘图” 自己。检查W3C SVG spec的规格。我曾经做过一次生成SVG签名图像,所花费的时间只有几个小时,并且使用Firefox来测试生成的图像。

当然,这适用于从用户输入生成图像或者如果您不介意花时间从其他矢量图像格式进行转换的情况。

P.S.您可以创建自己的包装来模仿System.Drawing.Graphics,例如DrawLine()附加到内部缓冲区等。

+4

现在的问题是时间问题:我们希望在这项任务上花费尽可能少的时间,而SVG支持对我们来说并不重要。因此,我们正在寻找可能被用作GDI API的原地替换的东西......或者至少是不需要太多适应的东西。我们已经考虑过您的建议。 – liori 2009-10-06 13:34:20

+0

我明白了。然后SDX2000的建议是最合乎逻辑的方法( - 。 – Audrius 2009-10-06 13:50:49

+7

好吧,我只是放了一年的休假,所以我可以实现。 – 2010-01-05 04:02:12

7

我用这个http://svg.codeplex.com/,我对它很满意。仍然有一些错误,所以你应该看看在http://svg.codeplex.com/SourceControl/PatchList.aspx补丁。

当我发现我可以解决的错误,我直接发布在那里。但是那里的人需要一些时间来评估。查看补丁并自行应用它是一个更好的主意。

该库对于大多数通常的需求来说足够合理。对于真正花哨的东西,它需要被改进以为...

17

我们已经在github上制作了一个C#.NET SVG库的公共叉。

它是非常在一个你在CodePlex上找到改进,请看看和叉它,只要你喜欢:

https://github.com/vvvv/SVG

编辑: 只是为了让你知道,在12月的2014年:

虽然其他人似乎已经死了多年,这仍然是活跃的。但我们绝对可以使用其他开发人员的一些帮助。

+2

太棒了!我使用原始的SVG组件,然后找到这篇文章,在几秒钟内运行更新的组件!谢谢! – 2013-06-19 16:53:26