Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Schnelleres LineTo

  Alt 25. Jul 2006, 18:29
Hallo,

ich weiß nicht, ob ich hier in "Programmieren allgemein" richtig bin, aber ich beschreibe mal mein Problem.
Gegeben seien Messwerte (8 Stunden / 200 Hz / 12 Kanäle). Die Darstellung der Kanäle Erfolgt auf einer Paintbox. Abgesehen von der Skalierung der Wert in X- und Y-Richtung (bereits gelöst), bleibt das Problem, dass dieser Ansatz:
Delphi-Quellcode:
with PaintBox1.Canvas do begin
  MoveTo(0, WertToY(Wert[0]));
  for i := 0 to high(Wert) do
    LineTo(IndexToX(i), WertToY(Wert[i]));
end;
zu lange dauert. Das Problem ist natürlich die sehr große Anzahl (~ 12 * 5,76 Mio) von LineTo's.
Folgendes habe ich bereits Probiert:
1. PolyLine von TCanvas
Nicht wirklich schneller als der Code oben. Eher langsamer

2. Nur alle n-ten Werte Zeichnen die auf eine X-Koordiante fallen
Problem: Die Anzahl zu verringen geht so in erster Näherung nicht, das in den Werten Peaks sein können (...0,0,3,205678.789,4,5,6,7....).

3. Das Min und Max aller Werte die auf eine X-Koordinate Fallen bestimmen und dann MoveTo(X,Min), LineTo(X,Max);
Problem: Das Suchen in den Werten braucht auch seine Zeit.

Nun die Frage, gibt es eine ganz anderen Ansatz eine solchen "Linienwald" mit höherer Performance zu zeichnen?

Vielen Dank für Eure mühe.

Mfg, Chris

P.S.: Sollte auch unter Win98 funktionieren
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat