Java 在JLabel下获取图像颜色
我需要使用MouseMotionListener从插入JLabel的图像中获取像素的颜色,而这个JLabel位于另一个JLabel的下面或后面。我知道,而且可以在JLabel后面获得背景色,但我需要的是图像的颜色。代码如下:Java 在JLabel下获取图像颜色,java,image,background-image,jlabel,mousemotionlistener,Java,Image,Background Image,Jlabel,Mousemotionlistener,我需要使用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
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);
}
}
我所做的一切就是删除此代码:
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);
}
问题是什么?如何从JLabel中获取图像颜色而不与重叠JLabel混合。更好的说法:如何从MouseMotionListener操作中排除重叠的JLabel。您不能使用
Robot
,因为它的操作级别很高,可以说它可以看到您看到的内容。您可以直接访问图像并读取像素。如果您告诉我如何操作,我将不胜感激。