我想找到屏幕上特定像素的颜色。 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);
}
}
答案 0 :(得分:0)
机器人在特定的屏幕坐标处抓取像素颜色。原点位于屏幕的左上角。它不知道你的窗户。您相对于父组件绘制像素。 PixelColor组件的原点是JFrame查看区域的左上角。为了获得像素的屏幕坐标,您可以使用SwingUtilities:
SwingUtilities.convertPointToScreen(point, component);
Point screenLocation = SwingUtilities.convertPointToScreen(new Point(100, 100), this);
pixelColour = robot.getPixelColor(screenLocation.x, screenLocation.y);
机器人此刻给你白色的原因可能只是巧合。
此外,您的代码正在运行两次,因为Swing决定将其调用两次。如果Swing认为组件需要重绘,例如调整大小时调用paintComponent。你无能为力。