2009-10-06 11 views
59

Mi piacerebbe generare un file SVG usando C#. Ho già il codice per disegnarli in formato PNG ed EMF (utilizzando la classe standard del framework System.Drawing.Imaging.Metafile e ZedGraph). Cosa consiglieresti di fare per adattare quel codice a SVG? Preferibilmente vorrei trovare una libreria (gratuita o meno) che simuli l'interfaccia System.Drawing.Graphics.Disegno SVG in .NET/C#?

+28

Domanda molto costruttiva !, Perché mai è stato chiuso? –

+2

@gyozokudor: qui vengono chiuse le domande per la richiesta di librerie/strumenti ... Questa è una politica che non era in vigore al momento della presentazione della domanda. Se vuoi discutere di questa politica, vai su meta.stackexchange.com. – liori

+11

Non so di cosa parlarne, mi sembra ovvio che tali domande dovrebbero essere consentite. –

risposta

35

Scopri il progetto SVG framework in C# and an SVG-GDI+ bridge.

Dalla pagina web di cui sopra ...

Il ponte SvgGdi è un insieme di classi che utilizzano SvgNet per tradurre tra SVG e GDI +. Ciò significa che lo qualsiasi codice che utilizza GDI + per disegnare la grafica può facilmente generare SVG come , semplicemente collegando l'oggetto SvgGraphics . Questo oggetto è esattamente uguale a un normale oggetto .NET ma crea un albero SVG . Vengono implementati anche elementi come i riempimenti tratteggiati e gli ancoraggi di linea.

+4

+1 per il tuo superiore Google-fu. – MusiGenesis

+1

+1, il mio google-fu non ha trovato questo. – liori

+0

Questa sembra essere la pagina principale del progetto: http://www.jbrowse.com/svgnet/. Sembra che la biblioteca non sia stata sviluppata per 6 anni. Probabilmente lo controllerò ancora. – liori

7
+0

-1, La domanda riguardava l'esportazione di un PNG da SVG. SVGPad è un editor, e non è unparent dall'articolo né l'app né la libreria possono farlo. (se così fosse, avresti dovuto lasciare più di un semplice link) – DevTheo

+0

@DevTheo: potresti leggere più da vicino la domanda e l'articolo collegato. OP non sta provando a convertire un PNG in SVG; OP ha il codice esistente per disegnare le primitive nei formati PNG ed EMF e vuole fare lo stesso nel formato SVG. L'esempio che ho collegato fornisce codice per fare esattamente questo. – MusiGenesis

+0

Ok, scusa .. Ho spinto il mio problema sulla domanda .. scusa .. e non riesco a recuperare il voto ... Ho perso quel punto in qualche modo .. – DevTheo

3

Come SVG è fondamentalmente un documento XML - è possibile implementare "disegno" da soli. Controlla le specifiche al W3C SVG spec. L'ho fatto una sola volta per generare immagini di firma SVG, sono bastate un paio d'ore e un firefox per testare l'immagine generata.

Naturalmente questo si applica se si sta generando l'immagine da input dell'utente o se non si mente passare del tempo facendo la conversione da un altro formato di immagine vettoriale.

P.S. puoi creare il tuo wrapper per simulare System.Drawing.Graphics, ad es. DrawLine() per aggiungere al buffer interno e così via.

+4

Il problema è il tempo: vorremmo dedicare il minor tempo possibile a questa attività, e il supporto SVG non è davvero vitale per noi. Pertanto, stiamo cercando qualcosa che possa essere utilizzato come sostituzione sul posto per GDI API ... o almeno qualcosa che non necessiti di molto adattamento. Anche il tuo suggerimento è stato già considerato da noi. – liori

+0

Vedo. Quindi il suggerimento di SDX2000 è l'approccio più logico a questo (-. – Audrius

+7

Ok, mi limiterò a fare un anno sabbatico per implementarlo. –

7

Ho usato questo http://svg.codeplex.com/ e ne sono abbastanza soddisfatto. Ha ancora alcuni bug, quindi dovresti dare un'occhiata alle patch in http://svg.codeplex.com/SourceControl/PatchList.aspx.

Quando scopro degli errori che posso risolvere, li inserisco direttamente lì. Ma ci vuole del tempo per essere valutato dai ragazzi lì. È un'idea migliore dare un'occhiata alle patch e applicarle da soli.

La libreria è abbastanza ragionevole per le esigenze più comuni. per cose davvero fantastiche, deve essere migliorato il pensiero ...

17

Abbiamo creato un fork pubblico della libreria SVG C# .NET su github.

Si è molto migliorata su quello che trovate su CodePlex, si prega di dare un'occhiata e forchetta come volete:

https://github.com/vvvv/SVG

Edit: Giusto per farvi sapere, a partire da dicembre 2014:

Mentre altri sembrano morti da anni, questo è ancora attivo. Ma potremmo sicuramente usare l'aiuto di altri sviluppatori.

+2

Impressionante! Stavo usando il componente SVG originale, poi ho trovato questo post ed ero su in esecuzione con il componente aggiornato in pochi secondi! Grazie! –