快速捕捉屏幕

时间:2013-10-02 01:46:21

标签: java multithreading image awtrobot

所以我正在制作一个屏幕录制程序,我所做的是在程序运行时拍摄屏幕截图,然后将其转换为.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);

一旦线程停止,只要stop不为true,这就是一个正在运行的线程。

如果我运行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文件。

0 个答案:

没有答案