如题~~有没有办法 或者方法能 获取到
JFRAME一个坐标点的颜色的像素???在线等指教...........

解决方案 »

  1.   

    C++比较方便,JFrame上的点转换成屏幕座标
    COLORREF  nColor  =  GetPixel(hDC,  x,  y);  java里我还没找到什么方法。
      

  2.   

    假设你的JFrame已经显示在屏幕上,那么可以用截屏的方法得到他的BufferedImage对象,
    Robot rbt = new Robot();
    Point point = frame.getLocationOnScreen();
    BufferedImage image = rbt.createScreenCapture(new Rectangle(point.x, point.y, frame.getWidth(), frame.getHeight()));
    接下来你就可以直接从这个BufferedImage里取坐标点的像素。
    使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
      

  3.   

    我帮chenweionline 补充一些吧:
    在开始取色过程时,LZ首先得创建一个接受鼠标点击事件的地方,我觉得用JWindow比较好,然后在其上绘制chenweionline 写的image对象(需要调用Jwindow的paintComponent方法),然后用
    JWindow.setBounds(frame.getLocationOnScreen().x,frame.getLocationOnScreen().y,frame.getWidth(),frame.getHeight());
    JWindow.setVisible(true);
    将JWindow覆盖原本的JFrame,然后就是如何获取点击的位置的颜色的问题了:
    先对JWindow添加鼠标监听器:
    JWindow.addMouseListener(new MouseListener(){
      public void mouseClicked(MouseEvent e){//获取鼠标点击事件
          Color selectedColor = robot.getPixelColor(e.getX(),e.getY());//selectedColor 就是获取的颜色
           //在这里就可以将颜色放到某个地方
           JWindow.setVisible(false);//关闭JWindow,返回frame
      }
    })注意,这个方法只能在frame的范围内获取颜色,如果想可以获取全屏的颜色,就得将chenweionline写的
    BufferedImage image = rbt.createScreenCapture(new Rectangle(point.x, point.y, frame.getWidth(), frame.getHeight()));
    改为:BufferedImage image = rbt.createScreenCapture(new Rectangle(0,0,Toolkit.getDefaultToolkit().getScreenSize().getWidth(), Toolkit.getDefaultToolkit().getScreenSize().getHeight()));
    然后将JWindow的大小设为:
    Jwindow.setBounds(0,0,getDefaultToolkit().getScreenSize().getWidth(),Toolkit.getDefaultToolkit().getScreenSize().getHeight());
    就行了
      

  4.   

    不是很明白,像素==白色时 让什么停下来???
    如果知道坐标就能获得颜色啊而且就不用截图并使用JWindow了
    开个线程:
    public void run()
    {
     while(true){
        Color   selectedColor   =   robot.getPixelColor(x,y);//x,y是坐标
        if(selectedColor==Color.WHITE){
          //do something...
      }
    }
    }