AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfung eines Image

Ein Thema von MisterScary · begonnen am 13. Dez 2006 · letzter Beitrag vom 14. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
MisterScary

Registriert seit: 13. Dez 2006
7 Beiträge
 
#1

Überprüfung eines Image

  Alt 13. Dez 2006, 18:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Jowo
Jowo

Registriert seit: 24. Sep 2006
Ort: Jena
49 Beiträge
 
Delphi 7 Personal
 
#2

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:13
Hallo und herzlich Willkommen in der Delphi-PRAXiS!

Zu deiner Frage:
Du könntest einfach mit z.B.Image1.Canvas.Pixels[x,y]<>clwhite überprüfen, ob sich an der Stelle ein Pixel befindet der nicht weiß ist und dann eine entsprechende Meldung ausgeben.
  Mit Zitat antworten Zitat
MisterScary

Registriert seit: 13. Dez 2006
7 Beiträge
 
#3

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:30
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:34
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jowo
Jowo

Registriert seit: 24. Sep 2006
Ort: Jena
49 Beiträge
 
Delphi 7 Personal
 
#5

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:39
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...
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#6

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:39
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.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
MisterScary

Registriert seit: 13. Dez 2006
7 Beiträge
 
#7

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Jowo
Jowo

Registriert seit: 24. Sep 2006
Ort: Jena
49 Beiträge
 
Delphi 7 Personal
 
#8

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:53
Zitat von Jowo:
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...
Zum Beispiel so, wenn du das am besten findest:
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]
  Mit Zitat antworten Zitat
MisterScary

Registriert seit: 13. Dez 2006
7 Beiträge
 
#9

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 19:58
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Jowo
Jowo

Registriert seit: 24. Sep 2006
Ort: Jena
49 Beiträge
 
Delphi 7 Personal
 
#10

Re: Überprüfung eines Image

  Alt 13. Dez 2006, 20:03
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:33 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