(57)【要約】【課題】あるディスプレイ画面の変化を１台以上の他のディスプレイ画面に効率的に通信する送信方法を提案する。【解決手段】コンピュータが、第１のディスプレイの画面を区分した複数のブロックそれぞれの情報を示す第１の値を計算する段階；第１の値を計算した後に、それぞれのブロックの情報を示す第２の値をグリッドリストに記憶する段階；第１の値と第2の値が一致しないブロック群を抽出する段階；第１の値と第2の値が一致しないブロック群から抽出した、値が一致しない第１のブロックと、値が一致しない第１のブロックに隣接する、値が一致しない第２のブロックと、第１のブロックと第２のブロックとの何れかに2個以上隣接する、値が一致するブロックとからなる方形のブロック群を抽出する段階；及び抽出された方形のブロック群の情報を圧縮して第２のディスプレイに送信する段階；を実行する。【選択図】図２
2007179554.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
第１のディスプレイの画面を区分した複数のブロックそれぞれの情報を示す第１の値を計算する段階；
前記第１の値を計算した後に、前記それぞれのブロックの情報を示す第２の値をグリッドリストに記憶する段階；
前記第１の値と前記第2の値が一致しないブロック群を抽出する段階；
前記第１の値と前記第2の値が一致しないブロック群から抽出した、値が一致しない第１のブロックと、
該値が一致しない第１のブロックに隣接する、値が一致しない第２のブロックと、
前記第１のブロックと前記第２のブロックとの何れかに2個以上隣接する、値が一致するブロックと
からなる方形のブロック群を抽出する段階；及び
該抽出された方形のブロック群の情報を圧縮して第２のディスプレイに送信する段階；
を実行する、ディスプレイの情報を送信する送信方法。
【請求項２】
前記方形のブロック群を抽出する段階において、
前記コンピュータは、前記第１のディスプレイ画面を水平方向及び垂直方向に順次走査することによって前記方形のブロック群を抽出する、請求項１記載のディスプレイの情報を送信する送信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータディスプレイ画面の少なくとも一部分の複写物を二つ以上の物理的に離れた場所で保持するシステム及び方法、特に、あるディスプレイ画面の変化を１台以上の他のディスプレイ画面に効率的に通信するシステム及び方法に関する。
【背景技術】
【０００２】
コンピュータディスプレイ画面の全体又は一部の複製を２台以上のデータ処理システムに生成する多数のアプリケーションがある。それらのアプリケーションの例には、リモートアクセスソフトウェア、アプリケーション共有、及び、種々のタイプの遠隔地間会議が含まれる。ディスプレイ画面の複製を２台のコンピュータシステムに生成する最も簡単な方法は、画面の全内容を周期的に送ることである。これには、大量のデータを送信する必要がある。例えば、２５６色を有する１０２４×７６８ドットのディスプレイ画面を定義するため約８００キロバイトが使用される。ビデオ解像度が増加し、色の奥行きが深くなると共に、転送されるべきデータ量は、特に、モデムのような低帯域幅の接続を使用する場合に極端に多くなる。送信されるデータ量を削減するため圧縮を使用することが可能であるが、圧縮は重要なプロセッサ（ＣＰＵ）資源を必要とし、かつ、圧縮前にデータ量を削減する方が好ましい。
【０００３】
別の例は、ディスプレイ画面を発生するため使用された命令と同じ命令を、ディスプレイ画面の複製を表示するコンピュータシステムに送信することである。これは、全てのコンピュータシステム上で本質的に同一ソフトウェアが実行され、適当な画面コマンドが適当なシステムに横取りされ、若しくは、適当なシステムに経由されることを必要とする。米国特許第５，２４１，６２５号及び第５，４９１，７８０号に開示されている別の技術は、オペレーティングシステムソフトウェアへの“フック”に依存する。Windows（登録商標）  NTTMのようなある種のオペレーティングシステムは、ディスプレイ画面に影響を与えるコマンドを横取りすることが困難である安全なオペレーティングシステムを提供するので、表示を生成する初期プログラムは、ディスプレイ画面コマンドを遠隔位置に送ることが可能でなければならない。
【０００４】
システムコマンドを横取りすることなく送信されるべきデータ量を減少させる一つの方法は、前に送信された画面との差だけを送信することである。多くの場合に、画面の小さい領域しか変化せず、画面の全内容を常時送信する必要はないので、遠隔ディスプレイ画面を高速に更新するため必要とされる帯域幅が著しく削減される。２台のコンピュータシステムがウィンドウの複製をローカル遠隔ディスプレイ画面及び遠隔ディスプレイ画面に保持するため上記の技術を使用する場合を考えると、ローカルシステムは全画面の複製を遠隔システムに転送し、基準画像として複製を記憶する。周期的に、ローカルシステムはローカルディスプレイ画面を読み出し、基準画像と排他的論理和（ＸＯＲ）を実行し、この演算の結果を所謂デルタバッファに記憶する。デルタバッファは、基準画像と現在の画面内容との差だけを含む。デルタバッファは圧縮され、遠隔システムに送信され、遠隔システムは送信されたデータの圧縮を解除し、遠隔ディスプレイ画面を更新する。ローカルシステム及び遠隔システムは、共に、更新された画面内容を新しい基準画像として保存し、この手順が繰り返される。
【０００５】
デルタバッファ技術は、送信されるべきデータ量を著しく削減する際だった利点がある。この技術は制限帯域幅環境における性能を非常に改善するので、近年多く見られるように画面データが利用可能な帯域幅よりも遙かに濃密である場合に非常に望ましい。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、デルタバッファ技術は必要なメモリ量の点で欠点がある。基準画像用、現在の画面内容用及び排他的論理和の結果用として、ビデオメモリのサイズのメモリが３ブロックだけ必要とされる。
【０００７】
本発明の目的は、ＣＰＵ資源、メモリ及び帯域幅を効率的に使用する画面転送方法を提供することである。
【０００８】
本発明の他の目的は、安全なオペレーティングシステムと共に使用可能な画面転送方法を提供することである。
【０００９】
本発明の更なる目的は、転送されるデータ量が少なくても効率的に圧縮され得るデータを生成する効率的な画面転送方法を提供することである。
【００１０】
本発明の更なる他の目的は、ポップアップウィンドウが消えたとき、より高速な表示用のデータキャッシュと互換性のある効率的な画面転送方法を提供することである。
【課題を解決するための手段】
【００１１】
上記本発明の目的を達成するため、本発明の第１のディスプレイから第２のディスプレイにディスプレイデータを送信する方法は、
第１のディスプレイをブロックに区分し、
各ブロックの内容を表わす第１の値を計算、記憶し、
上記第１の値が計算された後、各ブロックの内容を表わす第２の値を計算し、変更されたブロックに対する第１の値と第２の値とが一致しないとき、変更されたブロックを第１のディスプレイから第２のディスプレイに転送する。
【００１２】
本発明の方法がマルチスレッド形オペレーティングシステムにより制御されたコンピュータシステムで使用されるならば、好ましくは、第１のスレッド又はモニタリングスレッドは、第１のディスプレイが区分された各ブロックに対するブロック識別子と共に計算された値として循環冗長コード（ＣＲＣ）をグリッドリスト内に記憶する。第１の値と第２の値との比較により、一つのブロックに対するＣＲＣが変化したことが判定されたとき、変更されたブロックのブロック識別子はウェイトリストに挿入される。ウェイトリストは、最初の変更されたブロックが検出された後に全てのブロックの変更が検査されるまで、或いは、４分の１秒又は２分の１秒のような所定の時間間隔が経過した後まで、変更されたブロックが検出された順序で維持される。
【００１３】
スレッド環境において、ウェイトリストの内容は、好ましくは、モニタリングスレッドによって幾つかの機能を実行する第２のスレッド又はメインスレッドによるアクセス用の変更ブロックリストに全て同時に移される。上記機能には、第１のディスプレイを含む第１のコンピュータシステムから第２のディスプレイを含む第２のコンピュータシステムに送信されるべきブロックを分類する機能が含まれる。ウェイトリストと同様に、変更ブロックリストは変更されたブロックが検出された順序で保持される。メインスレッドは、最先に変更されたブロックに対応する変更ブロックリスト内の最初のブロック識別子を読み、最先に変更されたブロックに隣接した最も大きく変更されたブロックを含む方形を検出し、変更されたブロックに対応するデータを第２のコンピュータシステムに送信し、その結果として、変更されたブロックが第２のディスプレイ上に表示され得る。変更されたブロックに対応し、第２のディスプレイに送信されたデータは、ビデオメモリを読み、必要に応じて従来のデータ圧縮を行い、方形内のブロックのブロック識別子と共にデータを送信することにより得られる。変更されたブロックに対応するデータの一部としてＣＲＣを送信してもよいので、第１及び第２のコンピュータシステムは、第１及び第２のディスプレイに現在若しくは最近表示されたブロックのＣＲＣ及びブロック識別子をキャッシュシステムで使用し得る。
【発明を実施するための最良の形態】
【００１４】
上記の目的は、以下で明らかになる他の目的及び利点と共に、添付図面を参照して十分に説明され、特許請求の範囲に記載された構成及び動作の詳細に依拠する。添付図面を通して、同じ参照番号は同じ部品を表わす。
【実施例１】
【００１５】
図１にはネットワーク１２により接続されたネットワーク状コンピュータシステム１０の概略が示される。ネットワーク１２は、ローカルエリアネットワーク、ワイドエリアネットワーク、インターネットのような公衆ネットワーク等の任意のトポロジーを含むどのような従来の構造でも構わない。あらゆるタイプのネットワーク１２を使用することができるため、終端伝送路は、例えば、１台のコンピュータシステム１０ａから他の１台以上のコンピュータシステム１０ｂへの接続を表わすため使用される。図１に示される如く、コンピュータシステムには、テキスト又はグラフィックスを表示するディスプレイが通常の形式で含まれる。
【００１６】
開示された実施例において、本発明はマルチスレッド形オペレーティングシステム環境で動作する。図２は、二つの並行動作スレッドにより実行される処理を表わしている。第１又はモニタリングスレッドが図２の右側に示され、第２又はメインスレッドが図２の左側に示される。オペレーティングシステムがマルチスレッド形動作を行えない場合、若しくは、本発明の処理に対し単一スレッドだけを用いることが望ましい場合に、処理の一部を実行し、マルチスレッド形オペレーティングシステムに関して以下に説明するように処理の別の部分に切り替えるためタイマ及びカウンタを使用してもよい。
【００１７】
図２に示されたモニタリングスレッドはディスプレイ画面の変化を監視し、変更されたブロックへのポインタをメインスレッドに通知する。変更されたブロックは、ビデオメモリを読むこと、或いは、他の公知の技術を用いることにより判定され得る。
【００１８】
ソースコードの一例において、画面の内容をバッファにコピーするため、関数BitBlt()が使用される。使用されるオペレーティングシステム及びドライバに依存して、BitBlt()の呼び出しは、以下の（１）〜（３）のいずれかを行う。（１）ビデオメモリの内容を読み、ドキュメント化されたフォーマットを用いてバッファ内に入れる。（２）ビデオメモリをアクセスすることなく、画面の内容を直にバッファに入れる（これは、オペレーティングシステム又はドライバが、画面メモリをアクセスすることなく使用可能な画面内容の知識を保持する場合に該当する）。（３）画面（又は画面セクション）の内容をドキュメント化されたフォーマットを用いてバッファに入れるため他の方法を使用する。
【００１９】
区分された画面の一例が示される図３において、変更されたブロックにはハッチングが施されている。図３乃至１５には、１６×１６のブロックの配列に区分されたディスプレイ画面が示されるが、他のブロック数を用いてもよい。好ましくは、両方向のブロック数は２の倍数であるが、殆どのディスプレイ画面は正方形ではないので、一方の向きのブロック数は他方の向きのブロック数と異なっていても構わない。使用されるブロック数は、画面解像度、処理能力、並びに、メモリ及び帯域幅の利用性に依存する。例えば、１０２４×７６８個の画素のディスプレイ画面に対し、水平方向に３２ブロック及び垂直方向に２４ブロックがある。
【００２０】
ブロックの識別子及びブロックへのポインタは、グリッドリスト２０（図２）と称されるデータ構造に格納される。Ｃ＋＋コードの例では、リンクドリストがグリッドリスト及び以下に説明する他のリストのため使用される。しかし、用語“リスト”は、リンクドリストに限定されることはなく、情報を格納し得るあらゆるデータ構造を使用することが可能である。
【００２１】
図２において、実線はプログラムフローを表わし、破線はデータフローを表わす。
【００２２】
図２に示されたモニタリングスレッドは、グリッドリスト２０にブロックが在るかどうかを検査し（ステップ２２）、ブロックが無いならば、戻されたブロックがあるかどうかを検査する（ステップ２４）。ソースコードの例において、最初に、グリッドリスト２０はブロック識別子（典型的なソースコードでは、pGrid）で充填され、２個の３２ビットのＣＲＣがＣＲＣ６４を効率的に形成するため異なる方法で計算される。これにより、異なるブロックに対し重複した値が計算される可能性は、２64分の１である。より小さい重複の可能性が許容されるならば、グリッドリストに格納されるべき値を得るため、例えば、ＣＲＣ３２、チェックサム等の他の計算法を使用してもよい。先に変化が検出されていないならば、検査ステップ２２の後に、リスト内の次のブロックを取得し（ステップ２６）、画面上に現時に表示されているデータに対しＣＲＣ６４を計算する（ステップ２８）。
【００２３】
グリッドリスト２０に格納された第１の値と、ステップ２８で計算された第２の値がステップ３０において比較される。両方の値が同じであるならば、処理はステップ２２に戻る。監視されているブロックの第１の値と第２の値とが異なるならば、そのブロックに対応してグリッドリスト２０に格納されたデータはグリッドリスト２０から削除され、変更されたブロックのリストに挿入される。好ましい実施例において、変更されたブロックに対するデータは、最初、所定の規準と合致するまでウェイトリストに格納され、所定の規準と合致した時点に、上記データは変更されたブロックのスレッドセーフリスト３４、即ち、変更ブロックリスト（典型的なソースコードでは、DirtyList）に移される。好ましい実施例において、所定の規準は、最初の変更されたブロックが空のウェイトリストに挿入された後の４分の１秒、若しくは、ウェイトリストに格納された最初の変更されたブロックから始めて全てのブロックがステップ３０において検査された後である。
【００２４】
ブロックが送信された後、変更されたブロックを識別するデータは、メインスレッドによってスレッドセーフリスト３６、即ち、リターンリストに格納される。ステップ２２において、グリッドリストが適当な量だけ検査されたことが判定されたとき、例えば、ウェイトリストが空にされたとき、モニタリングスレッドは、リターンリスト３６内に識別されたブロックが在るかどうかを検査し（ステップ２４）、識別されたブロックが在るならば、そのブロックはリターンリストから削除され、グリッドリスト２０に戻される（ステップ３８）。
【００２５】
メインスレッドは、変更ブロックリスト３４内に変更されたブロックが在るかどうかを繰り返し検査する（ステップ４０）。ブロックが存在するとき、変更された全てのブロックを識別するデータは、変更ブロックリスト３４から削除され、変更されたブロックに含まれる情報を１台以上の遠隔ディスプレイに送信するためのステップ４４における処理のため局所的に記憶される。処理されたブロックを識別するデータは、上記の如く、リターンリスト３６から削除された後、更なるモニタリングのためリターンリスト３６に格納される。
【００２６】
図２に示されたフローチャートのステップ４４において行われる最適な方形を検出する処理は図１６に示されている。区分されたディスプレイ画面の各ブロック、例えば、図３に示されるような１６×１６の配列に対応する１個のセルを有するマトリックスは、参照カウント及び画面データのブロックへのポインタ又は参照と共に作成される（ステップ５０）。マトリックスの各要素のポインタは、ブロックが変化した場合に対応する画面データのブロックを指定し、ブロックが変化していない場合にＮＵＬＬを指定するようセットされる（ステップ５２）。ステップ５２の処理は、図１７に記載されたステップを実行する。次に、マトリックスの各行にあるセルは、図１８に示されたステップを実行することにより処理され（ステップ５４）、各列は図１９に示されたステップを実行することにより処理される（ステップ５６）。ステップ５４及びステップ５６の結果は、以下、図３乃至１５を参照して説明する例に関して図４に示されるようなマトリックスである。
【００２７】
ステップ５６で得られたマトリックスは、変更ブロックリスト（例示的なコードにおけるDirtyList）の先頭に在るデータに対応する最先に変更されたブロックから処理される（ステップ５８）。参照要素を含む参照行から始めて、最も左側要素が検出され（ステップ６０）、最も右側にある閾値レベル以上の要素が検出される（ステップ６２）。図３乃至１５に示された例の場合に、閾値レベルは２である。この処理は、図２０に示される如く、上限を検出するため繰り返される（ステップ６４）。参照要素の真上にある要素が閾値レベル以上であり、行全体を走査するときに先の左側の限界又は右側の限界に達する前により小さい値が与えられた要素が在るならば、左側の限界及び右側の限界が調節される。同様に下限が検出され（ステップ６６）、左側の限界及び右側の限界が図２１に示されるように調節される。
【００２８】
変更されたブロックの組に対し最適な方形を見つける一例を図３乃至１５を参照して説明する。図３には、１６×１６個のセル又はブロックの配列に区分された画面の一例が示され、ハッチングを施された左上の象限にある１２個のブロック及び右下の象限にある１０個のブロックが変更されている。上記の如く、画面の区分又はブロックの変更は、ブロックと関係したカウンタをセットすることにより示される。変更されていない全てのブロックのカウンタは、０にセットされる。変更されたブロックの関係したカウンタが１にセットされているならば、図４に示されるようなマトリックスが結果として得られる。図４には図３と同じハッチングが施されている。
【００２９】
変更された区分だけを上記のデルタバッファを用いて送信する従来の方法において、カウンタの値１を有するハッチングされたブロックが１ブロックずつ送られる。しかし、ランレングス又はイントラフレーム符号化技術によってより良い効率が得られるので、グループ内の殆どのブロックが変更されているならば、変更されていないブロックが多少含まれているとしても、より多量のデータのグループを送信する方が好ましい。かくして、本発明は、関係したカウンタに値を割り当てるため上記の方法を使用した後に最適な方形を取得する。
【００３０】
本発明によれば、関係したカウンタ値は、ブロック又は隣接したブロックが変更された場合に１ずつ増加される。配列は、最初に、図５に示されたカウンタ値を生成するため水平方向に走査される（ステップ５４）。図５乃至１５の記述を補助するため、列はアルファベットで区別され、行は数字で区別されるが、どちらも画面上又は配列内で使用されない。図５に示される如く、ステップ５４の最後に、変更されたブロックの左側又は右側にある変更されていないブロックは、値１を有するが、両側に変更されたブロックを有する変更されていないブロックは、１個の隣接した変更されたブロックだけを有する全ての変更されたブロックと同様に、値２を有する。水平方向に隣接した変更されたブロックを伴わない変更されたブロックは値１を有し、一方、水平方向に隣接した２個の変更されたブロックを伴う変更されたブロックは値３を有する。ステップ５６において、配列が垂直方向に走査され、図６に示される如くの値を生成するため、同じ増加規則が適用される。
【００３１】
図６に示されたカウンタ値を用いることにより、略変更されたブロックの領域は、包含されるべきブロックに対し閾値レベル２をセットすることにより画成される。この閾値レベルを用いるならば、図３の左上隅でハッチングされた全ての正方形は１回の演算で同時に送られる。このようなブロックのグループは、“最適な方形”と称される。
【００３２】
上記の如く、図３及び４（図１０乃至１５については後述する）の右下隅の変更されたブロックのグループと、左上隅のグループとの相違は、上方のグループの左下のブロック、即ち、ブロックＤ６は変更を含み、一方、下方のグループの対応するブロック、即ち、ブロックＪ１４は変更されていない点だけである。同様に、上方のグループのブロックＧ４は変更され、下方のグループの対応するブロックＭ１２は変更されていない。その結果として、下方のグループの左下のブロック及び右上のブロック、即ち、ブロックＪ１４及びＭ１１は、閾値よりも小さいカウンタ値を有する。アルゴリズムは、最適な方形を形成した上方グループの１６個のブロックと同じように、下方グループの１６個のブロックを含むように記述してもよい。しかし、多数の変更されていないブロックが含まれることになる。従って、好ましい実施例によれば、上記の方法が最適な方形を選択するため使用される。
【００３３】
好ましい実施例において、最適な方形内の各ブロックは、この例では２である閾値レベル以上のカウンタ値を有することが必要である。上記の如く、変更ブロックリスト（例示的なコードでは、DirtyListとして示される）は、最初に検出され、未だ送信されていない変更されたブロック（最先に変更されたブロック）から始まる順序で保持される。下方グループ内で最初に検出される変更されたブロックに依存して、異なる最適な方形が選択される。
【００３４】
好ましい実施例において、処理は変更ブロックリスト(DirtyList)の最初のブロックから始まる。これは、参照行及び参照列内の参照要素と称される。参照行内の最も左側及び最も右側の変更されたブロックは、閾値レベル以下のカウンタ値を有するブロックが見つけられるまで、最初に左側に走査し、次いで右側に走査することにより見つけられる。この処理は、参照要素の上側及び下側の参照列内で閾値レベル以下のカウンタ値を有するブロックが見つけられるまで、開始ポイントの上側及び下側の各行に関し繰り返される。開始列の左側及び右側で最も近くにある閾値レベル以下のカウンタ値を有するブロックは、最適な方形の左側の限界及び右側の限界を画成する。
【００３５】
かくして、下方グループの最初の参照要素が、図８において２重線で囲まれ、交差状にハッチングされたブロック、即ち、ブロックＪ１１又はＪ１３であるならば、２重線で囲まれたブロックは上記下方グループに対する第１の最適な方形に含まれる。図８に示される如く、ブロックＪ１０及びＪ１４は、閾値レベルよりも小さいので、最適な方形の上限は行１１であり、下限は行１３である。行１１は、参照列である列Ｊの最も近くにあり閾値レベルよりも小さいカウンタを伴うブロックを有する。従って、最終的な最も左側の列は列Ｊであり、最終的な最も右側の列は列Ｋであり、図８において２重線で囲まれた方形が送信される。ブロックＪ１１及びＪ１３のいずれかが変更ブロックリストの先頭にあるとき、下方グループの送信を行うため、（図９において２重の外形線で示された）ブロックＬ１３、Ｌ１４、Ｍ１３及びＭ１４から形成された方形が送信される。但し、図３乃至１０に示された最適な方形が選択される間に付加的なブロックが変更されない場合を想定している。
【００３６】
図１０において、下方グループの処理が始まるとき、斜交平行線の陰影を付けられたブロックが変更ブロックリストの先頭に在るならば、２重線で外形が示されたブロックは、下方グループの第１の最適な方形として選択される。残りのブロックの中でどのブロックが最初に検出されるかに依存し、かつ、他のブロックが変更されない場合を想定するならば、図１１において２重線で示された方形、或いは、図１２において２重線で示された方形の一方が送信され、引き続いて、図１１又は１２の中のもう一方の方形が送信される。最終的に、ブロックＭ１３又はＭ１４のいずれかが下方のブロックのグループ内で変更されたブロックとして検出された最初のブロックであるならば、第１の最適な方形は、図１３に２重線で示されるような方形である。上記の如く、閾値２よりも小さいカウンタ値を有し、ブロックＭ１３及びＭ１４の最も近くにある列Ｍ内のブロックは、ブロックＭ１１及びＭ１５である。このブロックは最適な方形の上方の境界及び下方の境界を画成する。列Ｎ内の全てのブロックは、閾値よりも小さいカウンタ値を有するので、右側の境界を画成し、一方、ブロックＪ１４はカウンタ値１を有するので、最適な方形の左側の境界を画成する。図１４において２重線で外形が示された一つのブロックがブロックＪ１３の前に変更されたとして検出されたならば、３個のブロックＪ１１、Ｋ１１及びＬ１１が次に送信され、続いて、ブロックＪ１３が送信される。さもなければ、ブロックＪ１３が送信され、続いて、上記３個のブロックが送信される。
【００３７】
上記３個のブロックＪ１１、Ｋ１１及びＬ１１だけが一体的に送信され、ブロックＪ１３は単独で送信される理由は、図１４から直ちに明らかではない。上記３個のブロックだけが一つのグループとして送信され、図１３において２重線で示された最適な方形の後で１個のブロックが単独で送信される理由は、図１４に示されたカウンタ値から直ちに明らかではない。カウンタ値の更なる変更が検出されない場合を想定しているので、図６乃至１４において、カウンタ値は変更されないままで示されている。しかし、好ましい実施例において、最適な方形に含まれるブロックは、図２に示されるように、変更ブロックリスト(DirtyList)から削除され（ステップ３８）、ブロックがステップ４４で送信された後、リターンリストに挿入される。次の最適な方形が選択されたとき、カウンタ値は再計算される。その結果として、変更されたブロックの上方グループが最初に送信され、新たに変更されたブロックが検出されない場合を考えると、図１３において２重線で示された最適な方形が送信された後、カウンタ値は、図１４ではなく、図１５に示されるように変わる。図１５に示される如く、２重線で示された方形は、ブロックＪ１３と同様に、コーナーを除いてカウンタ値１を有するブロックで囲まれる。上記の４個のブロック以外の他の全てのブロックは、遠隔装置に送信されたため変更されていないので、値０のカウンタを有する。図１３において変更され、図１５に示される如く同時に送信されたブロックに施されたハッチングの向きは、図示されたようなカウンタ値になる理由の理解を助けるため、（図１３乃至１５における下方グループに対し変更ブロックリスト(DirtyList)の先頭であると考えられるブロックを除いて）先に使用されたハッチングと直交している。
【００３８】
上記の如く、最適な方形を選択する別の方法を使用しても構わないので、閾値レベルよりも大きいカウンタ値を有し参照要素に隣接したブロック含む最小の実現可能な方形ではなく、下方グループ内の全ブロックを含む最小の実現可能な方形が検出される。これは、ＣＰＵ資源を使用する際により有効であるが、多数の変更されていないブロックを送信する必要がある。プロセッサパワーの方がデータ伝送帯域幅よりも豊富に利用可能であるならば、上記の別の方法を使用してもよい。ここで要求されるのは、好ましい実施例において行われたように、参照行内で左側及び右側に最も近くにあり、閾値レベルよりも小さいカウンタ値を有するブロックを探索し、次に、同時に１行ずつ上昇及び下降させて、現在の最も左側の位置及び最も右側の位置の外側に、閾値レベルよりも大きいカウンタ値を有するブロックが在るかどうかを検査し、もしブロックが在るならば、上記参照行内で閾値よりも大きいカウンタ値を有するブロックが在るかどうかを調べるため、最も左側のブロックの左及び最も右側のブロックの右の方へブロックを検査する。そのようなブロックが存在するならば、閾値レベルよりも小さいカウンタ値が検出されるまで上記ブロックの左側及び右側に夫々走査を継続し、最も左側の位置及び最も右側の位置が次の行のためリセットされる。この方法を用いることにより、方形の外側の全てのブロックのカウンタ値が閾値レベルよりも小さくなるまで、方形のサイズは連続的に拡大される。この結果として得られるブロックは非常にまばらになる。このことは、本発明の好ましい実施例が上記技術を使用しない理由の一つである。
【００３９】
好ましい実施例により得られる方形よりも大きく、上記の他の方法により得られる方形よりも小さい方形が得られるならば、最適な方形を検出する他の方法を使用してもよい。
【００４０】
図１６に示されたステップを実行することにより最適な方形を決定した後、最適な方形内のブロックに対応するビデオメモリが読まれ、バッファに一時的に格納される。画面内の全てのブロック又は実質的に全てのブロックが変更された場合、表示画面上の全てのブロックのコピーを記憶するため、充分なメモリを一時的なバッファのために確保する必要がある。しかし、使用される残りのデータ構造は、ビデオメモリのサイズの中の小部分であるので、本発明による方法の方が、上記のデルタバッファ技術よりも著しく効率的である。一時的なバッファ内の画面データは、従来の方法を用いて圧縮され、データが表示されるべき画面上の場所を識別するポインタ又はポインタの範囲と共に遠隔ディスプレイに転送される。
【００４１】
図２のステップ２８において、例えば、ＣＲＣ６４を用いて計算された値は、画面データと共に送信される。ローカル及び遠隔コンピュータシステムは、送信され、圧縮／圧縮解除処理されるべきデータ量を更に削減するため、画面データ、ポインタ及び計算された値をキャッシュすることが可能である。ローカルシステムが送信されるべきブロックデータに対し計算された値と一致する計算された値をキャッシュした場合に、計算された値を発生したブロックへのポインタ及び計算された値が遠隔コンピュータシステムに送信され、計算された値に対応するキャッシュされた圧縮解除データは、ポインタデータによって指定されたブロックに表示され得る。このようなデータキャッシュ方式により、最小の帯域幅しか必要としない高速表示が行われるが、当然ながらキャッシュのため使用されるメモリ容量分だけメモリ必要量を増加させる。
【実施例２】
【００４２】
図２及び１６に示されたフローチャートは、例えば、Ｃ＋＋におけるMICROSOFT  Foundation  Classes（ＭＦＣ）を用いて実現される。グリッドリスト、ウェイトリスト、変更ブロックリスト(DirtyList)及びリターンリストは、ＭＦＣの  CObList  により定義される。例示的なソースコードで使用されるＭＦＣ内の他のクラスは、デバイスコンテキスト（描画面）としてディスプレイ画面を表わすクラスCDCを含む。画面に表示されたデータは、ウィンドウズ（登録商標）・グラフィックス・デバイス・インタフェース（ＧＤＩ）ビットマップをカプセル化し、ビットマップを操作するメンバ関数を提供するCBitmapクラスからのオブジェクトの中に在る。
【００４３】
本発明の多数の特徴及び利点は詳細な説明から明らかであり、特許請求の範囲は、本発明の真の精神及び範囲に収まる自動切り替えの全ての特徴及び利点を包摂する。さらに、当業者であれば、本発明の開示に基づいて種々の変形及び変更を容易に行い得るので、本発明は、例示、説明された構成及び動作に厳密に制限されるべきではない。本発明は、本発明の精神及び範囲を逸脱することなく他の適当な変形物及び等価物にも及ぶ。
【００４４】
上記説明の通り、本発明によれば、ディスプレイ画面を複写する際に、特に、安全の高いオペレーティングシステムの動作環境においても、ＣＰＵ資源、メモリ及び帯域幅が効率的に使用される。また、転送されるデータ量が少なくても効率的に圧縮され得るデータを生成することが可能である。更に、本発明によれば、ポップアップウィンドウが消えたとき等に、より高速な表示用のデータキャッシュと互換性のある効率的な画面転送が行える。
【図面の簡単な説明】
【００４５】
【図１】ネットワーク状コンピュータシステムの概略図である。
【図２】本発明による方法のフローチャートである。
【図３】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図４】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図５】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図６】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図７】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図８】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図９】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１０】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１１】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１２】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１３】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１４】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１５】１６×１６のセル又はブロックの配列に区分されたディスプレイ画面に変更が行われ、検出され、遠隔システムに伝送される様子を示す図である。
【図１６】本発明による最適な方法を決定する方法の詳細なフローチャートである。
【図１７】本発明による方法の詳細なフローチャートである。
【図１８】本発明による方法の詳細なフローチャートである。
【図１９】本発明による方法の詳細なフローチャートである。
【図２０】本発明による方法の詳細なフローチャートである。
【図２１】本発明による方法の詳細なフローチャートである。
【符号の説明】
【００４６】
１０    ネットワーク状コンピュータシステム
１０ａ，１０ｂ，１０ｃ，．．．，１０ｄ    コンピュータシステム
１２    ネットワーク
２０    グリッドリスト
３４    変更ブロックリスト
３６    リターンリスト
【図１】
2007179554.tif 000003
【図２】
2007179554.tif 000004
【図３】
2007179554.tif 000005
【図４】
2007179554.tif 000006
【図５】
2007179554.tif 000007
【図６】
2007179554.tif 000008
【図７】
2007179554.tif 000009
【図８】
2007179554.tif 000010
【図９】
2007179554.tif 000011
【図１０】
2007179554.tif 000012
【図１１】
2007179554.tif 000013
【図１２】
2007179554.tif 000014
【図１３】
2007179554.tif 000015
【図１４】
2007179554.tif 000016
【図１５】
2007179554.tif 000017
【図１６】
2007179554.tif 000018
【図１７】
2007179554.tif 000019
【図１８】
2007179554.tif 000020
【図１９】
2007179554.tif 000021
【図２０】
2007179554.tif 000022
【図２１】
2007179554.tif 000023