下面是我自己参考写的,可以达到取色的目的,不过有一个bug,运行后不能移动程序窗口,一旦移动,用鼠标取的颜色就不是当前窗口的,而是当前屏幕的.最小化窗口和最大化窗口倒是没这问题.
请问如何解决这个问题?
import java.awt.*;
import java.awt.event.*;
import java.awt.AWTException;
public class PickColor
extends Frame {
int xx, yy;
Robot robot;
Color pixel = new Color(0, 0, 0);
int R, G, B;
Image im;
public PickColor() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
MediaTracker tracker = new MediaTracker(this);
im = Toolkit.getDefaultToolkit().getImage("consult.jpg");
tracker.addImage(im, 0);
try {
tracker.waitForAll();
}
catch (InterruptedException e) {
e.printStackTrace();
}
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
xx = e.getX();
yy = e.getY();
press_mouse();
//Graphics g = getGraphics();
//g.drawString(String.valueOf(e.getX()) + "/" + String.valueOf(e.getY()),
// e.getX(), e.getY());
//g.drawString(String.valueOf(pixel),300, 300);
repaint();
}
});
}
public Color press_mouse() {
try {
robot = new Robot();
}
catch (AWTException e) {
e.printStackTrace();
System.exit(1);
}
pixel = robot.getPixelColor(xx, yy);
R = pixel.getRed();
G = pixel.getGreen();
B = pixel.getBlue();
return (pixel);
}
public void paint(Graphics g) {
g.drawImage(im, 20, 50, this);
g.drawString(String.valueOf(R)+"+"+String.valueOf(G)+"+"+String.valueOf(B),300, 300);
}
public static void main(String[] args) {
PickColor f = new PickColor();
f.setSize(500, 400);
f.show();
}
}