AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Canvas pixelkoordinaten parallel in Array zeichnen

Canvas pixelkoordinaten parallel in Array zeichnen

Ein Thema von Vadda · begonnen am 9. Apr 2020 · letzter Beitrag vom 10. Apr 2020
Antwort Antwort
Vadda

Registriert seit: 9. Apr 2020
4 Beiträge
 
#1

Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 9. Apr 2020, 10:24
Hallo,

die benötigte Funktion ist folgende:
- aus einem Prozes heraus wird in einem Diagramm ein Canvas Polynom gezeichnet, Anzahl der Punkte 15 - 20
- der Nutzer soll mittels Mausklick auf die Kurve dieses Polynom aufrufen können
- im Hintergrund soll dieses Event die Basisdaten für das Polynom aufrufen
- Meine Idee nun:
- während dem Canvas Zeichenvorgang die ID der jeweiligen Basisdaten für jedes Pixel in einem Array mit der gleichen Grösse wie die des Diagramms speichern
Die Alternative wäre die Erstellung der Kurve mit kleinen Schritten pixelweise anstelle der Benutzung der Canvas Polynomfunktion, aber ich denke, das ist viel zu langsam.
Hat hier jemand eine Idee?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.648 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 9. Apr 2020, 11:52
Du könntest auch nur die errechneten Stützpunkte des Polygons in ein Array/Liste packen, und dann OnMouseMove die Abstände der Maus zu den jeweiligen Strecken berechnen. (Bedenke dabei das Offset, das durch Fenster/Bitmap/Canvas Position dazu kommt.) Dann kann man nämlich sogar frei entscheiden, ab welcher Distanz das Polygon als "ausgewählt" gelten soll, sodass man nachher nicht auf einen Pixel genau klicken muss. Zu Abstand zwischen Punkt und Strecke finden sich viele Dinge online.
Und falls es dir reicht, dass man zum Auswählen nur nah an einen Stützpunkt sein muss, und die Linien zwischen diesen sind egal, dann wird's noch viel einfacher. Weil dann brauchst du ja nur die Abstände von Maus zu Punkten, und die sind wirklich flott errechnet.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Vadda

Registriert seit: 9. Apr 2020
4 Beiträge
 
#3

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 9. Apr 2020, 13:27
Danke für die Antwort.
Das probiere ich mal aus, da ich nur schlecht abschätzen kann, wie gross der Auswahlbereich dann sein muß. Die Schwierigkeit dahinter ist, daß die Basispunkte sehr ungleich verteilt sind, und die Kurven zum Teil sehr nah beeinander sind.
Aber durch eine Interpolation vor der Darstellung kann dies deutlich reduziert werden. Interessant wäre dennoch gewesen, ob die Funktion von Delphi Canvas "umgeleitet" und in ein Array geschrieben werden kann.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.648 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 9. Apr 2020, 13:49
Nicht, dass ich wüsste. Da müsstest du dann selbst einen Algo schreiben, der "Linien im Array zeichnet". (Im einfachsten Fall könntest du natürlich erst auf den Canvas malen, und dann Pixel für Pixel durchgehen, und anhand der Farbwerte das dann ins Array übertragen. Spart ne Menge Arbeit.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Vadda

Registriert seit: 9. Apr 2020
4 Beiträge
 
#5

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 9. Apr 2020, 14:24
Warum kompliziert, wenn es auch einfach geht! Die Idee ist super: Eine ganz bestimmte Farbe nehmen, die Kurve in einer definierten Farbe zeichnen, ausgelesen, und dann in der gewünschten Farbe neu zeichnen. Die Rechenzeit ist hier unkritisch, und da der Zeichnungsbereich bekannt ist, muß nicht das ganze Bild durchsucht werden.
Danke nochmals!
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
889 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 9. Apr 2020, 21:29
Ich bin mir nicht sicher, was du meinst. Willst du die Pixel eines Bildes in ein Array schreiben? Das ergibt wenig Sinn. Oder willst du die Eckpunkte eines Vielecks in einem Gerätekontext in ein Array laden?

Letztes geht recht einfach, indem du BeginPath(DeineCanvas.Handle) aufrufst, bevor das Zeichnen beginnt.
Nachdem gezeichnet wurde, kannst du so die Windows.tagPOINT s deines Gerätekontexts abfragen:
Delphi-Quellcode:
type
  TPoints = packed array of tagPOINT;
var
  Points: TPoints;
  Types: TBytes;
  Count: Integer;
begin
  Count := GetPath(DeineCanvas.Handle, Points[0], Types[0], 0); // Länge 0 vorgeben = zukünftige Länge abfragen
  SetLength(Points, Count);
  SetLength(Types, Count);
  GetPath(DeineCanvas.Handle, Points[0], Types[0], Count);
  // TuWas
  EndPath(DeineCanvas.Handle);
end;
Types kannst du ignorieren, wenn du keine Bézierkurven zeichnest.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Vadda

Registriert seit: 9. Apr 2020
4 Beiträge
 
#7

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 10. Apr 2020, 05:43
Da war ich nicht ganz eindeutig: aus einer Menge von Datensätzen werden einzelne Kurven erzeugt und zusammen angezeigt. Dafür gibt es zwei Möglichkeiten: direkte Anzeige unter Anwendung der Delphi Canvas Polygon Funktion oder das Polygon vorher berechnen und die einzelnen Kurvenpunkte dann zeichnen. Wenn nun eine Kurve aus der Kurvenschar angewählt wird, dann soll diese anders gezeichnet und die Kurvenzusatzdaten (das sind nicht die Kurvenpunkte!) in einem anderen Fenster angezeigt werden. Dafür brauche ich die Verbindung zwischen der Kennlinie auf dem Bildschirm und den Basisdaten. Dies würde über eine Rückrechnung auch funktionieren, aber ich habe eine Möglichkeit gesucht, welche parallel zu oder vor dem Zeichnen der Kurve die entsprechende Kurven ID in Array Zellen schreibt, so daß die Rückmeldung eines Mausklicks auf die gezeichnete Kennlinie mittels des Arrays direkt auf die KurvenID zeigt. Die Arraystruktur entspricht immer exakt der Pixelstruktur im Diagramfenster. Da die Kurven weder stetig noch weit auseinander liegen, ist die vereinfachte Form mittels gerader Hilfslinien zwischen den Kurvenpunkten zu ungenau.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
889 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Canvas pixelkoordinaten parallel in Array zeichnen

  Alt 10. Apr 2020, 08:26
Kurven in (ggf. falls unerwünscht nur marginal) verschiedenen Farben zeichnen und dann anhand der angeklickten Farbe die Kurve bestimmen? Braucht man nur eine Zuordnung Farbe zur Kurvennummer, das geht am einfachsten mit TDictionary.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf