Pixelfarbe erkennen - funktioniert nicht

papabaer1707

Aktives Mitglied
Hi, ich bin am Umsteigen auf Java (von Delphi) und bastel an einigen kleinen Problemen herum, um etwas zu lernen. Im Moment möchte ich ein Programm schreiben, mit dem ich mit der Maus Polygone zeichnen kann (funktioniert schon), diese auf Konvexität untersuche (geht auch) und dann auch füllen kann (hier hakt es). Zum Füllen gibt es verschiedene Algorithmen - ich wollte mit einem einfachen (rekursiven) beginnen ...

Mein Hauptproblem besteht wohl darin, die Pixelfarbe auf meiner Zeichenfläche (DrawPanel) auszulesen. Hab hier und da etwas gefunden ... zuletzt habe ich es so probiert:
Java:
  public void mouseMoved(MouseEvent e) {
  
    int ex = e.getX();
    int ey = e.getY();

    if (e.getSource() == zeichenBlatt)
    {
      int color = zeichenBlatt.getPixelColor(ex,ey).getRed();
      System.out.println("Color ist " + color);
    }
  }

zeichenBlatt ist ein JPanel (bei mir erweitert um ein setPixel). Dort gibt es dann die Methode getPixelColor:
Java:
public class MyDrawPanel extends JPanel {

  private Robot robot;

  public MyDrawPanel () {
    super();
    try {
	robot = new Robot();
	} catch (AWTException e) {
	e.printStackTrace();
	}
  }

  ...

  // Liest Farbe eines Pixels aus
  public Color getPixelColor(int x, int y)
  {
    if(robot != null){
	return robot.getPixelColor(x,y);
    }
	return null;
  }

Gut, ich denke mir, wenn dies funktioniert, geht auch das Füllen ... nur die Farbe wird nicht korrekt ausgelesen. Wenn ich mit der Maus z. B. über die original weiße Fläche fahre, erhalte ich sogar unterschiedliche Werte von 0 bis 255???

Kann mir da jemand helfen?

Im Anhang habe ich mal alles beigegeben. Ich weiß, dass da nicht alles toll und effizient ist ... seufz, aber bis hierher hat es funktioniert. Ach ja, geschrieben ist das ganze im JavaEditor.

Irgendwo in diesem Forum hatte ich auch mal ein tolles Tutorial gesehen, in dem beschrieben wurde, wie man "gut" zeichnet - habs hier nicht umsetzen können (auch aus Zeitgründen).
 

Anhänge

