2009-03-14 7 views
11

私は一連のスクリーンショットをつかみ、それらを映画に連結する必要があります。私は画面をキャプチャするためにJavaロボットクラスを使用しようとしています。JavaロボットcreateScreenCaptureのパフォーマンス

しかし、createScreenCapture()メソッドは私のマシンで1秒以上かかります。私は1fpsを得ることさえできません。それをスピードアップする方法はありますか?それとも他のAPIがありますか?

編集:バッファされた画像を割り当てています。

BufferedImage image = robot.createScreenCapture(screen); //スクリーンショットをjpgとして保存します
ファイルファイル=新しいファイル( "images/screen" + index + ".jpg");
ImageIO.write(image、 "jpg"、file); index ++;

jpgファイルに書き込むには、BufferedImageを取得するのに約1400msかかるので約200msかかります。

答えて

2

私はCまたはC++でこれを行うことをお勧めします。これは、ハードウェアへのより直接的なアクセスが可能です。

絶対最大性能を必要とする場合は、ドライバレベルに移動し、データをビデオカードからまっすぐに取り出します。このようなドライバを見つけるのは難しいです。なぜなら、画面に表示されているデータを取り込むので、コピープロテクションを簡単に無効にすることができるからです。

しかし、JavaとRobotを使いこなす必要がある場合は、この1つの関数呼び出しが長すぎますか? BufferedImageなどを割り当てていないのですか?

+0

はい 'createScreenCapture()は' BufferedImage'を割り当て、すべてのピクセルを 'INT_RGBA'形式に変換します。これはほとんどの時間がかかります。 – finnw

1

異なる画面設定で試してみてください。色の深度は、AWTがすべてを共通のラスタ形式に変換する必要があるため、影響を受けます。私のPCから

いくつかの例タイミング:私はそれらの深さでテストすることができませんでしたので、

Resolution | Depth | Time taken 
------------+-------+------------ 
1280x1024 | 32 | 215ms 
1280x1024 | 16 | 155ms 
1600x900 | 32 | 235ms 

私のアダプタは24bppのか64bppを行うことはできませんが、私は、彼らは変換するために、より多くのCPUサイクルを必要とするであろうと推測します。

関連する問題