0

I have my code up to here:

package RGBValues;

import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;

public class RGBValues {

    public static void main(String[] args) throws Exception {
        PointerInfo pointer;
        pointer = MouseInfo.getPointerInfo();
        Point coord = pointer.getLocation();

        Robot robot = new Robot();
        robot.delay(2000);

        while(true) {
            coord = MouseInfo.getPointerInfo().getLocation()…
            Color color = robot.getPixelColor((int)coord.getX(), (int)coord.getY());
            if( color.getGreen() == 255 &&
                color.getBlue() == 255 &&
                color.getRed() == 255
            ) {
                System.out.println("WHITE");
            }
            robot.delay(1000);
        }
    }
}

I'm stuck on how to make it so that wherever the mouse is pointing on the screen, it will show me the RGB values for that pixel underneath the pointer. Can someone help and on what to do? I am very new to java so I don't know how to fix this.

eltabo
  • 3,749
  • 1
  • 21
  • 33
User
  • 31
  • 2
  • 3
  • 5
  • It worked for me. Maybe you just aren't placing the mouse over a white pixel. Just display the color every time the loop executes. – camickr Apr 22 '13 at 04:19

1 Answers1

1

Apart from maybe letting the thread run a little wild, I can't see any reason why you code won't work...

enter image description here

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class WhatsMyColor {

    public static void main(String[] args) {
        new WhatsMyColor();
    }

    public WhatsMyColor() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            Thread thread = new Thread(new BackgroundMonitor());
            thread.setDaemon(true);
            thread.start();
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g); 
            Color color = getBackground();
            String text = color.getRed() + "x" + color.getGreen() + "x" + color.getBlue();
            FontMetrics fm = g.getFontMetrics();
            int x = (getWidth() - fm.stringWidth(text)) / 2;
            int y = ((getHeight() - fm.getHeight()) / 2) + fm.getAscent();
            g.drawString(text, x, y);
        }

        public class BackgroundMonitor implements Runnable {

            @Override
            public void run() {
                try {
                    Robot robot = new Robot();

                    Color previous = null;
                    while (true) {
                        Point coord = MouseInfo.getPointerInfo().getLocation();
                        Color color = robot.getPixelColor((int) coord.getX(), (int) coord.getY());
                        if (previous == null || !previous.equals(color)) {
                            SwingUtilities.invokeLater(new UpdateBackgroud(color));
                        }
                        try {
                            Thread.sleep(250);
                        } catch (InterruptedException ex) {
                        }
                    }
                } catch (AWTException | HeadlessException exp) {
                    exp.printStackTrace();
                }
            }
        }

        public class UpdateBackgroud implements Runnable {

            private Color color;

            public UpdateBackgroud(Color color) {
                this.color = color;
            }

            @Override
            public void run() {
                setBackground(color);
            }

        }
    }
}
MadProgrammer
  • 343,457
  • 22
  • 230
  • 366