сохранение тушь - PullRequest
       12

сохранение тушь

0 голосов
/ 13 июля 2010

В моем приложении пользователь может создавать несколько объектов (так называемые рисунки), каждый из которых имеет SurfaceInkCanvas, очень похожий на Photopad (приложение Photo Paint) в SDKSamples (предоставляемый MS Surface SP1 SDK). Как лучше всего сохранить содержимое inkCanvas (объекта рисования), учитывая тот факт, что их может быть создано десятки или даже сотни.

После некоторого исследования выскочил один вариант: преобразовать его в изображение, jpg или png, но этот метод не кажется настолько масштабируемым IMO.

Можно ли сохранить точки в базе данных (желательно sqlite)?

Цель состоит в том, чтобы иметь возможность восстановить чертежи (содержимое inkCanvas) для дальнейшего редактирования при загрузке.

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

уже существует формат, который Microsoft использует для сохранения штрихов, это ISF - расшифровывается как формат Ink Serialized, который сохраняет коллекцию штрихов в файле .isf.

Однако в этом примере каждый чертеж сохраняется в отдельном (но небольшом) файле .isf, который можно легко загрузить обратно для дальнейшего редактирования или даже преобразования (экспорта) в растровое изображение.,

Таким образом, хорошим способом было бы сохранить каждый чертеж в файлах (даже если это немного дороже, по времени, чем просто сохранить его в sqlite db) и сохранить путь каждого вместе сидентификатор в базе данных для идентификации каждого сеанса.Любое предложение для дальнейшей оптимизации этого метода с точки зрения масштабируемости?

2 голосов
/ 13 июля 2010

Сохранение в изображение не является действительно жизнеспособным для того, что звучит так, как вы хотите, потому что восстановление векторных линий из растрового изображения намного сложнее и потенциально с потерями, чем преобразование вектора в растровое изображение, в дополнение к тому, что оно не очень эффективно изперспектива плотности данных.

Вы можете написать некоторый код для сохранения и восстановления коллекции строк, хранящейся в свойстве Strokes.Это позволит вам уменьшить размер ваших данных до минимума и легко хранить в базе данных.Каждый штрих имеет некоторые данные о том, как выглядит линия, и набор точек, которые составляют линию.Достаточно просто извлечь и восстановить эти данные в другой InkCanvas при перезагрузке.

Вы также можете использовать XamlWriter / XamlReader, чтобы просто сериализовать весь InkCanvas в xml, но вы должны иметь возможность поместить новыйдесериализовать экземпляр в ваш пользовательский интерфейс и убедиться, что в вашем XAML нет проблем с именами или ресурсами, которые могут привести к ошибкам с помощью этого метода.

...