2014-03-06 47 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?