プログラマメモ2 - programmer no memo2

マウスの位置の取得して画面キャプチャ 2008/08/19

Javaです。
ふと画面キャプチャを作成したくなり、どうやったらマウスの位置を取得するかで悩みました。
Java5から導入された、MouseInfoを使うといいようです。

それで画面キャプチャを行うのは、java.awt.Robotを使うとよいです。



マウスポインタの周り縦横50ピクセルキャプチャして連続して表示させています。
mac osxのユーティリティのDigital Color Meterを意識しています。

package t002;

import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.lang.reflect.InvocationTargetException;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import org.jdesktop.swingx.JXImageView;

public class TestMain {

public static void main(String[] args) throws AWTException {
JXImageView panel = new JXImageView();
JFrame frame = new JFrame();
m(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.setVisible(true);
}

static void m(final JXImageView panel) throws AWTException {

final Robot robot = new Robot();

new Thread(new Runnable() {

public void run() {
while (true) {
PointerInfo pointerInfo = MouseInfo.getPointerInfo();
// System.out.println("Location of Mouse : "
// + pointerInfo.getLocation());
Point point = pointerInfo.getLocation();

int x = point.x - 50;
int y = point.y - 50;
x = 0 < x ? x : 0;
y = 0 < y ? y : 0;

final BufferedImage img = robot
.createScreenCapture(new Rectangle(x, y, 100, 100));
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
panel.setImage(img);
}
});
Thread.sleep(70L);
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}

}).start();

}

}


参考
Screen上にあるMouseの位置を取得する - Java Swing Tips

: