AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schnelleres LineTo

Ein Thema von ChrisE · begonnen am 25. Jul 2006 · letzter Beitrag vom 26. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 18:36
Vielleicht hilft das Manuelle Zeichen der Geraden unter Zuhilfenahme des Bresenham-Algorithmuses.
Markus Kinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 18:40
Du könntest aber auch statt einer Paintbox ein Image nehmen, das dortige Bitmap auf die gewünschte Größe bringen und auf das Bitmap des Images zeichnen. Müsste glaube ich auch schneller sein.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 18:43
So wie ich das sehe wird direkt auf die Canvas von der Paintbox gezeichnet. Nach jedem LineTo wird somit die Canvas ausgegeben (auf dem Bildschirm) was eine Ewigkeit dauert. Zeischne lieber auf ein TBitmap.Canvas und wenn du dann fertig bist gebe das Bitmap mit BitBlt (oder einer dir beliebigen Methode) auf der entsprechenden Canvas auf dem Bildschirm aus.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#5

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 18:54
ich glaub das mit dem TBitMap, als Zwischenspeicher, dann noch ScanLines kombiniert mit dem vorherigen Berechnen der MinMaxWerte sollte so das schnellste auf diesme Wege sein.

klar dauert es, wenn man sich minMaxWerte berechnet, aber es sollte alle Male schneller sein, also alles zu zeichnen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 19:00
Als Alternative könnte man das ganze evtl auch mit OpenGL auf ein Panel rendern.
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#7

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 19:06
OpenGL Scene ist schonmal nicht schlecht bei GLScene gibt es eine Klasse TGLCanvas die behersch eigentlich alles was canvas kann, nur das sie wesentlich schneller ist
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 19:13
Wie wäre es denn mit der TeeChart Komponente?
Mit der Komponente habe ich in Sachen Geschwindigkeit sehr gute Erfahrungen gemacht.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

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

Re: Schnelleres LineTo

  Alt 25. Jul 2006, 21:57
Hallo an alle,

erstmal danke für die Rege Teilnahme an dieser Frage

@mkinzler:
Wenn ich Wikipedia da richtig verstehe, ist das in den meisten Treibern bereits implementiert -> LineTo müsste sogar schon mit diesem Allgo. arbeiten. Aber danke trotzdem für den Tip. Das hat meinen Horizont wieder erweitert

@Dax
Ich habe das schlechtere Erfahrungen mit einem Image gemacht. Ist meist Langsamer (Gemessen mit QueryPerf....)


@SirThornberr
Genau so sehe ich das auch. Deinen Vorschlag hatte ich bereits vor dem Post von mir in einem Testprogramm mit Zeitmessung Programmiert. Leider ist es langamer als direktes Zeichnen???? Verstehe ich aber nicht. War der selben Meinung wie du.


@himitsu
Ich werde es mal Probieren. ScanLines ist noch ein gutes Stichwort.

@paritycheck & @arbu man
Werde ich mir mal anschauen. Das Problem ist, dass die Software ohne installation von [zitat:] ...sollchen spielerein wie DirectX bzw. OpenGL...[zitat ende] funktionieren soll


@Jens Schumann
TeeChart erfüllt die Bedingungen nicht ganz, die ich benötige (Doppelte Daten wegen TSeries (Daten werden derzeit über FileStream gelesen um arbeitsspeicher zu sparen, wären dann aber mit TSeries doch wieder im Arbeitsspeicher). Aber danke für den Tip. Ich werde nochmal darüber nachdenken
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
25. Jul 2006, 22:17
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz