画面のキャプチャーと保存のポイント


では、プログラムのポイントを簡単に説明しておきましょう。後述のソースコードと照らし合わせながら読むとよく理解できるでしょう。

●画面のキャプチャーはRobotで行う
Robot r2d2 = new Robot();
BufferedImage img = r2d2.createScreenCapture
 (new Rectangle(screenSize));

画面のキャプチャーは、java.awtパッケージのRobotクラスで行います。このcreateScreenCaptureメソッドを呼び出すと、キャプチャーしたイメージを返します。引数にはキャプチャーする領域を示すRectangleを渡します。なお、これは例外を発生する場合があるのでtry内で実行しましょう。

●JPEGファイルの保存はImageIO.writeで行う
int result = chooser.showSaveDialog(this);
File file = chooser.getSelectedFile();
if(result == JFileChooser.APPROVE_OPTION){
 try{
  ImageIO.write(img,"jpg",file);
 } catch(Exception e){}
}

JFileChooseを使うと、ファイル保存のダイアログを呼び出してFileを得ることができます。
ここではJFileChooserで保存ダイアログを呼び出し、そこからファイル名を取得してJPEGで保存する、という一連の処理を行っています。ダイアログの呼び出しは、JFileChooserのshowSaveDialogで行います。そこで選択したファイルはgetSelectedFileで取得可能です。そしてImageIO.writeを使い、保存するBufferedImage、ファイルフォーマット、Fileをそれぞれ引数で渡せば、指定のファイルに保存することができます。

●パネルの大きさの指定方法
this.setPreferredSize(psize);

意外に知らないのが、パネルの大きさを指定する方法です。何も考えずにJPanelをJScrollPaneに組み込むと、勝手にJPanelの大きさが調整されてしまい、スクロールバーが表示されません。これは「PreferredSize」と呼ばれるものを指定することで行えます。Swingコンポーネントの場合、setPreferredSizeで大きさを設定すると、その大きさでコンポーネントが表示されるようになります。なおAWTの場合はこのメソッドが用意されていません。この場合は、getPrefferedSizeメソッドをオーバーライドすることで同様のことができます。

この他にもよくわからない部分があるかもしれませんが、AWTとSwingの基本さえわかっていれば、それほど難しい処理ではないはずです。がんばって調べてみてください。

さて、これでごく簡単なキャプチャープログラムが出来上がりましたが、実際に動かしてみるとまだまだ機能不足であることがわかります。「指定した時間が経過したらキャプチャーしたい」「複数のキャプチャーが可能にしたい」「画面の一部分だけを保存したい」などなど、次から次へと欲が出てきたのではないでしょうか。いずれまた、機会があればこの改良版の作成にも挑戦していくことにしましょう。