以下、添付図面を参照しながら、本発明の好ましい実施の形態について詳細に説明する。
初めに、本発明の第1の実施の形態によるインクファイルの出力方法について説明する。図1は、本実施の形態によるインクファイルの出力方法を実現するコンピュータ1のシステム構成を示す図である。同図に示すように、コンピュータ1は、位置検出器20と、デジタルインク生成装置30(インクファイルの出力装置)と、デジタルインク再生装置50と、ディスプレイ60とを有して構成される。コンピュータ1は、これらの構成がすべて一体化された装置であってもよいし、これらの構成の一部が外部装置として他の構成に接続される装置であってもよい。前者の例としては、コンピュータ1がいわゆるタブレットPCである場合が挙げられる。後者の例としては、コンピュータ1の本体がパーソナルコンピュータであり、このパーソナルコンピュータに、外部装置として位置検出器20及びディスプレイ60が接続される例が挙げられる。いずれの場合においても、コンピュータ1は、CPU、通信回路、記憶装置などの通常のコンピュータが備える構成(図示せず)を備えている。記憶装置は、主メモリなどの主記憶装置と、ハードディスクなどの補助記憶装置とを含んで構成される。コンピュータ1の各機能は、CPUが記憶装置に記憶されるプログラムに従って動作することによって実現される。
位置検出器20は、平板状のパネル面と、その直下に配置されたセンサとを有する装置であり、1以上の電子ペンPとともに用いられる。図1には、電子ペンPの例として、2つの電子ペンPA,PBを図示している。電子ペンPA,PBの符号の右下に付しているA,Bの下付き文字は複数の電子ペンを区別するための記号であり、本明細書においては、複数の電子ペンを特に区別する必要がない場合、単に電子ペンPと表記する。電子ペンPA,PBは、一人のユーザにより交互に利用される場合もあれば、図10や図11を用いて後述するように複数のユーザにより同時に利用され、図1中でWA及びWBで示す2つのストロークのように先後(上下)関係が部分的に入れ替わるストロークを出力する場合がある。
電子ペンPはペン状の入力デバイスであり、通常、ユーザの手に保持された状態で使用される。ユーザは、電子ペンPのペン先を位置検出器20上で移動させることにより、文字や絵の入力を行う。図示していないが、電子ペンPは、電子ペンPごとにユニークなペン識別情報PID(入力デバイス識別情報)が予め格納される記憶装置と、電子ペンPが位置検出器20のパネル面を押す力、すなわち筆圧を検出する筆圧検出装置と、オン又はオフのいずれかの状態を取り得るサイドスイッチと、電子ペンPから位置検出器20に対して各種の信号を送信するための送信装置とを有して構成される。送信装置が送信する信号には、ペン識別情報PIDを表す信号、筆圧検出装置によって検出された筆圧を表す信号、サイドスイッチの状態を表す信号などが含まれる。送信装置は、これらの信号を一定の周期で送信するように構成される。
位置検出器20は、パネル面内における各電子ペンPの位置を検出する機能と、各電子ペンPが送信した上記各情報を受信する機能とを有して構成される。位置の検出について具体的に説明すると、位置検出器20を構成するセンサは、それぞれx方向(位置検出器20の表面内の一方向)に延在する複数の線状導体と、それぞれy方向(位置検出器20の表面内においてx方向と直交する方向)に延在する複数の線状導体とがそれぞれ等間隔で配置された構成を有している。位置検出器20は、パネル面に電子ペンPが近づいたことによって生ずるこれらの線状導体の電位の変化に基づき、パネル面内における電子ペンPの位置を示すポイントデータPDを検出する。ポイントデータPDは、x座標とy座標の組み合わせ(x,y)からなるデータである。この検出は、電子ペンPの信号送信周期と同じ周期で行われる。位置検出器20は、USBやI2Cなどのインターフェイスによってデジタルインク生成装置30と接続されており、このインターフェイスを介して、検出したポイントデータPD及び受信した各種の情報を検出又は受信の都度、デジタルインク生成装置30に出力するよう構成される。
デジタルインク生成装置30は、位置検出器20から供給されるポイントデータPD及び各種の情報に基づき、インクファイル40を生成する装置である。デジタルインク生成装置30は、コンピュータ1のCPU上で実行される、アプリケーション100により動的あるいは静的にリンクされるライブラリ、又は、アプリケーション100から利用されるサービスとして実現される。インクファイル40の詳細は後述するが、インクファイル40には、電子ペンPの移動軌跡を再現するための一連のポイントデータPDをそれぞれ含む1以上のストロークデータと、ストロークデータの生成に用いられた電子ペンPのペン識別情報PIDに対応するメタデータ(後述する論理名LN)とが含まれる。メタデータはストロークデータごとに生成されるもので、対応するストロークデータと対応付けてインクファイル40内に格納される。インクファイル40はコンピュータ1の図示しない記憶装置に格納され、必要に応じて、各種のサーバへのアップロード、電子メールによる送信などの対象となる。
デジタルインク再生装置50は、デジタルインク生成装置30が生成したインクファイル40を再生する装置である。デジタルインク再生装置50は、実体的にはデジタルインク再生装置30同様、コンピュータ1のCPU上で実行される、アプリケーション100により動的あるいは静的にリンクされるライブラリ、又は、サービスとして実現される。具体的には、アプリケーション100からの指示を受け、インクファイル40から所望のストロークデータを選択的に取り出して復号化し、復号化されたストロークデータの描画処理を行うことにより、ディスプレイ60に表示される映像信号や、ラスタデータである画像ファイル61を生成するよう構成される。画像ファイル61は、例えばJPEGやPNGのファイルである。本実施の形態によるデジタルインク再生装置50は特に、インクファイル40内のメタデータを参照することにより、特定の電子ペンPで生成されたストロークデータのみを抽出して復号化し、描画処理の対象とする機能を有している。この点については、後ほど別途詳しく説明する。
図2は、デジタルインク生成装置30の機能ブロック図である。同図に示すように、デジタルインク生成装置30は、機能的に、入力処理部31、ストロークデータ生成部32、メタデータ生成部33、インクデータ保持部34、及びインクファイル生成部37を有して構成される。このうちインクファイル生成部37は、内部構成として、複数のストロークデータ符号化部35−1〜35−n及びメタデータ符号化部36を有して構成される。
ここで、図2に示すアプリケーション100は、コンピュータ1のCPU上で実行されるソフトウェアであり、インクファイル40の生成及び再生にかかるコンピュータ1の動作を制御する役割を果たす。アプリケーション100は、例えば、手書きノートアプリケーション、プレゼンテーションアプリケーション、ホワイトボード共有アプリケーションなど様々なアプリケーションが考えられる。アプリケーション100は、デジタルインク生成装置30及びデジタルインク再生装置50(図1参照)との間で、コンピュータ1のメモリを介し後述するメタデータ情報M_infやテーブルM_Tblなどの各種の情報を互いに供給可能に構成される。
入力処理部31は、位置検出器20から各種の情報(ポイントデータPD、ペン識別情報PID、筆圧を示す情報、サイドスイッチの状態を示す情報など)が受信される都度、受信された情報に基づいてイベントデータを生成し、ストロークデータ生成部32、メタデータ生成部33、及びアプリケーション100に分配供給する機能部である。入力処理部31は、典型的には、コンピュータ1上で動作するオペレーティングシステムに組み込まれた位置検出器20に対応するデバイスドライバとして実現される。入力処理部31からストロークデータ生成部32に供給されるデータには、ポイントデータPDが含まれる。また、メタデータ生成部33に供給されるデータには、ペン識別情報PIDが含まれる。一方、アプリケーション100には、ストロークデータSDの処理状況を示す情報D_infの供給を行う。アプリケーション100は、この情報D_infに応じてデジタルインク生成装置30の動作を制御するよう、構成される。
入力処理部31によって生成されるイベントデータには、位置検出器20から供給される情報の他、電子ペンPの状態を示すイベントタイプ識別情報ETYPE(図示せず)が含まれる。イベントタイプ識別情報ETYPEは、位置検出器20から入力されたポイントデータPDにより示されるポイントが一連のストロークのうちどの部分かを識別するための情報であり、図2には示していないが、電子ペンPがパネル面に接触したことを示すペンダウン状態Pdown、電子ペンPがパネル面内で移動したことを示すペンムーブト状態Pmvd、電子ペンPがパネル面から離れたことを示すペンアップ状態Pupなどの値を取る。
入力処理部31は、位置検出器20から受信される情報に基づき、電子ペンPが位置検出器20に接触(ペンダウン)したこと、及び、電子ペンPが位置検出器20から離れた(ペンアップした)ことを検出可能に構成される。入力処理部31は、電子ペンPが位置検出器20に接触(ペンダウン)したことを検出すると、次に生成するイベントデータ内のイベントタイプ識別情報ETYPEの値をペンダウン状態Pdownとする。その後、電子ペンPが位置検出器20のパネル面に触れている間(すなわち、位置検出器20から各種の情報が供給され続けている間)、入力処理部31は、イベントデータ内のイベントタイプ識別情報ETYPEの値にペンムーブト状態Pmvdを設定し続ける。最後に入力処理部31は、電子ペンPが位置検出器20から離れた(ペンアップした)ことを検出すると、次に生成するイベントデータ内のイベントタイプ識別情報ETYPEの値をペンアップ状態Pupとする。こうして入力処理部31は、ペンダウン状態Pdownで始まり、ペンアップ状態Pupで終わる一連のイベントデータを生成する。
ストロークデータ生成部32は、入力処理部31からポイントデータPDの供給を受け、1以上のポイントデータPDを包含するストロークデータSDを生成する機能部である。ストロークデータ生成部32は、典型的には、コンピュータ1のCPUで実行されるライブラリあるいはサービスと呼ばれるプログラムで実現される。ストロークデータ生成部32は、入力処理部31から供給されるイベントタイプ識別情報ETYPEの値を参照することにより、ペンダウン状態Pdownを示すイベントデータからペンアップ状態Pupを示すイベントデータまでの間の各イベントデータに含まれる一連のポイントデータPDを包含する1つのストロークデータSDを生成する。
ここで、ストロークデータSDに包含されるポイントデータPDには、様々なタイプが存在する。ストロークデータ生成部32は、入力処理部31から供給されるポイントデータPDの値をそのままストロークデータSDに含めることとしてもよいし、重み付け平均あるいは指数平滑法等のスムージング処理や間引き処理、又は特許文献1記載のデジタルインクのように圧縮処理等を行うことによって間引かれたポイントデータPDの値をストロークデータSDに含めることとしてもよい。また、ベジエ曲線等補間曲線の曲線形状を決定する上で再現される軌跡上に存在しない外部の制御点の位置あるいは2次元ベクトルをポイントデータPDの値としてストロークデータSDに加えることとしてもよい。ストロークデータ生成部32は、生成したストロークデータSDをインクデータ保持部34に格納するよう構成される。
メタデータ生成部33は、入力処理部31から供給されるペン識別情報PIDに基づいて、メタデータである論理名LNを生成する機能部である。メタデータ生成部33も、典型的には、コンピュータ1のCPUで実行されるライブラリあるいはサービスと呼ばれるプログラムで実現される。メタデータ生成部33は、入力処理部31から供給されるイベントデータにペンダウン状態Pdownを示すイベントタイプ識別情報ETYPEが含まれていた場合に、そのイベントデータに含まれるペン識別情報PIDに対応する論理名LNを生成する。論理名LNの具体的な内容は、後ほど説明する図8に示すように、文字列、ハッシュ値、URNという3種類の形式の中からアプリケーション100によって選択される一の形式によって記述されたものとなる。アプリケーション100は、メタデータ生成部33に対して、論理名LNの出力形式を記述したメタデータ情報M_inf、並びに、単一のフォーマットで記述された1以上の論理識別情報LIDと論理名LNとの組を記述したテーブルM_Tblを供給することにより、論理名LNの形式の選択、並びに、各々の論理識別情報LIDに対応する論理名LNの指定を行う。メタデータ生成部33は、生成した論理名LNをインクデータ保持部34に格納するよう構成される。
インクデータ保持部34は、メタデータ生成部33から供給される論理名LNと、ストロークデータ生成部32から供給されるストロークデータSDとを関連付けて記憶するよう構成される。具体的には、ある電子ペンPがペンダウン状態Pdownとなったことに応じてメタデータ生成部33から供給される論理名LNと、その電子ペンPが次にペンアップ状態Pupとなったことに応じてストロークデータ生成部32から供給されるストロークデータSDとを関連付けて記憶する。
インクファイル生成部37は、インクデータ保持部34に保持されるストロークデータSD及び論理名LNに基づき、インクファイル40を生成する機能部である。インクファイル生成部37により生成されるインクファイル40は、後に説明する図14に示されるように、ストロークデータSDを含むインクチャンクと、メタデータである論理名LNを含むメタデータチャンクとを含んで構成される。
ストロークデータSDは、それぞれ互いに異なるフォーマット(データ構造、及び、符号化方式)に対応するストロークデータ符号化部35−1〜35−nの中からアプリケーション100によって選択される一のフォーマットに対応するストロークデータ符号化部35によって符号化された状態で、インクチャンク内に格納される。ストロークデータ符号化部35−1〜35−nが対応するストロークデータのフォーマットの例としては、InkML、ISFなど非特許文献1~4に記載したフォーマットや、図15、図16を参照して説明する本発明に係るフォーマットなどが挙げられる。
アプリケーション100は、インクファイル生成部37に対してストロークのデータフォーマットを指定する情報であるストロークデータフォーマットS_Fmtを供給することにより、ストロークデータ符号化部35の選択を行う。ストロークデータフォーマットS_Fmtの詳細については、後ほど図15を参照しながら詳しく説明する。
一方、論理名LNは、当該論理名LNに1以上のストロークデータSDを対応付けるための記述を含むメタデータブロックの一部として、メタデータチャンクに格納される。メタデータブロックは、XMLフォーマットにより記述される。より特定的には、XMP(Extensible Metadata Platform)形式のフォーマットにより記述される。記述されたメタデータブロックは、UTF−8などの符号化方式により、メタデータ符号化部36によって符号化(バイナリ化)されメタデータチャンク内に格納される。
図3及び図4は、インクファイル40を生成する処理のメインルーチンを示す処理フロー図である。以下、デジタルインク生成装置30が行う処理について、これらの図を参照しながら、再度より詳しく説明する。
この処理では、図3に示すように、まず初めに変数stroke_idに数値「1」が、変数uorder及び変数CSに数値「0」が、それぞれ設定される(ステップS1)。変数stroke_idは、ペン識別情報PIDによる区別なく、ストロークをユニークに識別するために付与される識別情報(ストローク識別子)である。また、変数uorderは、ストローク又はストロークの部分的なセグメントが生成された順序を記憶するために使用する変数(順序情報)であり、変数CSは、あるストロークが入力されている間に位置検出器20によって同時に検出されている電子ペンPの本数を示す数字データである。
次に、入力処理部31によって電子ペンPの状態が検出される(ステップS2)。ステップS2において電子ペンPがペンダウン状態Pdownとなったことが検出された場合、入力処理部31は、位置検出器20からペン識別情報PIDを取得し(ステップS10)、メタデータ生成部33に供給する。メタデータ生成部33は、供給されたペン識別情報PIDに基づき、stroke_id番目の論理名LNの生成を行う(ステップS11)。この論理名LNの生成処理については、後ほど図5〜図8を参照しながら、より詳しく説明する。
次いで、入力処理部31は、筆圧を示す情報を含む位置検出器20からの入力情報に基づいて線幅などのスタイル情報を取得する(ステップS12)とともに、位置検出器20からポイントデータPDを取得する(ステップS13)。ステップS13で取得されるポイントデータPDは、1つのストロークの開始点を示す開始座標(x0,y0)となる。なお、ステップS10,S12,S13における各種情報の取得の順序は、ここに記載したものに限られない。
次に、入力処理部31は、ストローク識別子Stroke_id(PID)に、その時点での変数stroke_idの値を設定する(ステップS14)。ストローク識別子Stroke_id(PID)は、変数stroke_idと同様に各々のストロークを識別するための情報であるが、ペン識別情報PIDによる区別を行うために、ペン識別情報PIDをインデックス(あるいはキー)とする連想配列の形式で保持される。この連想配列はステップS10で取得したペン識別情報PIDにより示される電子ペンPによってこれから生成されるストロークデータSDに付与されるべき変数stroke_idを一時的に保存するために使用される。このように各種の変数(stroke_id,uorder等)を通常の変数に加えて別に連想配列の形式でも保持するのは、複数の異なる電子ペンPにより同時にストロークデータが入力されている間に、入力されている最中の複数のストロークにそれぞれ付与されたstroke_idやuorderの値をインデクス(あるいはキー)により区別して取り出し可能にするためである。
また、入力処理部31は、順序情報Uorder(PID)に、その時点での変数uorderの値を代入する(ステップS15)。順序情報Uorder(PID)も、ペン識別情報PIDをインデックスとする連想配列である。順序情報Uorder(PID)は、複数の電子ペンPのそれぞれについて検出される複数のポイントデータPD間(あるいはポイントデータPDのセグメント間)の相対的な検出順(描画順)を表す情報であり、検出されたポイントデータPDと対応付けて記憶される(後述するステップS16,S24,S34)。順序情報Uorder(PID)の値は、後述するステップS23,S33で実行される順序確認処理によって更新される場合がある。順序確認処理の詳細については、後ほど図9〜図11を参照しながら説明する。
次いで、デジタルインク生成装置30は、ステップS10で取得したペン識別情報PID、ステップS13で取得したポイントデータPD、及び、最新の順序情報Uorder(PID)を対応付けて記憶する(ステップS16)。この後、変数stroke_id、変数CS、変数uorderがそれぞれ1ずつインクリメントされ(ステップS17)、ステップS2に処理が戻される。
次に、ステップS2において電子ペンPがペンムーブト状態Pmvdであることを検出した入力処理部31は、まず位置検出器20からペン識別情報PID及びポイントデータPDを取得する(ステップS20,S21)。ステップS21で取得されるポイントデータPDは、1つのストロークの途中点を示す移動座標(x1,y1)〜(xn−1,yn−1)となる。なお、ステップS20,S21における各種情報の取得の順序も、ここに記載したものに限られない。
次いで、入力処理部31は、変数CSが2以上となっているか否かを判定し(ステップS22)、2以上であれば、順序確認処理を行う(ステップS23)。続いて入力処理部31は、ステップS20で取得したペン識別情報PID、ステップS21で取得したポイントデータPD、及び、最新の順序情報Uorder(PID)を対応付けて記憶する(ステップS24)。この後、ステップS2に処理が戻される。
次に、ステップS2において電子ペンPがペンアップ状態Pupであることを検出した入力処理部31は、まず位置検出器20からペン識別情報PID及びポイントデータPDを取得する(ステップS30,S31)。ステップS31で取得されるポイントデータPDは、1つのストロークの終了点を示す終了座標(xn,yn)となる。なお、ステップS30,S31における各種情報の取得の順序も、ここに記載したものに限られない。
次に、入力処理部31は、同時に入力されているストロークが存在するか否かを判定するため、変数CSが2以上となっているか否かを判定し(ステップS32)、2以上であれば、ステップS23と同様の順序確認処理を行う(ステップS33)。続いて入力処理部31は、ステップS30で取得したペン識別情報PID、ステップS31で取得したポイントデータPD、及び、最新の順序情報Uorder(PID)を対応付けて記憶する(ステップS34)。この後、変数CSの値が1デクリメントされる(ステップS35)。
続いて、ストロークデータ生成部32により、ステップS30で取得したペン識別情報PIDに対応付けて記憶している一連のポイントデータPD及び順序情報Uorder(PID)に基づいて、Stroke_id(PID)番目のストロークデータSDが生成される(ステップS36)。なお、ストローク識別子Stroke_id(PID)の値は、ステップS14で設定されたものである。ここで生成されるストロークデータSDには、上記一連のポイントデータPD及び順序情報Uorder(PID)の他、Stroke_id(PID)番目のストロークデータSDであることを示す情報、及び、ステップS12で取得したスタイル情報が含まれる。ステップS36で生成したストロークデータSDは、ステップS30で取得したペン識別情報PIDに関してステップS11で生成した論理名LNと対応付けて、インクデータ保持部34に保持される(ステップS37)。
以上の処理が、アプリケーション100から上述したストロークデータフォーマットS_Fmtが供給されるまでの間、繰り返し実行される(ステップS38の否定判定)。アプリケーション100からストロークデータフォーマットS_Fmtが供給されると、インクファイル生成部37はインクファイル40の出力が指示されたと判定し(ステップS38の肯定判定)、ステップS40に示すインクファイル生成処理を実行する。これにより、ここまでに生成された一連のストロークデータSDを含むインクファイル40が生成される。インクファイル生成処理の詳細については、後ほど図13〜図19を参照しながら、詳しく説明する。
デジタルインク生成装置30は、以上のようにして、インクファイル40の生成を行う。以下、後ほど説明するとした各処理について、順次説明する。
初めに、論理名LNの生成処理について、図5〜図8を参照しながら説明する。
図5は、図2に示した入力処理部31及びメタデータ生成部33の内部構成を示す図である。同図には、電子ペンP及び位置検出器20の4つのタイプTY1〜TY4も示している。このように、電子ペンP及び位置検出器20にはいくつかのタイプ(デバイス種別)があるが、いずれのタイプでも、電子ペンPのポイントデータPDは位置検出器20によって検出され、入力処理部31に供給される。
一方、ペン識別情報PIDなどの電子ペンPが送信する各種の情報については、タイプTY1,TY2では位置検出器20が一旦受信して入力処理部31に供給するが、タイプTY3では電子ペンPから入力処理部31に直接送信される。タイプTY3の電子ペンPとして特許文献2記載の電子ペンのようなペンが挙げられる。電子ペンPのポイントデータPDは静電容量式のタッチパネルである位置検出器20よって検出され内部のインタフェースにより供給される一方で、筆圧などのポイントデータPDではないデータは、Bluetooth(登録商標)等を利用した別の通信チャネルを経由して入力処理部31に供給される。
タイプTY4の電子ペンPは、典型的には、静電容量方式のタッチパネルで用いられるタッチペンのような入力デバイスである。タイプTY4の電子ペンPは、位置入力を行うためのマウスデバイスのようなデバイスである場合もある。タイプTY4の電子ペンPは、ペン識別情報PIDを記憶しておらず、したがって、このタイプの電子ペンPを用いる場合、入力処理部31にペン識別情報PIDは供給されない。以下では、電子ペンP又は位置検出器20の符号の末尾に(TYn)と付記した場合、その電子ペンP又は位置検出器20がタイプTYn(nは1〜4の整数)のものであることを示す。また、タイプTY1〜TY3にかかるペン識別情報PIDをそれぞれペン識別情報PID1〜PID3と表記する。
入力処理部31は、入出力インターフェイス(I/O)310と、ドライバ311〜315とを有して構成される。入出力インターフェイス310は、USBやI2C、あるいはBlueTooth(登録商標)などの通信規格に従って構成された通信回路であり、入力処理部31が各タイプの位置検出器20及びタイプTY3の電子ペンP(TY3)との間で行う通信を実現する役割を果たす。
ドライバ311は、位置検出器20(TY1)を制御・操作するためのソフトウェア(デバイスドライバ)である。ドライバ311は、位置検出器20(TY1)からポイントデータPD及びペン識別情報PID1を含む各種の情報を受信し、ポイントデータPDをストロークデータ生成部32に、ペン識別情報PID1をメタデータ生成部33にそれぞれ出力する機能を有する。
第1のペン識別情報PIDであるペン識別情報PID1は、非特許文献5記載のUniqueIDの例による情報である。ペン識別情報PID1は、KビットのID空間を利用するものであって、Kビット中にK1ビットの電子ペンPごとに異なる番号情報を含むユニーク情報UIDと、K2ビットのペン先識別ビットとが混在するフォーマット(第1フォーマット)により記述されている。より具体的に説明すると、ペン識別情報PID1は、図7に示すように、タイプTY1であることを含む電子ペンP(TY1)の各種の属性を示す12ビットの属性情報CSR_TYPEと、電子ペンP(TY1)のシリアル番号を示す32ビットのシリアル番号情報CSR_PHYSIDとからなるKビット(44ビット)によって構成される。属性情報CSR_TYPEによって示される属性には、例えば、電子ペンP(TY1)のペン先の種類(ペン、エアブラシなど)や、電子ペンP(TY1)が有する複数のペン先を相互に区別するための情報などが含まれる。後者の属性は電子ペンP(TY1)が例えば両端にペン先を有する場合に必要となる属性であり、属性情報CSR_TYPE内の1以上のビット(K2ビット、例では2ビット)(以下、「ペン先識別ビット」と称する)により示される。このペン先識別ビットにより、入力処理部31は、現在入力されているポイントデータPDの入力が、あるスタイラスのペンtip側でなされているか、又は、同じスタイラスのペンtail側(典型的にはイレーサなどの機能が対応付けられる)であるかを識別することができる。シリアル番号情報CSR_PHYSIDは、後述するペン識別情報PID2内のユニーク情報UIDなどとは異なり、それ自体では電子ペンPごとに異なる情報とはなっておらず、属性情報CSR_TYPEの一部(上記ペン先識別ビットを除く部分)と組み合わせることによって、電子ペンPごとに異なる情報となる。
ドライバ312は、位置検出器20(TY2)を制御・操作するためのソフトウェア(デバイスドライバ)である。ドライバ312は、位置検出器20(TY2)からポイントデータPD及びペン識別情報PID2を含む各種の情報を受信し、ポイントデータPDをストロークデータ生成部32に、ペン識別情報PID2をメタデータ生成部33にそれぞれ出力する機能を有する。
第2のペン識別情報PIDであるペン識別情報PID2は、LビットのID空間を利用するものであってL2ビット(16ビット)のデバイス情報DIDと電子ペンの各々の筐体をユニークに識別するために設けられたL1ビット(35ビット)のユニーク情報UIDとが単純に連結されるフォーマット(第2フォーマット)により記述されている。具体的には、図7に示すように、タイプTY2であることを含む電子ペンP(TY2)の各種の属性を示す16ビットのデバイス情報DIDと、電子ペンPごとに異なる番号情報を含む35ビットのユニーク情報UIDとによって構成される。デバイス情報DIDによって示される属性は、上述した属性情報CSR_TYPEの場合と基本的に同様であるが、上述したペン先識別ビットを含まないこととしてもよい。
ドライバ313は、電子ペン(TY3)を制御・操作するためのソフトウェアである。ドライバ313は、電子ペン(TY3)からペン識別情報PID3を含む各種の情報を受信し、メタデータ生成部33に出力する機能を有する。
第3のペン識別情報PIDであるペン識別情報PID3は、MビットのID空間を利用するものであってMビット全部で電子ペンの各々の筐体を識別するフォーマット(第3フォーマット)により記述されている。具体的には、図7に示すように、電子ペンPごとに異なる番号情報を含む48ビットのユニーク情報UIDによって構成される。ID付与の体系としては、例えば、48ビットのBlueTothアドレスやIEEE EUI−48などのベンダIDを含むアドレスが利用される。ペン識別情報PID2のデバイス情報DIDに相当する情報は、ペン識別情報PID3には含まれない。
ドライバ314は、位置検出器20(TY3)を制御・操作するためのソフトウェア(デバイスドライバ)である。ドライバ314は、位置検出器20(TY3)からポイントデータPDを含む各種の情報を受信し、受信したポイントデータPDをストロークデータ生成部32に出力する機能を有する。
ドライバ315は、位置検出器20(TY4)を制御・操作するためのソフトウェア(センサドライバ)である。ドライバ315は、位置検出器20(TY4)からポイントデータPDを含む各種の情報を受信し、受信したポイントデータPDをストロークデータ生成部32に出力する機能を有する。
メタデータ生成部33は、アドレス空間統合部330と、LID変換部331と、デバイスタイプ記録部332とを有して構成される。このうちアドレス空間統合部330は、内部構成として、UID抽出部3300,3301と、Nビット空間マッピング処理部3302とを有して構成される。また、LID変換部331は、内部構成として、切替部3310、名前導出部3311、ハッシュ部3312、及びURN化部3313を有して構成される。以下、図6の処理フロー図に沿ってメタデータ生成部33の処理を説明しつつ、これらの各部の機能について説明する。
まず、メタデータ生成部33は、デジタルインク生成装置30に接続されている電子ペンP及び位置検出器20のデバイス種別(上述したタイプTY1〜TY4)を取得する(ステップS110)。そして、取得したデバイス種別に応じて特定されるペン識別情報PIDのフォーマットに応じた処理を行う(ステップS111の各選択肢)。以下、タイプごとに説明する。
まずデバイス種別がタイプTY1であった場合、ペン識別情報PIDのフォーマットは第1フォーマットであると特定される。第1フォーマットは、Kビット中に電子ペンPごとに異なる番号情報を含むユニーク情報UIDとペン先識別ビットとが混在するフォーマットであるため、UID抽出部3300により、対応するドライバ311を通じて供給されるペン識別情報PID1から、電子ペンPごとに異なる番号情報を含むユニーク情報UIDを抽出する処理を行う(ステップS111)。この抽出は具体的には、図7に示すように、属性情報CSR_TYPEのうち上述したペン先識別ビットに相当する部分を「0」ビットによってマスクすることによって行う。UID抽出部3300は、図5に示すように、抽出されたユニーク情報UIDをタイプTY1に対応するユニーク情報UID1として、Nビット空間マッピング処理部3302に供給する。また、UID抽出部3300は、マスクしたペン先識別ビットの内容を、デバイス情報DID1としてデバイスタイプ記録部332に供給する処理も行う。
次に、デバイス種別がタイプTY2であった場合、ドライバより得られるペン識別情報PID2のフォーマットは、第2フォーマットである。第2フォーマットでは、L1ビットのデバイス情報DIDと電子ペンの各々の筐体をユニークに識別するために設けられたL2ビットのユニーク情報UIDとが連結されている。従って、UID抽出部3301により、対応するドライバ312を通じて供給されるペン識別情報PID2から、電子ペンPごとに異なる番号情報を含むユニーク情報UIDを抽出する処理を行う(ステップS111)。この抽出は、図7に示すように、ペン識別情報PID2内のユニーク情報UIDを単純に取り出す処理である。UID抽出部3301は、図5に示すように、抽出されたユニーク情報UIDをタイプTY2に対応するユニーク情報UID2として、Nビット空間マッピング処理部3302に供給する。また、UID抽出部3301は、ペン識別情報PID2に含まれるデバイス情報DIDを、デバイス情報DID2としてデバイスタイプ記録部332に供給する処理も行う。
次に、デバイス種別がタイプTY3であった場合には、得られるペン識別情報PIDは第3フォーマットである。第3フォーマットは、MビットのID空間を利用するものであってMビット全部で電子ペンの各々の筐体を識別するフォーマットにより記述されている。従って、ペン識別情報PID3の全体が、タイプTY3に対応するユニーク情報UID3としてNビット空間マッピング処理部3302に供給される(ステップS112)。
最後に、デバイス種別がタイプTY4であった場合、得られるペン識別子が存在しない。得られるペン識別子が存在しない場合、Nビット空間マッピング処理部3302により、タイプTY4に対応するユニーク情報UID4としてNULL(所定のダミーデータ)が設定される(ステップS113)。これは、ペン識別情報PIDを記憶していないタイプTY4の電子ペンP(TY4)ついても他のタイプの電子ペンPと同様に取り扱えるようにするための措置であり、ユニーク情報UID4は、電子ペンPを一意に識別する機能を有しない。
ステップS111〜S114によりユニーク情報UIDを取得した後には、Nビット空間マッピング処理部3302により、ユニーク情報UIDをNビット空間にマッピングする処理が行われる(ステップS115)。このマッピング処理の結果、論理識別情報LIDが得られる。以下、図7を参照しながら詳しく説明する。
マッピング対象となる空間のビット数は特に限定されないが、図7では64ビットとしている。マッピング処理は、次の第1ステップと第2ステップを含む。
まず、第1ステップでは、ペン識別子のフォーマットによって異なるビット数のユニーク情報UID(第1フォーマットではK1(42)ビット、第2フォーマットではL1(35)ビット、第3フォーマットではM(48)ビット、タイプTY4のデバイスについては0ビット)のうち最長のビット数(48ビット)以上の1つのビット数LLEN(例では52ビット)が決定される。この決定は事前に1回実行されればよい。マスク処理あるいは分離処理により得られたユニーク情報UIDに対し、ビット数LLENになるように先頭に「0」であるパディングデータを付加することによって、各種フォーマットで得られたユニーク情報UIDをLLENビット(52ビット)の情報に統一する。
次に、第2ステップにおいて、LLENビットのユニーク情報の先頭に、デバイス種別あるいはフォーマット種別を示すためのPLENビット(例では12ビット)の情報を付加する。図7の例では、4種類のデバイス種別を示す情報に対して、タイプTY1については「1」、タイプTY1については「2」、タイプTY3については「3」、タイプTY4については「4」を12ビットで設定している。尚、4つの情報を区別する場合は2ビットで足るが、12ビットとしているのはID空間ビット数として64ビットや128ビットなど2のべき乗に合わせるためである。
上記2つのステップを含むマッピング処理により、最終的に得られたLLENビット(52ビット)+PLENビット(12ビット)のNビット(64ビット)の情報が論理識別情報LIDとなる。タイプTY1〜TY4のそれぞれについて得られた論理識別情報LIDは、それぞれ論理識別情報LID1〜LID4として、Nビット空間マッピング処理部3302からLID変換部331内の切替部3310に供給される。
切替部3310は、アプリケーション100(図2参照)から供給されるメタデータ情報M_infに基づき、名前導出部3311、ハッシュ部3312、及びURN化部3313のいずれかを選択する(ステップS120)。この選択は、ユーザあるいはアプリケーション100の開発者のペン識別情報の公開に関する嗜好により事前に決定されるものである。そして、選択した機能部に対し、供給された論理識別情報LIDを出力するよう構成される。
名前導出部3311は、論理識別情報LIDを文字列に変換し、得た文字列を論理名LNとして出力する機能部である(ステップS121,S122)。アプリケーション100は、論理識別情報LIDと文字列とを対応付けるテーブルM_Tblを名前導出部3311に対して1つ供給する。ペン識別子のフォーマットとして、複数のフォーマットが混在する環境であったとしても、論理識別LIDは上述マッピング処理により単一の空間にマッピングされているため、アプリケーション100から供給するテーブルとしては1つのテーブルを供給することで足りる。名前導出部3311は、論理識別情報LIDと文字列との組が列挙されたテーブルM_Tblを受け付け、切替部3310から供給された論理識別情報LIDに対応する文字列をこのテーブルM_Tblから読み出すことにより、上記の変換を行う。尚、アプリケーション100側で名前導出部3311の変換を行う場合であっても、同様にアプリケーション100は、単一のフォーマットで記述した論理識別情報LIDのみを処理するルーチンのみを実装すればよいことになる。
図8(a)は、名前導出部3311に供給されるテーブルM_Tblの例を示す図である。同図に示すように、この場合の論理名LNを構成する文字列としては、ユーザ名を用いることができる。後にインクファイル40を再生する際に、人名によるストロークデータSDのフィルタリングを行うことが可能になる。また、複数の電子ペンP(論理識別情報LID)に同一のユーザ名を対応付けることで、一人の人間が複数の電子ペンPを使用して描いた複数のストロークデータSDを、1つのフィルタ条件によるフィルタリングでまとめて抽出することが可能になる。また、ペン識別情報がインクデータに含められ公開されることに抵抗を感じるユーザや、数値の羅列されたペン識別情報よりも、ペン識別情報を名前化した文字列を好むユーザの嗜好に対し、ペン識別情報とは異なる情報を出力することができる。
ハッシュ部3312は、図8(b)に示すように、所定の一方向関数により論理識別情報LIDをハッシュ値に変換し、得たハッシュ値を論理名LNとして出力する機能部である(ステップS123,S124)。この場合、インクファイル40を再生する際にストロークデータSDのフィルタリングを行うためには、ハッシュ値によるフィルタ条件を指定することになる。こうすることで、論理識別情報LIDがユーザの目に触れなくなるため、ユーザに対して論理識別情報LIDを隠蔽することが可能になる。なお、ハッシュ部3312が用いる一方向関数としては、1つのハッシュ値に対して複数の論理識別情報LIDが対応する可能性(すなわち、いわゆる衝突が発生する可能性)を実用上ゼロにすることができるように設計されたものを用いることが好ましい。
URN化部3313は、図8(c)にも示すように、所定のヘッダを付加することによって論理識別情報LIDをURN(Uniform Resource Name)に変換し、得たURNを論理名LNとして出力する機能部である(ステップS125,S126)。図8(c)の例では、本発明の論理識別情報LIDの体系に適合した電子ペンPであることを示す「urn:dev:wcm:」というヘッダを付している。このようにすることにより、論理識別情報LIDによって識別されるべき電子ペンPの範囲を限定することができ、本発明に係る論理識別情報LIDが付与されたインクデータであることを他の発明に係る論理識別情報が付与されたインクデータから区別可能になる。
デバイスタイプ記録部332は、アドレス空間統合部330から供給されるデバイス情報DIDに基づいてデバイス情報D_dscrを生成し、外部に出力する機能を有する。このデバイス情報D_dscrは、例えば論理名LNに付加されることにより、後段の処理において論理名LNの一部として取り扱うことができる。こうすることで、後述するインクファイル40の再生の際、フィルタ情報の一部としてデバイス情報DIDを使用することが可能になる。
以上、論理名LNの生成処理について説明した。次に、図3のステップS23に示した順序確認処理について、図9〜図11を参照しながら説明する。なお、ステップS33で行われる順序確認処理も同様の処理である。
<順序確認処理>
以下では、図10の例を参照しながら、順序確認処理を説明する。2つのストロークの先後関係は2つの図形オブジェクトのどちらを前景とするかどちらを背景と定めるかのように単純な話ではない。ストロークの重畳関係においては、2つのストロークが交差する図中破線枠IS1で示す交差する位置での重畳関係を調べる必要がある。図10の例では、2種類の電子ペンPA,PBが同時に使用される。図10(b)に示すように、電子ペンPAの軌跡は座標A1〜A4によって表され、電子ペンPBの軌跡は座標B1〜B4によって表される。図10(a)に示すように、電子ペンPAの軌跡と電子ペンPBの軌跡は交差しており、その交点では、電子ペンPAの軌跡が最前面に配置されている。このような配置は、電子ペンPAが交点を通過するタイミングが、電子ペンPBが交点を通過するタイミングに比べて後の時刻になった場合に発生する。
図3に示す処理フローにおいて、2本の電子ペンPA,PBがともにペンダウン状態Pdownになったとすると、何個のストロークが同時に開始されているかを示す変数CSが2となる。すると、電子ペンPA,PBがともにペンムーブト状態Pmvdを維持している間、ステップS22の判定結果が肯定となるため、電子ペンPA,PBのそれぞれについてステップS21で新たなポイントデータPDが取得される都度、ステップS23の順序確認処理が行われることになる。
図9には、図3のステップS21において電子ペンPAのi番目の座標Aiが取得された場合を示している(ステップS231)。この場合、入力処理部31は、新たに取得された座標Aiと、電子ペンPAに関してひとつ前に取得されていた座標Ai−1とを結ぶ線分によって示されるストロークセグメント(ストロークの一部分)が、現在同時に入力されている他のストロークについて既に入力されたストロークセグメントと交差するか否かを判定する(ステップS232)。この判定は、既存の全てのストロークと現在のストロークとが交差するかの判定ではなく、現在同時に入力されている他のストロークに限って行われる。図10の例では、i=2,4の場合には判定結果が否定となる一方、i=3の場合には、座標B2と座標B3を結ぶ線分によって示されるストロークセグメントが既に存在し、このストロークセグメントと座標A3と座標A2を結ぶ線分によって示されるストロークセグメントとが交差しているため、判定結果は肯定となる。
ステップS232で否定判定が得られた場合には、順序確認処理が終了する。一方、ステップS232で肯定判定が得られた場合には、変数uorderが1インクリメントされ(ステップS233)、さらに、新たな変数uorderにより順序情報Uorder(PID)が更新される(ステップS234)。この場合のペン識別情報PIDは、電子ペンPAのペン識別情報PIDである。
図10(c)は、以上の順序確認処理の結果、図3のステップS24で各座標に対応付けられる順序情報Uorder(PID)の値を示している。図3のステップS15の処理により、同図に示すように、座標A1には「0」である順序情報Uorder(PID)が対応付けられ、座標B1には「1」である順序情報Uorder(PID)が対応付けられる。その後、電子ペンPBの軌跡を示す座標B1〜B4については、いずれも「1」である変数uorder{PID)が対応付けられる。これに対し、電子ペンPAの軌跡については、座標A3に至った時点以降、「2」である順序情報Uorder(PID)が対応付けられることになる。これにより、座標A1,A2、座標B1〜B4、座標A3,A4の順で描画されたことが整数値により保存されることになる。
なお、こうして保存される描画順に描画すると、必ずしも入力された時刻順を反映しない場合がある。例えば、本実施の形態による順序確認処理では、座標B4と座標A4のいずれが先に描画されたかについては検出されない。
これに対し、例えば各座標に対応付けて、その座標に電子ペンPが到達した時刻(絶対時刻、又は、描画開始からの相対時刻)を示す情報を記憶することも可能である。この方法によれば、すべての座標間の先後関係を確実に保存することが可能になり、かつ、描画処理をアニメーションのように画面上で再現することも可能になる。尚、ストロークデータSDの先後関係をできる限り少ないデータ量で、適切に復元するという観点からは、上記のようにして順序情報Uorder(PID)を保存すれば十分である。これらはアプリケーション100の指定によって選択することも可能である。
図11に示す他の例を参照しながら、再度、順序確認処理について説明する。この例は、2以上のストロークが同時に生成され、図中破線枠IS2、IS3で示す位置において、先後(上下)関係を入れ替えながら複数回交差する、複雑な例を示している。
この例において同時に使用される電子ペンPは、図10の例と同じく、電子ペンPA,PBの2本である。図11(b)に示すように、電子ペンPAの軌跡は座標A1〜A9によって表され、電子ペンPBの軌跡は座標B1〜B5によって表される。図11(a)に示すように、電子ペンPAの軌跡と電子ペンPBの軌跡は、2箇所で交差している。1つ目は、座標A2と座標A3を結ぶ線分によって示されるストロークセグメントと、座標B2と座標B3を結ぶ線分によって示されるストロークセグメントとによって実現される交差であり、2つ目は、座標A7と座標A8を結ぶ線分によって示されるストロークセグメントと、座標B4と座標B5を結ぶ線分によって示されるストロークセグメントとによって実現される交差である。前者では電子ペンPAの軌跡が最前面に配置され、後者では電子ペンPBの軌跡が最前面に配置されている。
図10の例と同様、座標A1には「0」である順序情報Uorder(PID)が対応付けられ、座標B1には「1」である順序情報Uorder(PID)が対応付けられる。その後、電子ペンPBについては座標B4まで、「1」である順序情報Uorder(PID)が対応付けられ続ける。これは、座標B4までの描画が行われる間に、電子ペンPBのストロークセグメントが他の既存のストロークセグメントと交差する状態が発生しないからである。
一方、電子ペンPAの軌跡については、座標A3に至った時点以降、「2」である順序情報Uorder(PID)が対応付けられることになる。これは、座標A2と座標A3を結ぶ線分によって示されるストロークセグメントが描画された時点で、その直下に、座標B2と座標B3を結ぶ線分によって示されるストロークセグメントが存在しているからである。その後、電子ペンPAの軌跡を示す座標A3〜A9については、いずれも「2」である順序情報Uorder(PID)が対応付けられることになる。
電子ペンPBの座標B5については、「3」である順序情報Uorder(PID)が対応付けられる。これは、座標B4と座標B5を結ぶ線分によって示されるストロークセグメントが描画された時点で、その直下に、座標A7と座標A8を結ぶ線分によって示されるストロークセグメントが存在しているからである。
以上の処理により、図11(c)に示すように、座標A1,A2、座標B1〜B4、座標A3〜A9、座標B5の順で描画されたことが保存される。
上記のようにして保存される先後関係は、描画処理の重畳関係(どちらが上でどちらが下のレイヤで表示されるか)が発生する場合に限って、セグメント単位での重畳関係を表現するように簡易化されている。出力されたUorder(PID)は、多くの場合でストローク単位に与えられ、2つのストロークが同時発生した場合であってセグメント間が交差する稀な場合に限って順序情報が付加される。また、その値は交差した場合に限りインクリメントされる値をとるため、ポイントデータPDの符号化同様に差分符号を行うことでデータ量を小さくすることができる。
図12(a)は、図11に示したストロークデータを含む1つのインクファイル内に格納される一連の情報を例示する図である。また、図12(b)は、(a)に示した一連の情報を順序情報Uorder(PID)によりソートしたものである。
図12(b)に示すように、1つのインクファイル内には、順序情報Uorder(PID)ごとに、ストローク識別子Stroke_id(PID)、順序情報の保存単位、一連のポイントデータPD、及び論理名LN(入力デバイスを識別するための情報)が対応付けて格納される。なお、詳しくは後述するが、このうち論理名LNとストローク識別子Stroke_id(PID)の対応付けはメタデータブロック内に格納されるもので、その他の情報はストロークデータとしてインクファイル内に格納される。また、図12(a)(b)において黒太枠で囲った部分は、図11に示したストロークデータに対応する部分である。ここで、図11(c)ではUorder(PID)として「0」〜「3」の数字を利用していたが、図12では、前後に他のストロークデータが存在することを示すため、それぞれ「100」〜「103」としている。
図12において順序情報の保存単位が「ストローク」となっているレコードは、ユーザによって1回分のストロークが実行される間に順序情報Uorder(PID)の変更がなかったストロークデータを示している。一方、順序情報の保存単位が「ストロークセグメント」となっているレコードは、ユーザによって1回分のストロークが実行される間に順序情報Uorder(PID)の変更があったストロークデータを示している。後者の場合、図12に示すように、順序情報Uorder(PID)が変更になる前の一連のポイントデータPDと後の一連のポイントデータPDとが、インクファイル内に別レコードとして格納される。
以上、順序確認処理について説明した。次に、図4のステップS40に示したインクファイル生成処理について、図13〜図19を参照しながら説明する。
<インクファイル生成処理>
図13は、図2に示したインクファイル生成部37が行うインクファイル生成処理の処理フロー図である。本発明では、インクファイル40は例えばRIFF(Resource Interchange File Format)などの汎用メタファイル形式によって生成される。また、以下の例では、ストロークデータSDは、ポイントデータPDに差分符号化を行う第1の符号化方式によって符号化され、上述したメタデータブロックは、UTF−8などメタデータチャンクに含まれたXMLフォーマットが指定する文字列(文字)の符号化方式によって符号化される。
図13に示すように、インクファイル生成部37はまず、空のインクファイル40を生成する(ステップS401)。
図14は、RIFFによって生成されるインクファイル40の構造を示している。同図に示すように、RIFFによるインクファイル40は、先頭から末尾にかけて、それぞれ4バイトの整数倍のサイズを有する領域A1〜A9が順に並べられた構造を有している。
領域A1〜A9に格納されるデータの具体的な内容は次のとおりである。すなわち、まず領域A1には、このインクファイル40がRIFFによって生成されたものであることを示す「R」「I」「F」「F」の4文字が配置される。また、領域A2には、このインクファイル40のサイズを示す数値が配置される。領域A1,A2のサイズはそれぞれ4バイトである。領域A2内に配置されるファイルサイズは、インクファイル40の再生装置(例えば、図1に示したデジタルインク再生装置50)がインクファイル40の終端位置を把握するために利用される。
領域A3には、領域A4〜A9に格納されているインクデータの全体が、本発明のインクデータ出力方法によって記述されたものであることを示す4文字(例えば「W」「I」「L」「L」)の4文字が配置される。領域A3のサイズも4バイトである。領域A4〜A9内のデータを例えばInkMLなどの他の形式で記述する際には、領域A3の格納内容は当然、上記とは異なるものとなる。
領域A4には、領域A5,A6に格納されているデータが図15、図16で説明するストロークデータフォーマットで生成されたインクチャンクに関するものであることを示す文字列(例えば「I」「N」「K」「1」)の4文字が配置される。領域A4のサイズも4バイトである。
領域A5には、領域A6のサイズを示すデータであるインクチャンクサイズが格納される。領域A5のサイズも4バイトである。このインクチャンクサイズは、インクファイル40の再生装置(例えば、図1に示したデジタルインク再生装置50)が領域A6の終端位置を把握するために利用される。
領域A6には、1以上のストロークデータSDを含むインクチャンクが格納される。領域A9のサイズは、4バイトの整数倍である。インクチャンクのデータ量がちょうど4バイトの整数倍でない場合には、末尾に所定のパディングデータが挿入される。領域A6の具体的な格納内容については、後ほど図15〜図17を参照しながら詳しく説明する。
領域A7には、領域A8,A9に格納されているデータがXML形式のうち特にXMP形式で記述されたものであることを示す「X」「M」「P」「−」の4文字が配置される。領域A7のサイズも4バイトであり、「−」は、領域A7のサイズを4バイトにするためのパディングデータである。
領域A8には、領域A9のサイズを示すデータであるメタデータチャンクサイズが格納される。領域A8のサイズも4バイトである。このメタデータチャンクサイズは、インクファイル40の再生装置(例えば、図1に示したデジタルインク再生装置50)が領域A9の終端位置を把握するために利用される。
領域A9には、上述したメタデータブロックを含むメタデータチャンクが格納される。領域A9のサイズは、4バイトの整数倍である。メタデータチャンクのデータ量がちょうど4バイトの整数倍でない場合には、末尾に所定のパディングデータが挿入される。領域A9の具体的な格納内容については、後ほど図18及び図19を参照しながら詳しく説明する。
図13に戻る。インクファイル生成部37は、ステップS401で空のインクファイル40を生成した後、本発明に係るインクデータ出力方法が実行されたことを示す4文字「W」「I」「L」「L」を含めるとともに、図2に示すように、供給されたストロークデータフォーマットS_Fmtのタイプを識別するための4文字「I」「N」「K」「1」をASCII符号により含める(ステップS402)。
図15(a)は、ストロークデータフォーマットS_Fmtの値として「I」「N」「K」「1」により識別される第1のフォーマット(符号化方法)の一例を示す図である。この例によるストロークデータフォーマットS_Fmtは、ドキュメント(Document)、スタイル(Style)、ストローク(Stroke)の3つのメッセージオブジェクトを有して構成される。ドキュメントであるメッセージオブジェクトは1つのインクチャンクを表しており、ビューボックス(viewBox)、整数化精度情報(decimalPrecision)、スタイル(Styles)、ストローク(Strokes)の各属性と、それぞれのキーを表す数字(「1」〜「4」)を含んで構成される。スタイルであるメッセージオブジェクトは、ドキュメントであるメッセージオブジェクト内のスタイル属性の具体的な内容を表しており、ここでは線幅(strokeWidth)属性と、そのキーを表す数字を含んで構成される。ストロークであるメッセージオブジェクトは、ドキュメントであるメッセージオブジェクト内のストローク属性の具体的な内容を表しており、ポイントデータPDに対応するポイント(point)、ストロークをユニーク識別するためのストローク識別情報(stroke_id)の各属性と、それぞれのキーを表す数字を含んで構成される。なお、これらの属性のうち「repeated」と付記されているものは、同じ属性を複数個含んでよいことを示している。
図15(b)は、各属性の具体的な表現形式を示す図である。同図に示すように、各属性は、キーを表す8ビットのビット列と、値を表す可変長(ただし、8ビットの整数倍)のビット列とによって表される。キーを表すビット列は、キー(この例では「1」)を表す5ビットのビット列aと、データタイプを示す3ビットのビット列bとにより構成される。値を表すビット列は、値を表現するために必要な数の可変長バイト数で示される。整数型の場合、値の絶対値が大きい程大きなバイト数が必要となる符号化方法が利用される。値を表すビット列は、格納すべきビット列を先頭から順に7ビットずつのビット列に分解し、これらの順番を入れ替えて後ろ側から順に並べてなるビット列cによって構成される。なお、7ビットずつのビット列それぞれの先頭には、ビット列cの終了を示すためのビットc1が付加される。ビットc1は、「0」である場合にビット列cの終了を示す。
ストローク属性のように階層構造を有する属性については、図15(c)に示すように、値の中にキー(k)と値(V)の対が複数個配置される、という構造により記述される。例えば図15(c)の例では、キーが「4」であるストローク属性の値に、複数のポイント属性(キー=「1」)と、1つのストローク識別情報属性(キー=「2」)とが含まれている。
図13に戻る。インクファイル生成部37は、図14のA4の部分にストロークデータフォーマットS_Fmtを識別する文字列をASCII符号により含めた後、このストロークデータフォーマットS_Fmtに従う符号化方式(第1のフォーマット)により、インクデータ保持部34に蓄積されている一連のストロークデータSDを符号化する処理を行う(ステップS403,S404)。図3及び図4に示した処理フローから明らかなように、インクデータ保持部34内には、1番目からstroke_id−1番目までのストロークデータSDが格納されている。インクファイル生成部37は、これらのストロークデータSDを、ストロークデータフォーマットS_Fmtに従って順次符号化する。
第1のフォーマットによるストロークデータSDの符号化について、より詳しく説明する。図16は、図13のステップS404に示したストロークデータ符号化処理の処理フロー図である。同図に示すように、ストロークデータ符号化処理を行うインクファイル生成部37は、まず初めに、図2に示したアプリケーション100からビューボックス属性の値を取得し、ビューボックス属性のキー(1)とともに、図15(b)に示した形式で符号化する(ステップS4041)。続いて、インクファイル生成部37は、アプリケーション100から整数化精度情報属性の値を取得し、整数化精度情報属性のキー(2)とともに、図15(b)に示した形式で符号化する(ステップS4042)。
次に、インクファイル生成部37は、スタイル属性のキー(3)と値を符号化する(ステップS4043)。ここで、スタイル属性は、ストロークデータフォーマットS_Fmt内の記述(図15(a)参照)から理解されるように、階層構造を有している。したがって、スタイル属性の値には、図15(c)に示した例と同様、下層に位置する線幅属性のキー(1)と値が格納される。線幅属性の値としては、図3のステップS12において入力処理部31が取得したスタイル情報が使用される。
続いて、インクファイル生成部37は、ストローク属性のキー(4)を符号化した後(ステップS4044)、ストローク属性の値の符号化を実施する(ステップS4045〜S4052)。具体的に説明すると、まずストロークデータSD内に含まれる一例の座標のそれぞれに関して、ポイント属性のキー(1)を符号化し(ステップS4045)、次いで、ポイント属性の値の符号化を行う(ステップS4046〜S4048)。ポイント属性の値は、ポイントデータPD及び順序情報Uorder(PID)の組み合わせによって構成される。
ポイント属性の値の符号化は、具体的には次のようにして実行される。すなわち、まず、ステップS4042で取得した整数化精度情報属性の値を用いる次の式(1)によって、x座標及びy座標のそれぞれを整数値に変換する(ステップS4046)。なお、式(1)中のxfloat,yfloatはそれぞれ、浮動小数点数型である変換前のx座標及びy座標を示し、xint,yintはそれぞれ、整数型である変換後のx座標及びy座標を示し、decimalPrecisionは、整数化精度情報属性の値を示している。また、右辺の先頭にある(int)の表記は、整数部のみを取り出す関数を表している。
続いて、x座標及びy座標のそれぞれの差分値を導出する(ステップS4047)。この差分値の導出は、次の式(2)及び式(3)に示すように、0番目の座標についてはその座標の値を差分値として出力し、i番目の座標については、1つ前に位置するi−1番目の座標からi番目の座標の値を減じてなる値を差分値として出力することによって行う。なお、式(2)及び式(3)中のxdiff,ydiffは、x座標及びy座標のそれぞれについて導出される差分値を示している。このように整数値化したうえで差分値を求めて符号化するのは、図15(b)で説明した可変バイト符号など可変長符号化方法をもちいることにより、ある符号(例えば0)の発生確率に偏りをもたせたエントロピー符号化を行うことでストロークデータSDのデータ量を削減するためである。
差分値の導出が完了したら、インクファイル生成部37は、導出した差分値及び順序情報Uorder(PID)の符号化を行う(ステップS4048)。この符号化の詳細は、図15(b)(c)を参照して説明したとおりである。
インクファイル生成部37は、ステップS4045〜S4048の処理を、ストロークデータSD内の全ポイントデータPDについて繰り返す(ステップS4050)。そして、全ポイントデータPDについて処理が完了した後、ストローク識別情報属性のキー(2)を符号化し(ステップS4051)、さらに、ストローク識別情報属性の値として、を符号化する(ステップS4052)。これにより、ストローク識別情報属性の値は、インクファイル40内においてストロークデータSDを一意に識別する情報となる。以上の処理により、ストローク属性のキーと値の符号化が完了する。その後、インクファイル生成部37は、符号化した一連のデータを出力する(ステップS4053)。
図13に戻る。すべてのストロークデータSDの符号化が完了した後、インクファイル生成部37は、ステップS402,S404での符号化処理によって得られた一連のデータをインクファイル40の領域A6(図14参照)内に書き込む(ステップS405)。これにより、インクチャンクの生成が完了する。
ここで、図15及び図16で説明した第1のフォーマット(第1の符号化方法)と異なるフォーマット(符号化方法)の例として、図17に、InkML形式を用いた場合のストロークデータSDを示す。この場合、図14に示した領域A4には、例えば「I」「N」「K」「2」のように、第1のフォーマットを利用する場合とは異なる文字列が格納される。InkML形式のストロークデータSDは、XML形式で記述され、図17に示すように、traceタグ内に一連のポイントデータPDを順に配置することによって記述される。なお、traceタグ内の各ポイントデータPDはカンマ(,)によって区切られており、各ポイントデータPDは、X座標、Y座標、スタイル情報(この例では筆圧情報)、及び順序情報Uorder(PID)がスペースで区切られた形式で記述される。ただし、図17の例では、順序情報Uorder(PID)については図示していない。図17には、それぞれのストローク識別情報属性が「sd0」〜「sd4」である5つのストロークデータSD0〜SD4を示している。InkML形式のストロークデータSDは、XMLを構成する文字がUTF−8等の符号化処理によって符号化された状態で、インクファイル40の領域A6内に格納される。
図13に戻る。インクチャンクの生成が完了した後、インクファイル生成部37は、論理名LNによってストロークデータSDをグループ化する処理を行う(ステップS406)。なお、このグループ化処理は、メタデータチャンクのデータ量を削減するために行うものである。
<グループ化処理>
図18は、図13のステップS406に示したストロークデータグループ化処理の処理フロー図である。この処理は、同図に示すように、インクデータ保持部34に蓄積されている1番目からstroke_id−1番目までの論理名LNのそれぞれについて、順次行われる(ステップS4061)。具体的に説明すると、インクファイル生成部37はまず、インクデータ保持部34からi番目の論理名LNを取得し(ステップS4062)、その論理名LNにグループを割り当て済みか否かを判定する(ステップS4063)。割り当て済みでなければ(ステップS4063の否定判定)、インクファイル生成部37は新たなグループを生成し、ステップS4062で取得した論理名LNに割り当てる(ステップS4064)。ステップS4063で割り当て済みと判定した場合、及び、ステップS4064の処理が終了した場合には、ステップS4062で取得した論理名LNに割り当てられたグループに、インクデータ保持部34に保持されるi番目のストロークデータSDを関連付ける(ステップS4065)。以上の処理をstroke_id−1番目の論理名LNまで終了した後には、各ストロークデータSDがいずれかのグループに関連付けられた状態となる。
図13に戻る。ストロークデータグループ化処理が終了した後、インクファイル生成部37は、ステップS406で生成した各グループについて、論理名LNに1又は複数のストロークデータSDを対応付けるメタデータブロックの生成を行う(ステップS407,S408)。
図19は、メタデータチャンクの一例を示す図である。このメタデータチャンクはXML形式を応用したXMP形式によって記述されたものである。同図に示すように、2つのメタデータブロックB1,B2を含んで構成される。図13のステップS408では、グループごとに、このようなメタデータブロックの生成が行われる。
<メタデータブロックの生成>
メタデータブロックは、ストロークデータ生成部32が生成したM個(Mは1以上の整数)のストロークデータを、メタデータ生成部33が生成した電子ペンなどの入力デバイスを特定するN種類(Nは1以上M以下の整数)のメタデータにN:Mで対応付けるために、ストロークデータチャンクとは別のメタデータチャンクに保持される情報である。
図19に示す、メタデータブロックB1内の記述B1aは、対応する論理名LN(ここでは「David Smith」)を示している。また、メタデータブロックB1内の記述B1bは、論理名LN「David Smith」に対応する1以上のストロークデータSDのそれぞれに割り当てられたストローク識別情報属性の値(ここでは1番目〜5番目)を示している。この例では、2種類(N=2)のメタデータが存在する。また、これらの記述B1a,B1bにより、メタデータブロックB1は、電子ペンPA(第1の入力デバイス)を特定する論理名LN(第1のメタデータ)を、電子ペンPAによって生成された1以上のストロークデータSD(第1のストロークデータ)をグループ化してなる第1のグループ(記述B1b内に記述されるストローク識別情報属性の値によって特定されるグループ)に対応付ける情報として機能する。
同様に、メタデータブロックB2内の記述B2aは、対応する論理名LN(ここでは「Greg Nelson」)を示しており、メタデータブロックB2内の記述B2bは、論理名LN「Greg Nelson」に対応する1以上のストロークデータSDのそれぞれに割り当てられたストローク識別情報属性の値(ここでは6番目〜9番目)を示している。これらの記述B2a,B2bにより、メタデータブロックB2は、電子ペンPB(第2の入力デバイス)を特定する論理名LN(第2のメタデータ)を、電子ペンPBによって生成された1以上のストロークデータSD(第2のストロークデータ)をグループ化してなる第2のグループ(記述B2b内に記述されるストローク識別情報属性の値によって特定されるグループ)に対応付ける情報として機能する。
ここで、図19に示したメタデータブロックB1,B2では、上述した第1及び第2のグループのそれぞれを、対応する1以上のストロークデータSDのそれぞれに割り当てられたストローク識別情報属性の開始番号と終了番号によって特定している。このような特定方法は、各グループに対応する1以上のストロークデータSDのそれぞれに割り当てられるストローク識別情報属性が連番の数字からなるデータであることによって、実現されるものである。各グループに対応する1以上のストロークデータSDのそれぞれに割り当てられるストローク識別情報属性がバラバラな数字からなるデータである場合には、連番となるように対応するストローク識別情報属性をリナンバリングするか、あるいは列挙することによってグループを特定すればよい。
図13に戻る。すべてのグループについてメタデータブロックの生成が完了した後、インクファイル生成部37は、生成したメタデータブロックに基づいて図19に例示したメタデータチャンクの全体を生成し、第1のフォーマットとは異なる第2のフォーマットにより符号化したうえで、インクファイル40の領域A9(図14参照)内に書き込む(ステップS409)。以上の処理により、インクファイル40の生成が完了する。
以上説明したように、本実施の形態によるインクファイルの出力方法によれば、インクファイル40内に、論理名LNとストロークデータSDとを対応付けて格納することができる。したがって、インクファイル40を再生する際に、インクファイル40内に書き込まれた情報に基づき、論理名LNとストロークデータSDとを対応付けることができるので、論理名LNすなわち電子ペンPに応じたインクファイル40の再生処理を実現することが可能になる。
また、ストロークデータの符号化方法に対応していない場合であっても、特定の入力デバイスによって書かれたストロークデータがインクファイルに含まれているか否かをストロークデータの復号化を行う前に判別することが可能となる。
以下、上記のようなインクファイル40の再生について、図20〜図22を参照しながら説明する。
<インクファイル40の再生処理>
図20は、図1に示したデジタルインク再生装置50の機能ブロック図である。同図に示すように、デジタルインク再生装置50は機能的に、インクファイル受付部51、メタデータ復号部52、ストロークデータ復号部53−1〜53−n、インクデータ保持部54、及び画像生成処理部55を有して構成される。
インクファイル受付部51は、デジタルインク生成装置30によって生成されたインクファイル40の入力を受け付ける機能部である。インクファイル受付部51は、インクファイル40に含まれるメタデータチャンクMC及びインクチャンクICを、それぞれメタデータ復号部52及びストロークデータ復号部53−1〜53−nに出力するよう構成される。
メタデータ復号部52は、メタデータチャンクMCを復号するとともに、アプリケーション100からフィルタ情報の入力を受け付ける機能部である。フィルタ情報は1以上の論理名LNを特定する情報であり、例えばユーザによって指定される。メタデータ復号部52は、フィルタ情報に従い、復号したメタデータチャンクMCの中から再生すべきストローク識別情報stroke_idを抽出する。また、メタデータチャンクMC中の記述から、インクチャンクICの符号化方式を特定する。そして、特定した符号化方式に対応するストロークデータ復号部53に対して、抽出したストローク識別情報stroke_idを供給するよう構成される。
メタデータ復号部52による上記処理について具体的な例を参照して説明すると、例えば図19に示したメタデータチャンクを有するインクファイル40に対してフィルタ情報「David Smith」が指定された場合、メタデータ復号部52により抽出されるストローク識別情報stroke_idは、1番目から5番目のものとなる。また、図19に示したメタデータチャンク内の記述からインクチャンクICがWILLによって符号化されていることが理解できるので、メタデータ復号部52は、WILLに対応するストロークデータ復号部53に、抽出した1番目から5番目のストローク識別情報stroke_idを供給する。
その他、メタデータ復号部52は、フィルタ情報によって指定された1以上の論理名LNをインクデータ保持部54に供給する処理も行う。
ストロークデータ復号部53−1〜53−nは、図2に示したストロークデータ符号化部35−1〜35−nと同様、それぞれ互いに異なるフォーマット(符号化方式)に対応している。各ストロークデータ復号部53は、メタデータ復号部52から1以上のストローク識別情報stroke_idが供給されたことに応じて、対応する符号化方式により、インクファイル受付部51から供給されるインクチャンクICを復号するよう構成される。このとき、インクチャンクIC内のストロークデータSDに相当する部分については、メタデータ復号部52から供給された1以上のストローク識別情報stroke_idに対応するストロークデータSDのみを復号処理の対象とする。これは、復号処理のオーバーヘッドを削減するためである。そして、ストロークデータ復号部53は、復号した1以上のストロークデータSDのそれぞれについて、復号結果をインクデータ保持部54に出力するよう構成される。
インクデータ保持部54は、ストロークデータ復号部53から供給されるストロークデータSDから一連のポイントデータPD及び順序情報Uorder(PID)を抽出し、画像生成処理部55に供給するよう構成される。画像生成処理部55は、こうして供給された一連のポイントデータPD及び順序情報Uorder(PID)に基づき、ディスプレイ60に表示される映像信号や、ラスタデータである画像ファイル61を生成するよう構成される。
図21は、インクファイル40を再生する処理のメインルーチンを示す処理フロー図である。以下、デジタルインク再生装置50が行う処理について、同図を参照しながら、再度より詳しく説明する。
図21に示すように、デジタルインク再生装置50は、まず1以上の論理名LNを指定するフィルタ情報を受け付ける(ステップS50)。続いて、このフィルタ情報に基づいて、画像生成処理(ステップS51)を行う。
図22は、図21のステップS51に示した画像生成処理の処理フロー図である。同図に示すように、この処理では、まず初めにインクファイル受付部51によって、インクファイル40からインクチャンクIC及びメタデータチャンクMCが分離される(ステップS510)。次いで、メタデータ復号部52によりUTF−8で符号化されたメタデータチャンクMCが復号される(ステップS511)。その後、メタデータ復号部52は、復号したメタデータチャンクMCからインクチャンクICの符号化方式を取得する(ステップS512)とともに、復号したメタデータチャンクMCから、フィルタ情報によって指定された論理名LNに対応するストロークデータSDのストローク識別情報stroke_idを取得する(ステップS513)。
次に、ステップS512で取得した符号化方式に対応するストロークデータ復号部53により、インクチャンクの復号が行われる(ステップS514)。ここで復号される部分は、例えば図13のステップS402で符号化したストロークデータフォーマットS_Fmtに相当する部分である。続いて、ストロークデータ復号部53は、ステップS513で取得した一連のストローク識別情報stroke_idに対応する1以上のストロークデータSDについて、ステップS512で取得した符号化方式による復号を実施する(ステップS515,S516)。最後に、こうして復号された一連のストロークデータSDについて、画像生成処理部55が描画を行う。このとき、画像生成処理部55は、ストロークデータSDを1つずつ描画していくのではなく、各ストロークデータSD内にポイントデータPDと対応付けて格納されている順序情報Uorder(PID)(図12(b)を参照)の小さいものから順に、各座標の描画を行う。以上により、図21のステップS51に示した画像生成処理が終了する。
以上説明したように、本実施の形態によるインクファイルの再生方法によれば、本実施の形態によるインクファイルの出力方法によって生成されたインクファイル40を再生する際に、フィルタ情報によって指定された論理名LNに対応するストロークデータSDのみを描画の対象とすることが可能になる。
また、本実施の形態によるインクファイルの出力方法によって生成されたインクファイル40を再生する際に、フィルタ情報によって指定された論理名LNに対応するストロークデータが含まれるか否かを事前に判定することができる。
また、ストロークデータ復号部53は、フィルタ情報によって指定された論理名LNに対応するストロークデータSDのみを復号するので、インクチャンクICの全体を復号してから、フィルタ情報によって指定される論理名LNに対応するストロークデータSDのみを選択する場合に比べて、復号に要する処理のオーバーヘッドを縮小することが可能になる。
また、インクファイルを生成する際、ストロークデータSD内に各座標と対応付けて順序情報Uorder(PID)を格納することにより座標の描画順をストロークデータSD内に保存し、インクファイルの再生時には、この描画順に従って各座標の描画を行うので、図11に例示したような複数のストロークデータSD間の複雑な先後関係を再現することが可能になる。
次に、本発明の第2の実施の形態によるインクファイルの管理方法について説明する。図23は、本実施の形態によるインクファイルの管理方法を実現するコンピュータシステム90のシステム構成を示す図である。同図に示すように、コンピュータシステム90は、複数のコンピュータ1と、インクサーバ70(インクファイルの管理装置)とを備えて構成される。
各コンピュータ1は第1の実施の形態で説明したものと同様のものであり、位置検出器20やディスプレイ60と接続され、インクファイル40を生成及び再生可能に構成される。ただし、本実施の形態ではインクサーバ70がインクファイル40の再生を行うので、各コンピュータ1は図1に示したデジタルインク再生装置50を必ずしも備える必要はない。また、図23に示すように、本実施の形態によるコンピュータ1は、インクファイル40の検索条件をインクサーバ70に出力し、その結果としてインクサーバ70から画像ファイル61の供給を受けるように構成される。この画像ファイル61は、図1に示したものと同じものである。なお、図23では、上側の2台のコンピュータ1のみに位置検出器20を接続し、下側の2台のコンピュータ1のみにディスプレイ60を接続するように描いているが、これは説明のための便宜上の描画であり、位置検出器20が接続されたコンピュータ1にディスプレイ60が接続されていてもよいし、ディスプレイ60が接続されたコンピュータ1に位置検出器20が接続されていてもよい。
インクサーバ70は、いわゆるクラウドサービスを実現するサーバであり、CPU、通信回路、記憶装置などの通常のサーバコンピュータが備える構成(図示せず)を備えている。記憶装置は、主メモリなどの主記憶装置と、ハードディスクなどの補助記憶装置とを含んで構成される。インクサーバ70の各機能は、CPUが記憶装置に記憶されるプログラムに従って動作することによって実現される。
インクサーバ70には、外部記憶装置としてのストレージ71が接続されている。コンピュータ1におけるユーザ操作によりコンピュータ1からインクサーバ70にインクファイル40が送信(アップロード)されると、インクサーバ70はこのストレージ71に、受信したインクファイル40を格納する。
ストレージ71は、こうして格納されるインクファイル40の他に、図24に例示するインクテーブルを記憶している。インクテーブルは、図24に示すように、インクファイル40ごとに、そのインクファイル40のファイル名(インクファイル40を特定する情報)と、そのインクファイル40をアップロードしたユーザのアカウントを示す情報(例えば、インクサーバ70のログインアカウント)と、そのインクファイル40に格納されているメタデータチャンク内に記述されている1以上の論理名LNと、この1以上の論理名LNにそれぞれ対応する1以上の論理識別情報LIDと、そのインクファイル40に格納されているストロークデータSDの符号化方式(WILL、InkMLなど)とを記憶するテーブルである。
インクサーバ70は、コンピュータ1からインクファイル40を受信すると、これを一旦復号することにより、メタデータチャンク内に記述されている1以上の論理名LNと、ストロークデータSDの符号化方式とを取得する。そして、これらをファイル名及びユーザのアカウントを示す情報とともに、インクテーブルに追記する。
ここで、第1の実施の形態で説明したインクファイル40は論理識別情報LIDの記述を含まないので、インクサーバ70は、インクファイル40を復号しても論理識別情報LIDを得ることができない。したがって、第1の実施の形態で説明したインクファイル40を使用する場合、インクサーバ70は、インクファイル40とは別に、コンピュータ1から論理名LNごとの論理識別情報LIDを取得する必要がある。論理識別情報LIDの記述を含むインクファイル40を使用する場合には、インクサーバ70は、上述した論理名LNの場合と同様にして、インクファイル40内の記述から論理識別情報LIDを得ればよい。
なお、論理名LN及び論理識別情報LIDの一方又は両方を取得できない場合、インクサーバ70は、インクテーブルの該当欄を空白にしておけばよい。また、インクテーブルに論理識別情報LIDの列を設けることは必須ではなく、論理識別情報LIDを検索条件のひとつとして使用する必要がない場合には、インクテーブルから論理識別情報LIDの列を除去することとしてもよい。
図25は、インクサーバ70の機能ブロックを示す図である。同図に示すように、インクサーバ70は機能的に、インクファイル選択部73、メタデータ復号部74、切替部75、ストロークデータ復号部76−1〜76−n、インクデータ保持部77、及び画像生成処理部78を有して構成される。
インクファイル選択部73は、ストレージ71に格納済みの1以上のインクファイル40の中から1以上のインクファイル40を選択する機能部である。また、受付部72は、コンピュータ1より、図24に示したファイル名、アカウント、論理名LN、論理識別情報LID、及び符号化方式のうちのいずれか1つ以上を指定する検索条件の入力を受け付ける機能部である。
受付部72は、ストレージ71内のインクテーブルを参照することにより、検索条件によって指定された条件に合致するインクファイル40を特定し、インクファイル選択部73にそのインクファイル40を選択させるための処理を行う。また、受付部72は、特定したインクファイル40に対応するインクチャンクの符号化方式を切替部75に通知する処理を行うとともに、論理名LN又は論理識別情報LIDが指定された場合には、メタデータ復号部74に対し、指定された論理名LN又は論理識別情報LIDを特定するフィルタ情報を出力する処理も行うよう構成される。このフィルタ情報は、図20で説明したフィルタ情報と同様のものである。なお、検索条件において論理名LN及び論理識別情報LIDがいずれも指定されていない場合には、フィルタ情報の出力は不要である。また、インクファイル選択部73は、選択したインクファイル40に含まれるメタデータチャンクMC及びインクチャンクICを、それぞれメタデータ復号部74及び切替部75に出力するよう構成される。
メタデータ復号部74は、インクファイル選択部73から供給されるメタデータチャンクMCを復号するとともに、受付部72からフィルタ情報が供給された場合には、そのフィルタ情報に従い、復号したメタデータチャンクMCの中から再生すべきストローク識別情報stroke_idのみを抽出する機能部である。メタデータ復号部74の機能は図20に示したメタデータ復号部52と同様であるので、詳しい説明は省略する。
ここで、第1の実施の形態で説明したインクファイル40は、メタデータ内に論理識別情報LIDを含んでいない。したがって、フィルタ情報によって論理識別情報LIDが指定されていても、メタデータ復号部74は、適切にストローク識別情報stroke_idを抽出することができない。フィルタ情報による論理識別情報LIDの指定は、インクファイル40のメタデータ内に論理識別情報LIDが格納されている場合に限って有効となる。
切替部75は、インクファイル選択部73から供給されるインクチャンクICを、ストロークデータ復号部76−1〜76−nのうち受付部72から通知された符号化方式に対応するものに供給する機能部である。インクチャンクICの供給を受けたストロークデータ復号部76は、対応する符号化方式により、インクファイル選択部73から供給されるインクチャンクICを復号する。このとき、インクチャンクIC内のストロークデータSDに相当する部分については、メタデータ復号部74から供給された1以上のストローク識別情報stroke_idに対応するストロークデータSDのみを復号処理の対象とする。これは、上述したストロークデータ復号部53の場合と同様、復号処理のオーバーヘッドを削減するためである。そして、ストロークデータ復号部76は、復号した1以上のストロークデータSDをインクデータ保持部77に出力するよう構成される。
インクデータ保持部77は、図20に示したインクデータ保持部54と同様、ストロークデータ復号部76から供給されるストロークデータSDから一連のポイントデータPD及び順序情報Uorder(PID)を抽出し、画像生成処理部78に供給するよう構成される。画像生成処理部78は、こうして供給された一連のポイントデータPD及び順序情報Uorder(PID)に基づいて描画処理を行うことにより、インクファイル40ごとに、ラスタデータである画像ファイル61を生成するよう構成される。
インクサーバ70は、以上のようにして生成された1以上の画像ファイル61を、検索条件に対する返信としてコンピュータ1に送信する。これにより、コンピュータ1のユーザは、検索条件で指定した内容に合致する1以上のインクファイル40のそれぞれにかかる画像ファイル61を、取得ないしディスプレイ60で閲覧することが可能になる。また、検索条件において論理名LN又は論理識別情報LIDを指定した場合には、各画像ファイル61を、指定した論理名LN又は論理識別情報LIDに対応するストロークデータSDのみによって構成されたものとすることが可能になる。
図26は、インクサーバ70がインクファイル40を再生する処理のメインルーチンを示す処理フロー図である。以下、インクサーバ70が行う処理について、同図を参照しながら、再度より詳しく説明する。なお、図26では、検索条件において論理識別情報LIDが指定される場合を考慮していない。
図26に示すように、インクサーバ70は、まずコンピュータ1から検索条件の入力を受け付ける(ステップS60)。そして、検索条件が論理名LNの指定を含む場合、その論理名LNを指定するフィルタ情報を生成する(ステップS61)。
続いてインクサーバ70は、ストレージ71内のインクテーブルを参照し、検索条件に合致する1以上のインクファイル40それぞれのファイル名を取得する。そして、ストレージ71内に格納されている1以上のインクファイル40の中から、取得したファイル名に対応する1以上のインクファイル40を選択する(ステップS62)。
その後、ステップS62で選択した一連のインクファイル40のそれぞれについて、図22を参照して説明した画像生成処理を実行する(ステップS63,S51)。これにより、検索条件の指定内容に合致する1以上のインクファイル40のそれぞれにかかる画像ファイル61が生成される。また、検索条件において論理名LN又は論理識別情報LIDが指定されている場合の各画像ファイル61は、指定された論理名LN又は論理識別情報LIDに対応するストロークデータSDのみによって構成されたものとなる。
以上説明したように、本実施の形態によるインクファイルの管理方法によれば、インクファイル40の検索を行う際の検索条件として、論理名LN又は論理識別情報LIDといった入力デバイスを指定することが可能になる。したがって、検索条件のひとつとして入力デバイスを指定可能なインクファイル40の検索が実現される。
また、本実施の形態によるインクファイルの管理方法によれば、検索条件として論理名LN又は論理識別情報LIDを指定することにより、検索の結果として出力される各画像ファイル61を、指定した論理名LN又は論理識別情報LIDに対応するストロークデータSDのみによって構成されたものとすることが可能になる。
次に、本発明の第3の実施の形態によるインクファイルの出力方法について説明する。図27は、本実施の形態によるコンピュータシステム91のシステム構成を示す図である。同図を図23と比較すると理解されるように、本実施の形態によるコンピュータシステム91は、第2の実施の形態によるコンピュータシステム90と同様、複数のコンピュータ1と、インクサーバ70とを備えて構成される。ただし、本実施の形態によるコンピュータシステム91は、コンピュータ1の内部でインクファイル40の生成工程をすべて行うのではなく、各コンピュータ1でストロークデータSD及び論理名LNの生成までを実施し、符号化を含むその後の工程はインクサーバ70内で行うよう構成される。また、複数のコンピュータ1のユーザが、1つのインクファイル40を同時に生成できるように構成される。その他、図27には図示していないが、各コンピュータ1は、検索条件の指定及び画像ファイル61の受信に関して、第2の実施の形態で説明したコンピュータ1と同様の機能を有している。以下、第1及び第2の実施の形態との相違点を中心に、詳しく説明する。
各コンピュータ1は、図2に示したインクファイル生成装置30の機能ブロックのうちインクデータ保持部34に保持するストロークデータSDを、対応する論理名LNとともに所定の時間間隔でインクサーバ70に送信するよう構成される。
インクサーバ70は、転送フィルタ80と、インクファイル生成部81とを有して構成される。転送フィルタ80は、1つのインクファイル40を同時に生成しようとする複数のコンピュータ1の間に設けられるもので、各コンピュータ1からの上り回線と、他の各コンピュータ1への下り回線との間にスイッチが挿入された構成を有して構成される。このスイッチがオンとなっている場合、各コンピュータ1からアップロードされたストロークデータSD及び論理名LNは、リアルタイムで他のコンピュータ1に転送される。各コンピュータ1は、こうして転送されたストロークデータSD及び論理名LNを、自身で生成しているストロークデータSD及び論理名LNとともに、リアルタイムでディスプレイ60に表示するよう構成される。これにより、各コンピュータ1のユーザは、遠隔地にいるユーザと同時に1つのインクファイル40を生成するという体験を得ることができる。また、ストロークデータSDとともに論理名LNを表示することで、各コンピュータ1のユーザは、表示されているストロークデータSDの描画主体を把握可能となる。
各コンピュータからアップロードされたストロークデータSD及び論理名LNは、インクサーバ70内のインクファイル生成部81に供給される。インクファイル生成部81は、供給されたストロークデータSD及び論理名LNを一時的に保持し、いずれかのコンピュータ1よりインクファイル40の出力指示が入力されたことを契機として、保持していたストロークデータSD及び論理名LNに基づいてインクファイル40の生成を開始するよう構成される。
インクファイル生成部81によるインクファイル40の生成処理は、基本的には図2に示したインクファイル生成部37による処理と同様である。ただし、インクファイル生成部81は、各ユーザからストロークデータSDの符号化方式の入力を受け付け、それに従ってストロークデータSDを符号化することとしてもよい。この場合、1つのインクファイル40の中に、互いに異なる符号化方式によって符号化されたストロークデータSDが混在することになる。
図28は、本実施の形態において生成されるインクテーブルの例を示す図である。ファイル名#F1〜#F3に対応する3つのファイルは図24のインクテーブルにも格納されていたものであり、ファイル名#F4,#F5に対応する2つのファイルが本実施の形態に特有のファイルとなっている。
例えばファイル名#F4に関するインクテーブル内の記述は、David Smithが、アカウント#AC1によりインクサーバ70にログインしているコンピュータ1上で、それぞれ論理識別情報LIDが「Pid#1」「Pid#2」である2つの電子ペンPを用いてストロークデータSDの生成を行い、同時に、Greg Nelsonが、アカウント#AC2によりインクサーバ70にログインしている他のコンピュータ1上で、論理識別情報LIDが「Pid#3」である電子ペンPを用いてストロークデータSDの生成を行い、さらに、ストロークデータSDの符号化方式として、David SmithがWILLを、Greg NelsonがInkMLをそれぞれ指定した場合に得られるものである。インクテーブルをこのように構成することで、インクファイル40の再生時には、複数のユーザが互いに異なるコンピュータ1上で同時に生成した1つのインクファイル40を、アカウント、論理名LN、論理識別情報LID、ストロークデータSDの符号化方式などの検索条件によって適切に検索することが可能になる。
以上説明したように、本実施の形態によるインクファイルの出力方法によれば、各コンピュータ60のユーザに、遠隔地にいるユーザと同時に1つのインクファイル40を生成するという体験を提供することが可能になる。また、インクファイル40の再生時には、そうして生成されたインクファイル40を、アカウント、論理名LN、論理識別情報LID、ストロークデータSDの符号化方式などの検索条件によって適切に検索することが可能になる。
以上、本発明の好ましい実施の形態について説明したが、本発明はこうした実施の形態に何等限定されるものではなく、本発明が、その要旨を逸脱しない範囲において、種々なる態様で実施され得ることは勿論である。
例えば、図5では、アドレス空間統合部330をメタデータ生成部33の機能の一部として実現したが、図29に示すように、アドレス空間統合部330を入力処理部31の一部として実現することも可能である。こうすることで、アドレス空間統合部330をデバイスドライバ側で実現することが可能になる。
また、図3及び図4を参照して説明したインクファイル40の生成処理では筆圧情報を使用していなかったが、筆圧情報を使用してもよいことは勿論である。この場合、筆圧情報は位置検出器20からポイントデータPD等とともに送信されるので、デジタルインク生成装置30は、図15(a)に示したポイント属性(point)の値の一部として、ストロークデータSD内に筆圧情報を埋め込むこととすればよい。
また、第3の実施の形態で説明したインクファイル40の描画に関して、フィルタ情報にストロークデータSDの符号化方式の指定も含め得るようにしてもよい。つまり、第3の実施の形態では、互いに異なる符号化方式によって符号化された複数のストロークデータSDを含むインクファイル40について説明したが、このようなインクファイル40を再生するにあたり、第1の実施の形態で説明したデジタルインク再生装置50(図20参照)や第2の実施の形態で説明したインクサーバ70の再生機能(図25参照)では、1つのインクファイル40から特定の符号化方式によって符号化されたストロークデータSDのみを抽出して再生する、といった処理を行うことはできない。これは、第1及び第2の実施の形態で説明したフィルタ情報には論理名LNや論理識別情報LIDといったメタデータの指定のみが含まれ、ストロークデータSDの符号化方式の指定が含まれないからである。フィルタ情報にストロークデータSDの符号化方式の指定を含められるようにすることにより、互いに異なる符号化方式によって符号化された複数のストロークデータSDを含むインクファイル40を再生する際に、フィルタ情報によって指定された特定の符号化方式により符号化されたストロークデータSDのみを抽出して、描画処理の対象とすることが可能になる。