2017-04-12 2 views
0

Ich brauche die Farben des Pixels aus einem Bild in einem JLabel, mit MouseMotionListener, und diese JLabel ist unter oder hinter einem anderen JLabel. Ich weiß und es ist möglich, hinter einem JLabel eine Hintergrundfarbe zu erhalten, aber was ich brauche, sind die Farben eines Bildes. Dies ist der Code:Get Bildfarbe unter 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

Was ist die Frage? – CraigR8806

+0

So erhalten Sie die Bildfarben von JLabel ohne Überlappung mit überlappenden JLabel. Bessere Abstimmung: Wie man das überlappte JLabel von der MouseMotionListener-Aktion ausschließt. – vinuales

+0

Sie können nicht mit 'Robot', weil es auf einem hohen Niveau arbeitet und sieht, was Sie sozusagen sehen. Sie können direkt auf das Bild zugreifen und die Pixel lesen. – user1803551

Antwort

0

Alles, was ich tat, war, diesen Code zu entfernen:

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

und ich eingeführt, um den Code unten:

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