2010-11-11 118 views
1

当鼠标悬停指向照片的一个位置时,如何识别颜色?Java如何识别照片颜色?

BufferedImage image = new BufferedImage("blueball.jpg"); 
Project() { 
    jFrame.setSize(new Dimension(500, 320)); 
    jFrame.getContentPane().setLayout(null); 
    colorLabelText.setBounds(new Rectangle(310, 210, 50, 30)); 
    colorLabelText.setText("Color :"); 
    colorLabel.setBounds(new Rectangle(370, 210, 100, 30)); 
    photoLabel.setBounds(new Rectangle(20, 20, 220, 250)); 
    photoLabel.addMouseListener(new RecognizeColorActionListener()); 
    jFrame.getContentPane().add(photoLabel); 
    jFrame.getContentPane().add(colorLabelText); 
    jFrame.getContentPane().add(colorLabel); 
    jFrame.setVisible(true); 
} 


    class RecognizeColorActionListener implements MouseListener { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     int x = e.getX(); 
         int y = e.getY(); 
         int imgx = image.getMinX(); 
         int imgy = image.getMinY(); 
         int c = image.getRGB(x - imgx, y - imgy); 

发生错误java.lang.ArrayIndexOutOfBoundsException:协调出界!

+0

如何显示图像? – fish 2010-11-11 17:13:42

+0

我在标签中显示标签位置是photoLabel.setBounds(new Rectangle(20,20,220,250)); – user236501 2010-11-11 17:34:10

+0

它有没有工作,例如在左上角?你是否从photoLabel的左上角绘制图像? image.getWidth(),image.getHeight()给你什么? – fish 2010-11-12 06:42:30

回答

7

问题是鼠标的X和Y坐标不对应于图像的X和Y坐标。将其更改为如下所示:

int x = e.getX(); 
int y = e.getY(); 
int imgx = image.getX(); 
int imgy = image.getY(); 
int c = image.getRGB(x - imgx, y - imgy); 

请不要引用我完全的语法,但这是基本的想法。

+0

谢谢,它是getMinX(),getMinY()?我仍然得到这个错误java.lang.ArrayIndexOutOfBoundsException:坐标超出界限! – user236501 2010-11-11 16:28:31

+0

我不确定,因为我现在在机器上没有Java开发环境。我所描述的是这个问题,但是你需要玩弄一些事情才能完全正确。 – riwalk 2010-11-11 16:30:32

+0

也许略有不同导致我的图像被缓冲图片 – user236501 2010-11-12 03:12:05