Java實現截圖和錄屏

  一、截圖,Javax提供的能力。

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public class Demo1 {

    public static void main(String[] args) throws Exception {
        // 創建一個Robot對象
        Robot robot = new Robot();
        // 獲取屏幕的大小
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        // 創建一個Rectangle對象,用於指定截屏的區域
        Rectangle rectangle = new Rectangle(dimension);
        // 捕獲屏幕上的內容
        BufferedImage bufferedImage = robot.createScreenCapture(rectangle);
        // 將捕獲的內容保存到文件
        ImageIO.write(bufferedImage, "jpg", new File("screenshot.jpg"));
    }
}

  二、錄屏,使用ffmpeg和javacv的形式來實現

  1、maven包

  <dependencies>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>5.1.2-1.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.8</version>
        </dependency>
    </dependencies>

  2、錄屏實現

import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.FrameRecorder;

import java.awt.*;

public class Demo2 {

    public static void main(String[] args) throws Exception {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        FrameGrabber grabber = new FFmpegFrameGrabber("desktop");
        grabber.setFormat("gdigrab");
//        grabber.setFrameRate(20);
        // 捕獲指定區域,不設置則爲全屏
        grabber.setImageHeight(screenSize.height);
        grabber.setImageWidth(screenSize.width);
        grabber.setOption("offset_x", "0");
        grabber.setOption("offset_y", "0");//必須設置了大小才能指定區域起點,參數可參考 FFmpeg 入參
        grabber.start();

        // 用於存儲視頻 , 先調用stop,在釋放,就會在指定位置輸出文件,,這裏我保存到D盤
        FrameRecorder recorder = FrameRecorder.createDefault("D://output.avi", grabber.getImageWidth(), grabber.getImageHeight());
//        recorder.setFrameRate(20);
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// 編碼,使用編碼能讓視頻佔用內存更小,根據實際自行選擇
        recorder.start();

        int count = 0;
        while (count < 100) {

            // 獲取屏幕捕捉的一幀
            Frame frame = grabber.grabFrame();
            // 將這幀放到錄製
            recorder.record(frame);
            count ++;
        }

        // 停止
        recorder.stop();
        grabber.stop();

        // 釋放
        recorder.release();
        grabber.release();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章