Рисование SVG в.NET/C#?
Я хотел бы создать файл SVG с использованием C#. У меня уже есть код для их рисования в форматах PNG и EMF (с использованием стандартного класса фреймворка System.Drawing.Imaging.Metafile и ZedGraph). Что бы вы могли порекомендовать сделать, чтобы адаптировать этот код к SVG? Желательно найти библиотеку (бесплатную или нет), которая имитирует интерфейс System.Drawing.Graphics.
4 ответа
Познакомьтесь с платформой SVG в C# и проектом моста SVG-GDI+.
С вышеуказанной веб-страницы...
Мост SvgGdi - это набор классов, которые используют SvgNet для преобразования между SVG и GDI+. Это означает, что любой код, использующий GDI + для рисования графики, также может легко выводить SVG, просто подключив объект SvgGraphics. Этот объект точно такой же, как обычный объект.NET Graphics, но создает дерево SVG. Реализованы даже такие вещи, как заштрихованные заливки и линейные анкеры.
Мы сделали публичную ветвь библиотеки C# .NET SVG на github.
Он значительно улучшен по сравнению с тем, что вы найдете в codeplex, пожалуйста, посмотрите и раскройте его так, как вам нравится:
Изменить: просто, чтобы сообщить, по состоянию на декабрь 2014 года:
В то время как другие кажутся мертвыми с годами, это все еще активно. Но мы определенно могли бы использовать некоторую помощь от других разработчиков.
Я использовал этот http://svg.codeplex.com/ и я вполне доволен этим. Все еще есть некоторые ошибки, поэтому вы должны взглянуть на патчи в http://svg.codeplex.com/SourceControl/PatchList.aspx.
Когда я обнаруживаю ошибки, которые могу решить, я публикую их прямо там. Но ребятам там нужно время, чтобы их оценили. Лучше взглянуть на патчи и применить их самостоятельно.
Библиотека достаточно достаточна для большинства обычных нужд. для действительно причудливых вещей, это должно быть улучшено мысль...
Поскольку SVG - это, по сути, документ XML, вы можете реализовать "рисование" самостоятельно. Проверьте спецификации в спецификации W3C SVG. Я сделал это один раз, чтобы сгенерировать изображения подписи SVG, всего пару часов и Firefox, чтобы проверить сгенерированное изображение.
Конечно, это применимо, если вы генерируете изображение из пользовательского ввода или если вы не против потратить некоторое время на преобразование из другого формата векторного изображения.
PS вы можете создать свою собственную оболочку для имитации System.Drawing.Graphics, например DrawLine() для добавления во внутренний буфер и так далее.