私はいくつかの考えを持っています、そしてあなたが考えることができるおそらく実行可能な解決策。
まず、個々のピクセルデルタを追跡し、それらだけを送信/保存することを検討してください。通常のインタラクティブセッションでは、UIのごく一部を変更します。長時間のコンピューター使用セッションでは、ウィンドウの移動やサイズ変更は(逸話的に)あまり一般的ではない傾向があります。これにより、多くの余分な作業を行うことなく、入力されたテキスト、カーソルの動き、小さなUIの更新などの単純なものを効率的にキャプチャできます。
また、OSをより低いレベルでフックして、たとえばピクセルの表示リスト、または(最適には)「損傷した」長方形のリストを取得することを検討することもできます。たとえば、MacOSXのQuartzコンポジターはこの情報を提供します。これは、更新する対象をすばやく絞り込むのに役立ち、理想的な場合は、画面自体を効率的に表現できる場合があります。
Windows(ウィンドウマネージャー)のウィンドウに関する情報を照会できる場合は、表示されているウィンドウごとに個別のデータストリーム(ピクセルデルタ)を保存し、単純なディスプレイリストアプローチを適用して再生中にそれらを「レンダリング」できます。次に、表示リストを簡単に比較できるため、移動するウィンドウを識別するのは簡単です。
カーソルの位置に関するOSの情報を照会できる場合、カーソルの移動は通常、画面上のオブジェクトの移動(たとえば、ウィンドウの移動、アイコン、オブジェクトのドラッグなど)とよく相関するため、カーソルの移動を使用して移動のデルタをすばやく推定できます。これにより、画像を処理して動きのデルタを決定する必要がなくなります。
考えられる解決策(または上記で移動デルタを識別できない場合の最後の手段)について:実際には、単一の移動する長方形の(非常に一般的な)ケースをかなり簡単に処理できます。フレーム内で変化するすべてのピクセルのマスクを作成します。マスク内の最大の連結成分を特定します。長方形に近い場合は、移動した領域を表していると見なすことができます。ウィンドウが正確に直交して移動する(たとえば、完全にx方向またはy方向に移動する)場合、デルタ全体はわずかに大きい長方形のように見えます。または、ウィンドウが斜めに移動する場合、デルタ全体は8辺になります。形。どちらの方法でも、動きベクトルを推定し、領域を比較することでこれを検証できます。この処理は、考慮しなければならない詳細を意図的に無視することに注意してください。ウィンドウの近くで独立して移動するピクセル、または変化していないように見える領域(ウィンドウ内の単色の大きなブロックなど)。実際の実装では、上記のすべてに対処する必要があります。
最後に、リアルタイムのモーションエスティメーションに関する既存の文献を調べます。ビデオエンコーディングなどのモーションエスティメーションと補正の最適化には多くの作業が行われているため、上記の方法が不十分な場合は、その作業も使用できる可能性があります。