2014-03-06 3 views
2

안녕하세요 저는 JFrame에서 특정 픽셀의 색상을 얻으려고합니다.화면의 픽셀 색상을 Java로 가져 오기?

이것은 내 코드입니다. 내 프레임은 빨간색입니다.

프레임을 클릭하면 (255,0,0) 빨간색의 RGB 색상을 반환해야하지만 다른 점을 클릭하면 가끔은 흰색 (255,255,255)의 RGB 색상을 얻습니다.) 내 코드 사람의 문제는 무엇입니까?

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' 메서드). 배경색 대 픽셀 근사를 가진 스윙 문제 일 수도 있습니다. – 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?

관련 문제