![]() |
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:
Drawspace ist das TImage auf welches gezeichnet werden soll
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; 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 |
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 |
AW: Logarithmus zum darstellen von Daten beschleunigen
Zitat:
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; |
AW: Algorithmus zum darstellen von Daten beschleunigen
Liste der Anhänge anzeigen (Anzahl: 1)
OOOppps... hier noch die vergessene Zip Datei
|
AW: Logarithmus zum darstellen von Daten beschleunigen
Zitat:
|
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:
Das hat ausserdem den Vorteil, dass du gegebenenfalls auch auf eine Paintbox oder ein Bitmap zeichnen kannst.
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; |
AW: Algorithmus zum darstellen von Daten beschleunigen
Zitat:
Ist das Zeichnen auf ein Bitmap oder eine Paintbox schneller als in ein Image? Gruss |
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:
Die dann nur einmal am Anfang aufrufen und die entsprechenden Zeilen aus
procedure InitCanvasPen(ACanvas: TCanvas; AColor: TColor; AWidth: Integer);
begin ACanvas.Pen.Color := AColor; ACanvas.Pen.Width := AWidth; end;
Delphi-Quellcode:
raus nehmen.
draw_*
Gruß, Chris |
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. |
AW: Algorithmus zum darstellen von Daten beschleunigen
Zitat:
Die Werte ändern nicht immer komplett... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz