Java~使用Robot实现屏幕连续截图并保存 和 使用JFrame实现连续播放图片

文章目录

    • 使用到的方法
      • 实现连续截图并保存
      • 实现连续播放图片

使用到的方法

Java~使用Robot实现屏幕连续截图并保存 和 使用JFrame实现连续播放图片_第1张图片
Java~使用Robot实现屏幕连续截图并保存 和 使用JFrame实现连续播放图片_第2张图片

实现连续截图并保存

  • 实现原理在代码注释中讲的应该比较清楚了
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description: If you don't work hard, you will a loser.
 * User: Listen-Y.
 * Date: 2020-08-10
 * Time: 9:53
 */
public class RobotImageDemo {
    //设置连续截屏次数
    private static int count = 100;
    //设置每次截屏的间隔时间
    private static int time = 100;

    public static void main(String[] args) throws AWTException, IOException {
        Robot robot = new Robot();
        //设置三面后开始截图
        System.out.println("三秒后开始截图");
        robot.delay(3000);
        //先要获取屏幕大小或者也可以自动设置截图的大小
        Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
        for (int i = 0; i < count; i++) {
            //截取图片获取图片缓冲流
            BufferedImage bufferedImage = robot.createScreenCapture(new Rectangle(0, 0, size.width, size.height));
            //设置文件的保存路径+保存时文件的名字格式 文件名字就以保存的i命名这样多次截图图片名字也不会重复
            String url = "D:\\user\\testDate\\"
                    + i + ".jpg";
            //获得文件对象
            File file = new File(url);
            //将文件输出到指定的文件目录中
            ImageIO.write(bufferedImage, "jpg", file);
            if (i % 5 == 0) {
                System.out.println("进行中...");
            }
            //让截图有间隔
            robot.delay(time);
        }
        System.out.println("截图完成!!!");

    }
}

实现连续播放图片

import javax.swing.*;
import java.awt.*;

/**
 * Created with IntelliJ IDEA.
 * Description: If you don't work hard, you will a loser.
 * User: Listen-Y.
 * Date: 2020-08-10
 * Time: 16:14
 */
public class AutoLoadImage {

    public static void main(String[] args) throws InterruptedException {
        JFrame jFrame = new JFrame();
        MyCanvas myCanvas = new MyCanvas();
        //设置关闭窗口就结束程序
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //将图片按比例缩小倍展示
        jFrame.setSize(960, 540);
        //设置大小可变
        jFrame.setVisible(true);
         //加载图片
        loadImage(myCanvas, jFrame);
    }

    private static void loadImage(MyCanvas myCanvas, JFrame jFrame) throws InterruptedException {
        for (int i = 0; i < 100; i++) {
            Image image = Toolkit.getDefaultToolkit().getImage("D:\\user\\testDate\\" + i + ".jpg");
            myCanvas.setImage(image);
            jFrame.add(myCanvas);
            //设置连续加载图片间隔时间 会有闪白问题所有不会形成一个视频去播放 解决闪白问题需要使用双缓冲技术待我后续解决
            Thread.sleep(300);
        }
    }

}

class MyCanvas extends Canvas {
    private Image image;

    public void setImage(Image image) {
        this.image = image;
    }

    public void paint(Graphics graphics) {
        //设置成随图片大小变化而变化 不会造成图片缺少
        graphics.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
    }
}

其实我的本意是想弄一个录屏的一个功能 但是在连续加载图片会有闪白 需要使用双缓冲技术去解决 有待后续解决

你可能感兴趣的:(Java,java)