AGB  ·  Datenschutz  ·  Impressum  







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

Algorithmus zum darstellen von Daten beschleunigen

Ein Thema von hedie · begonnen am 26. Jan 2011 · letzter Beitrag vom 26. Jan 2011
Antwort Antwort
Seite 1 von 2  1 2      
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 12:08
Hallo zusammen...

Ich habe vor einiger Zeit begonnen ein GUI für einen LogikAnalysator zu programmieren...
Damals hat mir jemand hier aus diesem Forum sehr bei der umsetzung des Algorithmus zur Darstellung der Daten geholfen...

Nun ist einige Zeit vergangen, und ich möchte das GUI gerne überarbeiten... Der Algorithmus zur Darstellung habe ich jetzt einfach mal 1:1 übernommen.

Doch leider habe ich festgestellt, das dieser zu wenig performant ist. Ich wollte euch deshalb fragen, ob ihr ideen zur beschleunigung dieses Algorithmus habt...

Fakten:

Das Signal wird auf ein TImage gezeichnet (mit PEN)
Es werden 8 Images (Kanäle) angezeigt
Die Daten für die Images liegen in einem Array
es muss entweder eine linie nach oben oder eine nach rechts gezeichnet werden.


Derzeitiger Zeichen algorithmus

Delphi-Quellcode:
procedure TForm1.draw_raw_data(drawspace:TImage;color:TColor; typ: integer);
const y: array[0..1] of integer = (25,6);
var
i:integer;
begin
  i := 1;
  draw_line(drawspace,color, 0, Kanal_Daten[typ][i].index,25);
  draw_up(drawspace, color, Kanal_Daten[typ][i].index);
  for i := 1 to (Kanal_Counter[typ])-1 do
    begin
    draw_up(drawspace, color, Kanal_Daten[typ][i+1].index);
    draw_line(drawspace, color, Kanal_Daten[typ][i].index,Kanal_Daten[typ][i+1].index, y[Kanal_Daten[typ][i].data]);
    end;
end;
Drawspace ist das TImage auf welches gezeichnet werden soll
Color ist die Farbe der Linie
und Typ ist ein Integer von 0..7. Mit diesem wird angegeben welche Kanaldaten verwendet werden müssen
Draw_line zeichner eine linie von x-x
Draw_up zeichnet eine Linie nach oben

Kanal_Daten[typ][i] ist ein Zweidimensionales Array... Wobei Typ für den Kanal steht und i ein wert von 0..65535 ist.

Dieser Algorithmus ist derzeit sehr träge...

Anbei habe ich das Programm mit einer Beispiel Datein (Einfach unter Allgemein -> Signal öffnen die Datei öffnen)

Danke schonmal
Grüsse
Angehängte Dateien
Dateityp: zip LogicAnalyzerGUI.zip (401,8 KB, 13x aufgerufen)
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch

