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