2012-01-05 36 views
0

私は、非アクティブまたはバックグラウンドアプリケーションのウィンドウの定期的(繰り返し)のスクリーンショットを撮ろうとしています。私は、ウィンドウの矩形を持っているが、ユーザーがウィンドウの四角形を変更する場合は、サイズの変更に応じて黒い影でスクリーンショットを取得しています。スクリーンショットを撮る前に矩形を得ることができますが、コードが遅くなるので、ユーザーがウィンドウのサイズを変更しないようにするか、ウィンドウのサイズ変更が発生したときにイベントトリガーがありますか?私はJavaJNAを使用しています。助言がありますか?ありがとうウィンドウのサイズ変更を防止する

+0

ユーザーのウィンドウのサイズ変更を防止することは、迷惑をかけることになります。それとも? – rossum

+0

また、ウィンドウのサイズ変更イベントはありますか?これらの2つの中から1つを選択できます: – Ahamed

+0

長方形を取得すると、実際にピクセルを取得するのに比べてコードが遅くなりますか?ちょっと驚くべきこと...どんな場合でも私は@ロムムに同意します。 –

答えて

0

(ここでは、そのフレームと仮定するとjava.awt.Frameまたはjavax.swing.JFrameです)。 仕事をすることができ1人のリスナーがあります:

public class ShellControlsListener implements ControlListener { 
    @Override 
    public void controlMoved(ControlEvent e) { 
     // You will need to retrieve new coordinates 
    } 
@Override 
    public void controlResized(ControlEvent e) { 
     // Do you work here: retrieve new bounds 
    } 
} 

私はあなたがAWT/Swingとリスナーのようなものを使用できることが想定しました。

ウィンドウの座標と境界を取得することは、2〜4FPSでは実際の問題ではありません。私は、java.awt.Robotを使って25FPSで記録し、エンコードすることができます。 (ウィンドウ境界の取得はRobot.createScreenCapture(java.awt.Rectangle)と比較すると高速です

パフォーマンスが本当に必要な場合は、ウィンドウを移動またはサイズ変更したときに境界を取得するだけで済みますので、ウィンドウを設定する必要はありませんサイズ変更不可(ビデオキャプチャにスクリーンショットを使用したくない場合は、すべてのスクリーンショットの寸法が同じである必要があります)

+0

25FPSで特定のウィンドウを記録する方法を教えてください。どのようにして他のアプリケーションウィンドウのサイズ変更を防止しましたか?なぜなら、私は毎秒25スクリーンを取得しようとしましたが、私はそうすることができませんでしたか? – Ahamed

+0

基本的に、アプリケーションはawtロボットを使用してスクリーンショットをキャプチャする1つのバックグラウンドスレッドで構成されています(毎秒1 /フレームレート秒でキャプチャ)。その後、画像はビデオエンコーダ(Xuggleなど)に渡されます。 3番目のコンポーネントは、アプリケーションのサイズ変更を検出するControlListenerです。私はJNAを使わなかったので、Java以外のウィンドウは記録できません。 25 FPSを達成する唯一の方法は、オンザフライでビデオをエンコードして記録することです。私は1つのウィンドウしか記録できませんが、私のニーズには十分です。しかし、ウィンドウが大きすぎるとパフォーマンスの問題に直面する(私はフレームレートを下げる必要がある)。 – zeropouet

+0

ありがとうございました!!!! – Ahamed

2

frame.setResizable(false)に電話をかけて、ウィンドウのサイズ変更を無効にすることができます。あなたもこれを行うことができます:

frame.addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
     // Update rectangle 
    } 
} 

私はSWTコンポーネントを使用してアプリケーションのスクリーンキャストを記録するために同じことをした

+0

アプリケーションのウィンドウサイズの変更を防止したり、それに応答したりできますが、他のウィンドウやアプリケーションのサイズの変更について知りたいことがあります。 – Ahamed

+0

OSによっては、他のアプリケーションのウィンドウのサイズ変更を待ち受けるJNAコールが存在する可能性があります。しかし、私は、現在のウィンドウの四角形を要求することは、ピクセルをつかむことに比べて速くなければならないことに同意するでしょう。毎回四角形を要求したときにどのくらいの減速感が見られますか? –

+0

現在、毎回繰り返しJNAコールをしています。ピクセルを取得するには時間がかかりますが、ウィンドウ内のコンテンツが変化し続けるため、ピクセルを省略することはできません。私はより良い実行のためにコードをチューニングしているので、ユーザーがウィンドウのサイズを変更していない場合は役に立たない、このウィンドウの長方形 'JNA'呼び出しを削除することを考えました。 – Ahamed

関連する問題