gpt4 book ai didi

java - 如何解决屏幕截图应用程序中的问题?

转载 作者:行者123 更新时间:2023-11-30 09:33:01 25 4
gpt4 key购买 nike

我编写了一个基于 GUI 的 Java 程序,每秒截取 25 个屏幕截图并将它们保存在用户定义的位置。
除了有两个问题外,它工作得很好:

  • 图像中缺少鼠标光标,我知道这是因为 BufferedImage 中不包含光标信息。它们必须以编程方式添加。

  • 截取屏幕截图的线程是守护线程。因此,如果我关闭应用程序,线程将被终止,正在写入的 PNG 图像将被破坏。我想避免这种情况。

  • 以下是我的应用程序的图片:
    屡获殊荣的直观 GUI:
    enter image description here

    捕捉到的高清图片是这样的:
    enter image description here
    从图像中可以看出,光标信息正在使用 MouseInfo 的静态方法显示在控制台中。


    请告诉我如何解决上述两个问题。
    解决问题后,图像现在是这样的:
    with cursor

    最佳答案

    The mouse cursor is missing from the images and I know it will be because BufferedImages do not contain cursor information in them. They have to be added programatically.

    是的,你必须在之后添加光标。原因是使用 Robot 类截取的屏幕截图从不包含光标。不是真的,因为“BufferedImage 不包含鼠标信息”。 BufferedImage 是一个包含像素栅格的类。

    The thread that takes screenshots is a daemon thread. So if I close the application, the thread is killed and the PNG image that was being written gets corrupted. I want to avoid that.

    简单地说,在屏幕截图线程中,使用一个标志来指示它是否应该继续。只要该 boolean 值设置为 true,就继续截取屏幕截图。确保使其成为非守护进程。因此,当您关闭应用程序时,将标志设置为 false。可能最简单的方法是添加一个 WindowListener:

    yourFrame.addWindowListener(new WindowAdapter()
    {
    public void windowClosed(WindowEvent e)
    {
    screenshotThread.stopTakingScreenshots(); // This methods set the flag
    }
    }

    另请注意,您没有花时间制作和保存屏幕截图。您使用 40 毫秒的固定 sleep 时间,但假设拍摄和保存屏幕截图需要 4 毫秒,那么您应该只 sleep 36 毫秒。要计算截屏所需的时间,请在 takeShot() 方法前后使用 System.currentTimeMillis(); 并计算差值。

    关于java - 如何解决屏幕截图应用程序中的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375399/

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