作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有代码:
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)
我想这一定与线程相关,或者可能是某种内存管理问题,但说实话,我对发生的情况知之甚少。
有人有使用机器人进行屏幕截图的经验吗?或者有关于如何防止这种情况的想法吗?
最佳答案
实际上-1
表示所有位都设置为1。因此,您将看到纯白色而不是黑色。对我来说,这似乎是正确的。既然您告诉您使用的是 Mac OS X,这可能是正确的,因为看左上角,它看起来像这样:
角落里可能有一些纯白色。第二张图片包含完全纯白色。这可以通过设置白色背景(至少在角落是白色)并启用半透明顶部菜单栏来实现。
关于java - Robot.createScreenCapture()并不总是产生像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517825/
我是一名优秀的程序员,十分优秀!