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