7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Javaで画面キャプチャを取得する

Last updated at Posted at 2021-04-21

######以下のサイトを参考にさせていただきました。
http://ogawa.s18.xrea.com/tdiary/20120805p01.html

実装したもの

######1.画面キャプチャを取得するクラス

ディレクトリを引数としてキャプチャを出力するクラスを以下のように作成します。

ScreenCapture.java
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import application.utility.FileUtil;

public class ScreenCapture {
    
    public static void execute(String dirPath) {
        
        File dir = new File(dirPath);
        if(!dir.exists()) {
            dir.mkdir();
        }
        File file = FileUtil.createUniqueFile(dir, "capture.png");
        
        try {
            Robot robot = new Robot();
            Rectangle screenSize = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
            BufferedImage screenShot = robot.createScreenCapture(screenSize);
            ImageIO.write(screenShot, "png", file);
        } catch (Exception e) {
            System.out.println("キャプチャの取得に失敗しました。" + e.getMessage());
        }
        System.out.println("画面キャプチャを取得しました。" + "\r\n" + file.getPath());
    }
}

######2.出力ファイルに対してユニークな連番を付与するクラス
出力ファイル名に対して重複しない連番を付与する関数を用意します。

FileUtil.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileUtil {
    public static File createUniqueFile(File directory, String fileName) {
        String name;
        String extention;
        if (fileName.contains(".")) {
            name = fileName.split("\\.")[0];
            extention = "." + fileName.split("\\.")[1];
        } else {
            name = fileName;
            extention = "";
        }
        int counter = 0;
        do {
            String uniqueName = String.format("%s%03d%s", name, ++counter, extention);
            File f = new File(directory, uniqueName);
            if (!f.exists()) {
                return f;
            }
        } while (true);
    }
}

######3.起動クラス
画面キャプチャを実行するための起動クラスを作成します。

ScreenCaptureSample.java
public class ScreenCaptureSample {
    
    public static void main(String[] args) {
        
        ScreenCapture.execute("C:\\capture");
    }
}

実行結果

以下のように連番で画面キャプチャが出力されるようになります。

image.png

次回

今回作成したものを効率的に使用可能とするため、ツール化します。
https://qiita.com/mamamap/items/b3b8d5914b8fc4879d12

実施内容は以下です。
1.タスクトレイに常駐するツールを作成します。
2.タスクトレイに常駐するツール画面キャプチャの機能を追加します。(今回の作成したものを追加)

7
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?