2012-04-04 16 views
-1

Ich habe this Bild und ich möchte in der Lage sein, jedes einzelne Bild zu lesen, laden Sie es in eine Malmethode und Maus-Listener zu jeder Stelle der Farbe, aber nicht auf dem schwarzen Hintergrund. Ich möchte keinen schwarzen Hintergrund als "Knopf" verwenden und nur die farbigen Punkte haben eigene Maus-Listener, damit ich unterscheiden kann, welchen Farbfleck ich gedrückt habe. Hat jemand irgendwelche Ideen? Vielen Dank!Java Picture Farbbereich Unterscheidung

+0

Haben Sie die Roboterklasse in Betracht gezogen? Sie können den Punkt zur entsprechenden LinkedList hinzufügen und dann nach einem Mausklick die Liste finden, die den Punkt enthält, und dann eine Aktion ausführen. –

+0

Würde es mir die Robot-Klasse erlauben, jeden Wert im Bereich jedes farbigen Bereichs zu speichern, damit ich ihn testen kann? – MrDrProfessorTyler

+0

Die Roboterklasse kann von dort aus nach einer Farbe suchen: Wenn sie rot ist, fügen Sie den Punkt zu einer roten Liste hinzu. usw. –

Antwort

1

Ich nehme an, Sie es auf diese Weise nähern könnte:

List<Shape> buttons = ... 

for each pixel in the picture, top left to bottom right { 
    if the pixel is not black { 
     if the pixel is not already contained in one of the buttons { 
      iterate over every pixel towards the right until you reach a different color 
      iterate over every pixel towards the bottom until you reach a different color 

      // now you have the bounds of your button 
      // create a new Rectangle and add it to your list. 
     } 
    } 
} 

ich nie so etwas wie dies versucht haben, noch habe ich das obige Verfahren getestet, aber mir scheint es, wie es sein sollte Arbeit.

Warum können Sie nicht einfach das Bild mit JButton s und JPanel s duplizieren und Ihr Leben vereinfachen?

+0

Nun, ich brauche einen Benutzer, um eine Bilddatei zu ihrer Layout-Präferenz zu bearbeiten, die alles sein könnte, so muss ich in der Lage sein, dies zu tun, aber es ist eine gute Idee, ich werde es versuchen, danke. – MrDrProfessorTyler

1

Der MouseListener gibt eine Position zurück, also würde ich diesen Ort verwenden, um das Bild an dem entsprechenden Pixel zu untersuchen, und dann verzweigen, um die erforderliche Aktion auszuführen. Wenn das Pixel schwarz wird, tust du einfach nichts.

Das Bild kann über ein BufferedImage-Objekt und einen Raster überprüft werden.

Alternativ könnte man das Bild über BufferedImage und einen Raster untersuchen und entsprechende Objekte für jedes Farbquadrat erstellen, die einzeln gedruckt und bearbeitet werden.

Verwandte Themen