0

我想在鼠标点击颜色的位置时获取图像中颜色的RBG值。实际上,我将图像放在 jFrame 的左上角。我尝试获取鼠标位置,例如 x= 190, y=80,靠近图像的最后一个像素。但是,图像大小为 200x24。因此,我无法将鼠标指针位置转换为图像的像素。有什么方法可以做到这一点吗?谢谢你。

添加更多信息:

我创建了一个 jframe 并在 jframe 的左上角放置了一个 jlabel,它是图像。我想要做的是:当我使用鼠标点并单击图像上的位置时,我会得到这个位置的颜色。屏幕截图: 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!");
            }

        }
});
4

2 回答 2

0

您可以使用Robot该类(请参阅文档)来获取一组相对于屏幕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());
    }
}
于 2014-03-21T16:57:19.537 回答
-2

如果它是 Swing UI,请为此使用 JColorChooser:http: //docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html。如果您必须手动执行此操作,请通过减去硬编码偏移量来转换鼠标指针位置。

于 2014-03-21T16:49:46.037 回答