【问题标题】:Get Pixel Color on screen Java?在屏幕 Java 上获取像素颜色?
【发布时间】:2014-04-08 15:44:23
【问题描述】:

您好,我正在尝试获取 JFrame 上特定像素的颜色。

这是我的代码。我的框架是红色的。

我遇到的问题是,当我单击 Frame 时,它​​应该返回红色的 RGB 颜色,即 (255,0,0),但是当我单击不同的点时,有时会得到白色的 RGB 颜色 (255,255,255)我的代码有什么问题?

public class guiTest extends JFrame 
{

    private static Shape ellipse;   
     private static Robot rb;

    public guiTest()
    {
    super("4-connected approach");
    setLayout(new FlowLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setSize(800,800);
    this.getContentPane().setBackground(Color.red);
    setLocationRelativeTo(null);
    addMouseListener(new MouseListener(){
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("Pixel:"+e.getX()+","+e.getY());             
            try {
                System.out.println(getPixel(e.getX(),e.getY()));
            } catch (AWTException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }


    });

}


public static Color getPixel(int x,int y) throws AWTException{
    Robot rb=new Robot();
    return rb.getPixelColor(x, y);
}   


public static void main(String[] args){
    guiTest frame=new guiTest();    
}

【问题讨论】:

  • 您返回的不仅仅是白色(255、255、255)。您的方法正在返回大量颜色。我还得到 (30, 30, 30), (69, 70, 110), (45, 50, 72) 等等。我想说这就是你的问题所在(getPixel 方法)。也可能是背景颜色与像素近似的 Swing 问题。
  • 另外,为什么需要像素颜色? this.getContentPane().getBackground() 返回背景颜色集。如果渲染图像,则需要获取 Graphics 对象并从中获取颜色信息。这完全取决于你用它做什么。
  • 我正在尝试获取像素颜色,因为我想实现 8 连接边界填充算法,有什么方法可以准确地抓取特定像素的颜色?
  • stackoverflow.com/questions/13307962/… - 可能会对您有所帮助(请参阅第一个投票的答案)。

标签: swing colors jframe rgb getpixel


【解决方案1】:

问题在于您获取坐标的方式 - e.getX()e.getY() -,因为它们是相对于 JFrame 的(JFrame 的左上角是 (0,0))。

要获取像素的坐标,请使用:

public void mouseClicked(MouseEvent e) {
    Point p = e.getLocationOnScreen();

    System.out.println("Pixel:" + p.x + "," + p.y);
    try {
        System.out.println(getPixel(p.x, p.y));
    } catch (AWTException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

}

[Extra] 阅读此内容以改进其他内容:Why is my mouse lagging when I run this small mouse hook application?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多