######以下のサイトを参考にさせていただきました。
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");
}
}
実行結果
以下のように連番で画面キャプチャが出力されるようになります。
次回
今回作成したものを効率的に使用可能とするため、ツール化します。
https://qiita.com/mamamap/items/b3b8d5914b8fc4879d12
実施内容は以下です。
1.タスクトレイに常駐するツールを作成します。
2.タスクトレイに常駐するツール画面キャプチャの機能を追加します。(今回の作成したものを追加)