使用折线的UI虚拟化

时间:2011-03-30 14:27:10

标签: c# wpf virtualization


我想虚拟化折线。在我的应用中,显示了多达七条折线,每条折线拥有多达九百万个点(当然只有一小部分可见)。每条折线都有一个与PointCollection的绑定。所有折线都在ScrollViewer控件内,滚动会影响它们中的每一个。
现在,我想知道折线的虚拟化是如何实现的。我发现了一篇关于来自微软的Chris Lovett的Virtual Canvas的文章,但我不确定它是否适用于我的问题。有没有人经历过这样的事情?
提前谢谢。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的情况,并决定实施虚拟化如下: 我正在处理的数据(折线的点)是真实世界坐标,并且比显示屏上显示的细节要多得多。用户还应该能够放大并查看更多细节。

  1. 以世界坐标确定显示屏上两个(或三个)像素之间的距离。这允许我决定是否可以删除折线的一个点,因为它最终会在与相邻点相同的像素位置。
  2. 循环点:

    一个。如果当前点与前一点在显示器上的相同位置:跳过它。

    湾如果当前点和前两个点位于一条直线上,则不需要前一个点:删除前一个点,添加当前(并添加下一个点(D)以防止将缓慢弯曲的曲线四舍五入到一条直线)。

  3. 使用收集的点绘制折线

  4. 根据数据,这有助于我将原始设置减少到大约30%,但这完全取决于数据。不保证;)

    当用户放大时,我只需从步骤1开始重新计算。

    我在算法中添加了很多参数,因此我可以对其进行调整和调整,以找到性能和图像质量之间的最佳点。例如,我添加了一个epsilon,它允许我指定通过A和C的线与B点之间的距离仍允许B点在线上。

    如果有帮助,请告诉我。