当我点击颜色的位置时,我想要获取图像中颜色的RBG值。实际上,我把图像放在jFrame的左上角。我尝试获取鼠标位置,例如,x = 190,y = 80,它接近图像的最后一个像素。但是,图像大小为200x24。因此,我无法将鼠标指针位置转换为图像的像素。有没有办法做到这一点?谢谢。
添加更多信息:
我创建一个jframe并放置一个jlabel,它是jframe左上角的图像。我想要做的是:当我使用鼠标点并单击图像上的位置时,我会得到这个位置的颜色。 截屏:http://i.stack.imgur.com/SjFhr.png [当我使用鼠标指向图像的黑色位置时,显示r = 240,g = 240,b = 240]
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
System.out.println(getPointerColor());
Thread.sleep(1000);
} catch (AWTException awte) {
System.out.println("Error while getting pointer's color!");
} catch (InterruptedException ie) {
System.out.println("Error while sleeping!");
}
}
});
答案 0 :(得分:0)
您可以使用Robot
课程(请参阅Documentation)获取一组坐标相对于屏幕或您想要的GraphicsDevice
的颜色:
public Color getPixelColor(int x, int y) throws AWTException {
Robot robot = new Robot();
return robot.getPixelColor(x, y);
}
然后,您可以从返回的Color
对象中检索RGB值。确保你的坐标很好!
作为附加测试,您可以尝试运行以下命令,每秒显示指针相对于屏幕的指向颜色(换句话说,绝对光标坐标):
import java.awt.AWTException;
import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
public class Test {
public static void main(String[] args) throws Exception {
while (true) {
try {
System.out.println(getPointerColor());
Thread.sleep(1000);
} catch (AWTException awte) {
System.out.println("Error while getting pointer's color!");
} catch (InterruptedException ie) {
System.out.println("Error while sleeping!");
}
}
}
public static Color getPointerColor() throws AWTException {
Point coordinates = MouseInfo.getPointerInfo().getLocation();
Robot robot = new Robot();
return robot.getPixelColor((int) coordinates.getX(), (int) coordinates.getX());
}
}
答案 1 :(得分:-2)
如果是Swing UI,请使用JColorChooser:http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html。如果必须手动执行此操作,请通过减去硬编码的偏移量来转换鼠标指针位置。