0

所以我正在开发一个屏幕录制程序,我所做的是在程序运行时拍摄屏幕截图,然后将其转换为 .mov 文件。

截屏我正在做的是

do {    
    try {

        r = new Robot();
        img = r.createScreenCapture(new Rectangle (0, 0, width, height));
        ImageIO.write(img, "png", new File(JavCapture.tmpLocation + "\\tmp\\" + System.currentTimeMillis() + ".png"));
        r = null;

        } catch (IOException | AWTException e) { e.printStackTrace(); }
    } while (!stop);

这一切都在一个正在运行的线程中,只要停止不是真的,一旦它是线程停止。

如果我运行 5 秒钟,我只会得到 9 张图像,而电影的长度将不到一秒钟。

如何优化我的代码以便更快地拍照?

我应该多次运行线程吗?因为当我尝试这样做时

(new Thread(new Record())).start();

而且我会做 3 次,是的,会拍更多照片,但会花更长的时间(显然,但有办法加快速度),但似乎只会添加一个线程的照片。这是我的完整线程代码。

import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.imageio.ImageIO;

public class Record implements Runnable {

    Robot r;
    static int width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    static int height = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    BufferedImage img;
    public static boolean stop = false;

    public void run() {

        do {    
            try {
                r = new Robot();
                img = r.createScreenCapture(new Rectangle (0, 0, width, height));
                ImageIO.write(img, "png", new File(JavCapture.tmpLocation + "\\tmp\\" + System.currentTimeMillis() + ".png"));
                r = null;
            } catch (IOException | AWTException e) { e.printStackTrace(); }
        } while (!stop);

        if (stop) {
            try {
                Utils.makeVideo("Video.mov");
                File f = new File (JavCapture.tmpLocation + "/tmp");
                Utils.deleteDirectory(f);
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return;

    }

}

是否有更有效的方法可以占用更少的内存(我假设线程越多,使用的内存就越多),如果没有,我该如何编辑代码以便使用所有图像。

**注意:我使用 JPEGImagesToMovie.java 类来制作 .mov 文件。

4

0 回答 0