2013-02-05 20 views
5

私は萎縮したJavaのスキルを練習するためにスクリーンレコーダーを構築しようとしています。Robot()の背後にある技術的、根本的な理由は何ですか?createScreenCapture()はとても遅いですか?

しかし、Robotクラスの問題は、i7搭載のマシンでも15fps、MacBookでは4〜5fpsという非常に遅いです。私はPythonで作業レコーダーを構築し、少なくともPILでスナップショットを取得することで、信頼できる20-24fpsに達することができました。

私は興味があります。クラスの技術的な理由はとても遅いのですか?

さらに、他のスクリーンレコーダーはどのように機能しますか? Screencast-o-maticはJavaであり、うまくいくようです。私は基盤となるOSに接続し、バッファなどからすべてをリッピングする何らかの方法があると仮定します。画面上に描画されているもののコピーを得るために、ちょっとばかり高速な方法が必要であることをイメージしています。結局のところ、OSはkajillionの計算をしながら、何度も画面を描画するのに十分速いのです!ある場所から別の場所に色の配列をコピーするのは、比較的安価な操作でなければなりません。

私はあきらめないと決めました!私はちょうど私が知る必要がある本当に適切なレコーダーを構築するの肉のダイビングにはわからない。

+5

この[link](http://www.rune-server.org/programming/application-development/387765-directrobot-fast-java-robot-allows-screen-recording.html)は、あなたの質問に答えるのに役立ちます。可能な解決策を提供してください... – MadProgrammer

+0

ロボットとは何ですか? – Andremoniy

+0

代わりにJNAを試してみると、はるかに高速になる可能性があります。 http://stackoverflow.com/questions/4433994/java-window-image –

答えて

1

私は完全にはわかりません。依然として非常に高い理由があります。

オペレーティングシステム: オペレーティングシステムが既に画面をペイントしています。それは何か新しいことが起こるまで、グラフィックが保存されているという感覚を作ります。グラフィックをeasly保存することができます。

javaロボット: ロボットは、データを保存する前にデータを収集します。スクリーンキャプチャはメソッドを使用します。メソッドはgetPixelColor()です。それは画面上のすべてのピクセルを取得する大きなループを作成します。 HDスクリーンでは、この方法は921600回(1280×720)と呼ばれ、時間がかかるだけでなく、画像に圧縮して保存する必要があります。

+0

+1 Robot、Writable Raster、および画面イメージを取得する他のクラスのソースコードを見てきました。 –

関連する問題