Autor Beitrag
M. Raab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Sa 14.06.03 15:07 
Hallo NG,

folgendes Problem: ich habe einen Canvas zur Laufzet erzeugt und zeichne eine Linie. Mein Problem: ich möchte die Linie nur so lange zeichnen, bis sie auf eine andere Linie stößt, die rot gefärbt (clRed) ist. Wie kann ich die Farbe des Pixels abfragen, welches gerade vor meiner Linie ist ?

Dann möchte ich gerne die Zahl der Pixel wissen, die die Länge der Linie hat. Gibt es da eine einfache Möglichkeit wenn ich den Anfangspunkt kenne (x1,y1) und den Endpunkt (dann die rote Linie) (x2,y2) ?


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Sa 14.06.03 15:50 
Sind die Koordinaten der Linien irgendwo gespeichert, oder sind diese nur auf dem Canvas?

Sven

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Sa 14.06.03 17:29 
Hi,

um zu prüfen ob vor deiner Linie ne Rote linie ist, benutz einfach:

ausblenden Delphi-Quelltext
1:
if Canvas.Pixels[X,Y]=clRed then...					


für X und Y setzt du halt den punkt 1px vor deiner linie ein ;)

um rauszubekommen wie lang die linie ist, müßtest du den Satz des Phytagoras benutzen.. Also:

a² + b² = c²

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: So 15.06.03 09:56 
Hallo Aya,

vielen Dank für den Tipp - ich habe einen Richtungsvektor und einen Anfangspunkt. Ich frage jetzt immer 3 Pixel vor der Linie ab, ob ich auf eine rote Gegenlienie treffe und über den Betrag des Vektors bekomme ich die Länge.

Noch ne Frage: angenommen, das Canvas hat doch unabhängig von der Auflösung des Bildschirms immer die gleiche Anzahl an Pixel, oder ? Denn ansosnten würde das mit der Länge je ständig variieren.....


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: So 15.06.03 11:11 
Titel: der canvas richtet sich immer na
der canvas richtet sich immer nach der größe des zugehörigen fensters, wenn du dein Progi beispielsweise auf maximized laufen lässt hast du je nach auflösung mal mehr und mal weniger pixel in deinem canvas (kein zoom!), halt immer clientheight*clientwidth

war es das, was du wissen wolltest?

IO-sys/MathiasH

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: So 15.06.03 11:28 
Hallo Mathias,

jo .... :D

Mein Denkfehler war: angenommen ich müßte eine Linie zeichnen von der linken oberen Ecke des Bildschirms zur rechten unteren Ecke. Bei einer Auflösung des Bildschirms von z.B. 800*600 wären das -ich sag mal- 1000 Pixel. Bei einer Auflösung von 1024x786 eben entsprechend mehr, obwohl es die gleiche Strecke ist. Aber: wenn ein Canvas 300x600 hat, hat es eben genau diese Zahl an Pixel unabhängig von der Auflösung des Bildschirms.

Mein Problem war, dass ich maßstabsgetreu eine Strecke berechnen soll, aber nur den Anfangspunkt und den Richtungsvektor kenne. Ich kenne jedoch nicht die Länge der Strecke. Also habe ich mir gedacht, ich fange mal an zu zeichnen und beende das wenn ich auf die andere Linie treffe. Dann berechne ich die Länge in Pixel, da ich nun den Endpunkt kenne. Da ich weiß, dass z.B. 250 Pixel eine Strecke von einem Meter repräsentieren, weiss ich auch, wie lange diese eben eingezeichnete Strecke ist. Oder ???????

Da ist eben die Auflösung eine Grundvoraussetzung.

Vielen Dank und Gruss


Markus :idea:

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!