无法获得屏幕上的像素颜色

时间:2016-03-27 11:53:30

标签: java colors rgb pixel

我想找到屏幕上特定像素的颜色。 JFrame的背景设置为白色,即RGB(255,255,255)。 Graphics对象设置为黑色,即RGB(0,0,0)。

我画了一个矩形。 (100,100)是矩形轮廓上的一个像素。

在绘制之前,我得到(100,100)的像素颜色,它给出了RGB(255,255,255)。绘图后,我得到像素颜色(100,100),它给出RGB(255,255,255)。它不应该是RGB(0,0,0)吗?此外,输出重复两次。为什么呢?

代码:

C:\Python\Anaconda

输出:

public void paintComponent(Graphics g){
        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        Color pixelColour;
        g.setColor(Color.black);
        pixelColour = robot.getPixelColor(100, 100);
        System.out.println("Pixel colour at (100, 100) before drawing: " + pixelColour.toString());
        g.drawLine(100, 100, 100, 200);
        g.drawLine(100, 200, 300, 200);
        g.drawLine(300, 200, 300, 100);
        g.drawLine(300, 100, 100, 100);
        pixelColour = robot.getPixelColor(100, 100);
        System.out.println("Pixel colour at (100, 100) after drawing: " + pixelColour.toString());
    }
    public static void main(String[] args)
    {
        PixelColour pc = new PixelColour();
        JFrame frame = new JFrame("Pixel colour");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(pc);
        frame.setSize(500,500);
        frame.setBackground(Color.white);
        frame.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:0)

机器人在特定的屏幕坐标处抓取像素颜色。原点位于屏幕的左上角。它不知道你的窗户。您相对于父组件绘制像素。 PixelColor组件的原点是JFrame查看区域的左上角。为了获得像素的屏幕坐标,您可以使用SwingUtilities:

SwingUtilities.convertPointToScreen(point, component);

https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html#convertPointToScreen(java.awt.Point,%20java.awt.Component)

Point screenLocation = SwingUtilities.convertPointToScreen(new Point(100, 100), this);
pixelColour = robot.getPixelColor(screenLocation.x, screenLocation.y);

机器人此刻给你白色的原因可能只是巧合。

此外,您的代码正在运行两次,因为Swing决定将其调用两次。如果Swing认为组件需要重绘,例如调整大小时调用paintComponent。你无能为力。