68 votes

Dessiner des SVG en .NET/C# ?

J'aimerais générer un fichier SVG en utilisant C#. J'ai déjà du code pour les dessiner aux formats PNG et EMF (en utilisant la classe standard du framework System.Drawing.Imaging.Metafile et ZedGraph ). Que pourriez-vous me recommander pour adapter ce code à SVG ? De préférence, je voudrais trouver une bibliothèque (gratuite ou non) qui imiterait System.Drawing.Graphics interface.

0 votes

2 votes

@liori, ne pouvez-vous pas recentrer la question afin de ne pas demander de recommandations ? Pour moi, il semble que la première partie ("J'ai déjà du code") peut facilement être développée en sujet. Peut-être en ouvrant une discussion Méta premièrement . Avez-vous lu La programmation est difficile. Allons faire du shopping ! ?

0 votes

@b__ : Je ne veux pas, cette question a déjà des réponses qui ont obtenu pas mal de votes. Si quoi que ce soit, une nouvelle question serait plus souhaitable. Et, en fait, la réponse ne m'intéresse plus, le projet où je voulais faire du SVG n'est plus actif, et je n'ai accès à aucun de ses codes

41voto

Sandeep Datta Points 7344

Consultez le Cadre SVG en C# et pont SVG-GDI projet.

De la page web ci-dessus...

La passerelle SvgGdi est un ensemble de classes qui utilisent SvgNet pour traduire entre SVG et GDI+. Ce que cela signifie, c'est que tout code qui utilise GDI+ pour dessiner graphiques peut facilement produire du SVG comme simplement en ajoutant l'objet SvgGraphics. Cet objet est exactement le même qu'un objet graphique mais crée un arbre SVG mais crée un arbre SVG. Même les choses comme les remplissages hachurés et les ancres de ligne sont implémentées.

0 votes

Ceci semble être la page principale du projet : jbrowse.com/svgnet . Il semble que la bibliothèque n'ait pas été développée depuis 6 ans. Je vais probablement quand même la consulter.

10 votes

Les sites pointés là sont morts. Comme tout est sous licence BSD, j'ai créé un repo GitHub pour eux : github.com/monoman/SvgNet

0 votes

C'est assez vieux et on ne devrait plus y penser. Voir ma réponse ci-dessous pour une bibliothèque qui est en développement actif.

34voto

thalm Points 858

Nous avons réalisé un fork public de la bibliothèque SVG C# .NET sur Github.

Il est bien meilleur que celui que l'on trouve sur Codeplex, jetez-y un coup d'œil et utilisez-le comme bon vous semble :

https://github.com/svg-net/SVG

Edit : Juste pour que vous sachiez, à partir de janvier 2021 :

Alors que d'autres semblent morts depuis des années, celui-ci est toujours actif. Mais nous pourrions certainement avoir besoin de l'aide d'autres développeurs.

7voto

jdehaan Points 14019

J'ai utilisé celui-ci http://svg.codeplex.com/ et j'en suis assez satisfait. Il y a encore quelques bogues, vous devriez donc jeter un coup d'œil aux correctifs dans le site Web de la Commission européenne. http://svg.codeplex.com/SourceControl/PatchList.aspx .

Lorsque je découvre des erreurs que je peux résoudre, je les poste directement là-bas. Mais cela prend un certain temps pour être évalué par les gars là-bas. Il est préférable de jeter un coup d'œil aux correctifs et de les appliquer soi-même.

La bibliothèque est raisonnablement suffisante pour la plupart des besoins habituels. Pour les choses vraiment fantaisistes, elle a besoin d'être améliorée...

5voto

MusiGenesis Points 49273

3voto

Audrius Points 1706

Comme SVG est essentiellement un document XML, vous pouvez implémenter le "dessin" vous-même. Consultez les spécifications à l'adresse Spécification SVG du W3C . Je l'ai fait une fois pour générer des images de signature SVG, cela n'a pris que quelques heures et un firefox pour tester l'image générée.

Bien sûr, cela s'applique si vous générez une image à partir d'une entrée utilisateur ou si cela ne vous dérange pas de passer un certain temps à convertir un autre format d'image vectorielle.

P.S. Vous pouvez créer votre propre wrapper pour imiter System.Drawing.Graphics, par exemple DrawLine() pour ajouter au tampon interne et ainsi de suite.

4 votes

Le problème est le temps : nous aimerions passer le moins de temps possible sur cette tâche, et le support SVG n'est pas vraiment vital pour nous. C'est pourquoi nous recherchons quelque chose qui pourrait éventuellement être utilisé comme un remplacement sur place de l'API GDI... ou du moins quelque chose qui ne nécessiterait pas beaucoup d'adaptation. Votre suggestion a également déjà été prise en compte par nous.

0 votes

Je vois. Alors la suggestion de SDX2000 est l'approche la plus logique à ce sujet (-.

9 votes

Ok, je vais demander une année sabbatique pour pouvoir mettre ça en place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X