手動でやれば簡単なんですが、枚数があるもんですからプログラムと思ったんですけどね。しばし考えて、「Javaにも同じような機能あるんじゃない?」調べたらありました。しかも非常に簡単です。
キャプチャ自体は以下の関数になります。
// 指定領域をキャプチャしてスクリーンショットのBufferedImageを返す
createScreenCapture(Rectangle screenRect);
それで簡単に画面の一部(左上の512x512)をファイルに保存するものを作ってみました。
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// スクリーンキャプチャのテスト
Robot r =null;
try {
r = new Robot();
} catch (Exception e){
System.out.println("can't get Robot");
}
BufferedImage dd = r.createScreenCapture(new Rectangle(0, 0, 512, 512));
// jpgで保存
try {
File savedImage = new File("sss.jpg");
ImageIO.write(dd, "jpg", savedImage);
} catch (Exception e) {
System.out.println("can't write file");
}
}
}
このプログラムはファイルを作成するだけですが、読み込むときは以下の通りになります。
BufferedImage img = ImageIO.read(File);
後は、BufferedImageで適当に調べればpixel単位の操作も簡単にできます。
PS:
あ、念のためいっときますが、これはローカルでjavaを動かして自分のPCの画面をキャプチャしたい目的で調べました。(ですからローカルに画像ファイルを保存しちゃってますし)リモートでこれ実行したらどうなるんでしょうねえ?セキュリティにひっかかるかな。(それにBufferedImageデータをどうやって返信するんだという問題がありますが。取得したイメージデータを返信する方法がなければゲームなんかで使えるテクニックなんですが。)
0 件のコメント:
コメントを投稿