【问题标题】:low rendering with the big data in teechart pro vclteechart pro vcl 中大数据的低渲染
【发布时间】:2019-08-17 10:57:12
【问题描述】:

我使用 teechart pro vcl 从输入数据中绘制图表。 我从 comport 读取数据并使用此代码向 TFastlineseries 添加点:

var
  a : integer;
  b : double;
-----------------------------
With Dbchart1.Series[0] Do
Begin
   Series0.AddXY(a, b, '', clTeeColor);
end;

我有超过 100000 个点的非常简单的 2d 或有时 3d 彩色图形。但是在 20000 点之后,渲染变得非常缓慢,并且在某些地方它会停止。 我能做些什么!?有什么算法可以改善这种情况吗?

【问题讨论】:

  • 您可以问自己屏幕或打印输出的分辨率是多少。然后问自己为什么要绘制 100.000 甚至“仅”20.000 个点。
  • 也许您可以将值分组为 200 或 500 组,然后为每个这样的组计算平均值并绘制它们。
  • 实际上在第一个(在硬件中)计算的平均值和这些数据是结果。所有这些点都很重要,我们不能减少它。我们需要将所有积分保存在数据库中,但实时显示可能需要同时保存 300 个积分。我想要像心电图这样的东西来显示随时间变化的图表。
  • 您应该编辑您的问题(使用 q 标签下的“编辑”按钮)并添加该信息。向数据库添加数据当然是一项任务并显示另一项任务。所以,如果我理解的话,你想要一个大约 300 点的图表,它应该不断滚动(或者你的意思是扫描)。我不知道如何使用TeeChart 做到这一点,但也许其他人可以插话。但重要的是你编辑你的问题!
  • 还指出新值的输入速度(速度)。

标签: delphi rendering teechart


【解决方案1】:

关闭绘制所有点。

  Series0.DrawAllPoints := false;

来自Real-time charting in TeeChart VCL

TFastLineSeries 为快速绘图引入了几个属性

  • DrawAllPoints 布尔属性,默认值为 True。一般 图表大小仅限于固定数量的屏幕像素。这表示 例如,如果你有 1.000.000 点,他们将不可避免地 “共享”相同的屏幕像素坐标(水平、垂直或 两个方向)。然后绘制算法将绘制多个点 在同一屏幕坐标处具有不同的实际 x,y 坐标。 多次调用绘制算法后浪费cpu时间 你最终会得到一个单一的绘制屏幕像素。在这种情况下 合理的做法是用相同的 x 屏幕对点进行分组 像素坐标并将它们替换为两个点(组最小值和 最大值)。最终结果在视觉上与绘图相同 组中的所有点。但是会快很多,尤其是 如果每组有很多点。将 DrawAllPoints 设置为 False 正是这样做的:内部算法处理数据并绘制 只有非重复(组)点。使用这个技巧你可以绘制 数百万个实时点数,无需大惊小怪。

PDF 还提到了如何实时从系列中删除。

  • 系列删除方法。 Delete 方法现在包括第二个 控制多少点将从中删除的参数 系列。这允许在一次调用中快速删除多个点, 这比使用循环删除多个点要快得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多