  • polygon.zip
    13,5 KB · Aufrufe: 0

Schandro

Top Contributor
Robot benutzt als Nullpunkt des "Koordinatensystems" die obere linke Ecke des Bildschirms, der MouseListener benutzt die obere linke Ecke des Components.... Deswegen liest du die falschen Pixels aus. Du könntest natürlich die Position des Components relativ zum Bildschirm zu deinen Koordinaten hinzuaddieren, aber ich bin mir sicher da gibts auch ne einfachere Lösung. Habs sie aber grade vergessen :(
 
Zuletzt bearbeitet:

papabaer1707

Aktives Mitglied
Hm, das konnte ich leicht ändern - das Problem bleibt. Was mich wundert ist, dass ich auf einer eigentlich komplett weißen Fläche unterschiedliche Rückgabewerte für die Pixelfarbe bekommen ...
 

papabaer1707

Aktives Mitglied
Java:
public void mouseMoved(MouseEvent e) {
  
    int ex = e.getX()/zoomFaktor;
    int ey = e.getY()/zoomFaktor;

    if (e.getSource() == zeichenBlatt)
    {
      int color = zeichenBlatt.getPixelColor(ex,ey,zeichenBlatt.getX(),zeichenBlatt.getY()).getRed();
      System.out.println("Color ist " + color);
    }
  }
... und ...
Java:
  public Color getPixelColor(int x, int y, int cx, int cy)
  {
    if(robot != null){
      return robot.getPixelColor(x+cx,y+cy);
    }
    return null;
  }

... bzw. mit dieser Variante ...

Java:
return robot.getPixelColor(x+this.getX(),y+this.getY());

In der Konsole wird nach wie vor sowas ausgegeben:
Java:
Color ist 0
Color ist 240
Color ist 242
Color ist 239
Color ist 237
Color ist 236
Color ist 255
Color ist 255
Color ist 128
Color ist 255
Color ist 255
Color ist 0
Color ist 255
Color ist 240
Color ist 240
Color ist 240
Color ist 255
Color ist 240
 

Schandro

Top Contributor
Java:
int color = zeichenBlatt.getPixelColor(ex,ey,zeichenBlatt.getX(),zeichenBlatt.getY()).getRed();
getX und getY liefern nur die Location relativ zur Vatekomponente...
benutz getLocationOnScreen().getX/Y
 
Zuletzt bearbeitet:

papabaer1707

Aktives Mitglied
Java:
int color = zeichenBlatt.getPixelColor(ex,ey,zeichenBlatt.getX(),zeichenBlatt.getY()).getRed();
getX und getY liefern nur die Location relativ zur Vatekomponente...
benutz getLocationOnScreen().getX/Y

getLocationOnScreen hört sich gut an, aber ich bekomme es nicht eingebaut. Wie gebe ich meine Koordinaten ein und wandle diese um?
 

papabaer1707

Aktives Mitglied
So, hab's doch hinbekommen:
Java:
  // Liest Farbe eines Pixels aus
  public Color getPixelColor(int ex, int ey)
  {
    if(robot != null){
      int x = this.getLocationOnScreen().x + ex;
      int y = this.getLocationOnScreen().y + ey;
      return robot.getPixelColor(x,y);
    }
    return null;
  }

Das Polygon wird auch gefüllt - zwar langsam, aber es ist auch nicht die optimale Variante :). Schneller müsste es auch gehen, wenn erst auf ein Image gezeichnet wird und dann das Bild kopiert wird ... nur hab ich da keine Ahnung - probiere ich später ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Pixelfarbe abgleichen funktioniert nicht AWT, Swing, JavaFX & SWT 5
V 2D-Grafik Schnelles ändern von Pixelfarbe in BufferedImages AWT, Swing, JavaFX & SWT 4
F Pixelfarbe von Panel ermitteln AWT, Swing, JavaFX & SWT 14
T Pixelfarbe auslesen AWT, Swing, JavaFX & SWT 4
J Pixelfarbe auslesen AWT, Swing, JavaFX & SWT 3
H JavaFX Fenstergröße nach maximieren erkennen AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
M Gezeichnetes Dreieck mit HoughLines erkennen AWT, Swing, JavaFX & SWT 9
J splitpane - Wechseln auf anderen Split erkennen AWT, Swing, JavaFX & SWT 11
E Grafik karte erkennen AWT, Swing, JavaFX & SWT 3
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
H Puzzle - Erkennen wenn gelöst (array vergleichen) AWT, Swing, JavaFX & SWT 10
G JFileChooser - erkennen v. existierenden Dateien ohne Endung AWT, Swing, JavaFX & SWT 1
I Choice erkennen AWT, Swing, JavaFX & SWT 3
F JFrame Änderung der Größe erkennen AWT, Swing, JavaFX & SWT 2
T erkennen ob innerhalb oder außerhalb von canvas gezeichnet AWT, Swing, JavaFX & SWT 2
G JList Schrift ist schwer zu erkennen AWT, Swing, JavaFX & SWT 5
R Klick in einem Tree erkennen und auswerten AWT, Swing, JavaFX & SWT 6
W Benutzereingaben sofort erkennen AWT, Swing, JavaFX & SWT 5
L Komponenten dynamisch erkennen und bearbeiten AWT, Swing, JavaFX & SWT 8
Juelin if Abfrage funktioniert nicht richtig AWT, Swing, JavaFX & SWT 10
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
M Scrollbar funktioniert nicht AWT, Swing, JavaFX & SWT 10
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
sserio Wie funktioniert ein Controller bei JavaFx? AWT, Swing, JavaFX & SWT 1
U Wie funktioniert das rotieren unter 2dGraphics, also wie stelle ich z. B. 90° ein? AWT, Swing, JavaFX & SWT 1
U Wie funktioniert Polygon? AWT, Swing, JavaFX & SWT 1
U Wie genau funktioniert 2dgraphics, in diesem Bezug? AWT, Swing, JavaFX & SWT 4
S ChoiceBox aus ArrayList per setValue() mit Wert belegen funktioniert nicht. AWT, Swing, JavaFX & SWT 0
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
EinNickname9 Einfacher parser funktioniert nicht AWT, Swing, JavaFX & SWT 2
F Swing Adapt Row Height funktioniert nicht richtig :( AWT, Swing, JavaFX & SWT 7
P Swing jxmapviewer hinzufügen/nutzen funktioniert nicht AWT, Swing, JavaFX & SWT 7
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
J Anbindung Textfeldklasse an Table funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
H Bewegung funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
M Swing setMaximumSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
K JavaFX funktioniert nicht AWT, Swing, JavaFX & SWT 2
B AWT actionPerformed Method funktioniert nicht AWT, Swing, JavaFX & SWT 12
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
J JavaFX addListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L WrapLayout funktioniert nicht AWT, Swing, JavaFX & SWT 1
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
S JavaFX mit javac compilieren funktioniert nicht AWT, Swing, JavaFX & SWT 2
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
J AWT System Farben / java.awt.SystemColor funktioniert nicht AWT, Swing, JavaFX & SWT 4
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
K javafx app > "run in browser" funktioniert nicht AWT, Swing, JavaFX & SWT 3
N JavaFX GridPane Halignment funktioniert nicht AWT, Swing, JavaFX & SWT 1
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z BoxLayout funktioniert nicht und Buttongröße AWT, Swing, JavaFX & SWT 18
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
J Swing Wie funktioniert dieser ChangePropertyListener??? AWT, Swing, JavaFX & SWT 0
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
M UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 9
M Swing UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 0
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
S JavaFX wie funktioniert CSS und javaFX AWT, Swing, JavaFX & SWT 19
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
M JavaFX Eventhandler Funktioniert nicht AWT, Swing, JavaFX & SWT 3
Sogomn JavaFX Injektion funktioniert nicht AWT, Swing, JavaFX & SWT 4
Blender3D Swing KeyBoardListener funktioniert nicht unter UBUNTU AWT, Swing, JavaFX & SWT 7
J JavaFX Button funktioniert(nicht) AWT, Swing, JavaFX & SWT 3
J DefaultCloseOperation funktioniert nicht AWT, Swing, JavaFX & SWT 9
F JavaFX ObservableList -- warum funktioniert das so.... AWT, Swing, JavaFX & SWT 3
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
Paul15 Button funktioniert nur einmal AWT, Swing, JavaFX & SWT 9
D Swing Warum erhalte ich keine Ausgabe? Funktioniert der equals-vergleich in actionPeformed nicht richtig? AWT, Swing, JavaFX & SWT 3
H UpdatePolicy wird nicht richtig gesetzt / funktioniert nicht AWT, Swing, JavaFX & SWT 5
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben