Swing 获取屏幕上的像素颜色Java?

Swing 获取屏幕上的像素颜色Java?,swing,colors,jframe,rgb,getpixel,Swing,Colors,Jframe,Rgb,Getpixel,您好,我正在尝试获取JFrame上特定像素的颜色 这是我的密码。我的相框是红色的 我遇到的问题是,当我单击帧时,它应该返回红色的RGB颜色,即(255,0,0),但当我在不同点单击时,有时会得到白色的RGB颜色(255255)。我的代码中有什么问题 public class guiTest extends JFrame { private static Shape ellipse; private static Robot rb; public guiTes

您好,我正在尝试获取JFrame上特定像素的颜色

这是我的密码。我的相框是红色的

我遇到的问题是,当我单击帧时,它应该返回红色的RGB颜色,即(255,0,0),但当我在不同点单击时,有时会得到白色的RGB颜色(255255)。我的代码中有什么问题

public class guiTest extends JFrame 
{

    private static Shape ellipse;   
     private static Robot rb;

    public guiTest()
    {
    super("4-connected approach");
    setLayout(new FlowLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setSize(800,800);
    this.getContentPane().setBackground(Color.red);
    setLocationRelativeTo(null);
    addMouseListener(new MouseListener(){
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("Pixel:"+e.getX()+","+e.getY());             
            try {
                System.out.println(getPixel(e.getX(),e.getY()));
            } catch (AWTException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }


    });

}


public static Color getPixel(int x,int y) throws AWTException{
    Robot rb=new Robot();
    return rb.getPixelColor(x, y);
}   


public static void main(String[] args){
    guiTest frame=new guiTest();    
}

问题在于获取坐标的方式-
e.getX()
e.getY()
,因为它们是相对于
JFrame
(JFrame的左上角是(0,0))

要获取像素的坐标,请使用:

public void mouseClicked(MouseEvent e) {
    Point p = e.getLocationOnScreen();

    System.out.println("Pixel:" + p.x + "," + p.y);
    try {
        System.out.println(getPixel(p.x, p.y));
    } catch (AWTException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

}

[Extra]阅读以下内容可以改进其他方面:

您不仅仅是返回白色(255、255、255)。你的方法是返回大量的颜色。除此之外,我还得到(30,30,30),(69,70,110),(45,50,72)和更多。我想这就是你的问题所在(使用
getPixel
方法)。背景颜色与像素近似值之间可能存在摇摆问题。此外,为什么需要像素颜色
this.getContentPane().getBackground()
返回背景颜色集。如果渲染图像,则需要获取
图形
对象并从中获取颜色信息。这一切都取决于你用它做什么。我正在尝试获取像素颜色,因为我想实现8连通边界填充算法,有没有办法准确地获取特定像素的颜色可能对你有帮助(见第一个投票结果)。