【发布时间】:2014-04-08 15:44:23
【问题描述】:
您好,我正在尝试获取 JFrame 上特定像素的颜色。
这是我的代码。我的框架是红色的。
我遇到的问题是,当我单击 Frame 时,它应该返回红色的 RGB 颜色,即 (255,0,0),但是当我单击不同的点时,有时会得到白色的 RGB 颜色 (255,255,255)我的代码有什么问题?
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();
}
【问题讨论】:
-
您返回的不仅仅是白色(255、255、255)。您的方法正在返回大量颜色。我还得到 (30, 30, 30), (69, 70, 110), (45, 50, 72) 等等。我想说这就是你的问题所在(
getPixel方法)。也可能是背景颜色与像素近似的 Swing 问题。 -
另外,为什么需要像素颜色?
this.getContentPane().getBackground()返回背景颜色集。如果渲染图像,则需要获取Graphics对象并从中获取颜色信息。这完全取决于你用它做什么。 -
我正在尝试获取像素颜色,因为我想实现 8 连接边界填充算法,有什么方法可以准确地抓取特定像素的颜色?
-
stackoverflow.com/questions/13307962/… - 可能会对您有所帮助(请参阅第一个投票的答案)。
标签: swing colors jframe rgb getpixel