Geändert von hedie (26. Jan 2011 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#2

AW: Logarithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 12:11
Also es wäre nich erwähnenswert wieviel du damit machst o.O.

und draw_up/draw_line, wie sehen die aus? Quellcode bitte

Und änder mal LOGArythmus zu ALGOrythmus in deiner überschrift

MFG
Memnarch
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#3

AW: Logarithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 12:18
Also es wäre nich erwähnenswert wieviel du damit machst o.O.

und draw_up/draw_line, wie sehen die aus? Quellcode bitte

Und änder mal LOGArythmus zu ALGOrythmus in deiner überschrift

MFG
Memnarch
Hehe das it mir jetzt unangenehm... Das ich da im Titel logarithmus geschrieben habe -> Geändert!

Zu den Daten... Es sind 65535 Datensätze welche dargestellt werden müssen

Hier die Funktionen

Delphi-Quellcode:
procedure draw_up(pointer:TImage;color:TColor;x:integer);
begin
 with pointer.Canvas do begin
    Pen.Color := color;
    Pen.Width := 2;
    MoveTo(posx(x),25);
    LineTo(posx(x),5);
 end;
end;

procedure draw_line(pointer:TImage;color:TColor;x1,x2,y:integer);
begin
 with pointer.Canvas do begin
    Pen.Color := color;
    Pen.Width := 2;
    MoveTo(posx(x1),y);
    LineTo(posx(x2),y);
 end;
end;
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#4

AW: Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 12:38
OOOppps... hier noch die vergessene Zip Datei
Angehängte Dateien
Dateityp: zip LogicAnalyzerGUI.zip (401,8 KB, 8x aufgerufen)
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.739 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Logarithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 12:47
Und änder mal LOGArythmus zu ALGOrythmus in deiner überschrift
Änder doch mal alle y zu i. Und ü zu Ü.
Uli Gerhardt
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 12:59
Die Zeichenfunktionen draw_up() usw. sollten ein TCanvas-Objekt anstelle eine TImage-Objekts als Übergabeparameter bekommen.
Delphi-Quellcode:
procedure draw_up(canvas:TTCanvas;color:TColor;x:integer);
begin
  with canvas do
  begin
    Pen.Color := color;
    Pen.Width := 2;
    MoveTo(posx(x),25);
    LineTo(posx(x),5);
  end;
end;
Das hat ausserdem den Vorteil, dass du gegebenenfalls auch auf eine Paintbox oder ein Bitmap zeichnen kannst.
Andreas
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#7

AW: Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 13:04
Die Zeichenfunktionen draw_up() usw. sollten ein TCanvas-Objekt anstelle eine TImage-Objekts als Übergabeparameter bekommen.
Delphi-Quellcode:
procedure draw_up(canvas:TTCanvas;color:TColor;x:integer);
begin
  with canvas do
  begin
    Pen.Color := color;
    Pen.Width := 2;
    MoveTo(posx(x),25);
    LineTo(posx(x),5);
  end;
end;
Das hat ausserdem den Vorteil, dass du gegebenenfalls auch auf eine Paintbox oder ein Bitmap zeichnen kannst.
Vielen Dank für deine Antwort...

Ist das Zeichnen auf ein Bitmap oder eine Paintbox schneller als in ein Image?

Gruss
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

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

AW: Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 13:11
Hallo,

also wenn ich da optimieren würde, dann als erstes mal indem ich Befehle die unnötig sind zu enfernen.

In deinem Fall würde ich damit beginnen, ein Methode zu schreiben, die die Canvas - bzw. in deinem Fall den Pen vorbereitet.

Delphi-Quellcode:
procedure InitCanvasPen(ACanvas: TCanvas; AColor: TColor; AWidth: Integer);
begin
  ACanvas.Pen.Color := AColor;
  ACanvas.Pen.Width := AWidth;
end;
Die dann nur einmal am Anfang aufrufen und die entsprechenden Zeilen aus draw_* raus nehmen.

Gruß, Chris
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
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 13:13
Musst du immer alle Daten eines Kanals anzeigen oder ist vielleicht die Anzeigefläche so klein, das es ausreichen würde, weniger Daten zu zeichnen?

Außerdem wäre es interessant zu wissen, ob sich die Werte in den Kanälen immer komplett ändern oder zum großen Teil gleich bleiben.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#10

AW: Algorithmus zum darstellen von Daten beschleunigen

  Alt 26. Jan 2011, 13:19
Musst du immer alle Daten eines Kanals anzeigen oder ist vielleicht die Anzeigefläche so klein, das es ausreichen würde, weniger Daten zu zeichnen?

Außerdem wäre es interessant zu wissen, ob sich die Werte in den Kanälen immer komplett ändern oder zum großen Teil gleich bleiben.
Ja die anzeige Fläche ist manchmal ( je nach zoom einstellung) kleiner als die Maximale Anzahl Daten


Die Werte ändern nicht immer komplett...
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
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 23:49 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