2017-12-14 45 views
0

InkCanvasの画像、InkCanvasの背景画像として設定された画像、数値データ(ストロークごとに1つの正の整数値)これはInkCanvasの各ストロークに関連付けられています。InkCanvasと画像保存/読み込みオーバーロードされたStrokeCollectionの場合

私の最初の精神的なアプローチは、数値データをフィールドとして追加するためにStrokeクラスをオーバーロードすることでした。しかし、私はStrokeCollectionを保存することができるとは確信していませんInkCanvas.Strokes.Save(FileStream);

2番目の精神的なアプローチは、ストロークのコレクションを保存し、別のSQLiteファイルに格納されている各ストロークの数値のコレクションを持っています。しかし、StrokeCollectionのStrokesが順番に格納され、順番にロードされているかどうかはわかりません。

ストローク、各ストロークに関連付けられた数値、画像のファイル名、または可能であれば画像そのものを保存するために、これらの2つのアプローチのいずれかが機能します?

+0

簡単にあなたのアイデアを試して、どのように動作するかを見ることができます。 – Clemens

答えて

1

例えばXMLファイルにストロークを保存したい場合は、あなたがこのようなStrokeCollectionを書く/読むことができます:

/// <summary> 
/// Serializable version of StrokeCollection allowing for base64 saving using XMLSerializer 
/// </summary> 
[Serializable] 
public class StrokeCollectionEx : StrokeCollection, IXmlSerializable 
{ 
    public StrokeCollectionEx() { } 

    #region " ReadXml " 
    /// <summary> 
    /// ReadXml 
    /// </summary> 
    /// <param name="reader"></param> 
    public void ReadXml(XmlReader reader) 
    { 
     string s = reader.ReadElementContentAsString(); 
     byte[] strokeBits = Convert.FromBase64String(s); 
     if (strokeBits != null && strokeBits.Length > 0) 
     { 
      using (MemoryStream ms = new MemoryStream(strokeBits)) 
      { 
       //Reload this from stream 
       this.Clear(); 
       StrokeCollection sc = new StrokeCollection(ms); 
       foreach (Stroke x in sc) 
       { 
        this.Add(x); 
       } 
      } 
     } 
    } 
    #endregion 

    #region " WriteXml " 
    /// <summary> 
    /// WriteXml 
    /// </summary> 
    /// <param name="writer"></param> 
    public void WriteXml(XmlWriter writer) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      Save(ms); 
      byte[] strokeBits = ms.ToArray(); 

      writer.WriteBase64(strokeBits, 0, strokeBits.Length); 
     } 
    } 
    #endregion 

    #region " GetSchema " 
    /// <summary> 
    /// GetSchema 
    /// </summary> 
    /// <returns></returns> 
    public XmlSchema GetSchema() 
    { 
     return null; 
    } 
    #endregion 
} 

あなたはおそらくあなたに保存/読み込みするために使用するために必要なものを切り出すことができますデータベース

関連する問題