2010-07-13 6 views
0

Dans mon application, l'utilisateur peut créer plusieurs objets (dessins) dont chacun a un SurfaceInkCanvas, très similaire à la Photopad (l'application Photo Paint) dans les SDKSamples (fourni par MS Surface SP1 SDK). Quel serait le meilleur moyen de sauvegarder le contenu de l'inkCanvas (l'objet de dessin) étant donné qu'il pourrait en créer des dizaines voire des centaines? Après quelques recherches, une option est apparue: la convertir en une image, jpg ou png, mais cette méthode ne semble pas que l'OMI évolutive.enregistrer l'inkcanvas

Serait-il possible de stocker les points dans une base de données (de préférence sqlite)?

Le but est de pouvoir restaurer les dessins (contenu de l'inkCanvas) pour une édition ultérieure lors du chargement.

Répondre

2

Il existe déjà un format que Microsoft utilise pour enregistrer les traits, qui est ISF - pour le format Ink Serialized qui enregistre la collection Strokes dans un fichier .isf. Par exemple, dans this, chaque dessin est enregistré dans un fichier .isf distinct (mais de petite taille) qui peut être facilement rechargé pour être modifié ou même converti (exporté) en bitmap. Donc, une bonne méthode serait de sauvegarder chaque dessin dans les fichiers (même si c'est un peu plus cher, dans le temps, que de simplement le stocker dans un sqlite db) et enregistrer le chemin de chacun avec un identifiant dans la base de données pour identifier chaque session. Une suggestion pour optimiser davantage cette méthode du point de vue de l'évolutivité?

2

L'enregistrement d'une image n'est pas vraiment viable pour ce que vous voulez faire, car la restauration de lignes vectorielles à partir d'un bitmap est beaucoup plus difficile et potentiellement plus risquée que la conversion vector-bitmap. une perspective de densité de données.

Vous pouvez écrire du code pour enregistrer et restaurer la collection de lignes stockée dans la propriété Strokes. Cela vous permettra de réduire au minimum la taille de vos données et de les stocker facilement dans une base de données. Chaque trait contient des données sur l'apparence de la ligne et un ensemble de points qui composent la ligne. Il est assez simple d'extraire et de restaurer ces données sur un autre InkCanvas lors du rechargement. Vous pouvez également utiliser XamlWriter/XamlReader pour sérialiser l'intégralité de InkCanvas en XML, mais vous devez pouvoir placer la nouvelle instance désérialisée dans votre interface utilisateur et vous assurer qu'il n'y a aucune complication de nom ou de ressource dans votre XAML qui ont tendance à provoquer des erreurs avec cette méthode.