2014-03-06 49 views
2

你好,我正试图让我的JFrame上的特定像素的颜色。在屏幕Java上获取像素颜色?

这是我的代码。我的框架是红色的。

我遇到的问题是当我点击框架它应该返回红色的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();  
} 
+0

你不只是返回白色(255,255,255)。你的方法正在返回大量的颜色。我还得到(30,30,30),(69,70,110),(45,50,72)等等。我会说这就是你的问题所在('getPixel'方法)。也可能是背景颜色与像素近似的Swing问题。 – Gorbles

+0

另外,为什么你需要像素颜色? 'this.getContentPane()。getBackground()'返回背景颜色集合。如果您渲染图像,则需要获取'Graphics'对象并从中获取颜色信息。这完全取决于你在做什么。 – Gorbles

+0

我想要获取像素颜色,因为我想实现8连接的边界填充算法,任何方法来准确地抓住特定像素的颜色? – user3323742

回答

1

问题是你所得到的坐标的方式 - 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(); 
    } 

} 

[详细]阅读,以提高其他的东西:Why is my mouse lagging when I run this small mouse hook application?