Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pixelabfrage bei Images (https://www.delphipraxis.net/25846-pixelabfrage-bei-images.html)

michaela 13. Jul 2004 17:40


Pixelabfrage bei Images
 
Hi,
ich habe ein Komponente vom Typ TImage auf dem Formular und darauf eine mit canvas geschriebene Grafik. Das Image ist 400 * 400 breit.
Darunter befinden sich 2 Edits für Kordinaten.
zuerst soll man die Anfangskordinaten für eine Linie eintragen und danach die Endkordinaten.
Auf Button KLick soll die Linie gezeichnet werden, aber nur wenn sie keine andere Linie kreuzt.

Ich glaube, dass es sinnvoll wäre, für jeden Punkt der Linie zu prüfen, ob er auf eine weißes Pixel gezeichnet wird.
Das heißt: Ich brauche den Befehl für die Abfrage der Farbe eines Pixels.

Weiß zufällig jemand wie das geht?

Danke im Vorraus

Michaela

Thunderchild 13. Jul 2004 17:44

Re: Pixelabfrage bei Images
 
Hallo und Wölkommen erstmal,

also einfach mal kurz in die OH geguckt und springt mit unter TCanvas die Eigenschaft Pixels entgegen. Das ist ein Array vom Typ TColor. Demnach liegen hier Deine Farben drin.
Jetzt guckste nur noch, ob das auch weiß ist (also zum Bleistift if Image1.Canvas.Pixels[0,0]=clWhite then....

Schüss

Nikolas 13. Jul 2004 18:10

Re: Pixelabfrage bei Images
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das wird so wahrscheinlich nicht funktionieren:
a) Bist du dir sicher, dass nie ein weisses Pixel in deiner Graphik vorkommt?
b) Die Linien können sich kreuzen, ohen gemeinsame Pixel zu haben. (siehe Anhang)

Du musst dir also erstmal eine andere Abfrage einbauen.

Falls du aber eine dickere Linie (width>2) zeichnest könntest du so was machen, allerdings müsstest du zuvor das gesamte Image nach weissen Pixeln absuchen und diese leicht verändern.

Thunderchild 13. Jul 2004 21:11

Re: Pixelabfrage bei Images
 
Ich war mir dieses Falles durchaus bewußt. Ich wollte lediglich einen Ansatz geben, damit Michaela erst mal weiß, wo ein Ansatz läge. Eine Möglichkeit wäre Folgende:

man könnte die benachbarten Pixel überprüfen. Sowohl links als auch rechts von der Geraden, bzw. drüber und drunter davon. Welche man nimmt, mu aus dem Geradenanstieg ermittelt werden (abs(Anstieg)<1 drüber und drunter, sonst links und rechts davon. Dadurch läßt sich dieser Kreuzungsfall vermeiden.

Andererseits bleibt stets zu berücksichtigen, daß, wie eben von Toxman erwähnt, im Bild sellbst ja auch weiße Gebiete vorkommen können. Gesetz den Fall, daß solche Geraden NUR in dem Programm erzeugt werden, könnte man diese ja in einer geeigneten Datenstruktur speichern. Dann kann man analytisch ermitteln, ob die neu eingezeichnete Gerade eine bereits erstelle schneidet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 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