C# 保存inkcanvas
在我的应用程序中,用户可以创建多个对象(即所谓的图形),每个对象都有一个SurfaceInkCanvas,与SDK示例(由MS Surface SP1 SDK提供)中的Photopad(照片绘制应用程序)非常相似。 鉴于可能创建了数十个甚至数百个inkCanvas(绘图对象),保存inkCanvas内容的最佳方法是什么 经过一些研究,有一种选择出现了:将其转换为图像、jpg或png,但这种方法在IMO中似乎没有那么好的伸缩性 是否可以将点存储在数据库中(最好是sqlite)C# 保存inkcanvas,c#,wpf,pixelsense,inkcanvas,C#,Wpf,Pixelsense,Inkcanvas,在我的应用程序中,用户可以创建多个对象(即所谓的图形),每个对象都有一个SurfaceInkCanvas,与SDK示例(由MS Surface SP1 SDK提供)中的Photopad(照片绘制应用程序)非常相似。 鉴于可能创建了数十个甚至数百个inkCanvas(绘图对象),保存inkCanvas内容的最佳方法是什么 经过一些研究,有一种选择出现了:将其转换为图像、jpg或png,但这种方法在IMO中似乎没有那么好的伸缩性 是否可以将点存储在数据库中(最好是sqlite) 目标是能够恢复图形(
目标是能够恢复图形(inkCanvas的内容),以便在加载时进行进一步编辑 保存到图像对于您想要执行的操作来说并不是真正可行的,因为从位图恢复矢量线比矢量到位图的转换要困难得多,而且可能会有损,而且从数据密度的角度来看效率不高 您可以编写一些代码来保存和恢复存储在Strokes属性中的行集合。这将允许您将数据的大小减小到最小,并方便地存储在数据库中。每个笔划都有一些关于线条外观的数据和组成线条的一组点。在重新加载时,提取数据并将其恢复到另一个InkCanvas相当简单
您还可以使用XamlWriter/XamlReader将整个InkCanvas序列化为xml,但您需要能够将新的反序列化实例放入您的UI中,并确保XAML中没有任何命名或资源复杂性会导致此方法出现错误。保存到图像实际上是不可行的因为从位图恢复矢量线比从矢量到位图的转换要困难得多,而且可能有损,而且从数据密度的角度来看效率不高 您可以编写一些代码来保存和恢复存储在Strokes属性中的行集合。这将允许您将数据的大小减小到最小,并方便地存储在数据库中。每个笔划都有一些关于线条外观的数据和组成线条的一组点。在重新加载时,提取数据并将其恢复到另一个InkCanvas相当简单
您还可以使用XamlWriter/XamlReader将整个InkCanvas序列化为xml,但您需要能够将新的反序列化实例放入您的UI中,并确保您的XAML中没有任何命名或资源复杂情况会导致此方法出错。microsoft已经有了一种格式用于在中保存笔划,它是ISF-表示墨水序列化格式,用于将笔划集合保存在.ISF文件中 然而,在本例中,每个图形都保存在一个单独的(但较小的).isf文件中,该文件可以轻松加载回去进行进一步编辑,甚至可以将其转换(导出)为位图 因此,一个好方法是将每个图形保存在文件中(尽管这比简单地将其存储在sqlite db中要花费更多时间),并在数据库中保存每个图形的路径以及标识每个会话的id。
从可伸缩性的角度来看,是否有进一步优化此方法的建议?microsoft已经使用了一种格式来保存笔划,它是ISF,代表墨水序列化格式,将笔划集合保存在.ISF文件中 然而,在本例中,每个图形都保存在一个单独的(但较小的).isf文件中,该文件可以轻松加载回去进行进一步编辑,甚至可以将其转换(导出)为位图 因此,一个好方法是将每个图形保存在文件中(尽管这比简单地将其存储在sqlite db中要花费更多时间),并在数据库中保存每个图形的路径以及标识每个会话的id。 从可扩展性的角度来看,有没有进一步优化此方法的建议