0

私のアプリケーションでは、ユーザーは複数のオブジェクト(いわゆる図面)を作成できます。各オブジェクトには、SDKSamples(MS Surface SP1 SDKが提供)のフォトパッド(フォトペイントアプリ)と非常によく似たSurfaceInkCanvasがあります。数十または数百もの作成が行われる可能性があるという事実を考えると、inkCanvas(描画オブジェクト)のコンテンツを保存するための最良の方法は何でしょうか。

調査の結果、1つのオプションが表示されました。それは、画像、jpg、またはpngに変換することですが、この方法はスケーラブルなIMOではないようです。

ポイントをデータベース(できればsqlite)に保存することは可能でしょうか?

目標は、ロード時にさらに編集するために図面(inkCanvasのコンテンツ)を復元できるようにすることです。

4

2 に答える 2

2

マイクロソフトがストロークを保存するために使用する形式はすでに存在します。これはISFです。これは、ストロークコレクションを.isfファイルに保存するインクシリアル化フォーマットの略です。

ただし、この例では、各図面は個別の(ただし小さいサイズの).isfファイルに保存され、さらに編集したり、ビットマップに変換(エクスポート)したりするために簡単にロードして戻すことができます。

したがって、良い方法は、各図面をファイルに保存し(これは、単にsqlite dbに保存するよりも少し費用がかかり、時間的にもコストがかかりますが)、データベースにIDとともにそれぞれのパスを保存して識別します。各セッション。スケーラビリティの観点からこの方法をさらに最適化するための提案はありますか?

于 2010-07-14T10:00:52.970 に答える
2

データ密度の観点からはあまり効率的ではないことに加えて、ビットマップからベクトル線を復元することは、ベクトルからビットマップへの変換よりもはるかに難しく、潜在的に損失が大きいため、画像への保存は実際には実行可能ではありません。 。

Strokesプロパティに格納されている行のコレクションを保存および復元するコードを記述できます。これにより、データのサイズを最小限に抑え、データベースに簡単に保存できるようになります。各ストロークには、線がどのように見えるか、および線を構成する一連の点に関するデータがあります。リロード時にそのデータを抽出して別のInkCanvasに復元するのは非常に簡単です。

XamlWriter / XamlReaderを使用してInkCanvas全体をxmlにシリアル化することもできますが、新しい逆シリアル化されたインスタンスをUIに配置し、XAMLに名前付けやリソースの複雑さがないことを確認する必要があります。この方法ではエラーが発生する傾向があります。

于 2010-07-13T19:56:01.080 に答える