4

次のコードで印刷画面をシミュレートできることはわかっています。

 robot.keyPress(KeyEvent.VK_PRINTSCREEN);

..しかし、どうやっていくつかを返すのBufferedImageですか?

Google で呼び出されたメソッドを見つけましたgetClipboard()が、Netbeans はこのメソッドでエラーを返します (シンボルが見つかりません)。

これを聞いて申し訳ありませんが、誰かがこのキーを押して a から戻ってBufferedImage保存できる方法についての作業コードを教えてもらえますか?

4

1 に答える 1

8

これは必ずしも を与えるわけではありませんBufferedImageが、 になりますImage。これは を利用しToolkit.getSystemClipboardます。

final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
if (clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)) {
  final Image screenshot = (Image) clipboard.getData(DataFlavor.imageFlavor);
  ...
}

本当にが必要な場合はBufferedImage、次のようにしてください...

final GraphicsConfiguration config
    = GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getDefaultScreenDevice().getDefaultConfiguration();
final BufferedImage copy = config.createCompatibleImage(
    screenshot.getWidth(null), screenshot.getHeight(null));
final Object monitor = new Object();
final ImageObserver observer = new ImageObserver() {

  public void imageUpdate(final Image img, final int flags,
      final int x, final int y, final int width, final int height) {
    if ((flags & ALLBITS) == ALLBITS) {
      synchronized (monitor) {
        monitor.notifyAll();
      }
    }
  }
};
if (!copy.getGraphics().drawImage(screenshot, 0, 0, observer)) {
  synchronized (monitor) {
    try {
      monitor.wait();
    } catch (final InterruptedException ex) { }
  }
}

ただし、なぜ使用しないのかを本当に尋ねなければなりませんRobot.createScreenCapture

final Robot robot = new Robot();
final GraphicsConfiguration config
    = GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getDefaultScreenDevice().getDefaultConfiguration();
final BufferedImage screenshot = robot.createScreenCapture(config.getBounds());
于 2012-09-04T01:04:05.243 に答える