【问题标题】:Get Image color under JLabel获取JLabel下的Image颜色
【发布时间】:2017-04-12 15:34:55
【问题描述】:

我需要使用 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);
    }
}

【问题讨论】:

  • 有什么问题?
  • 如何从 JLabel 获取图像颜色而不与重叠的 JLabel 混合。更好的做法:如何从 MouseMotionListener 动作中排除重叠的 JLabel。
  • 你不能使用Robot,因为它在高层次上运行并且可以看到你所看到的,可以这么说。您可以直接访问图像并读取像素。
  • 如果您能告诉我该怎么做,我将不胜感激。

标签: java image background-image jlabel mousemotionlistener


【解决方案1】:

我所做的一切就是删除这段代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 2018-05-11
    • 2015-05-04
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多