我正在开发一个具有InkCanvas的应用程序,一个被设置为InkCanvas的背景图像的图像,以及与每个Stroke相关联的数值数据(每个Stroke的一个正整数值) InkCanvas。
我的第一个心理方法是重载Stroke类以将数值数据添加为字段。但是,我不确定我是否可以使用InkCanvas.Strokes.Save(FileStream);
保存StrokeCollection
我的第二个心理方法是保存笔划集合,并为存储在单独的SQLite文件中的每个笔划拥有不同的数值集合。但是,我不确定StrokeCollection中的Strokes是按顺序存储的,并按顺序加载。
所以问题是,这两种方法中的任何一种都能用于存储Strokes,与每个Stroke相关联的数值,以及图像的文件名,或者如果可能的话,图像本身,而不会生成多个文件?
答案 0 :(得分: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
}
您可以删除需要用于读取/保存到数据库的内容