获取鼠标光标下的 RGB 值

2023-12-10

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

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

            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取鼠标光标下的 RGB 值 的相关文章

  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • Java中如何进行URL解码?

    在Java中 我想将其转换为 https 3A 2F 2Fmywebsite 2Fdocs 2Fenglish 2Fsite 2Fmybook do 3Frequest type To this https mywebsite docs e
  • 通过javascript通过ajax请求获取页面完整的html源代码

    javascript 代码将通过 google chrome 中的网址栏从 www example com 启动 因此我无法使用 jquery 我的目标是当我在 www example com 中启动代码时 将 www example co
  • 个人版本控制系统推荐[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 供个人使用 任何人都可以推
  • 在 iPhone 上传输音频时是否可以减少背景噪音?

    我们用了一些WebRTC libraries并在测试应用程序中实现它们iPhone 测试应用程序允许使用此应用程序在两部手机之间进行语音通话 类似于 Skype 该应用程序会产生大量背景噪音 比 Skype 或 Line 等其他手机应用程序
  • 从 vb.net 中的命令行获取参数

    是否可以从返回参数processPath在这个例子中 抱歉 这可能更有意义 Dim processName As String Dim processPath As String If processName cmd Then Dim ar
  • IBM MQ 会话断开连接

    我正在创建一个像这样的 MQ 侦听器 它工作正常 但几分钟或几小时后就会因此异常而断开连接 我不控制服务器 这是通过专用电路而不是互联网进行的 我怀疑是网络问题其他服务在同一线路上运行没有问题 MQQueueConnectionFactor
  • CSS:显示:内联块和定位:绝对

    请考虑以下代码
  • 使用C#在远程计算机上执行powershell脚本

    我使用 Microsoft Bot Framework 创建了一个 Bot 应用程序 并希望实现以下目标 无需任何身份验证即可在远程计算机上执行 Powershell 脚本 powershell 脚本将托管在 Azure 或数据库 可能是任
  • 将 CamelCase 转换为 Snake_Case

    需要以下查询的结果 select regexp replace StackOverflow something something as stack overflow 以下正则表达式在每个大写字母前面添加下划线 regexp replace
  • 在seaborn中绘制两列dataFrame

    我正在尝试在seaborn中创建一个条形图 显示数据框中每行 因子 的两个变量 权重 方差 的值 我的数据如下 Factor Weight Variance Growth 10 0 15 Value 20 0 35 这是我的代码 fig p
  • UICollectionView 的可重用性问题

    我曾与UITableView但我从来没有用过UICollectionView在我的应用程序中 所以我想创建UICollectionView以编程方式 以下是我的代码 UICollectionViewFlowLayout layout UIC
  • 常见的 Linq / 标准查询操作符错误/错误步骤?

    对于没有函数式编程背景的程序员来说 有什么错误是需要避免的吗 人们容易犯的最大错误是误解 LINQ 查询的惰性和评估规则 查询是惰性的 在您迭代它们之前它们不会被执行 This does nothing No query executed
  • boost::unique_lock::timed_lock 的用法

    升压 定时锁 void wait int seconds boost this thread sleep boost posix time seconds seconds boost timed mutex mutex void threa
  • 为什么 gcov 报告使用良好的类的头文件覆盖率为 0%?

    我第一次尝试使用以下方法来测量测试覆盖率gcov 现在我已经过了最初的学习曲线 除了一个小障碍之外 一切似乎进展顺利 我希望这可以归结为我缺乏理解 所以我希望熟悉 gcov 的人能够解释发生了什么 问题是我有一个特定的头文件显示 0 覆盖率
  • Go 变量被覆盖(bug?)

    这里有点奇怪 我的问题是 人们运行我的代码会得到与我相同的结果吗 如果你这样做 这是我的代码的错误 我通常是一个Python程序员 还是golang中的错误 系统信息 Go 版本 1 1 2 Linux x64 fedora 19 代码的背
  • Java组合框摆动[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的表有两个字段 ProductID Primary Key ProductName duplicate values will be present 我已经脸红了productNam
  • 将字符串转换为 DateTime 对象

    我想将特定格式的字符串转换为DateTime 我的具体字符串格式是 dd mm yyyy 我无法进行任何字符串操作 这是我现在的代码 DateTime convertedDate DateTime Parse stringInput 看来你
  • 如何让固定位置的 div 随内容水平滚动?使用 jQuery

    我有一个带有以下 CSS 的 div scroll fixed scroll fixed position absolute top 210px scroll fixed fixed position fixed top 0 当 div 到
  • 如何循环遍历文件中的行块?

    我有一个如下所示的文本文件 其中的行块由空行分隔 ID 1 Name X FamilyN Y Age 20 ID 2 Name H FamilyN F Age 23 ID 3 Name S FamilyN Y Age 13 ID 4 Nam
  • 获取鼠标光标下的 RGB 值

    我正在尝试构建一个程序来检测鼠标光标下方的颜色 然后在屏幕上的窗口中显示颜色和 RGB 值 我对 Java 非常陌生 所以什么都不知道 在朋友的帮助下 我编写了两个代码 第一个获取缓冲图像的特定坐标的 RGB 值 另一个获取用户定义的 RG