2009-10-06 26 views
59

Me gustaría generar un archivo SVG usando C#. Ya tengo un código para dibujarlos en formato PNG y EMF (usando la clase estándar de framework System.Drawing.Imaging.Metafile y ZedGraph). ¿Qué podría recomendar hacer para adaptar ese código a SVG? Preferentemente, me gustaría encontrar alguna biblioteca (gratuita o no) que se asemeje a la interfaz System.Drawing.Graphics.¿Cómo dibujar SVG en .NET/C#?

+28

¡Pregunta muy constructiva! ¿Por qué demonios estaba así de cerrado? –

+2

@gyozokudor: las preguntas que solicitan recomendaciones para bibliotecas/herramientas se cierran aquí ... Esta es una política que no estaba en su lugar en el momento en que se envió la pregunta. Si desea analizar esta política, diríjase a meta.stackexchange.com. – liori

+11

No sé qué discutir al respecto, me parece obvio que tales preguntas deberían permitirse. –

Respuesta

35

Echa un vistazo al proyecto SVG framework in C# and an SVG-GDI+ bridge.

Desde la página web anterior ...

El puente SvgGdi es un conjunto de clases que utilizan SvgNet para traducir entre SVG y GDI +. Lo que esto significa es que cualquier código que use GDI + para dibujar los gráficos puede generar fácilmente SVG como , simplemente conectando el objeto SvgGraphics . Este objeto es exactamente igual que un objeto de gráficos .NET normal, pero crea un árbol SVG . Incluso cosas como los rellenos sombreados y los anclajes de línea están implementados.

+4

+1 para su Google-fu superior. – MusiGenesis

+1

+1, Mi google-fu no encontró este. – liori

+0

Esta parece ser la página principal del proyecto: http://www.jbrowse.com/svgnet/. Parece que la biblioteca no se ha desarrollado durante 6 años. Probablemente aún lo verifique. – liori

7
+0

-1, la pregunta era sobre exportar un PNG desde SVG. SVGPad es un editor, y no es diferente del artículo, ni la aplicación ni la biblioteca pueden hacer esto. (si lo hace, debería haber dejado más que solo un enlace) – DevTheo

+0

@DevTheo: es posible que desee leer la pregunta y el artículo vinculado más de cerca. OP no intenta convertir un PNG a SVG; OP tiene un código existente para dibujar primitivas en formatos PNG y EMF, y quiere hacer lo mismo en el formato SVG. La muestra a la que me he vinculado proporciona el código para hacer exactamente eso. – MusiGenesis

+0

Ok, lo siento ... Envié mi problema a la pregunta ... lo siento ... y no puedo volver a subir la votación ... De alguna manera me perdí ese punto ... – DevTheo

3

Como SVG es básicamente un documento XML - se puede poner en práctica "dibujo" a sí mismo. Verifique las especificaciones al W3C SVG spec. Lo hice una vez para generar imágenes de firma SVG, todo lo que tomó fue un par de horas y un firefox para probar la imagen generada.

Por supuesto, esto se aplica si está generando imágenes a partir de la entrada del usuario o si no le importa pasar algún tiempo realizando conversiones desde otro formato de imagen vectorial.

P.S. puede crear su propio contenedor para imitar System.Drawing.Graphics, p. DrawLine() para agregar al búfer interno y así sucesivamente.

+4

El problema es el tiempo: nos gustaría pasar el menor tiempo posible en esta tarea, y el soporte de SVG no es realmente vital para nosotros. Por lo tanto, estamos buscando algo que pueda usarse como reemplazo in situ para la API de GDI ... o al menos algo que no necesite mucha adaptación. Su sugerencia ya fue considerada por nosotros. – liori

+0

Ya veo. Entonces la sugerencia SDX2000 es el enfoque más lógico para esto (-. – Audrius

+7

Ok, solo voy a ponerme en un año sabático para poder implementarlo. –

7

Utilicé este http://svg.codeplex.com/ y estoy bastante satisfecho con él. Todavía tiene algunos errores, por lo que debería echar un vistazo a los parches en http://svg.codeplex.com/SourceControl/PatchList.aspx.

Cuando descubro errores que puedo resolver, los publico directamente allí. Pero lleva un tiempo ser evaluado por los muchachos de allí. Es una mejor idea echar un vistazo a los parches y aplicarlos usted mismo.

La biblioteca es razonablemente suficiente para la mayoría de las necesidades habituales. para cosas realmente extravagantes, necesita ser pensado mejor ...

17

Hemos hecho una bifurcación pública de la biblioteca C# .NET SVG en github.

Se ha mejorado mucho sobre el que usted encuentra en CodePlex, por favor tenga una mirada y un tenedor a su gusto:

https://github.com/vvvv/SVG

Editar: Sólo para hacerle saber, a partir de diciembre 2014:

Mientras que otros parecen muertos desde hace años, esto todavía está activo. Pero definitivamente podríamos usar alguna ayuda de otros desarrolladores.

+2

¡Increíble! Estaba usando el componente SVG original, luego encontré esta publicación y estaba arriba ¡en correr con tu componente actualizado en solo segundos! ¡Gracias! –