Java实现定时截图输出图片

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);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46269980/article/details/106076228