gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:15:31 24 4
gpt4 key购买 nike

我有代码:

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,这可能是正确的,因为看左上角,它看起来像这样:

enter image description here enter image description here

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

关于java - Robot.createScreenCapture()并不总是产生像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com