在我的应用程序中,用户可以创建多个对象(所谓的绘图),每个对象都有一个SurfaceInkCanvas,与SDKSamples中的Photopad(Photo Paint应用程序)非常相似(由MS Surface SP1 SDK提供)。 保存inkCanvas(绘图对象)的内容的最佳方法是什么,因为可能会创建数十甚至数百个。
经过一些研究,弹出了一个选项:将其转换为图像,jpg或png,但这种方法似乎不是可扩展的IMO。
是否可以将点存储在数据库中(最好是sqlite)?
目标是能够恢复绘图(inkCanvas的内容)以便在加载时进一步编辑。
答案 0 :(得分:2)
保存到图像对于你想要做的事情来说并不是真的可行,因为从位图恢复矢量线比矢量到位图转换要困难得多且可能有损,除了从一个位图转换效率不高数据密度透视。
您可以编写一些代码来保存和恢复存储在Strokes属性中的行集合。这样您就可以将数据大小减小到最小,并轻松存储在数据库中。每个笔划都有一些关于线条外观的数据以及构成线条的一组点。重新加载时,将数据提取并恢复到另一个InkCanvas非常简单。
您也可以使用XamlWriter / XamlReader将整个InkCanvas序列化为xml,但您需要能够将新的反序列化实例放入UI中,并确保没有任何命名或资源复杂性您的XAML往往会导致此方法出错。
答案 1 :(得分:2)
微软已经采用了一种格式来保存笔画,即ISF - 代表墨水序列化格式,将Strokes集合保存在.isf文件中。
但是在this示例中,每个图形都保存在一个单独的(但是小尺寸的).isf文件中,可以轻松加载回来进行进一步编辑,甚至将其转换(导出)到位图。
所以一个好的方法是将每个绘图保存在文件中(即使这比仅仅将它存储在sqlite数据库中更昂贵,时间更快)并保存每个绘图的路径以及数据库来识别每个会话。 有什么建议从可扩展性的角度进一步优化这种方法吗?