从鼠标光标下获取RGB值
我正在尝试构build一个程序来检测鼠标光标下的颜色,然后在屏幕上的窗口中显示颜色和RGB值。 我对Java很新,所以不知道什么。 我有两个代码,我已经在一个朋友的帮助下,第一个获取caching图像的特定坐标的RGB值,另一个获取用户定义的RGB值,并显示一个窗格中的颜色。 我的问题是“如何让程序检测鼠标光标下的颜色,而不pipe它滚动的是什么?
public class Buffered_Image { public static void main(String[] args) throws IOException { BufferedImage bi = ImageIO.read(new File("C:/Users/user/Pictures/Hornet.jpg")); Color c = new Color(bi.getRGB(50,40)); int red=c.getRed(); int green=c.getGreen(); int blue=c.getBlue(); System.out.print("Red " + red + " Green " + green+ " Blue" + blue + "\n" ); } } public class RGB_Pane { public static void main(String[] args) { JFrame F = new JFrame("RGB"); Panel Pan = new Panel(); F.getContentPane().add(Pan); F.pack(); F.setVisible(true); F.setSize(300, 300); } } class Panel extends JPanel { public Panel() { setPreferredSize(new Dimension(200,200)); int Red = Integer.parseInt(JOptionPane.showInputDialog("Enter value for RED")); int Green = Integer.parseInt(JOptionPane.showInputDialog("Enter value for Green")); int Blue = Integer.parseInt(JOptionPane.showInputDialog("Enter value for BLUE")); Color Defined_Color = new Color(Red,Green,Blue); setBackground(Defined_Color); } }
正如@Hovercraft指出的那样。
首先看看Robot#getPixelColor
。
您将需要知道鼠标光标在哪里,而没有“简单”的方式来跟踪光标,您可以使用MouseInfo#getPointerInfo
来获取它的当前位置
用例子更新
这是这个概念的一个小例子。 这是基于鼠标光标的运作。 一个可能的增强将是通知监视器侦听器,当光标下的颜色改变时…
public class WhatsMyColor { public static void main(String[] args) throws IOException { new WhatsMyColor(); } public WhatsMyColor() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { } catch (InstantiationException ex) { } catch (IllegalAccessException ex) { } catch (UnsupportedLookAndFeelException ex) { } try { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new MouseColorPane()); frame.setSize(400, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (Exception exp) { exp.printStackTrace(); } } }); } public class MouseColorPane extends JPanel implements MouseMonitorListener { private Robot robot; private JLabel label; public MouseColorPane() throws AWTException { label = new JLabel(); setLayout(new GridBagLayout()); add(label); robot = new Robot(); PointerInfo pi = MouseInfo.getPointerInfo(); updateColor(pi.getLocation()); MouseMonitor monitor = new MouseMonitor(); monitor.setMouseMonitorListener(this); monitor.start(); } protected void updateColor(Point p) { Color pixelColor = robot.getPixelColor(px, py); setBackground(pixelColor); label.setText(px + "x" + py + " = " + pixelColor); } @Override public void mousePositionChanged(final Point p) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { updateColor(p); } }); } } public interface MouseMonitorListener { public void mousePositionChanged(Point p); } public static class MouseMonitor extends Thread { private Point lastPoint; private MouseMonitorListener listener; public MouseMonitor() { setDaemon(true); setPriority(MIN_PRIORITY); } public void setMouseMonitorListener(MouseMonitorListener listener) { this.listener = listener; } public MouseMonitorListener getMouseMonitorListener() { return listener; } protected Point getMouseCursorPoint() { PointerInfo pi = MouseInfo.getPointerInfo(); return pi.getLocation(); } @Override public void run() { lastPoint = getMouseCursorPoint(); while (true) { try { sleep(250); } catch (InterruptedException ex) { } Point currentPoint = getMouseCursorPoint(); if (!currentPoint.equals(lastPoint)) { lastPoint = currentPoint; MouseMonitorListener listener = getMouseMonitorListener(); if (listener != null) { listener.mousePositionChanged((Point) lastPoint.clone()); } } } } } }