Pixelfarbe der aktuellen Mausposition

A

anaishasi

Hallo!

Ich habe folgendes Problem:
In einem Applet habe ich verschiedenfarbige Rechtecke mit "g.fillRect(x,y)" erzeugt. Nun möchte ich, wenn man auf eines der Rechtecke klickt, dass die Farbe der aktuellen Mausposition (also die Farbe des Rechtecks) ausgelesen wird. Gibt es für diesen "Auslesevorgang" irgendeinen Befehl oder einen Lösungsweg? Hab irgendwas mit "getRGB" bzw. "getRed" ... gelesen, aber das hat nicht so richtig funktioniert, da ich ja die Farbe an der aktuellen Mausposition auslesen möchte.

Danke für eure Lösungsvorschläge,
Stefan.
 
Hallo!

Ganz easy .... ;-)

Code:
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JApplet;

/**
 * @author      Darimont<br>
 * @version     1.0<br>
 * Date of creation:  04.06.2004<br>
 * File:         PixelTest.java<br>
 * Modifier:     Darimont<br>
 * Revision:     Revision<br>
 * State:        Germany<br>
 */

public class PixelTest extends JApplet{
	
	private Robot robot;
	
	public void init(){
		super.init();
		setSize(320,240);
		try {
			robot = new Robot();
		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		getContentPane().addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent evt){
				Point p = evt.getPoint();
				Color c = getColorAtPoint(p.x,p.y);
				System.out.println(c);
			}

			private Color getColorAtPoint(int x, int y) {
				if(robot != null){
					return robot.getPixelColor(x,y);
				}
				return null;
			}
		});
	}
	
	public void paint(Graphics g){
		super.paint(g);
		g.setColor(Color.RED);
		g.fillRect(20,20,80,80);
		g.setColor(Color.BLUE);
		g.fillRect(20,120,80,80);
	}
	
	public void start(){
		super.start();
	}
}

Gruß Tom
 
Original geschrieben von anaishasi
Hallo!

Ich habe folgendes Problem:
In einem Applet habe ich verschiedenfarbige Rechtecke mit "g.fillRect(x,y)" erzeugt. Nun möchte ich, wenn man auf eines der Rechtecke klickt, dass die Farbe der aktuellen Mausposition (also die Farbe des Rechtecks) ausgelesen wird. Gibt es für diesen "Auslesevorgang" irgendeinen Befehl oder einen Lösungsweg? Hab irgendwas mit "getRGB" bzw. "getRed" ... gelesen, aber das hat nicht so richtig funktioniert, da ich ja die Farbe an der aktuellen Mausposition auslesen möchte.

Danke für eure Lösungsvorschläge,
Stefan.

Es gibt keine Farbe der aktuellen Mausposition, sondern eine Farbe der Komponente an der angegebenen Mausposition.
Und an die solltest Du im Graphics Kontext mit

abstract Color getColor()
Gets this graphics context's current color.

herankommen.
 
Original geschrieben von Thomas Darimont
Hallo!
Code:
public class PixelTest extends JApplet{
	
	private Robot robot;
	
	public void init(){
		super.init();
		setSize(320,240);
		try {
			robot = new Robot();
		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		getContentPane().addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent evt){
				Point p = evt.getPoint();
				Color c = getColorAtPoint(p.x,p.y);
				System.out.println(c);
			}

			private Color getColorAtPoint(int x, int y) {
				if(robot != null){
					return robot.getPixelColor(x,y);
				}
				return null;
			}
		});
	}
}


Gruß Tom

Cool, Robot? Wasn das für ein Teil?

public class Robot
extends Object

This class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations.

Das erklärt mir auch nicht gerade, warum bzw. wie Dein Code funktioniert...
 
Hallo mal wieder,

der Zweck von Robot ergibt sich ja wohl wirklich nun aus dem JavaDoc's`, oder?
Mit der Klasse Robot kann man auch Screenshots machen ... und getPixelColor baut sehr wahrscheinlich darauf auf.

Gruß Tom
 
Oha, 1.4.2, dann werde ich mal in der aktuellen 1.4.2 API schauen. In meiner 1.3.1 ist das nicht so transparent, deshalb meine Frage.
So fortschrittlich sind wir hier nicht. ;-)
Oder besser: :-(
 
Zurück