Robot.createScreenCapture()并不总是产生像素

时间:2014-02-02 23:46:17

标签: java bufferedimage

我有代码:

Rectangle area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage bi = robot.createScreenCapture(area);
int[] pixels = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData();
System.out.println(pixels[0*4]);

其中“robot”是在别处创建的“Robot”类的实例。

有时,此代码输出“-1”,这意味着第一个像素以某种方式无效。其他时候,此代码输出一个类似“-1828129198”的数字,这是预期的行为。

这是事情变得奇怪的地方。我有这段代码,后来在同一个类中:

private static void DebugImage(BufferedImage bi)
{
    JFrame frame = new JFrame();
    frame.getContentPane().setLayout(new FlowLayout());
    frame.getContentPane().add(new JLabel(new ImageIcon(bi)));
    frame.pack();
    frame.setVisible(true);
}

今天我第一次测试第一段代码时,输​​出为-1。但是,当我更改原始代码片段以包含对DebugImage的调用时,如下所示:

Rectangle area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage bi = robot.createScreenCapture(area);
DebugImage(bi);
int[] pixels = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData();
System.out.println(pixels[0*4]);

我突然停止了“-1”,最后获得了一些有效的数据!踢球者?当我删除对DebugImage的调用,将其恢复为原始形式时,代码没有停止工作,并继续成功返回-1。 (注意:我正在使用Eclipse)

我认为这必须与线程相关,或者可能是某种内存管理问题,但说实话,我几乎没有迹象表明发生了什么。

有没有人有使用Robot进行截图捕获的经验,或者有关如何防止这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

实际上-1表示所有位都设置为1.因此,您将使用纯白色而不是黑色。这对我来说似乎是有效的。既然你告诉过你使用的是Mac OS X,这可能是正确的,因为,看看左上角,它看起来像这样:

enter image description here enter image description here

角落里可能会有一些纯白色。第二张图片包含完美的纯白色。这可以通过设置白色背景(至少是角落中的白色)和半透明顶部菜单栏来实现。