2009-10-06 8 views
59

Ich möchte eine SVG-Datei mit C# erstellen. Ich habe bereits Code, um sie in PNG- und EMF-Formaten zu zeichnen (unter Verwendung der Framework-Standardklasse System.Drawing.Imaging.Metafile und ZedGraph). Was können Sie empfehlen, um diesen Code an SVG anzupassen? Am liebsten würde ich eine Bibliothek finden (kostenlos oder nicht), die System.Drawing.Graphics Schnittstelle nachahmt.SVG in .NET/C# zeichnen?

+28

Sehr konstruktive Frage !, Warum in aller Welt war das geschlossen? –

+2

@gyozokudor: Fragen, in denen nach Empfehlungen für Bibliotheken/Tools gefragt wird, sind hier geschlossen ... Dies ist eine Richtlinie, die zum Zeitpunkt der Anfrage nicht vorhanden war. Wenn Sie diese Richtlinie diskutieren möchten, besuchen Sie meta.stackexchange.com. – liori

+11

Ich weiß nicht, was ich darüber diskutieren soll, es scheint mir offensichtlich, dass solche Fragen erlaubt sein sollten. –

Antwort

35

Schauen Sie sich die SVG framework in C# and an SVG-GDI+ bridge Projekt.

Aus der obigen Webseite ...

Die SvgGdi Brücke ist eine Reihe von Klassen, die SvgNet verwenden, um zwischen SVG und GDI + zu übersetzen. Was das bedeutet ist, dass jeder Code, der GDI + verwendet, um Grafiken zu zeichnen, einfach SVG als gut ausgeben kann, einfach durch Einstecken der SvgGraphics Objekt. Dieses Objekt ist genau das gleiche wie ein reguläres .NET Grafikobjekt, aber erstellt einen SVG Baum. Sogar Dinge wie schraffierte Füllungen und Linienanker sind implementiert.

+4

+1 für Ihre überlegene Google-Fu. – MusiGenesis

+1

+1, Mein Google-Fu hat dieses nicht gefunden. – liori

+0

Dies scheint die Hauptprojektseite zu sein: http://www.jbrowse.com/svgnet/. Es sieht so aus, als ob die Bibliothek seit 6 Jahren nicht mehr entwickelt wurde. Ich werde es wahrscheinlich noch überprüfen. – liori

7
+0

-1, Die Frage lautete, einen PNG von SVG zu exportieren. SVGPad ist ein Editor, und es ist kein Fall von dem Artikel, den weder die App noch die Bibliothek tun können. (Wenn ja, sollten Sie mehr als nur einen Link hinterlassen haben) – DevTheo

+0

@DevTheo: Vielleicht möchten Sie die Frage und den verlinkten Artikel näher lesen. OP versucht nicht, ein PNG in SVG umzuwandeln; OP hat vorhandenen Code zum Zeichnen von Primitiven in PNG- und EMF-Formate und möchte dasselbe in das SVG-Format tun. Das Beispiel, mit dem ich verlinkt habe, enthält Code, um genau das zu tun. – MusiGenesis

+0

Ok, sorry .. Ich schob mein Problem auf die Frage .. sorry .. und ich kann die Abstimmung nicht wiederholen ... Ich vermisste diesen Punkt irgendwie .. – DevTheo

3

Als SVG ist im Grunde ein XML-Dokument - Sie "Zeichnung" selbst umsetzen können. Überprüfen Sie die Spezifikationen bei W3C SVG spec. Ich habe es einmal gemacht, um SVG-Signaturbilder zu erzeugen, alles, was ich brauchte, war ein paar Stunden und ein Firefox, um das generierte Bild zu testen.

Natürlich gilt dies, wenn Sie Bild von Benutzereingaben generieren oder wenn Sie nichts dagegen haben einige Zeit zu tun Umwandlung von einem anderen Vektor-Bildformat zu verbringen.

P.S. Sie können Ihren eigenen Wrapper erstellen, um System.Drawing.Graphics nachzuahmen, z. DrawLine() zum Anhängen an den internen Puffer und so weiter.

+4

Das Problem ist die Zeit: Wir möchten so wenig Zeit wie möglich für diese Aufgabe aufwenden, und die SVG-Unterstützung ist für uns nicht wirklich wichtig. Daher suchen wir nach etwas, das möglicherweise als Ersatz für die GDI-API verwendet werden könnte ... oder zumindest etwas, das nicht viel Anpassung benötigt. Ihr Vorschlag wurde auch von uns bereits berücksichtigt. – liori

+0

Ich verstehe. Dann SDX2000 Vorschlag ist der logischste Ansatz dazu (-. – Audrius

+7

Ok, ich werde nur für ein Jahr Sabbatical setzen, damit ich das implementieren kann. –

7

ich verwendet, um dieses eine http://svg.codeplex.com/ und ich bin sehr zufrieden mit ihm. Immer noch einige Bugs, also sollten Sie sich die Patches in http://svg.codeplex.com/SourceControl/PatchList.aspx ansehen.

Wenn ich entdecken Fehler, die ich lösen kann ich sie direkt dort buchen. Aber es braucht etwas Zeit, um von den Jungs dort bewertet zu werden. Es ist eine bessere Idee, sich die Patches anzusehen und sie selbst anzuwenden.

Die Bibliothek ist für die meisten üblichen Bedürfnisse einigermaßen ausreichend. für wirklich fancy stuff, braucht es Gedanken verbessert wird ...

17

Wir haben eine öffentliche Gabel der C# .NET SVG-Bibliothek auf Github gemacht.

es viel über die eine verbesserte Sie auf Codeplex finden, haben Sie bitte einen Blick und Gabel es, wie Sie wollen:

https://github.com/vvvv/SVG

Edit: Nur damit Sie wissen, ab Dezember 2014:

Während andere seit Jahren tot scheinen, ist dies immer noch aktiv. Aber wir könnten definitiv Hilfe von anderen Entwicklern gebrauchen.

+2

Super! Ich war mit der ursprünglichen SVG-Komponente, dann fand diesen Beitrag und war in nur Sekunden mit Ihrer aktualisierten Komponente zu laufen! Danke! –