Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Algorithmus zum darstellen von Daten beschleunigen (https://www.delphipraxis.net/157829-algorithmus-zum-darstellen-von-daten-beschleunigen.html)

hedie 26. Jan 2011 12:08


Algorithmus zum darstellen von Daten beschleunigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

Memnarch 26. Jan 2011 12:11

AW: Logarithmus zum darstellen von Daten beschleunigen
 
Also es wäre nich erwähnenswert wieviel du damit machst o.O.

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

Und änder mal LOGArythmus zu ALGOrythmus in deiner überschrift ;)

MFG
Memnarch

hedie 26. Jan 2011 12:18

AW: Logarithmus zum darstellen von Daten beschleunigen
 
Zitat:

Zitat von Memnarch (Beitrag 1077406)
Also es wäre nich erwähnenswert wieviel du damit machst o.O.

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

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;

hedie 26. Jan 2011 12:38

AW: Algorithmus zum darstellen von Daten beschleunigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
OOOppps... hier noch die vergessene Zip Datei

uligerhardt 26. Jan 2011 12:47

AW: Logarithmus zum darstellen von Daten beschleunigen
 
Zitat:

Zitat von Memnarch (Beitrag 1077406)
Und änder mal LOGArythmus zu ALGOrythmus in deiner überschrift ;)

Änder doch mal alle y zu i. Und ü zu Ü. :P

shmia 26. Jan 2011 12:59

AW: Algorithmus zum darstellen von Daten beschleunigen
 
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.

hedie 26. Jan 2011 13:04

AW: Algorithmus zum darstellen von Daten beschleunigen
 
Zitat:

Zitat von shmia (Beitrag 1077414)
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

ChrisE 26. Jan 2011 13:11

AW: Algorithmus zum darstellen von Daten beschleunigen
 
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
Delphi-Quellcode:
draw_*
raus nehmen.

Gruß, Chris

BUG 26. Jan 2011 13:13

AW: Algorithmus zum darstellen von Daten beschleunigen
 
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.

hedie 26. Jan 2011 13:19

AW: Algorithmus zum darstellen von Daten beschleunigen
 
Zitat:

Zitat von BUG (Beitrag 1077421)
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...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 Uhr.
Seite 1 von 2  1 2      

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