Position mit Bild belegt?


HarryXVI

Erfahrenes Mitglied
#1
Hallo,
ich habe eine große Image-Komponente ImFeld, auf der ich weitere kleine Grafiken erzeuge. Die Position dafür werden zufällig ausgewählt. Nun ist es hinderlich, dass die Grafiken sich oft überlappen. Ich habe mir schon als Lösung überlegt, erst eine Zufallsposition zu finden und dann zu prüfen, ob sich dort schon eine Grafik befindet. Aber wie mache ich das?
 

vop

Erfahrenes Mitglied
#2
Du könntest den Pixel an der Stelle auf seine Farbinformation abfragen, bevor du zeichnest. Unterscheidet der sich von der Farbe des Hintergrundbildes, dann ist hier schon gezeichnet worden.
 

HarryXVI

Erfahrenes Mitglied
#3
Wenn die Hintergrundfarbe also weiß ist, könnte das dann so aussehen, oder?

Code:
repeat begin
  x := Random(ImFeld.Width-32);
  y := Random(ImFeld.Height-32);
  end;
until ImFeld.Canvas.Pixels[x,y] = clwhite;
 

vop

Erfahrenes Mitglied
#4
Bin mir nicht sicher, ob das mit clWhite geht.

Du kannst aber doch mal mit einen weißen Punkt abfragen, dann weißt du den Wert.

By the way
repeat begin
end until

ist doppelt gemoppelt.
das begin und end kannst du dir in deinem Beispiel sparen, da repeat ... until bereits die Klammerung bewirkt.
 

HarryXVI

Erfahrenes Mitglied
#5
Also, habe diese Abfrage nach clWhite (Pixels ist ja vom Typ TColor) mal ausprobiert und das Programm hat sie richtig ausgeführt. Danke für eure Hilfe.