![]() |
Überprüfung eines Image
Wir sollen in der Schule ein Programm schreiben das Häuser malt. Die Werte (Breite, Hoehe, X-koordinate, Y-koordinate) werden in 4 Editfeldern eingetragen und dann zeichnet Delphi das Haus in das Image. Soweit kein Problem... Jetzt zu meiner Frage:
Wie kann ich überprüfen ob auf einer Stelle schon ein Haus gebaut/gemalt wurde, so dass Delphi eine Meldung ausgibt, dass an dieser Stelle bereits ein Haus gebaut ist ? Wäre nett wenn jmd. mir schnell eine Lösung sagen könnte! Ich hab keine Ahnung wie ich das machen soll :-) Danke im voraus ;-) |
Re: Überprüfung eines Image
Hallo und herzlich Willkommen in der Delphi-PRAXiS!
Zu deiner Frage: Du könntest einfach mit z.B.
Delphi-Quellcode:
überprüfen, ob sich an der Stelle ein Pixel befindet der nicht weiß ist und dann eine entsprechende Meldung ausgeben.
Image1.Canvas.Pixels[x,y]<>clwhite
|
Re: Überprüfung eines Image
Hmm soweit so gut ;-)
Bin jetzt auch schon weiter als zu dem Zeitpunkt wo ich dir die PM geschickt habe ;-)! Das Problem ist folgendes: Das funktioniert zwar wenn man das Haus mit den gleichen Maßen auf den selben Punkt bauen will aber nicht wenn man das Haus etwas nach rechts verrückt. Dann wird ein Haus auf das andere gebaut ;-)! Es sollte aber so sein, dass man NICHTS übermalt. Wie mach ich das ? [Edit] Nochmal genauer die Frage: Wie überprüfe ich ALLE Pixel auf denen ein neues haus gemalt werden soll ob sie weiß sind oder nicht ? Ps: danke für die freundliche Aufnahme ;-) Mfg Scary |
Re: Überprüfung eines Image
Du musst eine Liste führen, in der alle Koordinaten (Typ: TRect) aller bisherigen Häuser enthalten sind.
Mit der Funktion IntersectRect() lässt sich prüfen, ob 2 Rechtecke sich überschneiden. |
Re: Überprüfung eines Image
Oder du könntest in zwei for-Schleifen alle Pixel durchlaufen lassen, die im Bereich des neuen Hauses wären und sobald einer davon nicht weiß ist, gibt es den Fehler...
|
Re: Überprüfung eines Image
ich würde einfach speichern, wo ich ein Haus hinmale. Und zwar mit den werten left, top (bzw. x,y) und width height. damit hast du dann einen Bereich des Bildschirms in dem schon ein uas gemalt ist. Und zwar wäre das wen die koordinaten x und y den linken unteren punkt des Hauses angeben würden, der bereich von x bis x+width in der horizontalen und y bis y+height in der vertikalen.
Wenn du jetzt ein neues Haus zeichnen willst, guckst du wieder welchen Bereich das Haus einnehmen würde und guckst ob sich dieser Bereich mit dem eines bereits vorhandenen Hauses überschneidet. Wenn du objektorientiert arbeitest, speicherst du die Haus Objekte in einem Array und schreibst dir eine Funktion die das o.g. überschneiden prüft. Dann erstellst du ein temporäres Haus und überprüfst es mit jedem bereits vorhanden auf Überschneidung. Andernfalls nimmst du ein Array mit 4 Werten, in denen du dann x,y,breite,höhe speicherst und gleichst das dann miteinander ab. |
Re: Überprüfung eines Image
Hilfe *G*
Danke für eure Hilfe ^^ Aber könntet ihr mir mal einen Beispielcode schreiben ? Das hört sich in der theorie nicht so schwer an aber wie ich das dann genau schreiben soll ist die andere Frage *G* Mfg Scary |
Re: Überprüfung eines Image
Zitat:
Delphi-Quellcode:
var x1,x2,y1,y2,i,j: integer;
fehler: boolean; begin fehler := false; for i := x1 to x2 do begin for j := y1 to y2 do begin if Image1.Canvas.Pixels[i,j] <> clwhite then fehler := true; end; end; if fehler = true then Application.MessageBox("Fehler...","Fehler"); end; Oder so ähnlich... Und x1,x2,y1,y2 sind die Anfangs- und End-Koordinaten auf der x- und y-Achse! [edit]i und j zu Deklaration hinzugefügt[/edit] |
Re: Überprüfung eines Image
Hmm erst einmal bedanke ich mir sehr das ihr euch alle damit so sehr beschäftigt!
@ Jowo : Delphi unterstreicht bei mir das "i" und das "j" ! Muss man das evt. auch als Variable angeben ? |
Re: Überprüfung eines Image
Ja, sorry habe ich vergessen. Das sind auch nur ganz normale Integer-Variablen, die zuerst deklariert werden müssen. Für solche Schleifen fängt man halt normalerweise mit i wie integer als Variable an.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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