Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# InkCanvas和图像在重载StrokeCollection时保存/加载_C#_Wpf_Save_Inkcanvas - Fatal编程技术网

C# InkCanvas和图像在重载StrokeCollection时保存/加载

C# InkCanvas和图像在重载StrokeCollection时保存/加载,c#,wpf,save,inkcanvas,C#,Wpf,Save,Inkcanvas,我正在开发一个应用程序,它有一个InkCanvas,一个设置为InkCanvas背景图像的图像,以及绑定到InkCanvas上每个笔划的数字数据(每个笔划一个正整数值) 我的第一个想法是重载Stroke类,将数字数据作为字段添加。但是,我不确定是否可以使用InkCanvas.Strokes.save(FileStream)保存StrokeCollection 我的第二个想法是保存笔划集合,并将每个笔划的不同数值集合存储在单独的SQLite文件中。但是,我不确定StrokeCollection中的

我正在开发一个应用程序,它有一个InkCanvas,一个设置为InkCanvas背景图像的图像,以及绑定到InkCanvas上每个笔划的数字数据(每个笔划一个正整数值)

我的第一个想法是重载Stroke类,将数字数据作为字段添加。但是,我不确定是否可以使用
InkCanvas.Strokes.save(FileStream)保存StrokeCollection

我的第二个想法是保存笔划集合,并将每个笔划的不同数值集合存储在单独的SQLite文件中。但是,我不确定StrokeCollection中的笔划是否按顺序存储并按顺序加载


所以问题是,这两种方法中的任何一种都可以用来存储笔划、与每个笔划相关的数值和图像的文件名,或者如果可能的话,存储图像本身,而不生成多个文件吗?

例如,如果要将笔划保存到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
}
//
///StrokeCollection的可序列化版本,允许使用XMLSerializer进行base64保存
/// 
[可序列化]
公共类StrokeCollectionEx:StrokeCollection,IXmlSerializable
{
公共StrokeCollectionEx(){}
#区域“ReadXml”
/// 
///ReadXml
/// 
/// 
公共void ReadXml(XmlReader)
{
字符串s=reader.ReadElementContentAsString();
byte[]strokeBits=Convert.fromBase64字符串;
if(strokeBits!=null&&strokeBits.Length>0)
{
使用(MemoryStream ms=新的MemoryStream(strokeBits))
{
//从流中重新加载此文件
这个.Clear();
StrokeCollection sc=新的StrokeCollection(毫秒);
foreach(sc中的冲程x)
{
本条增补(x);
}
}
}
}
#端区
#区域“WriteXml”
/// 
///WriteXml
/// 
/// 
public void WriteXml(XmlWriter)
{
使用(MemoryStream ms=new MemoryStream())
{
保存(ms);
字节[]strokeBits=ms.ToArray();
writer.WriteBase64(strokeBits,0,strokeBits.Length);
}
}
#端区
#区域“GetSchema”
/// 
///GetSchema
/// 
/// 
公共XmlSchema GetSchema()
{
返回null;
}
#端区
}

您可能可以剪切出需要用于读取/保存到数据库的内容

您可以轻松尝试您的每一个想法并了解其工作原理。