gpt4 book ai didi

java - 从鼠标光标下获取 RGB 值

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:58:31 24 4
gpt4 key购买 nike

我正在尝试构建一个程序来检测鼠标光标下的颜色,然后在屏幕上的窗口中显示颜色和 RGB 值。我对 Java 很陌生,所以什么都不知道。在 friend 的帮助下,我有两个代码,第一个获取缓冲图像特定坐标的 RGB 值,另一个获取用户定义的 RGB 值并显示其中包含颜色的 Pane 。我的问题是“我如何让程序检测鼠标光标下的颜色,无论它滚动的是什么?

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(p.x, p.y);
setBackground(pixelColor);

label.setText(p.x + "x" + p.y + " = " + 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());
}
}

}
}
}
}

关于java - 从鼠标光标下获取 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com