1.初始化变量
private static Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
//获取全屏幕的宽高尺寸等数据
private static Robot robot;
private static Rectangle rectangle;
static {
try {
robot = new Robot();
rectangle = new Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight());
} catch (Exception e) {
}
}
2.功能代码
public static void shot(String path, String name, String suffix) {
try {
BufferedImage screenshot = robot.createScreenCapture(rectangle);
File file = new File(path + "/" + name + "." + suffix);
if (!file.exists())
file.mkdirs();
ImageIO.write(screenshot, suffix, file);
} catch (IOException e) {
e.printStackTrace();
}
}
3.main方法
ScheduledExecutorService schedule = Executors.newScheduledThreadPool(10);
final int[] i = {0};
schedule.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
long start = System.currentTimeMillis();
shot("e:/shot", "screenshot" + i[0]++, "png");
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}, 0, 20, TimeUnit.MICROSECONDS);
4.测试
实际上,频繁用Java截图输出图片是比较耗CPU的,我的CPU闲置使用率大概在10左右。
而且任务调度的参数,每次任务执行的间隔也做不到20ms,完成一次任务大概250~300ms。
完整代码
package com.gwssi.other;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScreenShot {
private static Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //获取全屏幕的宽高尺寸等数据
private static Robot robot;
private static Rectangle rectangle;
static {
try {
robot = new Robot();
rectangle = new Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight());
} catch (Exception e) {
}
}
public static void shot(String path, String name, String suffix) {
try {
BufferedImage screenshot = robot.createScreenCapture(rectangle);
File file = new File(path + "/" + name + "." + suffix);
if (!file.exists())
file.mkdirs();
ImageIO.write(screenshot, suffix, file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ScheduledExecutorService schedule = Executors.newScheduledThreadPool(10);
final int[] i = {0};
schedule.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
long start = System.currentTimeMillis();
shot("e:/shot", "screenshot" + i[0]++, "png");
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}, 0, 20, TimeUnit.MICROSECONDS);
}
}