以下に添付図面を参照して、開示の補正方法、システム、情報処理装置、および補正プログラムの実施の形態を詳細に説明する。
(補正方法の一実施例)
図1は、実施の形態にかかる補正方法の一実施例を示す説明図である。図1において、システム100は、情報処理装置101と、端末装置102と、を含む。システム100は、たとえば、端末装置102に最低限の機能しか持たせず、情報処理装置101でアプリケーションやデータを管理するシンクライアントシステムである。
情報処理装置101は、ネットワークを介して端末装置102と通信可能なコンピュータである。また、情報処理装置101は、端末装置102の表示画面110に表示する画像の画像情報を生成して、端末装置102に画像の画像情報を送信する機能を有する。情報処理装置101は、たとえば、サーバである。サーバが実行するOS(Operating System)は特定のアーキテクチャに依存せず、どのようなOSでもよい。
画像は、たとえば、端末装置102の要求に応じて情報処理装置101で実行されるアプリケーションソフトウェアの実行結果を表示する画面の画像である。アプリケーションソフトウェアは、たとえば、設計支援ツール、プレゼンテーションソフト、表計算ソフト、電子メールソフトなどである。画像情報は、たとえば、製図などに利用されるCAD(Computer Aided Design)データや商品のカタログデータなどである。アプリケーションソフトウェアを、以下、「アプリ」と称す。
端末装置102は、ネットワークを介して情報処理装置101と通信可能なコンピュータである。また、端末装置102は、表示画面110を有し、情報処理装置101から受信した画像情報に基づいて、表示画面110に画像を表示する機能を有する。端末装置102は、たとえば、タブレット端末、ノートPC(Personal Computer)、スマートフォン、携帯電話機、携帯音楽プレイヤーなどである。
ここで、端末装置102が、タブレット端末、スマートフォン、携帯電話機である場合、端末装置102が利用者に提供するユーザインターフェースと、情報処理装置101が実行するアプリが想定するユーザインターフェースとが異なる場合がある。この場合、端末装置102を操作する利用者が、情報処理装置101が実行するアプリを操作しづらい場合がある。
具体的には、端末装置102が、ユーザインターフェースとして、タッチ操作に特化しており、情報処理装置101が実行するアプリが想定するユーザインターフェースが、マウスによる操作を想定する場合である。タッチ操作に関して、利用者は、指の大きさより狭い領域へのタッチ操作への指示を行い難い。一方、マウスによる操作を用いると、利用者は、数画素程度への狭い領域へのクリック、ドラッグ等も容易に行うことができる。したがって、情報処理装置101が実行するアプリが狭い領域へのクリック、ドラッグ等を容易に行うことができるユーザインターフェースを想定して開発された場合、端末装置102を操作する利用者は、情報処理装置101が実行するアプリを操作しづらくなる。
なお、指示を行い難い狭い領域への操作が発生することは、情報処理装置101と端末装置102が、共にマウスによる操作を提供しても起こり得る。たとえば、端末装置102の画面の画素数が少なく、情報処理装置101の画面の画素数が多い場合である。また、画面の画素数が情報処理装置101と端末装置102が同じであっても、端末装置102を利用する利用者が、狭い領域へのマウスによる操作を苦手とする場合もありえる。
狭い領域へのタッチ操作を容易にする技術として、たとえば、以下の2つの技術がある。1つ目の技術は、端末装置102上で、タッチされた周辺の拡大画面を表示し、利用者に現在のタッチされた座標位置を拡大画面内で表示するものである。しかし、1つ目の技術は、指の細やかな動きにより、座標位置を変更することになる。また、1つ目の技術は、拡大画面を表示するために、利用者が操作手順を追加することになる。
2つ目の技術は、特定の操作命令が実行された場合、カーソルを特定の位置に移動するものである。特定の位置は、たとえば、ダイアログ内のOKボタンが配置された位置、キャンセルボタンが配置された位置等である。しかし、2つ目の技術は、特定の位置を特定するために、OSやアプリが扱う命令を解釈することになるため、OSやアプリへの依存度が高くなる。また、情報処理装置101に新たに追加されたアプリに対応することが困難である。
そこで、実施の形態1、2にかかる情報処理装置101は、端末装置102の画面上で行われたタッチ操作の位置を、タッチ操作の位置周辺で仮想的にカーソルを移動させた場合に視覚効果のために表示画像が変化する位置に補正する。実施の形態1にかかる情報処理装置101は、カーソルを移動させた場合に視覚効果のためにカーソルの画像が変化した位置に補正する。これにより、情報処理装置101は、指で指定し難い狭い領域へのタッチ操作を容易にする。
図1では、端末装置102は、三角形TR1と、四角形RECT1を表示する。ここで、操作する利用者が、三角形TR1の大きさを拡大または縮小したいことを想定する。端末装置102は、利用者による操作によって、表示画面110上で行われたタッチ操作の操作情報を受け付ける。図1にて、操作情報により特定される操作位置は、操作位置P1とする。端末装置102は、受け付けた操作情報を情報処理装置101に送信する。
操作情報を受け付けた場合、情報処理装置101は、操作位置P1から所定範囲内の座標位置の各々の座標位置に対して、操作位置P1を各々の座標位置に設定した場合に更新される表示画面110の更新領域の画像情報を取得する。所定範囲は、たとえば、操作位置P1を中心に閾値分拡げた範囲とする。閾値の指定方法については、図8にて説明する。また、各々の座標位置は、操作位置P1が含まれてもよい。以下、所定範囲を、「探索範囲」と呼称する。
更新領域の画像情報は、更新領域に含まれる画像を特定するIDや、画像フォーマットに従った更新領域の画像データや、更新領域の画像データのハッシュ値を含む。画像フォーマットは、非圧縮のRGB値の配列でもよいし、BMP(microsoft windows(登録商標) BitMaP image)でもよいし、GIF(Graphics Interchange Format)、JPEG(Joint Photographic Experts Group)等の画像フォーマットでもよい。図1の例では、情報処理装置101は、更新領域の画像情報として、更新領域に含まれるカーソルの画像データのハッシュ値を取得する。ハッシュ値は、衝突し難いハッシュアルゴリズムにより求められることが好ましく、ハッシュアルゴリズムは、たとえば、MD5(Message Digest Algorithm 5)等である。
図1の例では、情報処理装置101は、操作位置P1にて、通常のカーソルC1の画像データのハッシュ値を取得する。また、情報処理装置101は、探索範囲内の位置P2にて、カーソルC2の画像データのハッシュ値を取得する。カーソルC2は、ドラッグすることにより、三角形TR1を拡大縮小することができることを示す。なお、情報処理装置101が実行するアプリはマウスによる操作を想定して開発されたため、カーソルC2に変化する領域は、狭い領域となる。
情報処理装置101は、通常のカーソルC1の画像データのハッシュ値およびカーソルC2の画像データのハッシュ値を取得することにより、位置P2にて視覚効果のためにカーソルの画像が変化したことを判断する。したがって、情報処理装置101は、探索範囲内の座標位置から、位置P2を選択して、カーソルの座標位置を位置P1に補正する。これにより、情報処理装置101は、指で指定し難い狭い領域へのタッチ操作を容易にする。以下、図2〜図14を用いて、実施の形態1にかかるシステム100について説明する。
(実施の形態1)
(シンクライアントシステムのシステム構成例)
次に、図1に示したシステム100をシンクライアントシステムに適用した場合について説明する。
図2は、シンクライアントシステムのシステム構成例を示す説明図である。図2において、シンクライアントシステム200は、サーバ201と、複数のクライアント装置202(図2の例では、3台)とを含む。シンクライアントシステム200において、サーバ201およびクライアント装置202は、ネットワーク210を介して通信可能に接続される。ネットワーク210は、たとえば、移動体通信網(携帯電話網)やインターネットなどである。
シンクライアントシステム200は、クライアント装置202が表示する画面をリモートでサーバ201に制御させる。シンクライアントシステム200によれば、実際にはサーバ201が実行した処理結果や保持するデータをクライアント装置202に表示させる。これにより、シンクライアントシステム200は、あたかもクライアント装置202が主体となって処理を実行したり、データを保持したりするかのように振る舞うことができる。
サーバ201は、クライアント装置202に表示する画面をリモートで制御するリモート画面制御サービスを提供するコンピュータである。サーバ201は、図1に示した情報処理装置101に相当する。クライアント装置202は、サーバ201からリモート画面制御サービスの提供を受けるコンピュータである。クライアント装置202は、図1に示した端末装置102に相当する。
(サーバ201のハードウェア構成例)
図3は、サーバのハードウェア構成例を示すブロック図である。図3において、サーバ201は、CPU(Central Processing Unit)301と、メモリ302と、I/F(Interface)303と、磁気ディスクドライブ304と、磁気ディスク305と、を有する。また、各構成部はバス300によってそれぞれ接続される。
ここで、CPU301は、サーバ201の全体の制御を司る。メモリ302は、たとえば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、たとえば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされた処理をCPU301に実行させることになる。
I/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータ(たとえば、クライアント装置202)に接続される。そして、I/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。I/F303には、たとえば、モデムやLANアダプタなどを採用することができる。
磁気ディスクドライブ304は、CPU301の制御に従って磁気ディスク305に対するデータのリード/ライトを制御する。磁気ディスク305は、磁気ディスクドライブ304の制御で書き込まれたデータを記憶する。なお、サーバ201は、上述した構成部の他、たとえば、SSD(Solid State Drive)、キーボード、ディスプレイなどを有することにしてもよい。
(クライアント装置202のハードウェア構成例)
図4は、クライアント装置のハードウェア構成例を示すブロック図である。図4において、クライアント装置202は、CPU401と、ROM402と、RAM403と、ディスクドライブ404と、ディスク405と、I/F406と、ディスプレイ407と、タッチパネル408と、を有する。また、各構成部はバス400によってそれぞれ接続される。
ここで、CPU401は、クライアント装置202の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶する。RAM403は、CPU401のワークエリアとして使用される。ディスクドライブ404は、CPU401の制御に従ってディスク405に対するデータのリード/ライトを制御する。ディスク405は、ディスクドライブ404の制御で書き込まれたデータを記憶する。ディスクドライブ404には、たとえば、磁気ディスクドライブ、ソリッドステートドライブなどを採用することができる。たとえばディスクドライブ404が磁気ディスクドライブである場合、ディスク405には、磁気ディスクを採用することができる。また、ディスクドライブ404がソリッドステートドライブである場合、ディスク405には、半導体素子メモリを採用することができる。
I/F406は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、I/F406は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。
ディスプレイ407は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ407は、たとえば、TFT(Thin Film Transistor)液晶ディスプレイなどを採用することができる。ディスプレイ407は、たとえば、図1に示した表示画面110を有する。
タッチパネル408は、利用者によるタッチ操作やドラッグ操作を検出する。なお、図4に示したクライアント装置202は、タブレット端末を想定する。クライアント装置202がパーソナル・コンピュータであれば、クライアント装置202は、キーボード、マウス等を有してもよい。
(サーバ201の機能的構成例)
図5は、実施の形態1にかかるサーバの機能的構成例を示すブロック図である。図5において、サーバ201は、受付部501と、取得部502と、選択部503と、補正部504と、送信部505と、を含む。制御部となる受付部501〜送信部505は、記憶装置に記憶されたプログラムをCPU301が実行することにより、受付部501〜送信部505の機能を実現する。記憶装置とは、具体的には、たとえば、図3に示したメモリ302、磁気ディスク305などである。
また、サーバ201は、補正補足情報510にアクセス可能である。補正補足情報510は、探索範囲を分割した領域ごとのカーソルの画像を特定する情報を記憶する。補正補足情報510の記憶内容は、図7にて説明する。
受付部501は、クライアント装置202の画面上で行われた操作の操作情報を受け付ける。たとえば、受付部501は、ドラッグ操作、フリック操作、ピンチアウト操作、ピンチイン操作等の操作入力を表す操作情報を受け付ける。なお、受け付けた操作情報は、メモリ302、磁気ディスク305等の記憶装置に格納される。
取得部502は、受付部501によって操作情報が受け付けられた場合、操作情報から特定される操作位置から探索範囲内の複数の座標位置の各々の座標位置に対して、操作位置を各々の座標位置に設定した場合に更新される画面の更新領域の画像情報を取得する。たとえば、取得部502は、探索範囲内の、ある座標位置に対して、カーソルの移動命令をOSに発行して、カーソルの移動によりアプリがマウスオーバー処理を行って更新される画像情報を取得する。
また、取得部502は、操作情報を受け付けた場合、各々の座標位置に対して、操作位置を示すカーソルの座標位置を各々の座標位置に設定した場合に更新される画面の更新領域に含まれるカーソルの画像情報を取得してもよい。なお、取得した画像情報は、補正補足情報510等の記憶領域に格納される。
選択部503は、各々の座標位置に対して取得した更新領域の画像情報に基づいて、複数の座標位置から、いずれかの座標位置を選択する。たとえば、選択部503は、画像情報が変化した座標位置を選択する。
また、選択部503は、複数の座標位置のうち取得したカーソルの画像情報が同一の内容となる座標位置の個数に基づいて、複数の座標位置から、いずれかの座標位置を選択してもよい。また、選択部503は、複数の座標位置のうち取得したカーソルの画像情報が同一の内容となる座標位置の個数が最も少ない座標位置から、いずれかの座標位置を選択してもよい。
たとえば、通常のカーソルの画像情報となった座標位置が1個あり、上下にドラッグ操作が行えることを示すカーソルの画像情報となった座標位置が10個あり、左右にドラッグ操作が行えることを示すカーソルの画像情報となった座標位置が3個あるとする。このとき、選択部503は、通常のカーソルの画像情報を除いて、最も少ない、左右にドラッグ操作が行えることを示すカーソルの画像情報となった座標位置のうちのいずれかの座標位置を選択する。また、選択部503は、左右にドラッグ操作が行えることを示すカーソルの画像情報となった座標位置のうち、操作位置に最も近い座標位置を選択してもよい。
また、選択部503は、第1の線と第2の線とが交差する座標位置から、いずれかの座標位置を選択してもよい。第1の線は、複数の座標位置のうち取得部502によって取得されたカーソルの画像情報が同一の内容となる第1の座標位置群の座標位置同士を結ぶことにより形成される線である。第2の線は、取得部502によって取得されたカーソルの画像情報が同一の内容となる第2の座標位置群の座標位置同士を結ぶことにより形成される線である。なお、選択された座標位置は、メモリ302、磁気ディスク305等の記憶装置に格納される。
補正部504は、操作位置を、選択部503によって選択されたいずれかの座標位置に補正する。たとえば、補正部504は、座標位置に対して、カーソルの移動命令をOSに発行する。
送信部505は、フレームバッファの更新された画像情報をクライアント装置202に送信する。フレームバッファは、表示画面110に表示する1フレーム分の画像データを一時的に保存する記憶領域であり、たとえば、VRAM(Video RAM)である。フレームバッファは、たとえば、メモリ302、磁気ディスク305などの記憶装置により実現される。
(クライアント装置202の機能的構成例)
図6は、クライアント装置の機能的構成例を示すブロック図である。図6において、クライアント装置202は、取得部601と、送信部602と、受信部603と、表示制御部604と、を含む構成である。取得部601〜表示制御部604は制御部となる機能である。具体的に、たとえば、図4に示したROM402、RAM403、ディスク405などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F406により、取得部601〜表示制御部604の機能を実現する。各機能部の処理結果は、たとえば、RAM403、ディスク405などの記憶装置に記憶される。
取得部601は、利用者の操作入力を表す操作情報を取得する。具体的には、たとえば、取得部601は、表示画面上でのタッチパネル408を用いた利用者の操作入力を受け付けることにより、利用者の操作入力を表す操作情報を取得する。たとえば、取得部601は、タッチパネル408を用いてタッチ操作、ドラッグ操作、フリック操作、ピンチアウト操作、ピンチイン操作等の操作入力を表す操作情報を取得する。さらに、取得部601は、サーバ201で実行中のアプリが解釈可能なマウスを用いた操作入力に変換した操作情報を取得することにしてもよい。ただし、操作情報の変換処理は、サーバ201側で行われることにしてもよい。なお、ドラッグ操作のように操作入力が継続して行われる場合がある。この場合、取得部601は、利用者の操作入力を表す操作情報を一定時間間隔ごとに取得することにしてもよい。
送信部602は、取得部601によって取得された操作情報をサーバ201に送信する。たとえば、送信部602は、取得部601によって操作情報が取得されると、取得された都度、取得された操作情報をサーバ201に送信する。
受信部603は、サーバ201から更新された画像情報を受信する。たとえば、受信部603は、サーバ201で実行中のアプリによって更新された画像情報をサーバ201から受信する。表示制御部604は、ディスプレイ407を制御して、受信部603によって受信された更新された画像情報を表示する。
図7は、補正補足情報の記憶内容の一例を示す説明図である。補正補足情報510は、メッシュ領域ごとのカーソルの画像を特定する情報を記憶する。図7に示す補正補足情報510は、レコード701−1〜レコード701−3を有する。
補正補足情報510は、メッシュ領域、カーソルIDという2つのフィールドを含む。メッシュ領域フィールドには、メッシュ領域を一意に特定する情報が格納される。メッシュ領域を一意に特定する情報は、たとえば、メッシュ領域の各頂点の座標位置である。また、メッシュ領域が矩形領域であるならば、メッシュ領域を一意に特定する情報は、左上の頂点の座標位置および右下の頂点の座標位置でもよい。さらに、メッシュ領域が矩形領域であり、メッシュ領域の範囲が一定であるならば、メッシュ領域を一意に特定する情報は、メッシュ領域の中心の座標位置でもよい。実施の形態1では、メッシュ領域が矩形領域であり、メッシュ領域の範囲が縦4[画素]×横4[画素]であるとして、メッシュ領域フィールドには、メッシュ領域の中心の座標位置を格納する。
カーソルIDフィールドには、該当のメッシュ領域でのカーソルの画像を特定する情報が格納される。カーソルの画像を特定する情報は、たとえば、ハッシュ関数を用いて、取得したカーソルの画像のハッシュ値を、カーソルの画像を特定する情報としてもよい。また、カーソルが変更される際に、カーソルを変更するAPIの引数となるカーソル画像のIDが本補正処理を実行するソフトウェアが取得できるならば、カーソルの画像を特定する情報は、カーソル画像のIDでもよい。図7の例では、カーソルID:22と、カーソルID:13の例を示す。
たとえば、レコード701−1は、中心の座標位置が(302,502)となるメッシュ領域でのカーソルIDが“22”となることを示す。
図8は、実施の形態1にかかる補正処理の動作例を示す説明図(その1)である。また、図9は、実施の形態1にかかる補正処理の動作例を示す説明図(その2)である。図8に示すクライアント装置202は、サーバ201から送信された、三角形と四角形の画像を表示した状態である。この状態で、クライアント装置202は、利用者により特定の操作を受け付ける。特定の操作は、通常のユーザインターフェースで行われる操作と区別がつけば、どのような操作でもよい。たとえば、実施の形態1における特定の操作は、2本指で画面をなぞり始める操作であるとする。
また、特定の操作であると認識する装置は、クライアント装置202でもよいし、サーバ201でもよい。たとえば、クライアント装置202が特定の操作であると認識する場合、2本指で画面をなぞり始める操作を受け付けた場合、特定の操作を示す操作種別と、操作位置情報として、2本の指がタッチパネルに触れた点の中点の座標位置とをサーバ201に送信する。また、クライアント装置202が特定の操作であると認識する場合、2本の指がタッチパネルに触れた点の座標位置を送信し、サーバ201が、2点の座標位置を受け付けた場合に、特定の操作であると認識する。
図8と図9との説明では、クライアント装置202が、特定の操作であることを認識するとする。図8の(A)が示すように、クライアント装置202は、特定の操作を示すコマンドID:13と、操作位置情報として、点情報P1(x,y=400,600)とをサーバ201に送信する。ただし、点情報内のxは、表示画面110での点の横方向の座標位置を示す。点情報内のyは、表示画面110での点の縦方向の座標位置を示す。
特定の操作を示すコマンドIDと操作位置情報とを受け付けた後、サーバ201は、図8の(B)が示すように、カーソルの移動命令を実行する探索範囲を算出する。探索範囲が、カーソルの座標位置の補正を行う範囲となる。たとえば、サーバ201は、操作位置情報の座標位置を中心に、閾値として前後左右100[画素]分拡げた探索範囲を算出する。
図8の例では、サーバ201は、(x,y=400,600)を中心として、探索範囲B1(x,y,w,h=300,500,200,200)を算出する。ただし、探索範囲内のxは、表示画面110での探索範囲の左上の点の横方向の座標位置を示す。探索範囲内のyは、表示画面110での探索範囲の左上の点の縦方向の座標位置を示す。探索範囲内のwは、表示画面110での探索範囲の横方向の幅の画素数を示す。探索範囲内のhは、表示画面110での探索範囲の縦方向の高さの画素数を示す。
また、閾値は、シンクライアントシステム200の管理者が指定してもよい。または、クライアント装置202が、シンクライアントシステム200の使用を開始した際に、利用者の指が表示画面に触れた範囲をサーバ201に送信し、サーバ201は、触れた範囲を閾値として設定してもよい。
探索範囲の算出後、サーバ201は、図8の(C)が示すように、探索範囲を分割したメッシュ領域ごとに、カーソルの移動命令を実行して、カーソルの画像を取得する。カーソルの画像を取得した後、サーバ201は、カーソルの画像をハッシュ関数に通して得た一意の値をカーソルIDとして取得し、メッシュ領域とカーソルIDとを補正補足情報510に追加する。たとえば、図8の(C)では、レコード701−1がメッシュ領域R1でのカーソルIDを示し、レコード701−2がメッシュ領域R2でのカーソルIDを示し、レコード701−3がメッシュ領域R3でのカーソルIDを示す。
各メッシュ領域のカーソルIDを取得後、サーバ201は、図8の(D)が示すように、探索領域B1内のカーソルIDごとに、出現した回数の合計を算出し、算出した合計の最も小さいカーソルIDのメッシュ領域を選択する。図8の(D)の例では、サーバ201は、算出した合計の最も小さいカーソルID:13のメッシュ領域R3のメッシュ領域(x,y=418,610)を選択する。なお、選択する際に、サーバ201は、デフォルトカーソルを示すカーソルIDを選択対象から除いてもよい。サーバ201は、図9の(E)が示す処理を行う。
メッシュ領域の選択後、サーバ201は、図9の(E)が示すように、図8の(A)にて受け付けた操作位置情報P1(x,y=400,600)を、選択したメッシュ領域の中心の点を用いて、操作位置情報P2(x,y=418,610)に補正する。サーバ201は、カーソルの座標位置を操作位置情報P2に設定するようにOSに通知して、ドラッグ操作を開始する。また、サーバ201は、ドラッグ操作が開始された画像の画像情報をクライアント装置202に送信する。
続けて、図9の(F)が示すように、利用者が特定の操作をし続けたとする。図9の(F)では、利用者が、右下方向へのドラッグ操作を行ったとする。この場合、クライアント装置202は、特定の操作を示すコマンドID:13と、操作位置情報として、点情報P3(x,y=428,620)とをサーバ201に送信する。
2つ目以降の特定の操作を示すコマンドIDと操作位置情報とを受け付けた場合、サーバ201は、図9の(G)が示すように、特定の操作であるとみなさずに、受け付けた操作を通常のドラッグ操作の続きであると認識し、特定の操作を示すコマンドIDをドラッグ操作を示すIDへと変換して操作を続行する。結果、サーバ201は、ドラッグ操作が行われ、三角形の拡大操作を実行する。
上述した図8の(D)にて、サーバ201は、算出した合計の最も小さいカーソルIDのメッシュ領域を選択するが、合計の最も小さいカーソルIDとなるメッシュ領域が複数存在する場合もあるし、合計の最も小さいカーソルIDが複数となる場合もある。この場合、サーバ201は、エッジ検出を利用して、補正領域となるメッシュ領域を選択してもよい。図10にて、エッジ検出を利用したカーソルIDの選択例について説明する。
図10は、エッジ検出を利用したカーソルIDの選択例を示す説明図である。具体的に、図10では、探索範囲でのカーソルの並び方を利用して、コーナー検出を行い、エッジが交差したメッシュ領域のカーソルIDを選択する例について説明する。また、最も小さいカーソルIDとなったメッシュ領域を、「補正候補領域」と呼称し、補正候補領域の中心の座標位置を、「補正候補の座標位置」と呼称する。
コーナー検出とは、エッジ検出の一種であり、画像中の隣り合ったピクセルとの色が不連続になるエッジが交差する部分を検出する処理である。コーナー検出には、たとえば、Harrisオペレータによる検出手法を利用することができる。具体的に、サーバ201は、コーナー検出に利用するため、メッシュ領域のカーソルIDを画像情報へ変換する作業を行う。
サーバ201は、各メッシュ領域を1画素とみなし、メッシュ領域に関連付いたカーソルIDを色情報として変換を行う。カーソルIDを色情報に変換する例として、サーバ201は、カーソルIDの算出した合計の小さい順からソートした上で、各カーソルIDが探索範囲中のメッシュ領域全体に占める割合をカーソルID毎に算出する。次に、サーバ201は、カーソルIDに対して占める割合に基づいた色情報の付与を行う。色情報は、たとえば、「(256/100)×カーソルIDが占めるパーセンテージ」という式で算出される。サーバ201は、全体の2%を占めるカーソルIDには2.56×2=5.12≒5を与え、全体の30%を占めるカーソルIDには同様に77を与え、…、という形で色情報を与える。与えられた色情報は、8ビットグレースケールを想定する。カーソルIDの全体に占める割合に基づき異なる色情報を与えることにより、サーバ201は、マウスカーソルIDが異なる境界を検出しやすくすることが可能となる。
次に、サーバ201は、変換した画像情報を、Harrisオペレータを利用したコーナー検出処理に渡し、コーナーとなる画素の座標位置を取得する。以下、コーナーとなる画素の座標位置を、「コーナー位置」と称する。
コーナー位置を取得した後、サーバ201は、コーナー位置を元のメッシュ領域の座標位置に変換する。本実施の形態では、サーバ201は、メッシュ領域の左上の座標(x,y)にコーナー位置の値を4倍した値(4x,4y)を加えることにより、コーナー位置に該当するメッシュ領域の座標位置を算出可能である。
続けて、サーバ201は、コーナー位置と、タッチされた操作位置との距離が他の最近傍の補正候補の座標位置との距離×閾値より近いかどうか判定を行う。閾値は、たとえば2となる。前述の判定処理は、利用者がコーナーを操作する場合と、コーナーを操作することを意図せず操作した場合でもコーナー位置が検出されてしまった場合と、を切り分けるために行う処理である。
コーナー位置と操作位置との距離が、コーナー位置と他の最近傍の補正候補の座標位置との距離×閾値より小さい場合、サーバ201は、コーナー位置に該当するメッシュ領域の中心の座標位置を補正座標に選択して補正を行う。一方、コーナー位置と操作位置との距離が、他の最近傍の補正候補の座標位置との距離×閾値以上である場合、サーバ201は、他の最近傍の補正候補の座標位置を補正座標に選択して補正を行う。
以上説明を行ったエッジ検出は、サーバ上のアプリが、四角いインターフェースやウィンドウによって形成される特性を利用して検出を行う。たとえば、図10の(A)では、三角形TR1に、ドラッグ操作を行うことにより形状を変化することができる枠FR1が付与された状態を示す。この状態で、利用者により特定の操作を受け付けた後、サーバ201が探索範囲B1を算出し、探索範囲B1内のメッシュ領域ごとに、カーソルIDを取得する。図10の(B)は、カーソルIDを取得した結果、各メッシュ領域のカーソルIDを示す。具体的に、図10の(B)では、メッシュ領域群R4とR5に関連付いたカーソルID:22、メッシュ領域R6に関連付いたカーソルID:11、メッシュ領域R7に関連付いたカーソルID:12およびメッシュ領域R8に関連付いたカーソルID:13を示す。また、図10の(B)では、カーソルIDが変化しなかったメッシュ領域群R9を示す。
図10の(B)を用いて、サーバ201が行うエッジ検出の一例を示す。サーバ201は、カーソルIDを8ビットグレースケールの符号へとマッピングした画像データを作成する。各メッシュ領域群の全体に占める割合が、R6、R7、R8がそれぞれ2%ずつ、R4、R5がそれぞれ10%ずつ、R9が50%であるとする。この時、サーバ201は、R6、R7、R8の群に属する各メッシュ領域へ5の色情報を与え、R4・R5の群に属する各メッシュ領域へ26の色情報を与え、R9の各メッシュ領域へ128の色情報を与える。次に、サーバ201は、メッシュ領域に色情報を与えて作成した画像情報を、Harrisオペレータを利用したコーナー検出処理に渡し、コーナー位置を取得する。取得したコーナー位置が(x、y=100、200)であった時、サーバ201はコーナー位置を4倍して(x、y=400、800)とし元のメッシュ領域の座標での位置を算出する。続けて、サーバ201は、「コーナー位置と操作位置の距離」と「他の最近傍の補正候補の座標と操作位置の距離×閾値(2)」を比較する。たとえば、コーナー位置と操作位置との距離が30画素であり、他の最近傍の補正候補と20画素離れている場合、サーバ201は、30<20×2であるためコーナー位置を補正座標として補正を行う。コーナー位置が最近傍の補正候補と10画素しか離れていない場合、サーバ201は、補正候補を補正座標として選択し補正を行う。
結果、図10の(B)では、サーバ201は、コーナー検出によりメッシュ領域群R4、R5をエッジとして検出し、メッシュ領域群R4とR5の交点となるメッシュ領域R5を補正領域として選択する。これにより、サーバ201は、補正補足情報510を利用して、より多くの場合に適切な補正座標の算出が可能となる。
続けて、図8〜図10で説明した動作を行うフローチャートを、図11〜図14を用いて説明する。
図11は、クライアント装置による描画処理手順の一例を示すフローチャートである。クライアント装置による描画処理は、サーバ201から受信した画像情報を描画する処理である。クライアント装置202は、利用者による操作があったか否かを判断する(ステップS1101)。利用者による操作がない場合(ステップS1101:No)、クライアント装置202は、一定時間経過後、ステップS1101の処理を実行する。利用者による操作があった場合(ステップS1101:Yes)、クライアント装置202は、操作情報を逐次サーバ201へ送信する(ステップS1102)。次に、クライアント装置202は、サーバ201から、更新した画像情報を受信したか否かを判断する(ステップS1103)。更新した画像情報が未受信である場合(ステップS1103:No)、クライアント装置202は、ステップS1101の処理に移行する。
更新した画像情報を受信した場合(ステップS1103:Yes)、クライアント装置202は、更新した画像情報をフレームバッファに反映する(ステップS1104)。ステップS1104の実行終了後、クライアント装置202は、ステップS1101の処理を実行する。クライアント装置による描画処理を実行することにより、クライアント装置202は、サーバ201にて更新した画像情報を描画して、操作が反映された画像情報を提供することができる。
図12は、サーバによる描画処理手順の一例を示すフローチャートである。サーバによる画像処理は、クライアント装置202からの操作情報を反映した画像情報を生成して、クライアント装置202に送信する処理である。
サーバ201は、一定時間が経過したか否かを判断する(ステップS1201)。たとえば、サーバ201は、30[Frames Per Second:fps]で表示画面を更新する場合、一定時間として0.033[ミリ秒]経過したか否かを判断する。一定時間が経過していない場合(ステップS1201:No)、サーバ201は、一定時間経過後、ステップS1201の処理を実行する。一定時間が経過した場合(ステップS1201:Yes)、サーバ201は、フレームバッファに更新があったか否かを判断する(ステップS1202)。なお、更新があったかを比較するデータは、一定時間の前のフレームバッファのデータである。
フレームバッファに更新がある場合(ステップS1202:Yes)、サーバ201は、フレームバッファのうちの更新した画像情報を生成する(ステップS1203)。次に、サーバ201は、更新した画像情報をクライアント装置202に送信する(ステップS1204)。ステップS1204の処理終了後、サーバ201は、ステップS1205の処理に移行する。
フレームバッファに更新がない場合(ステップS1202:No)、または更新した画像情報をクライアント装置に送信後(ステップS1204)、サーバ201は、クライアント装置202により、操作情報を受け付けたか否かを判断する(ステップS1205)。操作情報を受け付けていない場合(ステップS1205:No)、サーバ201は、ステップS1201の処理に移行する。操作情報を受け付けた場合(ステップS1205:Yes)、続けて、サーバ201は、受け付けた操作情報が特定の操作を示すか否かを判断する(ステップS1206)。受け付けた操作情報が特定の操作でない場合(ステップS1206:No)、サーバ201は、受け付けた操作情報をOSに通知する(ステップS1210)。操作情報を受け付けたOSは、操作情報をアプリへと通知する。
受け付けた操作情報が特定の操作である場合(ステップS1206:Yes)、サーバ201は、操作情報から、操作位置情報を取得する(ステップS1207)。次に、サーバ201は、操作位置情報から、探索範囲を算出する(ステップS1208)。続けて、サーバ201は、補正処理を実行する(ステップS1209)。補正処理の詳細は、図13にて後述する。ステップS1209の実行終了後、サーバ201は、操作情報をOSに通知する(ステップS1210)。受け付けた操作情報がOSを経由してアプリに通知され、アプリによってフレームバッファが更新される可能性があるため、ステップS1202の処理に移行する。サーバによる描画処理を実行することにより、サーバ201は、クライアント装置202からの操作情報を反映した画像情報を生成して、クライアント装置202に送信することができる。
図13は、実施の形態1にかかる補正処理手順の一例を示すフローチャートである。補正処理は、カーソルの座標位置を補正する処理である。サーバ201は、探索範囲をメッシュ領域に分割する(ステップS1301)。次に、サーバ201は、メッシュ領域ごとに、カーソルの移動命令をOSに発行する(ステップS1302)。続けて、サーバ201は、メッシュ領域ごとに、メッシュ領域に移動した際のカーソルの画像情報のカーソルIDを取得する(ステップS1303)。次に、サーバ201はメッシュ領域と、カーソルIDとの組を1レコードとして、補正補足情報510に追加する(ステップS1304)。続けて、サーバ201は、カーソルIDごとに、出現した回数の合計を算出する(ステップS1305)。
次に、サーバ201は、分割した複数のメッシュ領域から、算出した合計が最も小さいカーソルIDのメッシュ領域の中心の座標位置を補正座標位置として選択する(ステップS1306)。続けて、サーバ201は、選択した補正座標位置で、操作位置情報を補正する(ステップS1307)。ステップS1307の処理終了後、サーバ201は、補正処理を終了する。補正処理を実行することにより、サーバ201は、カーソルの座標位置を、利用者が期待する適切な位置に補正することができる。
図14は、ステップS1306の処理について、エッジ検出を利用してメッシュ領域を選択する処理手順の一例を示すフローチャートである。サーバ201は、算出した合計の最も小さいメッシュ領域が1つか否かを判断する(ステップS1401)。算出した合計の最も小さいメッシュ領域が1つである場合(ステップS1401:Yes)、サーバ201は、分割した複数のメッシュ領域から、算出した合計が最も小さいカーソルIDのメッシュ領域の中心の座標位置を補正座標位置として選択する(ステップS1402)。ステップS1402の処理実行後、サーバ201は、図14に示すフローチャートを終了する。
算出した合計の最も小さいメッシュ領域が2つ以上ある場合(ステップS1401:No)、サーバ201は、探索範囲内のメッシュ領域のカーソルIDを色情報に変換して、画像情報を生成する(ステップS1403)。次に、サーバ201は、Harrisオペレータを利用したコーナー検出を行って、エッジが交差するコーナー位置を取得する(ステップS1404)。続けて、サーバ201は、コーナー位置が存在するメッシュ領域を算出する(ステップS1405)。
続けて、サーバ201は、コーナー位置と操作位置との距離が他の最近傍の補正候補の座標位置との距離×閾値より小さいか否かを判断する(ステップS1406)。コーナー位置と操作位置との距離が他の最近傍の補正候補の座標位置との距離×閾値より小さい場合(ステップS1406:Yes)、サーバ201は、コーナー位置が存在するメッシュ領域の中心の座標位置を補正座標位置として選択する(ステップS1407)。コーナー位置と操作位置との距離が他の最近傍の補正候補の座標位置との距離×閾値以上である場合(ステップS1406:No)、サーバ201は、他の最近傍の補正候補の座標位置を補正座標位置として選択する(ステップS1408)。ステップS1407またはステップS1408の処理を終了した後、サーバ201は、図14に示すフローチャートを終了する。図14に示すフローチャートを実行することにより、算出した合計の最も小さいメッシュ領域が複数ある場合に、適切な補正座標の算出が可能となる。
以上説明したように、サーバ201によれば、端末装置102の画面上で行われたタッチ操作の位置を、タッチ操作の位置周辺で仮想的にカーソルを移動させた場合に視覚効果のために表示画像が変化する位置に補正する。これにより、サーバ201は、指で指定し難い狭い領域へのタッチ操作を容易にする。
また、サーバ201によれば、カーソルの座標位置を、仮想的にカーソルを移動させた場合に視覚効果のためにカーソルの画像が変化した位置に補正してもよい。視覚効果のためにカーソルの画像が変化した位置は、マウスでクリックすることにより何らかの処理を行える位置であることを示す。したがって、サーバ201は、指で指定し難い狭い領域からはずれてしまったタッチ操作の操作位置を、何らかの処理を行う位置に補正することができる。
また、サーバ201によれば、カーソルの座標位置を、仮想的にカーソルの画像が同一の内容となる座標位置の個数が最も少ない座標位置に補正してもよい。同一の内容となる座標位置の個数が最も少ない座標位置で形成される領域が、探索範囲内で最も狭い領域となる。したがって、仮想的にカーソルの画像が同一の内容となる座標位置の個数が最も少ない座標位置に補正することにより、サーバ201は、探索範囲内で最も狭い領域へのタッチ操作を容易にする。
また、サーバ201によれば、カーソルの座標位置を、エッジ検出を利用して補正してもよい。これにより、サーバ201は、より多くの場合に適切な補正座標の算出が可能となる。
また、サーバ201によれば、特定の操作を受け付けた際に、更新領域の画像情報を取得する処理を開始してもよい。これにより、サーバ201は、狭い領域へのタッチ操作が要求されない時に、更新領域の画像情報を取得する処理を実行しなくなるため、サーバ201にかかる負荷を減らすことができる。
また、サーバ201は、利用者の操作量を増加させず、また、OSやアプリの命令に非依存の状態で、指による細かい領域への操作を容易にし、誤操作発生を抑制することができる。
(実施の形態2)
実施の形態1にかかるサーバ201は、カーソルの画像情報を取得して、利用者がタッチしたい座標を推定する。しかし、実際には、利用者の指示を受け付けた方がよいこともある。たとえば、探索範囲内に、アプリによって複数の小さなボタンが配置された場合である。複数の小さなボタンが配置された場合、図1で説明した1つ目の技術により、複数の小さなボタンへのタッチ操作を容易にすることができる。しかし、1つ目の技術は、指の細やかな動きにより、座標位置を変更することになる。
そこで、実施の形態2にかかるサーバ201は、利用者の指示を受け付けて、指示に基づいて、カーソルの座標位置を補正する方法について説明する。なお、実施の形態1において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
図15は、実施の形態2にかかるサーバの機能構成例を示すブロック図である。図15において、サーバ201は、受付部501と、取得部1501と、生成部1502と、送信部1503と、選択部1504と、補正部504と、を含む。制御部となる受付部501、補正部504、取得部1501〜選択部1504は、記憶装置に記憶されたプログラムをCPU301が実行することにより、受付部501、補正部504、取得部1501〜選択部1504の機能を実現する。記憶装置とは、具体的には、たとえば、図3に示したメモリ302、磁気ディスク305などである。
また、サーバ201は、補正用更新領域情報1510にアクセス可能である。カーソルのマウスオーバー処理によって更新された更新領域を記憶する。補正用更新領域情報1510の記憶内容は、図16にて説明する。
取得部1501は、受付部501によって操作情報が受け付けられた場合、各々の座標位置に対して、操作位置を各々の座標位置に設定した場合に更新される更新後の画面の操作位置から探索範囲内の画像情報を取得する。たとえば、取得部1501は、画像フォーマットに従った探索範囲内の画像データを取得する。
また、取得部1501は、受付部501によって操作情報が受け付けられた場合、各々の座標位置に対して、操作位置を各々の座標位置に設定した場合に更新される画面の更新領域の更新前の画像情報を取得してもよい。なお、取得した画像情報は、補正用更新領域情報1510等の記憶領域に格納される。
生成部1502は、取得部1501によって取得された探索範囲内の画像情報に基づいて、探索範囲内の画像を拡大した拡大画像の画像情報を生成する。また、生成部1502は、各々の座標位置に対して取得した更新領域の画像情報に基づいて、更新領域の画像を拡大した拡大画像の画像情報を生成してもよい。また、生成部1502は、各々の座標位置に対して取得した更新領域の更新前の画像情報に基づいて、更新領域の更新前の画像を拡大した拡大画像の画像情報を生成してもよい。具体的な画像の拡大方法については、図17、図18にて説明する。なお、生成した拡大画像の画像情報は、メモリ302、磁気ディスク305等の記憶装置に格納される。送信部1503は、生成部1502によって生成された拡大画像の画像情報をクライアント装置202に送信する。
選択部1504は、クライアント装置202に拡大画像の画像情報が送信された結果、次に示す場合、前述の操作情報に基づいて、複数の座標位置から、いずれかの座標位置を選択する。次に示す場合とは、クライアント装置202の画面内の拡大画像が表示された表示領域内で行われた操作の操作情報を受け付けた場合である。具体的な選択方法は、図18にて後述する。なお、選択結果は、メモリ302、磁気ディスク305等の記憶装置に格納される。
図16は、補正用更新領域情報の記憶内容の一例を示す説明図である。補正用更新領域情報1510は、カーソルのマウスオーバー処理によって更新された更新領域を記憶する。図16に示す補正用更新領域情報1510は、レコード1601−1〜レコード1601−3を記憶する。たとえば、レコード1601−1は、左上の点のx座標が750[画素]であり、左上の点のy座標が300[画素]であり、左上の点からの幅が30[画素]であり、左上の点からの高さが30[画素]である領域を示す。
図17は、実施の形態2にかかる補正処理の動作例を示す説明図(その1)である。また、図18は、実施の形態2にかかる補正処理の動作例を示す説明図(その2)である。図17に示すクライアント装置202は、サーバ201から送信された、三角形と四角形の画像を表示した状態である。この状態で、クライアント装置202は、利用者により特定の操作を受け付ける。特定の操作は、通常のユーザインターフェースで行われる操作と区別がつけば、どのような操作でもよい。たとえば、実施の形態2における特定の操作は、2本指で画面を触れる操作であるとする。また、実施の形態1における補正処理と、実施の形態2における補正処理と、を行うことが可能なシンクライアントシステム200は、補正処理のトリガとなる特定の操作を分けることにより、実現可能である。たとえば、実施の形態1における特定の操作が2本指で画面を触れる操作であり、実施の形態2における特定の操作が3本指で画面を触れる操作であるとしてもよい。
また、実施の形態1で説明したように、実施の形態2でも、特定の操作であると認識する装置は、クライアント装置202でもよいし、サーバ201でもよい。図17と図18との説明では、クライアント装置202が、特定の操作であることを認識するとする。図17の(A)が示すように、クライアント装置202は、特定の操作を示すコマンドID:13と、操作位置情報として、点情報P11(x,y=800,300)とをサーバ201に送信する。
特定の操作を示すコマンドIDと操作位置情報とを受け付けた後、図17の(B)が示すように、サーバ201は、カーソルの移動命令を実行する探索範囲を算出する。探索範囲が、カーソルの座標位置の補正を行う範囲となる。たとえば、サーバ201は、操作位置情報の座標位置を中心に、前後左右100[画素]分拡げた探索範囲を算出する。
図17の(B)の例では、サーバ201は、(x,y=800,300)を中心として、探索範囲B2(x,y,w,h=700,200,200,200)を算出する。探索範囲の算出後、サーバ201は、探索範囲を分割したメッシュ領域ごとに、カーソルの移動命令を実行して、カーソルのマウスオーバー処理によって更新された更新領域の画像情報を取得する。続けて、サーバ201は、画像情報が更新された領域を、補正用更新領域情報1510に追加する。たとえば、図17の(C)では、レコード1601−1が領域R11を示し、レコード1601−2が領域R12を示し、レコード1601−3が領域R13を示す。
なお、あるメッシュ領域に移動したカーソルのマウスオーバー処理によって更新された更新領域が、あるメッシュ領域より大きい場合もありえる。この場合、サーバ201は、前述の更新領域に含まれる、あるメッシュ領域以外の他のメッシュ領域について、カーソルの移動命令を行わなくてよい。
メッシュ領域に対応する更新領域の画像情報を取得後、サーバ201は、図17の(D)が示すように、各更新領域を結合した結合更新領域R14を取得する。結合更新領域R14は、探索範囲より小さくなる可能性がある。図17の(D)では、結合更新領域R14は、(x,y,w,h=750,300,180,110)となる。図17の(D)では、結合更新領域R14は、探索範囲B2より小さい。
続けて、サーバ201は、結合更新領域R14の画像を、指定された倍率に拡大した拡大画像PCT1の画像情報を生成する。拡大画像PCT1の画像情報の生成方法として、サーバ201は、バイキュービック法、ニアレストネイバー法、バイリニア法等を用いる。指定された倍率は、たとえば、シンクライアントシステム200の設計者により指定される。指定された倍率は、たとえば、2倍に指定される。
また、サーバ201は、拡大画像PCT1を、結合更新領域R14の更新後の画像を拡大して生成してもよいし、結合更新領域R14の更新前の画像を拡大して生成してもよい。結合更新領域R14の更新後の画像を拡大する場合、サーバ201は、フレームバッファに格納された画像情報を用いることになる。結合更新領域R14の更新前の画像を拡大する場合、サーバ201は、カーソルの移動命令を発行する前にフレームバッファの内容を保持しておく。そして、サーバ201は、結合更新領域R14の取得後、保持したフレームバッファの内容を用いて、拡大画像PCT1を生成する。
そして、サーバ201は、探索範囲B2と被らない領域となるように拡大画像の表示位置を決定して、拡大画像の画像情報をクライアント装置202に送信する。探索範囲B2と被らない領域となるように拡大画像の表示領域を決定する例については、図19にて説明する。
たとえば、サーバ201は、画像を送信するコマンドID:2と、拡大画像PCT1の画像情報と、拡大画像PCT1の画像情報の表示位置となる画像表示領域R15(x,y,w,h=750,420,360,220)と、をクライアント装置202に送信する。クライアント装置202が拡大画像の画像情報を受け付けた後の処理については、図18にて説明する。
拡大画像PCT1の画像情報を受け付けたクライアント装置202は、図18の(E)が示すように、拡大画像PCT1の画像情報と併せて受け付けた画像表示領域に、拡大画像PCT1を表示する。続けて、クライアント装置202は、利用者による操作を受け付けて、通常の操作を示すコマンドID:10と、操作位置情報として、点情報P12(x,y=1000,450)とをサーバ201に送信する。
通常の操作を示すコマンドIDと操作位置情報とを受け付けた後、サーバ201は、図18の(F)が示すように、操作位置情報が、画像表示領域R15に含まれる場合、操作位置情報を、実際の画面に当てはめた場合の座標位置を算出する。具体的に、図18の(F)の例では、サーバ201は、操作位置情報となる点情報P12(x,y=1000,450)が、画像表示領域R15(x,y,w、h=750,420,360,220)に含まれるか否かを判断する。この例では、サーバ201は、操作位置情報が画像表示領域R15に含まれると判断する。
次に、サーバ201は、操作位置情報を拡大前の元の位置情報に当てはめた場合の座標位置を算出する。具体的に、サーバ201は、操作位置情報から、拡大画像の画像表示領域R15の(x,y)座標を減算する。そして、サーバ201は、減算結果を拡大画像の倍率で除算した除算結果に、結合更新領域R14の(x,y)座標を加えることにより、拡大前の元の位置情報に当てはめた場合の座標位置を算出する。図17、図18の例では、サーバ201は、拡大前の元の位置情報に当てはめた場合の座標位置(x,y)を下記(1)式のように算出する。
(x,y)=((1000−750)/2+750,(450−420)/2+300)=(875,315) …(1)
拡大前の元の位置情報に当てはめた場合の座標位置を算出した後、サーバ201は、カーソルの座標位置を算出した座標位置に設定するようにOSに通知する。OSに通知された後、図18の(G)で示すように、サーバ201は、補正後の座標位置にてタッチ操作が行われたと認識して処理を実行する。
図17と図18で説明した動作により、シンクライアントシステム200は、カーソルの座標位置では座標位置の補正が行えない場合でも、利用者の指示操作を求めることで細かい領域に対する操作を誤操作なしに、かつ少ない手順で実行可能となる。
図19は、拡大画像の画像情報の表示位置の一例を示す説明図である。サーバ201は、元の探索範囲と被らない領域となるように拡大画像の表示領域を決定する。拡大画像の表示領域は元の探索範囲から近いことが好ましいため、サーバ201は、元の探索範囲の近傍となるように、拡大画像の表示領域を決定する。たとえば、サーバ201は、元の探索範囲の下方向・右方向・上方向・左方向の順序で、元の探索範囲と被らない領域を検索する。図19の説明では、図17と図18の説明で用いた符号を用いて、元の探索範囲を、探索範囲B2とし、拡大画像をPCT1とする。
以下、探索範囲B2と拡大画像PCT1は、10[画素]離して表示することとする。また、desk_wを表示画面110の幅の画素数とし、desk_hを表示画面110の高さの画素数とする。さらに、orig_xを探索範囲B2のxとし、orig_yを探索範囲B2のyとし、orig_wを探索範囲B2のwとし、orig_hを探索範囲B2のhとする。
情報処理装置101は、探索範囲B2の下方向に、拡大画像PCT1を表示可能か否かを、下記(2)式が満たされるか否かにより判断する。
desk_h−(orig_y+orig_h)>orig_h*指定された倍率+10 …(2)
また、情報処理装置101は、探索範囲B2の右方向に、拡大画像PCT1を表示可能か否かを、下記(3)式が満たされるか否かにより判断する。
desk_w−(orig_x+orig_w)>orig_w*指定された倍率+10 …(3)
さらに、情報処理装置101は、探索範囲B2の上方向に、拡大画像PCT1を表示可能か否かを、下記(4)式が満たされるか否かにより判断する。
desk_h−orig_y>orig_h*指定された倍率+10 …(4)
さらに、情報処理装置101は、探索範囲B2の左方向に、拡大画像PCT1を表示可能か否かを、下記(5)式が満たされるか否かにより判断する。
desk_w−orig_x>orig_w*指定された倍率+10 …(5)
また、サーバ201は、探索範囲B2の下方向または上方向に拡大画像PCT1を表示すると決定した場合、下記(6)式が満たされたら、探索範囲B2と拡大画像PCT1とが左揃えとなるように拡大画像PCT1の表示位置を決定する。一方、下記(6)式が満たされないなら、サーバ201は、探索範囲B2と拡大画像PCT1とが右揃えとなるように拡大画像PCT1の表示位置を決定する。
desk_w−orig_x>orig_w*指定された倍率+10 …(6)
同様に、サーバ201は、探索範囲B2の右方向または左方向に拡大画像PCT1を表示すると決定した場合、下記(7)式が満たされたら、探索範囲B2と拡大画像PCT1とが上揃えとなるように拡大画像PCT1の表示位置を決定する。一方、下記(7)式が満たされないなら、サーバ201は、探索範囲B2と拡大画像PCT1とが下揃えとなるように拡大画像PCT1の表示位置を決定する。
desk_h−orig_y>orig_h*指定された倍率+10 …(7)
図19の(A)〜(D)は、サーバ201が(2)〜(7)式を実行した結果により決定された表示位置に従って、クライアント装置202が拡大画像PCT1を表示する例である。具体的に、図19の(A)は、(2)式と(6)式が満たされたことにより、サーバ201が探索範囲B2の下方向でかつ、左揃えとなるように拡大画像PCT1を表示することを決定した場合の表示例を示す。また、図19の(B)は、(2)式が満たされ、(6)式が満たされなかったことにより、サーバ201が探索範囲B2の下方向でかつ、右揃えとなるように拡大画像PCT1を表示することを決定した場合の表示例を示す。
さらに、図19の(C)は、(3)式と(7)式が満たされたことにより、サーバ201が探索範囲B2の右方向でかつ、上揃えとなるように拡大画像PCT1を表示することを決定した場合の表示例を示す。さらに、図19の(D)は、(3)式が満たされ、(7)式が満たされなかったことにより、サーバ201が探索範囲B2の右方向でかつ、下揃えとなるように拡大画像PCT1を表示することを決定した場合の表示例を示す。
続けて、図17〜図19で説明した動作を行うフローチャートを、図20を用いて説明する。なお、実施の形態2にかかるクライアント装置による描画処理は、実施の形態1にかかるクライアント装置による描画処理と同一の処理であるため、説明を省略する。実施の形態2にかかるサーバによる描画処理は、描画処理内で呼ばれる補正処理以外、実施の形態2にかかるサーバによる描画処理と同一の処理であるため、説明を省略する。
図20は、実施の形態2にかかる補正処理手順の一例を示すフローチャートである。補正処理は、カーソルの座標位置を補正する処理である。なお、ステップS2001とステップS2002は、ステップS1301とステップS1302と同等であるため、説明を省略する。ステップS2002の処理実行後、サーバ201は、更新領域を結合した結合更新領域を生成する(ステップS2003)。次に、サーバ201は、結合更新領域の画像の画像情報を取得する(ステップS2004)。続けて、サーバ201は、結合更新領域の画像を拡大した拡大画像の画像情報を生成する(ステップS2005)。次に、サーバ201は、拡大画像の画像表示領域を、探索範囲と重ならないように決定する(ステップS2006)。
続けて、サーバ201は、拡大画像の画像情報と、拡大画像の画像表示領域とをクライアント装置202に送信する(ステップS2007)。次に、サーバ201は、操作情報を受け付けたか否かを判断する(ステップS2008)。操作情報を受け付けていない場合(ステップS2008:No)、サーバ201は、一定時間経過後、ステップS2008の処理を実行する。
操作情報を受け付けた場合(ステップS2008:Yes)、サーバ201は、続けて、受け付けた操作情報の操作位置情報が拡大画像の画像表示領域に含まれるか否かを判断する(ステップS2009)。操作位置情報が拡大画像の画像表示領域に含まれない場合(ステップS2009:No)、サーバ201は、補正処理を終了する。
操作位置情報が拡大画像の画像表示領域に含まれる場合(ステップS2009:Yes)、サーバ201は、探索範囲内の座標位置から、操作位置情報を拡大前の元の位置情報に当てはめた場合の座標位置を選択する(ステップS2010)。続けて、サーバ201は、補正座標位置で、操作位置情報を補正する(ステップS2011)。ステップS2011の終了後、サーバ201は、補正処理を終了する。補正処理を実行することにより、シンクライアントシステム200は、カーソルの座標位置では座標位置の補正が行えない場合でも、利用者の指示操作を求めることで細かい領域に対する操作を誤操作なしに、かつ少ない手順で実行可能となる。
以上説明したように、実施の形態2にかかるサーバ201によれば、クライアント装置202の画面上で行われたタッチ操作の位置を含む探索範囲の画像情報をクライアント装置202に送信し、送信後に受け付けた操作位置を用いてカーソルの座標位置を補正する。これにより、サーバ201は、指で指定し難い狭い領域へのタッチ操作を容易にすることができる。
また、サーバ201によれば、クライアント装置202の画面上で行われたタッチ操作の位置を含む更新領域の画像データをクライアント装置202に送信してもよい。探索範囲より、更新領域の方が狭ければ、サーバ201は、送信する拡大画像の画像データのデータ量を少なくすることができる。また、拡大画像も小さくなることから、クライアント装置202が拡大画像を表示することによって隠れてしまう領域を少なくすることができる。
また、サーバ201によれば、クライアント装置202の画面上で行われたタッチ操作の位置を含む更新領域の更新前の画像データをクライアント装置202に送信してもよい。更新領域の更新後の画像データは、マウスオーバー処理によってボタン等の表示内容が変化した画像データとなるため、クライアント装置202にて拡大画像を表示した際に、拡大前の画像と異なるため、利用者が戸惑う恐れがある。そこで、更新前の画像データを送信することにより、クライアント装置202にて拡大画像を表示した際に、クライアント装置202は、単に、元の画像を拡大した拡大画像を表示するため、利用者が戸惑うことを避けることができる。
なお、本実施の形態で説明した補正方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本補正プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本補正プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態1、2に関し、さらに以下の付記を開示する。
(付記1)ネットワークを介して端末装置と接続される情報処理装置が、
前記端末装置の画面上で行われた操作の操作情報を受け付けた場合、前記操作情報から特定される操作位置から所定範囲内の複数の座標位置の各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域の画像情報を取得し、
前記各々の座標位置に対して取得した前記更新領域の画像情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択し、
前記操作位置を、選択した前記いずれかの座標位置に補正する、
処理を実行することを特徴とする補正方法。
(付記2)前記取得する処理は、
前記操作情報を受け付けた場合、前記各々の座標位置に対して、前記操作位置を示すカーソルの座標位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域に含まれる前記カーソルの画像情報を取得し、
前記選択する処理は、
前記複数の座標位置のうち取得した前記カーソルの画像情報が同一の内容となる座標位置の個数に基づいて、前記複数の座標位置から、いずれかの座標位置を選択することを特徴とする付記1に記載の補正方法。
(付記3)前記選択する処理は、
前記複数の座標位置のうち取得した前記カーソルの画像情報が同一の内容となる座標位置の個数が最も少ない座標位置から、いずれかの座標位置を選択することを特徴とする付記2に記載の補正方法。
(付記4)前記選択する処理は、
前記複数の座標位置のうち取得した前記カーソルの画像情報が同一の内容となる第1の座標位置群の座標位置同士を結ぶことにより形成される第1の線と、取得した前記カーソルの画像情報が同一の内容となる第2の座標位置群の座標位置同士を結ぶことにより形成される第2の線とが交差する座標位置から、いずれかの座標位置を選択することを特徴とする付記2または3に記載の補正方法。
(付記5)前記取得する処理は、
前記操作情報を受け付けた場合、前記各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される更新後の前記画面の前記操作位置から前記所定範囲内の画像情報を取得し、
前記情報処理装置は、
取得した前記所定範囲内の画像情報に基づいて、前記所定範囲内の画像を拡大した拡大画像の画像情報を生成し、
生成した前記拡大画像の画像情報を前記端末装置に送信する、処理を実行し、
前記選択する処理は、
前記端末装置に前記拡大画像の画像情報が送信された結果、前記端末装置の前記画面内の前記拡大画像が表示された表示領域内で行われた操作の操作情報を受け付けた場合、当該操作情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択することを特徴とする付記1に記載の補正方法。
(付記6)前記情報処理装置は、
前記各々の座標位置に対して取得した前記更新領域の画像情報に基づいて、前記更新領域の画像を拡大した拡大画像の画像情報を生成し、
生成した前記拡大画像の画像情報を前記端末装置に送信する、処理を実行し、
前記選択する処理は、
前記端末装置に前記拡大画像の画像情報が送信された結果、前記端末装置の前記画面内の前記拡大画像が表示された表示領域内で行われた操作の操作情報を受け付けた場合、当該操作情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択することを特徴とする付記1に記載の補正方法。
(付記7)前記取得する処理は、
前記操作情報を受け付けた場合、前記各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域の更新前の画像情報を取得し、
前記情報処理装置は、
前記各々の座標位置に対して取得した前記更新領域の更新前の画像情報に基づいて、前記更新領域の更新前の画像を拡大した拡大画像の画像情報を生成し、
生成した前記拡大画像の画像情報を前記端末装置に送信する、処理を実行し、
前記選択する処理は、
前記端末装置に前記拡大画像の画像情報が送信された結果、前記端末装置の前記画面内の前記拡大画像が表示された表示領域内で行われた操作の操作情報を受け付けた場合、当該操作情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択することを特徴とする付記1に記載の補正方法。
(付記8)前記情報処理装置は、
特定の操作の操作情報を受け付けた場合、前記取得する処理の実行を開始することを特徴とする付記1〜7のいずれか一つに記載の補正方法。
(付記9)ネットワークを介して情報処理装置と端末装置とが接続されるシステムにおいて、
前記情報処理装置は、
前記端末装置の画面上で行われた操作の操作情報を受け付けた場合、前記操作情報から特定される操作位置から所定範囲内の複数の座標位置の各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域の画像情報を取得する取得部と、
前記各々の座標位置に対して前記取得部によって取得された前記更新領域の画像情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択する選択部と、
前記操作位置を、前記選択部によって選択された前記いずれかの座標位置に補正する補正部と、
を有することを特徴とするシステム。
(付記10)ネットワークを介して端末装置と接続される情報処理装置において、
前記端末装置の画面上で行われた操作の操作情報を受け付けた場合、前記操作情報から特定される操作位置から所定範囲内の複数の座標位置の各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域の画像情報を取得する取得部と、
前記各々の座標位置に対して前記取得部によって取得された前記更新領域の画像情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択する選択部と、
前記操作位置を、前記選択部によって選択された前記いずれかの座標位置に補正する補正部と、
を有することを特徴とする情報処理装置。
(付記11)ネットワークを介して端末装置と接続される情報処理装置において、
前記端末装置の画面上で行われた操作の操作情報を受け付けた場合、前記操作情報から特定される操作位置から所定範囲内の複数の座標位置の各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域の画像情報を取得する取得部と、
前記各々の座標位置に対して前記取得部によって取得された前記更新領域の画像情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択する選択部と、
前記操作位置を、前記選択部によって選択された前記いずれかの座標位置に補正する補正部と、
を含むコンピュータを有することを特徴とする情報処理装置。
(付記12)ネットワークを介して端末装置と接続される情報処理装置に、
前記端末装置の画面上で行われた操作の操作情報を受け付けた場合、前記操作情報から特定される操作位置から所定範囲内の複数の座標位置の各々の座標位置に対して、前記操作位置を前記各々の座標位置に設定した場合に更新される前記画面の更新領域の画像情報を取得し、
前記各々の座標位置に対して取得した前記更新領域の画像情報に基づいて、前記複数の座標位置から、いずれかの座標位置を選択し、
前記操作位置を、選択した前記いずれかの座標位置に補正する、
処理を実行させることを特徴とする補正プログラム。