以下に、画像通信プログラム、画像通信方法、および電子機器の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1を参照しながら、実施例に係る画像通信システム1の構成の例について説明する。図1は、画像通信システム1の構成を示す図である。図1に示す画像通信システム1は、実施例に係る画像通信方法により、画像通信を可能にする。画像通信とは、1つの画像を共有しながらその画像を編集していくことにより、画像を用いた情報交換を可能にする通信である。画像通信システム1は、電子機器10aおよび10bと、サーバ20とを有する。電子機器10aおよび10bは、移動体向け通信網2およびインターネット3を解して、サーバ20と通信可能に接続される。
移動体向け通信網2は、携帯電話事業者等の移動体向けの通信サービスを提供する1乃至複数の企業によって運用されるネットワークである。移動体向け通信網2は、電子機器10aおよび10b等の移動体と無線通信を行うためのセルを構成する基地局と、基地局間を接続する有線部分とを含む。移動体向け通信網2では、TCP/IPのような汎用的な通信プロトコルに加えて、プッシュ通信等の移動体向け通信独自の通信プロトコルを利用することができる。
電子機器10aおよび10bは、画像通信を行う利用者が使用する機器である。電子機器10aおよび10bは、タッチパネル11を有する。タッチパネル11は、図形および文字等の情報を表示する表示機能と、情報が表示される表示面に対する指、スタイラス、ペン等による接触操作を検出する接触検出機能とを有する。電子機器10aおよび10bは、例えば、タブレットデバイス、スマートフォン、パソコン、ゲーム機、メディアプレイヤ、又は電子ブックリーダである。以下の説明では、説明を簡単にするために、タッチパネル11に対する接触操作は、指を用いて行われるものと想定する。以下の説明では、電子機器10aおよび10bを、いずれであるかを特定することなく、電子機器10と呼ぶことがある。
サーバ20は、電子機器10aと電子機器10bとの間の通信を支援する。サーバ20は、例えば、電子機器10aおよび10bが、他方の電子機器10と通信するために必要なアドレス情報を取得するのを支援する。
実施例に係る画像通信システムの構成は、図1に示した構成に限定されない。例えば、サーバ20は、移動体向け通信網2に接続されてもよい。画像を用いた情報交換を行う利用者が使用する電子機器10は、3台以上であってもよい。
図2から図4を参照しながら、実施例に係る画像通信方法の利用例について説明する。図2は、画像通信の利用時に表示される画像通信画面40の例を示す図である。図3は、手書きによる情報交換の例を示す図である。図4は、情報の消去の例を示す図である。
画像通信の利用時には、図2に示すような画像通信画面40が、電子機器10aおよび10bのタッチパネル11に表示される。画像通信画面40は、ヘッダ領域41と、操作パネル領域42と、描画領域43とを有する。画像通信画面40の表示中に、文字入力用の仮想キーボード50がさらにタッチパネル11に表示されることがある。
ヘッダ領域41は、画像通信画面40の上部に設けられる帯状の領域である。ヘッダ領域41には、例えば、画像通信の相手を特定するための名称等が表示される。操作パネル領域42は、ヘッダ領域41と描画領域43との間に設けられる。操作パネル領域42には、各種の動作または切り替えを利用者が指示するための操作オブジェクトが配置された領域である。描画領域43は、大きな面積を占める領域である。描画領域43には、情報交換用の画像が表示される。情報交換用の画像は、画像通信に参加している各電子機器10で共有され、各電子機器10での入力に応じて更新(変更)される。情報交換用の画像は、文字および手書きされた線図等の要素を含むことができる。
操作パネル領域42は、「保存」ボタン421と、「消去」ボタン422と、「相手を消去」ボタン423と、「自分を消去」ボタン424と、手書き操作領域425と、文字入力操作領域426とを有する。「保存」ボタン421は、描画領域43に表示されている画像の保存を指示するためのボタンである。「消去」ボタン422は、描画領域43に表示されている画像に含まれる全ての要素の消去を指示するためのボタンである。「相手を消去」ボタン423は、描画領域43に表示されている画像に含まれる要素のうち、相手が入力した要素の消去を指示するためのボタンである。「自分を消去」ボタン424は、描画領域43に表示されている画像に含まれる要素のうち、当方が入力した要素の消去を指示するためのボタンである。
画像に含まれる要素の消去は、画像通信に参加している各電子機器10に反映される。例えば、電子機器10aによって「消去」ボタン422への操作が検出された場合、電子機器10aだけでなく、電子機器10aとの画像通信に参加している電子機器10bでも、描画領域43に表示されている画像に含まれる全ての要素が消去される。電子機器10aによって「相手を消去」ボタン423への操作が検出された場合、電子機器10aだけでなく、電子機器10bでも、描画領域43に表示されている画像に含まれる要素のうち、電子機器10bの利用者によって入力された要素が消去される。電子機器10aによって「自分を消去」ボタン424への操作が検出された場合、電子機器10aだけでなく、電子機器10bでも、描画領域43に表示されている画像に含まれる要素のうち、電子機器10aの利用者によって入力された要素が消去される。
手書き操作領域425は、「手書き」ボタン425aと、色選択ボタン425bと、太さ選択ボタン425c〜425eとを有する。「手書き」ボタン425aは、手書きモードへの切り替えを指示するためのボタンである。手書きモードでは、描画領域43を指でなぞる軌跡に沿って、線図が画像に追加される。
色選択ボタン425bと、太さ選択ボタン425c〜425eとは、手書きモードにおける描画属性を変更するためのボタンである。色選択ボタン425bは、線図の色を選択するための選択画面の表示を指示するためのボタンである。色選択ボタン425bは、現在選択されている色を、ラベルの文字、ラベルの色、またはラベルの背景の色によって提示する。太さ選択ボタン425c〜425eは、線図の太さを指示するためのボタンである。太さ選択ボタン425c〜425eは、選択されている太さを、選択されている太さに対応するボタンの表示態様を他のボタンと変更することによって提示する。
文字入力操作領域426は、「キーボード」ボタン426aと、色選択ボタン426bと、フォントサイズ選択ボタン426c〜426eとを有する。「キーボード」ボタン426aは、文字入力モードへの切り替えを指示するためのボタンである。文字入力モードでは、描画領域43を指でタップした位置を始点として、仮想キーボード50を用いて入力された文字が画像に追加される。
色選択ボタン426bと、フォントサイズ選択ボタン426c〜426eとは、文字入力モードにおける描画属性を変更するためのボタンである。色選択ボタン426bは、文字の色を選択するための選択画面の表示を指示するためのボタンである。色選択ボタン426bは、現在選択されている色を、ラベルの文字、ラベルの色、またはラベルの背景の色によって提示する。フォントサイズ選択ボタン426c〜426eは、フォントサイズを指示するためのボタンである。フォントサイズ選択ボタン426c〜426eは、選択されているフォントサイズを、選択されているフォントサイズに対応するボタンの表示態様を他のボタンと変更することによって提示する。
手書き操作領域425および文字入力操作領域426を操作することによって切り替えられる描画のモードは、画像通信に参加している電子機器10毎に独立している。例えば、電子機器10aでは、赤い線図を用いた手書モードに切り替わっているときに、電子機器10bでは、黒い文字色を用いた文字入力モードに切り替わっていることがある。
描画領域43に表示される画像の更新は、移動体向け通信網2を介した通信により、ほぼリアルタイムで他方の電子機器10に反映される。例えば、図3に示すステップS11に示すように、電子機器10aの利用者が、円を描くように指F1を用いてタッチパネル11をなぞる操作を開始すると、電子機器10aとほぼ同じタイミングで、電子機器10bでも線図D1が表示され始める。その後、ステップS12およびステップS13のように、利用者が、円を描くように指F1を用いてタッチパネル11をなぞる操作を継続すると、線図D1は、指F1の動きに追随して、電子機器10aおよび10bの両方で、ほぼリアルタイムに伸びていく。
描画領域43に表示される画像のリアルタイムな更新は、双方向で実現される。例えば、図3に示すステップS12に示すように、電子機器10bの利用者が、三角形を描くように指F2を用いてタッチパネル11をなぞる操作を開始すると、電子機器10bとほぼ同じタイミングで、電子機器10aでも線図D2が表示され始める。その後、ステップS13およびステップS14のように、利用者が、三角形を描くように指F2を用いてタッチパネル11をなぞる操作を継続すると、線図D2は、指F2の動きに追随して、電子機器10aおよび10bの両方で、ほぼリアルタイムに伸びていく。
画像のリアルタイムな更新は、画像への新しい要素の追加だけでなく、画像からの要素の削除についても適用される。図4に示すステップS21では、図3に示したステップS14と同様に、電子機器10aの利用者によって描かれた線図D1と、電子機器10bの利用者によって描かれた線図D2とが、表示中の画像に含まれている。ステップS22では、電子機器10bの利用者が、指F2を用いて、「自分を消去」ボタン424を操作している。
「自分を消去」ボタン424に対する操作を検出すると、電子機器10bは、ステップS23に示すように、電子機器10bの利用者によって描かれた線図D2を表示中の画像から消去する。さらに、電子機器10bは、移動体向け通信網2を介した通信により、線図D2の消去を、ほぼリアルタイムで電子機器10aに反映させる。
このように、画像の更新をほぼリアルタイムで実現することにより、まるで参加者が顔を突き合わせて1枚の紙を共有しながら筆談しているかのように、インタラクティブで質の高い情報交換が可能になる。さらに、共同で1枚の絵を描くというような共同作業を効率よく実現することが可能になる。
図5および図6を参照しながら、図1に示した電子機器10aおよび10bの構成について説明する。電子機器10aおよび10bは、同様の構成を有するため、以下では、電子機器10aを例として用いて、構成を説明する。図5は、電子機器10aの構成の例を示すブロック図である。図6は、スレッドの並列動作について説明するための図である。
図5に示すように、電子機器10aは、タッチパネル11と、通信部12と、媒体読取部13と、制御部14と、記憶部15とを有する。タッチパネル11は、タッチセンサ111と、表示部112とを有する。タッチセンサ111は、接触検出機能を実現する。接触検出機能は、例えば、静電容量式タッチセンサ、抵抗薄膜式タッチセンサ、赤外線式タッチセンサ等の各種タッチセンサを用いて実現される。表示部112は、表示機能を実現する。表示機能は、例えば、液晶表示得装置、有機EL表示装置等の各種表示装置を用いて実現される。
通信部12は、他の機器と通信を行うための通信機能を実現する。通信部12によって実現される通信機能において用いられる通信方式は、例えば、LTE(Long Term Evolution)、W−CDMA(Wideband Code Division Multiple Access)、CDMA2000等の無線通信方式を含む。通信部12は、無線通信方式に加えて、または、無線通信方式に代えて、有線通信方式、近接通信方式等をサポートしてもよい。
媒体読取部13は、メモリカード、光ディスク、磁気ディスク、光磁気ディスク、磁気テープ等の可搬で非一過的な(non-transitory)記憶媒体に記憶されているデータおよびプログラム等を読み出す。媒体読取部13は、記憶媒体にデータ等を書き込む機能を有していてもよい。電子機器10aは、媒体読取部13を含まなくてもよい。電子機器10aは、媒体読取部13を着脱できるように構成されてもよい。
制御部14は、電子機器10aを統括的に制御する。制御部14は、CPU(Central Processing Unit)等のプロセッサを有し、記憶部15に記憶されているプログラムをプロセッサを用いて実行することによって、各種の機能を実現する。制御部14が実現する機能には、画像通信の機能が含まれる。
記憶部15は、データおよびプログラム等を記憶する。記憶部15は、半導体記憶装置、磁気記憶装置等の不揮発性の記憶装置を有する。記憶部15は、DRAM(Dynamic Random Access Memory)のような揮発性の記憶装置をさらに含んでもよい。記憶部15に記憶されるデータおよびプログラムは、通信部12による通信によって他の装置からダウンロードされてもよい。記憶部15に記憶されるデータおよびプログラムは、媒体読取部13によって、記憶媒体から読み出されてもよい。
記憶部15は、OS(Operating System)151、画像通信プログラム152、アドレス帳データ153、保存データ154等を記憶する。さらに、記憶部15には、データを一時的に記憶するための一時領域155が設けられる。一時領域155は、揮発性の記憶装置に設けられてもよい。
OS151は、電子機器10aの基本的な機能を実現させる。例えば、OS151は、制御部14によって実行されることにより、制御部14を、入力制御部141、表示制御部142、および通信制御部143として機能させる。入力制御部141は、タッチセンサ111が検出する接触の位置、数、継続時間、時間間隔、移動方向、移動の軌跡等に基づいて、入力操作の種別等を判定する。表示制御部142は、表示すべき情報に対応する制御信号を生成し、表示部112へ供給する。通信制御部143は、各種の通信プロトコルに基づいて通信部12を制御することにより、移動体向け通信網2またはインターネット3を介した情報のやりとりを可能にする。
画像通信プログラム152は、画像通信の機能を実現させる。例えば、画像通信プログラム152は、制御部14によって実行されることにより、制御部14を、画像通信管理部144として機能させるとともに、制御部14に入出力処理スレッド145および描画スレッド146を並列に実行させる。画像通信管理部144は、画像通信の相手の選択、画像通信のための接続の確立、接続の監視等の、画像通信のための基本的な機能を実現する。入出力処理スレッド145は、タッチセンサ111に対して行われた操作に対応する描画のための描画情報16を取得し、一時領域155に設けられた描画バッファに格納するとともに、画像通信に参加している他の電子機器10へ送信する機能を実現する。さらに、入出力処理スレッド145は、他の電子機器10から送信された描画情報16を描画バッファに格納する機能を実現する。描画スレッド146は、描画バッファに格納された描画情報16に対応する描画を描画領域43に対して行う。
アドレス帳データ153は、画像通信の相手の候補に関する情報を含む。画像通信の相手の候補に関する情報には、相手が使用する電子機器10を特定するための情報が少なくとも含まれる。保存データ154は、描画領域43に表示されている画像が保存されたデータである。一時領域155は、各種の機能のためのデータが一時的に保存される領域である。
画像通信における画像のリアルタイムな更新は、入出力処理スレッド145および描画スレッド146が並列に実行されることによって実現される。「スレッド」とは、処理の実行単位である。スレッドは、「プロセス」のように、メモリ空間が(仮想的に)独立して形成される、より大きな実行単位とは異なり、関連するスレッド間でメモリ空間が共有される。このため、スレッドは、関連するスレッドとの実行の切り替えを短時間で完了することができ、さらに、共有しているメモリ空間のデータにそれぞれのスレッドが容易にアクセスすることができる。制御部14が複数のプロセッサを有している場合には、関連するスレッドを別々のプロセッサに割り当てて、並列に実行させることもできる。このように、入出力処理スレッド145および描画スレッド146は、データを共有しつつ、処理を並列に実行するのに適している。
入出力処理スレッド145および描画スレッド146の並列動作について、図6を参照しながら、より詳細に説明する。描画領域43を指でなぞるというような描画のための操作が行われると、タッチセンサ111は、行われた操作に応じて検出された信号を入力制御部141へ送信する(ステップS21)。入力制御部141は、送信された信号に基づいて、どのような操作が行われたかを判定し、判定された操作に関する情報を入出力処理スレッド145が取得する(ステップS22)。
入出力処理スレッド145は、判定された操作に対応する描画を行うための描画情報16を生成し、描画バッファ156に格納する(ステップS23)。描画バッファ156は、一時領域155に設けられる先入れ先出し方式の記憶領域であり、入出力処理スレッド145および描画スレッド146によって共有される。
さらに、入出力処理スレッド145は、描画情報16を、通信制御部143を介して、通信部12から、画像通信に参加している他の電子機器10へ送信させる(ステップS24およびステップS25)。そして、入出力処理スレッド145は、送信した描画情報16を送信バッファ158に格納する(ステップS26)。送信バッファ158は、一時領域155に設けられる記憶領域であり、他の電子機器10へ送信された描画情報16を時系列に格納する。他の電子機器10へ送信された描画情報16は、描画領域43に表示される画像に含まれる要素のうち、当方が入力した要素に対応する。
上述したステップS21からステップS26の動作は、画像通信に参加している他の電子機器10でも実行される。そのため、他の電子機器10において、ステップS24およびステップS25が実行されると、通信部12によって描画情報16が受信される。通信部12によって描画情報16が受信されると、入出力処理スレッド145が、通信制御部143を介して、描画情報16を取得する(ステップS31およびステップS32)。
入出力処理スレッド145は、取得した描画情報16を描画バッファ156に格納する(ステップS33)。さらに、入出力処理スレッド145は、描画情報16を受信バッファ157に格納する(ステップS34)。受信バッファ157は、一時領域155に設けられる記憶領域であり、他の電子機器10から送信された描画情報16を時系列に格納する。他の電子機器10から送信された描画情報16は、描画領域43に表示される画像に含まれる要素のうち、相手が入力した要素に対応する。
このように、入出力処理スレッド145により、タッチセンサ111の検出に基づく描画情報16および通信部12により受信された描画情報16が描画バッファ156に格納される。
描画スレッド146は、描画バッファ156を監視し、描画バッファ156に描画情報16が格納されていれば、描画情報16を読み出す(ステップS41)。描画バッファ156は、FIFOであるので、複数の描画情報16が描画バッファ156が含まれている場合、最も先に格納された描画情報16が読み出される。読み出された描画情報16が格納されていた領域は、他の描画情報16を格納できるように設定される。
描画スレッド146は、読み出した描画情報16に基づいて、描画領域43にどのような描画を行うかを判定し、判定した描画の実行を表示制御部142に指示する(ステップS42)。表示制御部142は、指示に応じた制御信号を表示部112へ送信する(ステップS43)。
このように、入出力処理スレッド145および描画スレッド146は、描画バッファ156を介して描画情報16をやりとりすることにより、独立して(非同期で)処理を並列に実行することができる。このため、画像通信に参加している各電子機器10で入力された操作に対応する描画を、各電子機器10において、ほぼリアルタイムに実現することができる。
描画スレッド146は、受信バッファ157または送信バッファ158に含まれている描画情報16に基づいて、描画処理を実行することもできる。
受信バッファ157に含まれている描画情報16に基づく描画処理では、描画スレッド146は、受信バッファ157に含まれている描画情報16を時系列に順次読み出す(ステップS51)。そして、描画スレッド146は、読み出した描画情報16に基づいて描画の実行を表示制御部142に指示し(ステップS42)、表示制御部142は、指示に応じた制御信号を表示部112へ送信する(ステップS43)。受信バッファ157に含まれている描画情報16に基づく描画処理は、例えば、当方が入力した要素を消去することを指示された場合に、描画領域43のクリア後に相手が入力した要素を再描画するために実行される。
送信バッファ158に含まれている描画情報16に基づく描画処理では、描画スレッド146は、送信バッファ158に含まれている描画情報16を時系列に順次読み出す(ステップS61)。そして、描画スレッド146は、読み出した描画情報16に基づいて描画の実行を表示制御部142に指示し(ステップS42)、表示制御部142は、指示に応じた制御信号を表示部112へ送信する(ステップS43)。送信バッファ158に含まれている描画情報16に基づく描画処理は、例えば、相手が入力した要素を消去することを指示された場合に、描画領域43のクリア後に当方が入力した要素を再描画するために実行される。
図7から図14を参照しながら、図1に示した画像通信システム1の動作についてより詳細に説明する。図7は、電子機器10間の接続を確立するための動作の例を示すシーケンス図である。図7に示す例は、電子機器10aが電子機器10bに対して画像通信の開始を要求する場合の例である。図7に示す例における電子機器10aおよび電子機器10bの動作は、画像通信管理部144が提供する機能によって実現される。
電子機器10aは、タッチパネル11等を介して画像通信の開始の指示を検出する(ステップS101)。画像通信の開始の指示は、例えば、アドレス帳データ153に含まれる候補者がタッチパネル11に一覧表示される画面において、利用者が所望の候補者を通信相手として選択することによって入力される。以下の説明では、電子機器10bの利用者が通信相手として選択されたものとする。
電子機器10aは、通信相手に対応する電子機器10bへのプッシュ通知の送信によって、画像通信の開始を要求する(ステップS102)。プッシュ通知は、電話番号のように、移動体向けの通信サービスにおいて電子機器10bに予め割り当てられているIDを用いて送信することができる。プッシュ通知には、発信側の電子機器10(この場合、電子機器10a)を識別するための発信側IDが含まれる。発信側IDは、電話番号のように機器に予め割り当てられているIDであってもよいし、画像通信サービスの利用開始時に登録されたユーザIDのようにサービス毎に割り当てられるIDであってもよい。
電子機器10aは、さらに、サーバ20に対して、アドレス情報の登録を要求する(ステップS103)。サーバ20に対する要求の送信は、サーバ20に予め割り当てられているIPアドレス、または、IPアドレスに対応するドメイン名を指定して行われる。サーバ20に対する要求には、発信側IDが含まれる。
サーバ20は、要求を受けると、発信側IDを、要求元(この場合、電子機器10a)のアドレス情報と対応付けて保存する(ステップS104)。アドレス情報は、他の電子機器10が要求元の電子機器10と通信するために、送信先を特定するための情報として用いられる情報であり、例えば、グローバルIPアドレスとポート番号とを含む。電子機器10aにプライベートアドレスが割り当てられている場合、電子機器10aは、自分に割り当てられているグローバルIPアドレスを知ることはできない。しかしながら、インターネット3に接続されているサーバ20は、受信した要求のヘッダ部から、電子機器10aに割り当てられているグローバルIPアドレス等を取得することができる。
電子機器10bは、プッシュ通知を受信すると、着信音の出力、表示部112へのメッセージ等の表示、ランプの点灯、振動等により、画像通信の要求があることを利用者に伝え、画像通信を承認するか否かの確認を求める呼び出し処理を実行する(ステップS105)。呼び出し処理は、電話の着信時の処理と同様の処理である。承認を得られなかった場合、または、所定の時間を経過しても利用者からの指示がなかった場合(ステップS106,No)、電子機器10bは、処理を中止する(ステップS107)。
利用者の承認を得られた場合(ステップS106,Yes)、電子機器10bは、サーバ20に対して、アドレス情報の登録を要求する(ステップS108)。サーバ20に対する要求には、受信側の電子機器10(この場合、電子機器10b)を識別するための受信側IDが含まれる。受信側IDは、電話番号のように機器に予め割り当てられているIDであってもよいし、画像通信サービスの利用開始時に登録されたユーザIDのようにサービス毎に割り当てられるIDであってもよい。
サーバ20は、要求を受けると、受信側IDを、要求元(この場合、電子機器10b)のアドレス情報と対応付けて保存する(ステップS109)。電子機器10bにプライベートアドレスが割り当てられている場合でも、サーバ20は、受信した要求のヘッダ部から、電子機器10bに割り当てられているグローバルIPアドレス等を取得することができる。
さらに、電子機器10bは、サーバ20に対して、発信側のアドレス情報の提供を要求する(ステップS110)。サーバ20に対する要求には、プッシュ通知で受信した発信側IDが含まれる。サーバ20は、要求を受けると、発信側IDと対応付けて保存されているアドレス情報を応答する(ステップS111)。電子機器10bは、応答された発信側のアドレス情報を記憶する(ステップS112)。
ステップS103の後、電子機器10aは、サーバ20に対して、受信側のアドレス情報の提供を要求する(ステップS113)。サーバ20に対する要求には、アドレス帳データ153等から取得した受信側IDが含まれる。サーバ20は、要求を受けると、受信側IDと対応付けて保存されているアドレス情報を応答する(ステップS114)。受信側IDと対応付けてアドレス情報が保存されていない場合、サーバ20は、アドレス情報の登録を所定時間待つ。例えば、ステップS107で電子機器10bが処理を中止した場合、受信側のアドレス情報は登録されない。この場合、サーバ20は、所定時間待った後、要求を破棄するか、または、アドレス情報が見つからない旨を応答する。
アドレス情報が応答されずに所定時間経過した場合(ステップS115,Yes)、電子機器10aは、処理を中止する(ステップS116)。
所定時間が経過しないうちにアドレス情報が応答された場合(ステップS115,No)、電子機器10aは、応答された受信側のアドレス情報を記憶する(ステップS117)。そして、電子機器10aは、画像通信画面40をタッチパネル11に表示させ(ステップS118)、入出力処理スレッド145および描画スレッド146を起動し(ステップS119)、電子機器10bに対して準備完了を通知する(ステップS120)。
一方、電子機器10bは、画像通信画面40をタッチパネル11に表示させ(ステップS121)、入出力処理スレッド145および描画スレッド146を起動し(ステップS122)、電子機器10aに対して準備完了を通知する(ステップS123)。
このように、サーバ20を介してアドレス情報の登録と取得とを行うことにより、電子機器10aおよび電子機器10bは、通信相手のアドレス情報を取得することができる。これにより、電子機器10aおよび電子機器10bは、サーバ20等を介することなく、描画情報16等をピアツーピア通信によって短時間で送信することができる。
電子機器10間の接続を確立するための動作は、図7に示した例に限定されない。例えば、接続を確立しようとする電子機器10は、プッシュ通知等を利用して、通信状態に関する情報を交換してもよい。受信側の電子機器10が、通話中または他の機器と画像通信中の場合、その旨を発信側の電子機器10へ送信し、送信側の電子機器10が利用者に通知することにより、利用者は、所定時間の経過を待たずに、受信側が画像通信に応じることができる状態にないことを知ることができる。
図7に示した例では、サーバ20を介してアドレス情報の登録と取得とを行う例を示したが、既知のアドレス情報を用いて接続を確立することができる場合、サーバ20は、画像通信システム1に含まれなくてもよい。
図7では、描画情報16等をピアツーピア通信によって送信するために、電子機器10間の接続を確立する例について説明したが、描画情報16等は、サーバ20を介して送信されてもよい。この場合、サーバ20を介したアドレス情報の登録と取得は、行われなくてもよい。
図8は、入出力処理スレッド145の動作の例を示すフローチャートである。図8に示す動作は、繰り返して実行される。
入出力処理スレッド145は、操作パネル領域42に対する操作が検出されたかを判定する(ステップS201)。操作パネル領域42に対する操作が検出された場合(ステップS201,Yes)、入出力処理スレッド145は、操作に応じて描画のモードの切り替え等を行うために、後述するモード変更処理を実行する(ステップS202)。操作パネル領域42に対する操作が検出されていない場合(ステップS201,No)、ステップS202は実行されない。
続いて、入出力処理スレッド145は、描画領域43に対する操作が検出されたかを判定する(ステップS203)。描画領域43に対する操作が検出された場合(ステップS203,Yes)、入出力処理スレッド145は、現在の描画のモードが、手書きモードであるかを判定する(ステップS204)。現在の描画のモードが手書きモードである場合(ステップS204,Yes)、入出力処理スレッド145は、手書きに応じた描画が行われるように、後述する手書き情報格納処理を実行する(ステップS205)。現在の描画のモードが手書きモードでなく文字入力モードである場合(ステップS204,No)、入出力処理スレッド145は、操作された位置を文字入力の位置として記憶する(ステップS206)。描画領域43に対する操作が検出されていない場合(ステップS203,No)、ステップS204からステップS206は実行されない。
続いて、入出力処理スレッド145は、仮想キーボード50を用いた文字入力操作が検出されたかを判定する(ステップS207)。文字入力操作が検出された場合(ステップS207,Yes)、入出力処理スレッド145は、入力された文字が描画されるように、後述する文字情報格納処理を実行する(ステップS208)。文字入力操作が検出されていない場合(ステップS207,No)、ステップS208は実行されない。
続いて、入出力処理スレッド145は、画像通信に参加している他方の電子機器10から描画情報16が受信されたかを判定する(ステップS209)。描画情報16が受信された場合(ステップS209,Yes)、入出力処理スレッド145は、受信された描画情報16に基づく描画が行われるように、後述する受信情報格納処理を実行する(ステップS210)。描画情報16が受信されていない場合(ステップS209,No)、ステップS210は実行されない。
図8に示したステップS201、ステップS203、ステップS207、およびステップS209の判定を実行する順序は、図8に示した例の順序に限定されない。
図9は、図8に示したモード変更処理の手順を示すフローチャートである。入出力処理スレッド145は、「消去」ボタン422に対する操作が検出されたかを判定する(ステップS301)。「消去」ボタン422に対する操作が検出された場合(ステップS301,Yes)、入出力処理スレッド145は、他方の電子機器10でも消去が実行されるように、他方の電子機器10へ描画情報16を送信する(ステップS302)。送信される描画情報16には、種別として「CLEARALL」が設定される。「CLEARALL」は、画像の全ての要素の消去を指示する種別である。さらに、入出力処理スレッド145は、描画バッファ156をクリアし(ステップS303)、送信バッファ158をクリアし(ステップS304)、受信バッファ157をクリアし(ステップS305)、描画領域43をクリアする(ステップS306)。
「消去」ボタン422に対する操作が検出されていない場合(ステップS301,No)、入出力処理スレッド145は、「相手を消去」ボタン423に対する操作が検出されたかを判定する(ステップS307)。「相手を消去」ボタン423に対する操作が検出された場合(ステップS307,Yes)、入出力処理スレッド145は、他方の電子機器10で入力された要素の消去が他方の電子機器10でも消去が実行されるように、他方の電子機器10へ描画情報16を送信する(ステップS308)。送信される描画情報16には、種別として「CLEARYOURS」が設定される。「CLEARYOURS」は、画像の要素のうち、他方の電子機器10で入力された要素の消去を指示する種別である。さらに、入出力処理スレッド145は、描画バッファ156をクリアし(ステップS309)、受信バッファ157をクリアし(ステップS310)、描画領域43をクリアする(ステップS311)。そして、入出力処理スレッド145は、送信バッファ158内の描画情報16に基づく再描画の実行を描画スレッド146に依頼する(ステップS312)。
「相手を消去」ボタン423に対する操作が検出されていない場合(ステップS307,No)、入出力処理スレッド145は、「自分を消去」ボタン424に対する操作が検出されたかを判定する(ステップS313)。「自分を消去」ボタン424に対する操作が検出された場合(ステップS313,Yes)、入出力処理スレッド145は、当方の電子機器10で入力された要素の消去が他方の電子機器10でも消去が実行されるように、他方の電子機器10へ描画情報16を送信する(ステップS314)。送信される描画情報16には、種別として「CLEARMINE」が設定される。「CLEARMINE」は、画像の要素のうち、当方の電子機器10で入力された要素の消去を指示する種別である。さらに、入出力処理スレッド145は、描画バッファ156をクリアし(ステップS315)、送信バッファ158をクリアし(ステップS316)、描画領域43をクリアする(ステップS317)。そして、入出力処理スレッド145は、受信バッファ157内の描画情報16に基づく再描画の実行を描画スレッド146に依頼する(ステップS318)。
「自分を消去」ボタン424に対する操作が検出されていない場合(ステップS313,No)、入出力処理スレッド145は、「手書き」ボタン425aに対する操作が検出されたかを判定する(ステップS319)。「手書き」ボタン425aに対する操作が検出されたということは、手書きモードへの切り替えを指示されたことを意味する。「手書き」ボタン425aに対する操作が検出された場合(ステップS319,Yes)、入出力処理スレッド145は、仮想キーボード50を消去する(ステップS320)。
「手書き」ボタン425aに対する操作が検出されていない場合(ステップS319,No)、入出力処理スレッド145は、「キーボード」ボタン426aに対する操作が検出されたかを判定する(ステップS321)。「キーボード」ボタン426aに対する操作が検出されたということは、文字入力モードへの切り替えを指示されたことを意味する。「キーボード」ボタン426aに対する操作が検出された場合(ステップS321,Yes)、入出力処理スレッド145は、仮想キーボード50を表示させる(ステップS322)。
「キーボード」ボタン426aに対する操作が検出されていない場合(ステップS321,No)、入出力処理スレッド145は、「保存」ボタン421に対する操作が検出されたかを判定する(ステップS323)。「保存」ボタン421に対する操作が検出されていないということは、この例の場合、色選択ボタン425b等の描画属性の変更のためのボタンが操作されたことを意味する。「保存」ボタン421に対する操作が検出されていない場合(ステップS323,No)、入出力処理スレッド145は、操作されたボタンに応じて描画属性を変更する(ステップS324)。
「保存」ボタン421に対する操作が検出された場合(ステップS323,Yes)、入出力処理スレッド145は、描画領域43に表示されている画像を保存データ154として、記憶部15に記憶させる(ステップS325)。保存データ154は、ビットマップ形式の画像データであってもよいし、ベクトル形式の画像データであってもよい。保存データ154は、描画情報16の集合であってもよい。
図10は、図8に示した手書き情報格納処理の手順を示すフローチャートである。入出力処理スレッド145は、描画領域43で検出された操作がタッチの開始であるかを判定する(ステップS401)。タッチの開始が検出されたということは、新たな線図の描画が開始されることを意味する。描画領域43で検出された操作がタッチの開始である場合(ステップS401,Yes)、入出力処理スレッド145は、新たな線図が他方の電子機器10でも描画されるように、他方の電子機器10へ描画情報16を送信する(ステップS402)。その後、入出力処理スレッド145は、ステップS406へ進む。
送信される描画情報16には、種別として「DRAWSTART」が設定され、現在の描画属性に基づいて、線図の色を示す色情報と、線図の太さを示す太さ情報とが設定される。さらに、送信される描画情報16には、描画領域43において接触が検出された最新の位置(座標)が、現在の位置情報として設定され、継続中の接触が前回検出された位置(座標)が、直前の位置情報として設定される。タッチの開始が検出された場合、それ以前の継続中の接触は存在しないため、直前の位置情報には、(−1,−1)のような通常ではあり得ない位置が設定される。
このように、線図を描画するための描画情報16に現在の位置情報と直前の位置情報とを設定することにより、簡単なデータ構成により、線図の繋がりを正確に再現することができる。例えば、接触が検出された位置が、(10,20)、(20,24)、(30,26)と移動した場合、現在の位置情報に(10,20)が設定され、直前の位置情報に(−1,−1)が設定された描画情報16と、現在の位置情報に(20,24)が設定され、直前の位置情報に(10,20)が設定された描画情報16と、現在の位置情報に(30,26)が設定され、直前の位置情報に(20,24)が設定された描画情報16とが生成される。これらの描画情報16は、現在の位置情報が示す位置が直前の位置情報として設定されている描画情報16を探すことにより、描画情報16の描画順序を容易に判定することができる。
描画情報16に含まれる情報から描画順序を判定できると言うことは、描画情報16を他の電子機器10へ送信する際に、TCP(Transmission Control Protocol)のような順序性が保証されるプロトコルを用いずに、UDP(User Datagram Protocol)のようなオーバーヘッドの少ないプロトコルを用いることを可能にする。このように、線図を描画するための描画情報16は、簡単な構成である上に、オーバーヘッドの少ないプロトコルを用いて送信することができる。この特徴は、画像の更新を電子機器10間でほぼリアルタイムに反映させるために非常に有利である。
描画情報16に含まれる情報から描画順序を判定できるということは、他方の電子機器10で入力された線図と、当方の電子機器10で入力された線図とを区別して描画することも可能にする。さらに、このことは、タッチセンサ111が、複数の箇所での接触操作を同時に検出するマルチタッチに対応している場合には、接触操作が検出された箇所毎に直前の接触位置を記憶しておくことにより、複数の接触操作に対応するそれぞれの線図を区別しながら同時に描画することを可能にする。
描画領域43で検出された操作がタッチの開始でない場合(ステップS401,No)、入出力処理スレッド145は、描画領域43で検出された操作がタッチの終了であるかを判定する(ステップS403)。タッチの終了が検出されたということは、線図の描画が終了することを意味する。描画領域43で検出された操作がタッチの終了である場合(ステップS403,Yes)、入出力処理スレッド145は、線図の描画が他方の電子機器10でも終了するように、他方の電子機器10へ描画情報16を送信する(ステップS404)。その後、入出力処理スレッド145は、ステップS406へ進む。
送信される描画情報16には、種別として「DRAWEND」が設定される。さらに、送信される描画情報16には、描画領域43において接触が検出された最新の位置(座標)が、現在の位置情報として設定され、継続中であった接触が前回検出された位置(座標)が、直前の位置情報として設定される。色情報と、太さ情報は、タッチの開始の検出時と同じであるため、省略される。これらを省略することにより、データ送信量を少なくすることができ、画像の更新を電子機器10間でほぼリアルタイムに反映させ易くなる。
描画領域43で検出された操作がタッチの終了でない場合(ステップS403,No)、描画領域43で検出された操作は、タッチパネル11との接触を保ったまま接触位置を移動させる操作である。これは、線図の描画が継続していることを意味する。この場合、入出力処理スレッド145は、線図の描画が他方の電子機器10でも継続するように、他方の電子機器10へ描画情報16を送信する(ステップS405)。その後、入出力処理スレッド145は、ステップS406へ進む。
送信される描画情報16には、種別として「DRAW」が設定される。さらに、送信される描画情報16には、描画領域43において接触が検出された最新の位置(座標)が、現在の位置情報として設定され、継続中の接触が前回検出された位置(座標)が、直前の位置情報として設定される。色情報と、太さ情報は、タッチの開始の検出時と同じであるため、省略される。これらを省略することにより、データ送信量を少なくすることができ、画像の更新を電子機器10間でほぼリアルタイムに反映させ易くなる。
ステップS406では、入出力処理スレッド145は、送信した描画情報16を描画バッファ156に格納する。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、描画バッファ156の記憶容量を比較的小さくすることができる。
さらに、入出力処理スレッド145は、送信した描画情報16を送信バッファ158に格納する(ステップS407)。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、送信バッファ158の記憶容量を比較的小さくすることができる。
そして、入出力処理スレッド145は、次回の処理のために、描画領域43において接触が検出された最新の位置を、直前の位置情報として記憶する(ステップS408)。
図11は、図8に示した文字情報格納処理の手順を示すフローチャートである。入出力処理スレッド145は、入力された文字が他方の電子機器10でも描画されるように、他方の電子機器10へ描画情報16を送信する(ステップS501)。送信される描画情報16には、種別として「TEXT」が設定され、入力された文字または文字列が入力文字列として設定される。さらに、現在の描画属性に基づいて、文字の色を示す色情報と、文字の大きさを示すフォントサイズ情報とが設定される。さらに、送信される描画情報16には、ステップS206で記憶された位置が、位置情報として設定される。
入出力処理スレッド145は、送信した描画情報16を描画バッファ156に格納する(ステップS502)。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、描画バッファ156の記憶容量を比較的小さくすることができる。
さらに、入出力処理スレッド145は、送信した描画情報16を送信バッファ158に格納する(ステップS503)。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、送信バッファ158の記憶容量を比較的小さくすることができる。
図12は、図8に示した受信情報格納処理の手順を示すフローチャートである。入出力処理スレッド145は、受信された描画情報16の種別を判定する(ステップS601)。描画情報16の種別が「CLEARALL」の場合(ステップS602,Yes)、入出力処理スレッド145は、描画バッファ156をクリアし(ステップS603)、送信バッファ158をクリアし(ステップS604)、受信バッファ157をクリアし(ステップS605)、描画領域43をクリアする(ステップS606)。
描画情報16の種別が「CLEARMINE」の場合(ステップS602,NoかつステップS607,Yes)、入出力処理スレッド145は、描画バッファ156をクリアし(ステップS608)、受信バッファ157をクリアし(ステップS609)、描画領域43をクリアする(ステップS610)。そして、入出力処理スレッド145は、送信バッファ158内の描画情報16に基づく再描画の実行を描画スレッド146に依頼する(ステップS611)。
描画情報16の種別が「CLEARYOURS」の場合(ステップS607,NoかつステップS612,Yes)、入出力処理スレッド145は、描画バッファ156をクリアし(ステップS613)、送信バッファ158をクリアし(ステップS614)、描画領域43をクリアする(ステップS615)。そして、入出力処理スレッド145は、受信バッファ157内の描画情報16に基づく再描画の実行を描画スレッド146に依頼する(ステップS616)。
描画情報16の種別が「DRAWSTART」の場合(ステップS612,NoかつステップS617,Yes)、入出力処理スレッド145は、描画情報16に含まれる色情報と太さ情報とを記憶する(ステップS618)。そして、入出力処理スレッド145は、描画情報16を描画バッファ156に格納し(ステップS619)、さらに、受信バッファ157に格納する(ステップS620)。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、描画バッファ156および受信バッファ157の記憶容量を比較的小さくすることができる。
描画情報16の種別が「DRAW」または「DRAWEND」の場合(ステップS617,NoかつステップS621,Yes)、入出力処理スレッド145は、描画情報16を描画バッファ156に格納し(ステップS619)、さらに、受信バッファ157に格納する(ステップS620)。入出力処理スレッド145は、ステップS618で記憶した色情報と太さ情報とを、格納される描画情報16に設定する。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、描画バッファ156および受信バッファ157の記憶容量を比較的小さくすることができる。
描画情報16の種別が「TEXT」の場合(ステップS621,NoかつステップS622,Yes)、入出力処理スレッド145は、描画情報16を描画バッファ156に格納し(ステップS623)、さらに、受信バッファ157に格納する(ステップS624)。格納に際して、入出力処理スレッド145は、描画情報16から種別を削除する。これにより、描画バッファ156および受信バッファ157の記憶容量を比較的小さくすることができる。
描画情報16の種別が「TEXT」でない場合(ステップS622,No)、特に処理は行われない。
図13は、描画スレッド146の動作の例を示すフローチャートである。図13に示す動作は、繰り返して実行される。
描画スレッド146は、送信バッファ158内の描画情報16に基づく再描画の実行を依頼されたかを判定する(ステップS701)。依頼された場合(ステップS701,Yes)、描画スレッド146は、送信バッファ158内の描画情報16を順次読み出して、読み出した描画情報16に基づいて、描画領域43に対する描画を実行する(ステップS702)。依頼されていない場合(ステップS701,No)、ステップS702は、実行されない。
続いて、描画スレッド146は、受信バッファ157内の描画情報16に基づく再描画の実行を依頼されたかを判定する(ステップS703)。依頼された場合(ステップS703,Yes)、描画スレッド146は、受信バッファ157内の描画情報16を順次読み出して、読み出した描画情報16に基づいて、描画領域43に対する描画を実行する(ステップS704)。依頼されていない場合(ステップS703,No)、ステップS704は、実行されない。
続いて、描画スレッド146は、描画バッファ156内の描画情報16を順次読み出して、読み出した描画情報16に基づいて、描画領域43に対する描画を実行する(ステップS705)。そして、描画スレッド146は、描画に用いた描画情報16の、描画バッファ156における記憶領域を再利用可能にする(ステップS706)。
描画スレッド146は、文字入力に対応する描画情報16に基づいて描画を行う場合、同じ位置情報を有する描画情報16に含まれる文字または文字列を連結して文字列を生成し、生成した文字列を、位置情報が示す位置を始点として描画する。描画スレッド146は、生成した文字列が描画領域43の外側にはみ出す場合は、はみ出した部分を改行して表示する。
描画スレッド146は、線図に対応する描画情報16に基づいて描画を行う場合、現在の位置情報と直前の位置情報とに基づいて、描画情報16の現在の位置情報が示す点をどの順序で接続して線図を描画するかを判定する。描画スレッド146は、描画情報16の現在の位置情報が示す点が、判定した順序で滑らかに接続されるように線図を描画する。複数の点(頂点)を結ぶ滑らかな線は、例えば、図14に示したステップS801からステップS814の手順を実行することによって実現される。
上述した各種の構成は、本発明の趣旨を逸脱しない範囲で、任意に変形することができる。例えば、画像通信プログラム152は、他のプログラムと統合されてもよいし、複数のモジュールに分割されてもよい。
電子機器10aおよび10bは、物理的なキーボードを備え、仮想キーボード50でなく、物理的なキーボードを介して文字の入力を受け付けてもよい。
上記の実施形態では、一方の電子機器10で入力された要素を画像から消去するために、描画領域43をクリアした後に他方の電子機器10で入力された要素を再描画する例を示した。しかしながら、一方の電子機器10で入力された要素を画像から消去する処理はレイア処理によって実現してもよい。具体的には、それぞれの電子機器10で入力された要素を異なるレイヤに描画し、描画領域43にはレイヤを重ねた画像を表示する。このようにすることで、一方のレイヤをクリアするだけで、要素の再描画を行うことなく、一方の電子機器10で入力された要素を画像から消去することができる。
上記の実施形態で説明した装置(機器)及び画面の構成は例であり、本願発明は、これらに限定されない。