teechart pro vcl 中大数据的低渲染

问题描述 投票:0回答:1

我使用 teechart pro vcl 根据输入数据绘制图表。 我从 comport 读取数据并使用以下代码将点添加到 TFastlineseries :

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

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

delphi rendering teechart
1个回答
0
投票

关闭绘制所有点。

  Series0.DrawAllPoints := false;

来自 TeeChart VCL 中的实时图表

TFastLineSeries 引入了几个用于快速绘图的属性

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

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

  • 系列删除方法。 Delete 方法现在包含第二个 控制从一个点中删除多少个点的参数 系列。这允许在一次调用中快速删除多个点, 这比使用循环删除多个点要快得多。
© www.soinside.com 2019 - 2024. All rights reserved.