Intereting Posts
Проекция XNA ViewPort и SpriteBatch Почему Enumerator.MoveNext не работает, как я ожидаю, когда он используется при использовании и async-wait? Альтернатива SQL BULK INSERT Не удалось выполнить пакет Automapper Nuget Выход видеозахвата всегда в 320×240, несмотря на изменение разрешения Простое строковое шифрование без зависимостей Преобразование PDF в JPG / изображения без использования конкретной библиотеки C # обмен переменных в многопроектном решении не может неявно преобразовать тип System.DateTime? к System.DateTime Алгоритм вертикального переворачивания растрового изображения в байтовом массиве IL Испустить для вызова экземпляра делегата? Не удалось подключиться к webservice с эмулятора WP7 Как программно установить пользовательский значок в папке поиска Outlook? (например, Outlook Folder SetCustomIcon) Как я могу гарантировать, что appsettings.dev.json будет скопирован в выходную папку? Установка свойства ShortcutKeys для Windows Forms ToolStripMenuItem для клавиши numpad не работает

Wpf InkCanvas save stokes как svg

Можно ли сохранить инсульт-коллекцию InkCanvas в svg-образ? Единственное, что я могу найти, это то, что я могу сохранить штрихи как GIF со встроенным ISF (Ink Serialized Format) или, может быть, сделать их растровыми. Я хочу сохранить штрихи в векторном формате, которые могут быть совместимы с другими платформами (например, в Интернете).

Я понял.

Вот шаги

  1. Итерация над StrokeCollection
  2. Получите PathGeometry каждого GetGeometry вызвав функцию GetGeometry а затем GetOutlinedPathGeometry .
  3. Получите Figures из Geometry . Я делаю это, сохраняя PathGeometry в XAML и затем анализируя атрибут Figures помощью XElement.Parse .
  4. Затем я могу просто создать документ svg и добавить каждый путь (см. Код ниже).

Я использую SVG Rendering Library для создания документа SVG.

 var svg = new SvgDocument(); var colorServer = new SvgColourServer(System.Drawing.Color.Black); var group = new SvgGroup {Fill = colorServer, Stroke = colorServer}; svg.Children.Add(group); foreach (var stroke in InkCanvas.Strokes) { var geometry = stroke.GetGeometry(stroke.DrawingAttributes).GetOutlinedPath‌​Geometry(); var s = XamlWriter.Save(geometry); if (s.IsNotNullOrEmpty()) { var element = XElement.Parse(s); var data = element.Attribute("Figures")?.Value; if (data.IsNotNullOrEmpty()) { group.Children.Add(new SvgPath { PathData = SvgPathBuilder.Parse(data), Fill = colorServer, Stroke = colorServer }); } } }