2017-04-12 113 views
0

我需要從插入JLabel的圖像中獲取像素的顏色,使用MouseMotionListener,並且此JLabel位於另一個JLabel之下或之後。我知道,可以在JLabel後面獲得背景顏色,但我需要的是圖像中的顏色。這是代碼:在JLabel下獲取圖像顏色

import java.awt.AWTException; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Point; 
import java.awt.Robot; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 
import java.awt.event.MouseMotionListener; 
import javax.swing.BorderFactory; 
import javax.swing.ImageIcon; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JLayeredPane; 

public class Main extends JFrame { 

public static void main(String[] args) throws AWTException 
{ 
    JFrame frame; 
    Robot robot; 
    JLayeredPane layeredPane; 
    MouseMotionListener ml; 

    robot = new Robot(); 
    frame = new JFrame("Pc"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    layeredPane = new JLayeredPane(); 
    layeredPane.setPreferredSize(new Dimension(300, 310)); 
    layeredPane.setBorder(BorderFactory.createTitledBorder(
           "capture color under the label")); 
    JLabel label = new JLabel(new ImageIcon("folder/matiz.jpg")); 
    label.setBounds(15, 15, 300, 300); 
    label.setOpaque(true); 
    label.setBackground(Color.red); 

    JLabel label1 = new JLabel(); 
    label1.setBounds(60, 60, 300, 300); 
    label1.setOpaque(true); 
    label1.setBackground(new Color(0,0,0,125)); 

    layeredPane.add(label, 0, 0); 
    layeredPane.add(label1, 1, 0); 


    frame.setSize(660, 400); 

    frame.getContentPane().setBackground(Color.red); 
    frame.setGlassPane(layeredPane); 
    layeredPane.setVisible(true); 
    frame.setVisible(true); 

     ml = new MouseMotionAdapter() { 

     public void mouseMoved(MouseEvent evt) { 

      JLabel comp = (JLabel) evt.getSource(); 
      Point point = evt.getLocationOnScreen(); 

       Color color = robot.getPixelColor((int)point.getX(), (int)point.getY()); 
       System.out.println(color); 
      } 
    };   
      label1.removeMouseMotionListener(ml); 
      label.addMouseMotionListener(ml); 
    } 
} 
+0

有什麼問題嗎? – CraigR8806

+0

如何從JLabel中獲取圖像顏色而不與重疊的JLabel混合。更好的說法:如何從MouseMotionListener動作中排除重疊的JLabel。 – vinuales

+0

你不能用'機器人',因爲它運行在高層次,看到你所看到的東西,可以這麼說。您可以直接訪問圖像並讀取像素。 – user1803551

回答

0

一切我所做的就是刪除此代碼:

RootPaneContainer comp = (RootPaneContainer) evt.getSource(); 
Point point = comp.getRootPane().getLocationOnScreen(); 
Color color = robot.getPixelColor((int)point.getX(),(int)point.getY()); 

和我插入下面的代碼:

try{ 
BufferedImage img = ImageIO.read(new File("folder/rgb.jpg")); 
int imagem = img.getRGB(evt.getX(), evt.getY()); 
Color color = new Color(imagem, true); 
    } 
catch (IOException ex) { 
       Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, ex); 
      }