【问题标题】:saving the inkcanvas保存 inkcanvas
【发布时间】:2010-07-13 18:17:24
【问题描述】:

在我的应用程序中,用户可以创建多个对象(所谓的绘图),每个对象都有一个 SurfaceInkCanvas,与 SDKSamples(由 MS Surface SP1 SDK 提供)中的 Photopad(Photo Paint 应用程序)非常相似。 考虑到可能创建了数十甚至数百个它们,保存inkCanvas(绘图对象)内容的最佳方法是什么。

经过一番研究,弹出了一个选项:将其转换为图像、jpg 或 png,但这种方法似乎不是可扩展的 IMO。

是否可以将点存储在数据库中(最好是 sqlite)?

目标是能够在加载时恢复绘图(inkCanvas 的内容)以供进一步编辑。

【问题讨论】:

    标签: c# wpf pixelsense inkcanvas


    【解决方案1】:

    保存到图像并不像您想要做的那样真正可行,因为从位图中恢复矢量线比从矢量到位图的转换要困难得多并且可能有损失,此外从数据密度视角。

    您可以编写一些代码来保存和恢复存储在 Strokes 属性中的行集合。这将允许您将数据大小减少到最小并轻松存储在数据库中。每个 Stroke 都有一些关于线条外观的数据以及组成线条的一组点。重新加载时提取数据并将其恢复到另一个 InkCanvas 相当简单。

    您也可以使用 XamlWriter/XamlReader 将整个 InkCanvas 序列化为 xml,但您需要能够将新的反序列化实例放入您的 UI 并确保其中没有任何命名或资源复杂性您的 XAML 往往会导致此方法出错。

    【讨论】:

      【解决方案2】:

      微软已经有一种用于保存笔画的格式,即 ISF——代表将笔画集合保存在 .isf 文件中的 Ink Serialized 格式。

      然而,在this 示例中,每个绘图都保存在一个单独的(但很小的).isf 文件中,可以轻松地加载回以进行进一步编辑甚至将其转换(导出)为位图。

      因此,一个好的方法是将每个绘图保存在文件中(尽管这比简单地将其存储在 sqlite db 中更昂贵,时间方面)并将每个绘图的路径与 id 一起保存在数据库来识别每个会话。 从可扩展性的角度进一步优化此方法有什么建议吗?

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多