2017-04-12 3 views
0

Je dois obtenir les couleurs des pixels à partir d'une image insérée dans un JLabel, avec MouseMotionListener, et ce JLabel est sous ou derrière un autre JLabel. Je sais et il est possible d'obtenir une couleur d'arrière-plan derrière un JLabel, mais ce dont j'ai besoin, ce sont les couleurs d'une image. Voici le code:Obtenir la couleur de l'image sous 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

Quelle est la question? – CraigR8806

+0

Comment obtenir les couleurs d'image de JLabel sans mélanger avec JLabel chevauché. Mieux vaut: comment exclure le JLabel chevauché de l'action MouseMotionListener. – vinuales

+0

Vous ne pouvez pas avec Robot parce qu'il fonctionne à un niveau élevé et voit ce que vous voyez, pour ainsi dire. Vous pouvez accéder directement à l'image et lire les pixels. – user1803551

Répondre

0

Tout ce que je l'ai fait était de supprimer ce code:

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

et j'inséré le code ci-dessous:

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); 
      }