(第1実施形態)
図1は、本発明を適用した画像処理システムの構成を示すブロック図である。図1に示すように、画像処理システムは、MFP100、クライアントPC101、プロキシサーバ103、文書管理サーバ106、文書管理サーバ106のためのデータベース105、携帯情報端末107を備える。MFP100は、複数種類の機能(複写機能、印刷機能、送信機能等)を実現する複合機である。クライアントPC101または携帯端末107は、例えば、印刷データをMFP100へ送信することで、その印刷データに基づく印刷物をMFP100に印刷させることが可能である。上述した各装置は、無線または有線でLAN102に接続されている。LAN(Local Area Network)102は、また、プロキシサーバ103を介してネットワーク104に接続されている。なお、図1に示す構成は一例であり、同様の構成要素を有する複数のオフィスがネットワーク104上に接続されていても良い。
クライアントPC101、プロキシサーバ103はそれぞれ、汎用コンピュータに搭載される標準的な構成要素を備える。例えば、クライアントPC101、プロキシサーバ103は、CPU、RAM、ROM、ハードディスク、ネットワークI/F、ディスプレイ、キーボード、マウス等を備える。CPUは、Central Processing Unitの略称である。RAMは、Random Access Memoryの略称である。ROMは、Read Only Memoryの略称である。また、ネットワーク104は、典型的にはインターネット、LAN、WAN、電話回線、専用デジタル回線、ATMやフレームリレー回線、通信衛星回線、ケーブルテレビ回線、データ放送用無線回線等のいずれかで実現されている。WANは、Wide Area Networkの略称である。もちろん、それらの組み合わせにより実現されるいわゆる通信ネットワークであっても良いことは言うまでもなく、データの送受信が可能であれば良い。
図2は、図1に示すMFP100の機能構成を示すブロック図である。図2に示すように、MFP100は、画像読み取り部110、記憶装置(以下、BOXとも呼ぶ)111、記録装置112、データ処理装置115、入力装置113、表示装置116、ネットワークI/F114を備える。
画像読み取り部110は、図示しないAuto Document Feeder(以下、ADF)を有し、束状の或いは1枚の原稿の画像を光源で照射し、反射画像をレンズで固体撮像素子上に結像する。固体撮像素子は所定解像度(例えば600dpi)および所定輝度レベル(例えば8ビット)の画像読み取り信号を生成し、画像読み取り信号からラスターデータの画像データを生成する。データ処理装置115は、画像読み取り部110が生成したビットマップ画像データを後述するスキャン画像処理を行うことにより記録信号に変換する。
記録装置112は、データ処理装置115が変換した記録信号を用いて画像形成(印刷出力)する。記録装置112は、複数枚複写の場合には、1頁分の記録信号を一旦BOX111に記憶保持した後、記録装置112に順次出力して、記録紙上に記録画像を形成する。BOX111は、画像読み取り部110からのデータやローカルPC101からドライバを経由して出力されるPDLデータをレンダリングしたデータを保存できる機能を有する。また、MFP100は、MFP100に設けられたキー操作部(入力装置113)を通じて操作され、操作入力の状態を表示装置116により表示し得る。
ローカルPCであるクライアントPC101(もしくは他の汎用PC(不図示))からドライバを介してPDLデータが送信される場合、ネットワークI/F114は、LAN102とネットワークI/F114を介してデータを受信する。そして、記録装置112は、当該受信したPDLデータに基づく画像を記録する。すなわち、ローカルPC101からドライバを経由して出力されるPDLデータは、LAN102からネットワークI/F114を経てデータ処理装置115に入力される。そして、データ処理装置115が言語を解釈・処理することで記録可能な記録信号に変換した後、MFP100は、記録紙上に記録画像として記録することが可能となる。
次に、図3を用いて、ビットマップ画像データ(文書画像データ)の作成について説明する。図3(A)は、MFP100の画像読み取り部110を使用してビットマップ画像データを作成するフローチャートを示す。MFP100を使用した場合、図3のS301において、画像読み取り部110は画像を読み込む。読み込まれた画像は、既にビットマップ画像データである。S302において、そのビットマップ画像データに対して、画像読み取り部110に依存するスキャナ画像処理を行う。ここで言うスキャナ画像処理とは、例えば、色処理やフィルタ処理を指す。
図3(B)は、PC101上のアプリケーションを使用してビットマップ画像データを作成するフローチャートを示す。S401において、PC101上のアプリケーションを使用して作成したデータが、PC101が備えるプリントドライバを介してプリントデータに変換され、MFP100に送信される。ここで言うプリントデータとは、PDLを意味し、例えば、LIPS(商標)、Postscript(商標)等のページ記述言語を指す。次にS402において、MFP100のデータ処理装置115はインタープリタとして機能し、ディスプレイリストを生成する。S403において、データ処理装置115がディスプレイリストをレンダリングすることにより、ビットマップ画像データを生成する。
次に、図4を用いて、アプリケーション画像データの生成フローを説明する。本フローにおいて、MFP100は、ビットマップ画像データから、携帯端末107で表示するための所定のフォーマットのデータ(以下ではアプリケーション画像データと呼ぶこととする)を生成する。ビットマップ画像データは、MFP100の画像読み取り部110により取得される。または、ビットマップ画像データは、ローカルPC101上のアプリケーションソフトで作成されたドキュメントをMFP100内部でデータ処理装置115がレンダリングすることにより生成される。
まず、S501において、データ処理装置115は、ビットマップ画像データを属性毎のオブジェクトに分割するオブジェクト分割処理を行う。本実施形態において、オブジェクト分割後のオブジェクトの属性種類は、文字、写真、グラフィック(図面、線画、表、ライン)、背景を指す。S502において、データ処理装置115は、分割された各々のオブジェクトに対してオブジェクトの種類(文字、写真、グラフィック、背景)を判定する。オブジェクトが写真または背景と判定された場合、S503に処理は進み、データ処理装置115は当該オブジェクトのビットマップ画像をJPEG圧縮する。
一方、オブジェクトが文字またはグラフィックと判定された場合、処理はS504に進み、データ処理装置115はベクトル化処理を行って、パス化されたデータ(ベクトルデータ)に変換する。次に、S505において、データ処理装置115は該オブジェクトが文字かグラフィックであるかを判定する。文字の場合には、更にS506において、データ処理装置115はOCR処理を施し、文字コード化されたデータ(OCR結果の文字コードデータ)を取得する。
データ処理装置115は、S503及びS504で得た各オブジェクトのデータ(JPEGデータ、ベクトルデータ)と、S506で得た文字コードデータとを一つのファイルにまとめる。次に、S507において、データ処理装置115は各オブジェクトに対して、最適なメタデータを付与する。S508において、データ処理装置115は、メタデータを付与した各々のオブジェクトを携帯端末107が表示可能なアプリケーション画像データに生成する。最後に、S509において、データ処理装置115は、生成したアプリケーション画像データをネットワークI/Fを介して携帯端末107に送信する。
図6のフローチャートを用いて、図5のS506で行われるメタデータの付与処理の詳細について説明する。まず、S601において、データ処理装置115は、S501で分割されたオブジェクトのそれぞれについて、各オブジェクトの周囲で一番近くに存在する文字オブジェクトを選択する。次に、S602において、データ処理装置115は、選択した文字オブジェクトに対して、形態素解析を行う。次に、S603において、データ処理装置115は、S602で形態素解析結果により抽出した単語をメタデータとして各オブジェクトに付加する。なお、メタデータは、形態素解析に限定されず、例えば、画像特徴量抽出、構文解析等によっても作成できる。さらに、データ処理装置115は、以下の処理によりメタデータを作成することもできる。つまり、データ処理装置115はMFP100に内蔵されたBOX111や画像処理システムのデータベース105に既に保存されている文書、および、それに含まれるオブジェクトを対象に類似画像検索を行う。そして、データ処理装置115は、類似度の高い類似画像のオブジェクトとの関連付けを行う。
次に、図5と図6を用いて、S501のオブジェクト分割について、詳細に説明する。図5(A)は、入力されたビットマップ画像データを示す。図5(B)はオブジェクト分割処理によって、ビットマップ画像データを複数のオブジェクトに分割した結果の一例である。図6は、オブジェクト分割したときの各オブジェクトのブロック情報および入力ファイル情報を表す。
S501において、データ処理装置115は、図5(A)に示す入力画像に対してオブジェクト分割処理を行うことにより、属性ごとに矩形ブロックに分割する。分割された矩形ブロックを図7(B)に示す。前述のように、矩形ブロックの属性としては、文字、写真、グラフィック(図面、線画、表、ライン)がある。
オブジェクト分割処理の一手法としては、例えば以下のような手法がある。まず、MFP100内のRAM(不図示)に格納されたイメージデータを白黒に2値化し、黒画素輪郭で囲まれる画素塊を抽出する。さらに、抽出された黒画素塊の大きさを評価し、大きさが所定値以上の黒画素塊の内部にある白画素塊に対する輪郭追跡を行う。白画素塊に対する大きさ評価、内部黒画素塊の追跡というように、内部の画素塊が所定値以上である限り、再帰的に内部画素塊の抽出、輪郭追跡を行う。画素塊の大きさは、例えば画素塊の面積によって評価される。データ処理装置115は、このようにして得られた画素塊に外接する矩形ブロックを生成し、矩形ブロックの大きさ、形状に基づき属性を判定する。
例えば、縦横比が1に近く、大きさが一定の範囲の矩形ブロックは文字領域矩形ブロックの可能性がある文字相当ブロックとする。また、近接する文字相当ブロックが規則正しく整列しているときに、これら文字相当ブロックを纏めた新たな矩形ブロックを生成し、新たな矩形ブロックを文字領域矩形ブロックとする。また扁平な画素塊、もしくは、一定大きさ以上でかつ四角形の白画素塊を整列よく内包する黒画素塊をグラフィック領域矩形ブロック、それ以外の不定形の画素塊を写真領域矩形ブロックとする。
次に、生成された矩形ブロックのそれぞれについて、データ処理装置115は、図6に示す属性等のブロック情報および入力ファイル情報を生成する。図6に示すように、ブロック情報は、各ブロックの属性、位置の座標X、座標Y、幅W、高さH、OCR情報を含む。属性は1〜3の数値で与えられ、1は文字領域矩形ブロック、2は写真領域矩形ブロック、3はグラフィック領域矩形ブロックを示す。座標X、座標Yは入力画像における各矩形ブロックの始点のX、Y座標(左上角の座標)である。幅W、高さHは矩形ブロックのX座標方向の幅、Y座標方向の高さである。OCR情報は、S508のOCR処理で文字コード化されたデータへのポインタ情報の有無を示す。さらに入力ファイル情報として矩形ブロックの個数を示すブロック総数Nも保存しておく。
これらの矩形ブロックごとのブロック情報は、特定領域でのベクトル化に利用される。またブロック情報によって、特定領域とその他の領域を合成する際の相対位置関係を特定でき、入力画像のレイアウトを損なわずにベクトル化された領域とビットマップのままの領域を合成することが可能となる。
次に、図7のフローチャートを用いて、図5のS504のベクトル化処理について詳細に説明する。まず、S901において、データ処理装置115は、特定領域が文字領域矩形ブロックであるか否か判断し、文字領域の矩形ブロックであればS902以下のステップに進む。一方、特定領域が文字領域矩形ブロックでないときは、S912に移行する。
S902〜S907では、データ処理装置115は、パターンマッチング等の手法を用いて文字認識処理を行い、対応する文字コードを得る。例えば、S902において、データ処理装置115は、特定領域に対し横書き、縦書きの判定(組み方向判定)を行うために、特定領域内で画素値に対する水平・垂直の射影を取る。次に、S903において、S902の射影の分散を評価する。データ処理装置115は、水平射影の分散が大きい場合は横書き、垂直射影の分散が大きい場合は縦書きと判断する。S904において、S903の評価結果に基づき、組み方向を判定し、行の切り出しを行い、その後文字を切り出して文字画像を得る。文字列および文字への分解は、横書きならば水平方向の射影を利用して行を切り出し、切り出された行に対する垂直方向の射影から、文字を切り出す。縦書きの文字領域に対しては、水平と垂直について逆の処理を行う。行、文字切り出しに際して、文字のサイズも検出し得る。
次に、S905において、データ処理装置115は、S904で切り出された各文字について、文字画像から得られる特徴を数十次元の数値列に変換した観測特徴ベクトルを生成する。特徴ベクトルの抽出には種々の公知手法があり、例えば、文字をメッシュ状に分割し、各メッシュ内の文字線を方向別に線素としてカウントしたメッシュ数次元ベクトルを特徴ベクトルとする方法がある。
S906において、データ処理装置115は、S905で得られた観測特徴ベクトルと、あらかじめフォントの種類ごとに求められている辞書特徴ベクトルとを比較し、観測特徴ベクトルと辞書特徴ベクトルとの距離を算出する。S907において、S906で算出された距離を評価し、最も距離の近いフォントの種類を認識結果とする。次に、S908において、S907における距離評価の最短距離が所定値よりも大きいか否か、類似度を判断する。最短距離が所定値以上の場合(類似度が低い場合)は、辞書特徴ベクトルにおいて、形状が類似する他の文字に誤認識している可能性が高い。そこで最短距離が所定値以上の場合(類似度が低い場合)は、S907の認識結果を採用せず、S911の処置に進む。類似度が所定値より小さいとき(類似度が高い場合)は、S907の認識結果を採用し、ステップ909に進む。
S909において、データ処理装置115は文字フォントの種類を認識する。文字認識の際に用いる、フォントの種類数分の辞書特徴ベクトルを、文字形状種すなわちフォント種に対して複数用意しておく。これを、パターンマッチングの際に、文字コードとともにフォント種を出力することで、文字フォントを認識し得る。次に、S910において、データ処理装置115は、文字認識およびフォント認識よって得られた文字コードおよびフォント情報を用いて、各々あらかじめ用意されたアウトラインデータを用いて、各文字をベクトルデータに変換する。なお、入力画像がカラーの場合は、カラー画像から各文字の色を抽出してベクトルデータとともに記録する。
一方、S911では、データ処理装置115は、文字をグラフィックと同様に扱い、該文字をアウトライン化する。すなわち誤認識を起こす可能性の高い文字については、見かけ上ビットマップに忠実なアウトラインのベクトルデータを生成する。また、S912では、データ処理装置115は、特定領域が文字領域矩形ブロックでないとき(すなわちグラフィック領域矩形ブロックのとき)、画像の輪郭に基づいてベクトル化の処理を実行する。以上の処理により、文字領域矩形ブロックおよびグラフィック領域矩形ブロックに属するイメージ情報をベクトルデータに変換出来る。
図8と図9を用いて、S912のグラフィック領域矩形ブロックのベクトル化処理について詳細に説明する。グラフィック領域矩形ブロックのベクトル化処理は、該領域内で抽出された黒画素塊の輪郭に基づいてベクトル化を行う。図8(A)は、ベクトル化の処理における角抽出の処理を示す図である。図8(B)は、ベクトル化の処理における輪郭線まとめの処理を示す図である。図9は、グラフィック領域のベクトル化処理の詳細フローチャートである。
図9のS1201において、データ処理装置115は、線画等を直線および/または曲線の組み合わせとして表現するために、曲線を複数の区間(画素列)に区切る「角」を検出する。角とは曲率が極大となる点であり、図8(A)に示すように、データ処理装置115は、曲線上の画素Piが角か否かの判断を以下のように行う。すなわち、Piを起点とし、曲線に沿ってPiから両方向に所定画素(k個とする)ずつ離れた画素Pi−k、Pi+kを線分Lで結ぶ。画素Pi−k、Pi+k間の距離をd1、線分Lと画素Piとの距離をd2、曲線の画素Pi−k、Pi+k間の弧の長さをAとする。d2が極大となるとき、あるいは比(d1/A)が閾値以下となるときに画素Piを角と判断する。角によって分割された画素列を、直線あるいは曲線で近似する。直線への近似は最小二乗法等により実行し、曲線への近似は3次スプライン関数などを用いる。画素列を分割する角の画素は近似直線あるいは近似直線における、始端または終端となる。
さらに、データ処理装置115は、ベクトル化された輪郭内に白画素塊の内輪郭が存在するか否かを判断し、内輪郭が存在するときはその輪郭をベクトル化し、内輪郭の内輪郭というように、再帰的に反転画素の内輪郭をベクトル化する。以上のように、輪郭の区分線近似を用いれば、任意形状の図形のアウトラインをベクトル化することができる。元原稿がカラーの場合は、カラー画像から図形の色を抽出してベクトルデータとともに記録する。
S1202で、データ処理装置115は、S1201で求めた輪郭線が近接している場合はそれらをまとめて太さを持った線とする処理を行う。図8(B)に示すように、ある注目区間で外輪郭PRjと、内輪郭PRj+1あるいは別の外輪郭が近接している場合、2個あるいは複数の輪郭線をひとまとめにし、太さを持った線として表現することができる。例えば、輪郭PRj+1の各画素Piから輪郭PRj上で最短距離となる画素Qiまでの距離PiQiを算出し、PQiのばらつきが僅かである場合には、注目区間を画素Pi、Qiの中点Miの点列に沿った直線または曲線で近似し得る。近似直線、近似曲線の太さは、例えば距離PiQiの平均値とする。線や線の集合体である表罫線は、太さを持つ線の集合とすることにより、効率よくベクトル表現することができる。
S1203において、データ処理装置115は、各ベクトルデータの始点、終点を算出する。S1204において、S1203で求められた始点、終点情報を用いて、図形要素を検出する。図形要素とは、区分線が構成している閉図形であり、検出に際しては、始点、終端となっている共通の角の画素においてベクトルを連結する。すなわち、閉形状を構成する各ベクトルはその両端にそれぞれ連結するベクトルを有しているという原理を応用する。
S1205において、データ処理装置115は、ベクトルデータより両端に連結していない不要なベクトルを除去し、閉図形を構成するベクトルを抽出する。S1206において、閉図形を構成するベクトルについて、いずれかのベクトルの端点(始点または終点)を開始点とし、一定方向、例えば時計回りに、順にベクトルを探索する。すなわち、他端点において他のベクトルの端点を探索し、所定距離内の最近接端点を連結ベクトルの端点とする。閉図形を構成するベクトルを1まわりして開始点に戻ったとき、通過したベクトルを全て一つの図形要素を構成する閉図形としてグループ化する。また、閉図形内部にある閉図形構成ベクトルも全てグループ化する。さらにまだグループ化されていないベクトルの始点を開始点とし、同様の処理を繰り返す。
S1207において、データ処理装置115は、S1205で除去された不要ベクトルのうち、S1206で閉図形としてグループ化されたベクトルに端点が近接しているベクトルを検出し、一つの図形要素としてグループ化する。これによって、図形要素内に存在する他の図形要素、もしくは区分線をグループ化し、一つの図形オブジェクトとすることが出来る。また、図形要素内に他の図形要素、区分線が存在しない場合は図形要素を図形オブジェクトとする。以上の処理によってグラフィック領域矩形ブロックを、ベクトル化された一つのオブジェクトに変換することが出来る。
次に、図10を用いて、S508のアプリケーション画像データ生成について詳細に説明する。図10(A)は、本実施例に係るベクトル化処理結果のデータ構成を示すマップである。図10(B)は、アプリケーション画像データ生成処理の詳細を示すフローチャートである。
まず、S1401において、S504のベクトル化処理で生成された中間データを取得する。本実施形態において、MFP100は、以下のようなドキュメント・アナリシス・アウトプット・フォーマット(以下、DAOF)と呼ぶ形式で中間データを記憶装置112に保存しているものとする。図10(A)に示すように、DAOFは、ヘッダ1301、レイアウト記述データ部1302、文字認識記述データ部1303、表記述データ部1304、画像記述データ部1305を含む。
ヘッダ1301には、処理対象の入力画像に関する情報が保持される。レイアウト記述データ部1302には、入力画像中の矩形ブロックの属性である文字、グラフィック(線画、図面、表、ライン)、写真等の情報と、これら属性が認識された各矩形ブロックの位置情報が保持される。文字認識記述データ部1303には、文字領域矩形ブロックのうち、文字認識して得られる文字認識結果が保持される。表記述データ部1304には、表の属性を持つグラフィック領域矩形ブロックの表構造の詳細が格納される。画像記述データ部1305には、ベクトル化の処理が指示された特定領域においては、ベクトル化処理により得られたブロックの内部構造や、画像の形状や文字コード等あらわすデータの集合が保持される。一方、ベクトル化処理の対象ではない特定領域以外の矩形ブロックでは、オブジェクトに分割されたビットマップ画像データそのものが保持される。
次に、S1402において、データ処理装置115は、後述する文書構造ツリー生成を行う。S1403において、データ処理装置115は、文書構造ツリーを元にDAOF内の実データを取得し、後述するアプリケーション画像データを生成する。
次に、図11と図12を用いて、S1402の文書構造ツリー生成について説明する。図11は、文書構造ツリー生成の処理を示すフローチャートである。図12(A)は、文書構造ツリー生成処理の対象となる文書の例を示す図である。図12(B)は、文書構造ツリー生成の処理によって生成される文書構造ツリーを示す図である。
図11に示す文書構造ツリー生成の処理における全体制御の基本ルールとして、処理の流れはミクロブロック(単一矩形ブロック)からマクロブロック(矩形ブロックの集合体)へ移行する。以後「矩形ブロック」は、ミクロブロックおよびマクロブロック両者を意味するものとする。
まず、S1501において、データ処理装置115は、矩形ブロック単位で、縦方向の関連性に基づいて、矩形ブロックを再グループ化する。図15の処理は繰り返し実行されることがあるが、処理開始直後はミクロブロック単位での判定となる。ここで、関連性とは、距離が近い、ブロック幅(横方向の場合は高さ)がほぼ同一であることなどの特徴によって定義される。また、データ処理装置115は、DAOFを参照し、距離、幅、高さなどの情報を抽出する。
例えば、図12(A)に示す文書では、最上部で、矩形ブロックT1、T2が横方向に並列されている。矩形ブロックT1、T2の下には横方向セパレータS1が存在し、横方向セパレータS1の下に矩形ブロックT3、T4、T5、T6、T7が存在する。矩形ブロックT3、T4、T5は、横方向セパレータS1下側の領域における左半部において上から下に、縦方向に配列され、矩形ブロックT6、T7は、横方向セパレータS1下側の領域における右半部において上下に配列されている。データ処理装置115がS1501において縦方向の関連性に基づくグルーピングの処理を実行すると、矩形ブロックT3、T4、T5が1個のグループ(矩形ブロック)V1にまとめられる。また、矩形ブロックT6、T7が1個のグループ(矩形ブロック)V2にまとめられる。グループV1、V2は同一階層である。
次に、S1502において、データ処理装置115は、縦方向のセパレータの有無をチェックする。セパレータは、DAOF中でライン属性を持つオブジェクトであり、明示的にブロックを分割する機能をもつ。セパレータを検出すると、処理対象の階層において、入力画像の領域を、セパレータを境界として左右に分割する。図12(A)に示す文書例では、縦方向のセパレータは存在しない。
次に、S1503において、データ処理装置115は、縦方向のグループ高さの合計が入力画像の高さに等しくなったか否か判断する。すなわち縦方向(例えば上から下)に処理対象の領域を移動しながら、横方向のグルーピングを行うとき、入力画像全体の処理が終了したときには、グループの高さの合計が入力画像の高さになることを利用し、処理の終了判断を行う。グルーピングが終了したときはそのまま処理終了し、グルーピングが終了していなかったときはS1504に進む。
次に、S1504において、データ処理装置115は、横方向の関連性に基づくグルーピングの処理を実行する。これによって、例えば図16の矩形ブロックT1、T2が1個のグループ(矩形ブロック)H1にまとめられ、矩形ブロックV1、V2が1個のグループ(矩形ブロック)H2にまとめられる。グループH1、H2は同一階層となる。ここでも、処理開始直後はミクロブロック単位での判定となる。
次に、S1505において、データ処理装置115は、横方向のセパレータの有無をチェックする。セパレータを検出すると、処理対象の階層において、入力画像の領域を、セパレータを境界として上下に分割する。図12(A)に示すように、横方向のセパレータS1が存在する。データ処理装置115は、以上の処理結果を図12(B)に示す文書構造ツリーとして登録する。
図12(B)に示すように、入力された1ページ分のビットマップ画像データは、最上位階層にグループH1、H2、セパレータS1を有する。グループH1には第2階層の矩形ブロックT1、T2が属する。グループH2には、第2階層のグループV1、V2が属する。グループV1には、第3階層の矩形ブロックT3、T4、T5が属し、グループV2には、第3階層の矩形ブロックT6、T7が属する。本例では、V0はページを表し、V0の下位階層にあるものがオブジェクトを表す。
最後に、S1506において、データ処理装置115は、横方向のグループ長合計が入力画像の幅に等しくなったか否か判断する。これによって横方向のグルーピングに関する終了判断を行う。横方向のグループ長がページ幅となっている場合は、文書構造ツリー生成の処理を終了する。横方向のグループ長がページ幅となっていないときは、S1501に戻り、データ処理装置115は、再びもう一段上の階層で、縦方向の関連性チェックから繰り返す。
図13は、アプリケーション画像データのフォーマットの一例を示す。本実施形態では、アプリケーション画像データのフォーマットとして、Scalable Vector Graphics(以下、SVG)形式を用いて説明する。
図13では説明のため、各オブジェクトの表記を枠1801と1802、及び1804で囲って示している。各オブジェクトは、オブジェクトの領域を示す領域情報と、DAOF内の実データから取得する描画要素を持つ。また、領域情報のみで描画要素を持たないオブジェクト(例えば図12(B)のH1、H2、V1、V2など)を持つことも可能である。1801は写真属性を示す。写真属性には、写真オブジェクトの領域を示す領域情報と、描画要素としてビットマップ情報が示されている。1802は文字属性を示す。文字属性には、文字オブジェクトのベクトルデータと、1803にS506のOCR処理で得られる文字コードデータ及びS504のベクトル化処理で得られる文字サイズが示される。また、S504のベクトル化処理で得られる文字領域の組み方向(縦書き、もしくは横書き)についても記すことが可能である。1804は、線画などのグラフィックオブジェクトを表す。なお、本実施例ではアプリケーション画像データをSVG形式で表記しているが、文書の意味や構造を記述・保持できる画像フォーマットであれば良く、これに限定されるものではない。
図14は、本実施形態における画像表示装置として機能する携帯端末107のハードウェア構成例を示すブロック図である。携帯端末107は、メインボード1900、LCD1901、タッチパネル1902、ボタンデバイス1903を備える。また、LCD1901とタッチパネル1902をまとめてタッチUI1904と呼ぶこととする。
メインボード1900は、CPU1905、無線LANモジュール1906、電源コントローラ1907、ディスプレイコントローラ(DISPC)1908、を備える。また、メインボード1900は、パネルコントローラ(PANELC)1909、ROM1910、RAM1911、二次電池1912、タイマー1913を備える。それぞれのモジュール1905〜1913は、バス(不図示)によって接続されている。
CPU1905は、バスに接続される各デバイスを制御すると共に、ROM1910に記憶された図15を用いて後述するソフトウェアモジュール2000を、RAM1911に展開して実行するプロセッサである。RAM1911は、CPU1905のメインメモリ、ワークエリア、LCD1901に表示するビデオイメージ用エリア、およびMFP100から送信されるアプリケーション画像データの保存領域として機能する。
ディスプレイコントローラ(DISPC)1908は、CPU1905の要求に応じて、RAM1911に展開されたビデオイメージ出力を高速に切り替えるとともに、LCD1901に同期信号を出力する。結果として、RAM1911のビデオイメージが、DISPC1908の同期信号に同期してLCD1901に出力され、LCD1901上にイメージが表示される。
パネルコントローラ(PANELC)1909は、CPU1905の要求に応じて、タッチパネル1902およびボタンデバイス1903を制御する。その制御によって、タッチパネル1902を操作するユーザの指又はスタイラスペンなどの指示物の押下位置や、ボタンデバイス1903上の押下されたキーコードなどが、CPU1905に通知される。押下位置情報は、タッチパネル1902の横方向の絶対位置を示す座標値(以下x座標)と、縦方向の絶対位置を示す座標値(以下y座標)から成る。タッチパネル1902は複数ポイントの押下を検知することが可能で、その場合、CPU1905には押下点数分の押下位置情報が通知される。
電源コントローラ1907は、外部電源(不図示)と接続され電力の供給を受ける。これによって、電源コントローラ1907に接続された二次電池1912を充電しながら、且つ、携帯端末107全体に電力を供給する。外部電源から電力が供給されないときは、二次電池1912が携帯端末107全体に電力を供給する。
無線LANモジュール1906は、CPU1905の制御に基づいて、LAN102に接続された無線アクセスポイント(不図示)上の無線LANモジュールとの無線通信を確立し、携帯端末107とMFP100など図1に示す各装置との通信を仲介する。無線LANモジュール1906には、例えばIEEE802.11bなどがある。
タイマー1913は、CPU1905の制御に基づいて、図15に示すジェスチャイベント発生部2001へのタイマー割込を発生させる。ジェスチャイベント発生部2001については後述する。また、携帯端末107には不図示の地磁気センサや加速度センサがバスに接続されている。タイマー1913は、CPU1905の制御に基づいて、携帯端末107の傾きを検知し、携帯端末107が所定以上の傾きを得ると、携帯端末107の向きを変更し、描画部2003にLCD1901への描画の指示を送る。CPU1905は、携帯端末107の向きが変更されるとき、LCD1901の幅および高さを入れ替えて、以降の処理を行う。
図15は、携帯端末107のCPU1905で実行処理されるソフトウェアモジュール2000の構成を示すブロック図である。ソフトウェアモジュール2000を構成する各モジュールについて説明する。図15に示すように、ソフトウェアモジュール2000は、ジェスチャイベント発生部2001、ジェスチャイベント処理部2002、描画部2003を備える。
ジェスチャイベント発生部2001は、ユーザのタッチ入力を受けて、後述する各種ジェスチャイベントを発生させる。ジェスチャイベント発生部2001は、発生したジェスチャイベントを、ジェスチャイベント処理部2002へ送信する。ジェスチャイベント処理部2002は、ジェスチャイベント発生部2001で発生したジェスチャイベントを受信して、各ジェスチャイベントと、アプリケーション画像データに記述された文書構造に応じた処理を実行する。描画部2003は、ジェスチャイベント処理部2002の実行結果に応じて、MFP100から送信されるアプリケーション画像データをLCD1901へ描画・表示する。アプリケーション画像データの表示の方法については後述する。
図16は、ジェスチャイベント発生部2001が発生させるジェスチャイベント名の一覧と、ジェスチャイベント発生部2001がジェスチャイベント処理部2002へ送信する各イベントの情報を示す。
図16(A)は、タッチ押下イベントであり、最新のタッチ座標の座標値とタッチ座標数が送信される。タッチ座標とは、タッチパネル1902にユーザの指が触れている1点の座標のことで、x座標とy座標で表される1組の座標値を持つ。また、タッチ座標数とは、タッチパネル1902にユーザの指が接触したタッチ座標の数を示している。なお、タッチ座標は、タッチパネル1902へユーザの指が触れたとき、指が移動したとき、指が離れたとき、タイマー1913からの割り込みが発生したときに更新される。
図16(B)は、スワイプイベントであり、最新のタッチ座標の座標値と、最新と直前の座標値の差分から計算した移動距離がジェスチャイベント処理部2002に送信される。ここで、スワイプとは、指先をタッチパネル1902に接触させたまま、1方向に移動(滑らすような)動作のことをいう。
図16(C)は、ピンチインイベントであり、最新の2点のタッチ座標の中心座標値、及び、2点のタッチ座標を結ぶ直線の縮小距離から計算したピンチインの縮小率がジェスチャイベント処理部2002に送信される。ここで、ピンチインとは、2つの指先をタッチパネル1902に接触させたまま、互いに近づける(つまむような)動作のことをいう。
図16(D)は、ピンチアウトイベントであり、最新の2点のタッチ座標の中心座標値、及び、2点のタッチ座標を結ぶ直線の拡大距離から計算したピンチアウトの拡大率がジェスチャイベント処理部2002に送信される。ここで、ピンチアウトとは、2つの指先をタッチパネル1902に接触させたまま、互いに遠ざける(指を広げるような)動作のことをいう。
図16(E)は、2点スワイプイベントであり、最新の2点のタッチ座標の座標値、及び、2点のタッチ座標の最新と直前の座標値の差分から計算した移動距離がジェスチャイベント処理部2002に送信される。2点スワイプイベントは、2点のタッチ座標が同じ方向に移動している場合に発生する。
図16(F)は、ローテートイベントであり、最新の2点のタッチ座標の座標値から計算した回転の中心座標値、及び、2点のタッチ座標の最新と直前の座標値から計算した回転角度がジェスチャイベント処理部2002に送信される。ここで、ローテートとは、2つの指先をタッチパネル1902に接触させたまま、2つの指先をタッチパネル1902に対して回転させる動作のことを言う。
図16(G)は、フリックイベントであり、最新のタッチ座標の座標値、及び、最新と直前の座標値から計算した指の移動速度がジェスチャイベント処理部2002に送信される。ここで、フリックとは、スワイプ中に指を離す(指をはじくような)動作のことをいう。
図16(H)は、タッチ解除イベントであり、タッチパネル1902からユーザの指が離れたときの最新のタッチ座標の座標値、及び、座標数がジェスチャイベント処理部2002に送信される。
図16(I)は、ダブルタップイベントであり、最新のタッチ座標の座標値がジェスチャイベント処理部2002に送信される。ここで、ダブルタップとは、所定の時間内に後述のシングルタップイベントが発生したことを言う。
図16(J)は、シングルタップイベントであり、最新のタッチ座標の座標値がジェスチャイベント処理部2002に送信される。ここで、シングルタップとは、前述のタッチ押下イベントの後、所定の時間内にタッチ解除イベントが発生したことを言う。
図16(K)は、ロングタップイベントであり、最新のタッチ座標の座標値がジェスチャイベント処理部2002に送信される。ここで、ロングタップとは、前述のタッチ押下イベントの後、所定の時間以上経過してからタッチ解除イベントが発生したことを言う。
図16(L)は、タッチアンドホールドイベントであり、最新のタッチ座標の座標値がジェスチャイベント処理部2002に送信される。ここで、タッチアンドホールドイベントとは、タッチパネル1902にユーザの指が触れてから一度も移動することなく所定の時間以上経過したことを言う。
なお、ここでは、ユーザのタッチ入力の例として指を使った場合を示すが、タッチ入力はスタイラスペンなどによる入力でも良い。
次に、図17と図18を用いて、本実施形態において、携帯端末107がアプリケーション画像データ受信した際の処理について説明する。図17は、携帯端末107がアプリケーション画像データを受信した際のフローチャートである。図18は、携帯端末107のタッチUI1904の画面表示例である。
まず、S2200において、携帯端末107は、無線LANモジュール1906を介してMFP100からアプリケーション画像データを受信すると、RAM1911に受信したアプリケーション画像データを保存する。次に、S2201において、描画部2003は、RAM1911に保存したアプリケーション画像データの構文を解析し、先頭ページと、それに含まれるオブジェクトを読み込む。
次に、S2202において、描画部2003は読み込んだ先頭ページに含まれる背景、文字、写真、グラフィックの全てのオブジェクトを、オブジェクトの始点の座標と幅、高さに応じてレンダリングしてタッチUI1904の表示状態を更新する。このとき、先頭ページは、図23のページ2300に示すように、タッチUI1904の幅に合わせて表示倍率が制御される。また、表示倍率に縮小したときのページの高さがタッチUI1904よりも小さい場合は、タッチUI1904の中央に適合され表示されるように、タッチUI1904上の座標において、ページ2300の始点が制御される。また、表示倍率に縮小したときのページ2300の高さがタッチUI1904よりも大きい場合は、タッチUI1904上の座標において、ページ2300の始点がタッチUI1904の始点(例えば画面の左上)に合うように制御される。このように、タッチUI1904においてページ全体を表示する表示制御方法を、本実施例ではページ表示モードを呼ぶこととする。
なお、本実施形態のアプリケーション画像データに含まれる文字オブジェクトは、図13の文字属性1802に示した通り、ベクトルデータと共に文字コードデータ1803を保持している。描画部2003は、ページ内に文字オブジェクトがある場合、ページ2300のレンダリングにベクトルデータを用いるが、文字コードデータを用いても良いことは言うまでもない。
次に、図19と図20を用いて、携帯端末107のアプリケーション画像データの操作制御を行うソフトウェアモジュールについて説明する。図19は、ジェスチャイベント処理部2002が備える、アプリケーション画像データの操作制御に係わるソフトウェアモジュールの構成を示すブロック図である。ジェスチャイベント処理部2002は、表示変更イベント処理部2400、スワイプイベント処理部2401、拡大・縮小イベント処理部2405、オブジェクト選択処理部2408を備える。
ジェスチャイベント処理部2002は、ジェスチャイベント発生部2001から、図16に示すいずれかのジェスチャイベントを受信する。表示変更イベント処理部2400は、ジェスチャイベント処理部2002が受信するジェスチャイベントの内、シングルタップイベント(図16(J))に対する処理を行う。表示変更イベント処理部2400は、シングルタップイベントを受信すると、シングルタップイベントのタッチ座標の座標値が、図18に示すモード切替ボタン2301、次へボタン2302、前へボタン2303の何れかの上にあるかを判定する。そして、シングルタップイベントのタッチ座標が「モード切替ボタン」2301上である場合は、表示変更イベント処理部2400は、後述するモード切替処理を行う。また、タッチ座標が「次へボタン」2302上である場合は、表示変更イベント処理部2400は後述する「次選択処理」(次へボタン選択処理)を行う。タッチ座標が「前へボタン」2303上である場合は、表示変更イベント処理部2400は後述する「前選択処理」(前へボタン選択処理)を行う。表示変更イベント処理部2400が備える表示順番制御部2402と表示範囲制御部2403が、「次選択処理」と「前選択処理」を行う。
スワイプイベント処理部2401は、図16(B)を用いて説明したスワイプイベントに対する処理を行う。ジェスチャイベント処理部2002がスワイプイベントを受信すると、スワイプイベント情報が含む移動距離に応じて、タッチUI1904上の座標において、ページ2300の始点を移動させる。そして、その上でタッチUI1904の表示状態を更新する。また、スワイプイベント処理部2401が備える移動範囲制限部2404が、図30を用いて後述する移動範囲制限処理を行って、タッチUI1904に表示される部分領域の移動範囲を制限する。
さらに、移動範囲制限部2404が備える水平移動制限部2407は、後述する水平移動範囲制限処理を行って、タッチUI1904に表示されるページ2300の始点を移動させる。また、移動範囲制限部2404が備える垂直移動制限部2409は、後述する垂直移動範囲制限処理を行って、タッチUI1904に表示されるページ2300の始点を移動させる。
拡大・縮小イベント処理部2405は、図16(C)のピンチインイベントと、図16(D)のピンチアウトイベントに対する処理を行う。ジェスチャイベント処理部2002は、ピンチインイベントやピンチアウトイベントを受信すると、二つのイベントの縮小率もしくは拡大率に応じてページ2300のレンダリング時の文字サイズを変化させる。そして、拡大・縮小イベント処理部2405は、変更した画像を用いてタッチUI1904の表示状態を更新する。また、拡大・縮小イベント処理部2405が備える縮小時表示モード切替部2406は、後述する縮小時表示モード切替処理を行う。
オブジェクト選択処理部2408は、図16(I)のダブルタップイベントに対する処理を行う。ジェスチャイベント処理部2002がダブルタップイベントを受信すると、ダブルタップイベントのタッチ座標の座標値を用いて、図26を参照して後述するオブジェクト選択処理を行う。なお、オブジェクト選択処理は、ページ表示モードでのみ動作するようオブジェクト選択処理部2408によって制御される。
次に、図18と図20、図21を用いて、表示変更イベント処理部2400が行うモード切替処理について説明する。図20は、モード切替処理のフローチャートである。図18または図21(B)に示す表示モード切替項目であるモード切替ボタン2301がユーザによりタップ指示されるのに応じて処理が実行される。図21(A)および図21(B)は、携帯端末107のタッチUI1904の画面表示例である。
まず、S2500において、表示変更イベント処理部2400は、モード切替ボタンが指示されたと判定すると、携帯端末107に設定中の表示モードを取得する。表示モードとは、携帯端末107がアプリケーション画像データをタッチUI1904に表示する方法を示し、本実施形態では、携帯端末107は、一例として次の2つの表示モードを有するものとする。第一に、図18に示すようにページ全体を表示するのに適したページ表示モードである。第二に、図21(B)に示すようにページ内の一部の領域を拡大表示するのに適した部分領域表示モードである。前述した通り、アプリケーション画像データを携帯端末107が受信した直後はページ表示モードが設定されている。部分領域表示モードは、図21(B)に示す通りページ2300内の各オブジェクトが大きく表示されるようにページ2300の表示倍率と始点を制御する表示モードである。
表示イベント処理部が、図21(A)に示す文字オブジェクト2601をユーザがシングルタップした際に、S2500において表示モードを切り替えてもよい。あるいは、図18に示すモード切替ボタン2301がユーザにより押下されて図21(A)に示す画面を表示し、ユーザに拡大対象のオブジェクトを選択させる構成としてもよい。文字オブジェクト2601を拡大表示対象のオブジェクトとしてユーザが選択した場合、図21(B)に示す画像が表示される。
なお、図21(A)のオブジェクト2601を囲む破線は、説明をわかり易くするために描いたもので、ページ2300上には存在しない。また、本実施例では、図21(B)に示すように、拡大表示対象のオブジェクト2601の領域が透明で且つそれ以外の領域が、斜線で示す半透明グレーの半透明マスク2600を、ページ2300の上に重ねて表示する。このようにコントラストを付して表示することで、対象のオブジェクトだけが見やすくなるという効果が得られる。つまり、半透明マスクを重ねて表示することにより、対象のオブジェクト以外が暗く表示されるので、対象のオブジェクトが強調表示され、ユーザは表示対象になっているオブジェクトの領域を特定しやすくなる。
表示変更イベント処理部2400は、モード切替ボタン2301が指示されたときに設定中の表示モードが、部分領域表示モードである場合にはS2501に、ページ表示モードである場合にはS2504を実行する。
S2501において、表示変更イベント処理部2400は、図21(B)に示す半透明マスク2600を非表示設定(半透明マスクOFF)にして、ページ画像全体を表示するページ表示モードへの切り替えを行う。S2502において、表示変更イベント処理部2400は、前述した通り、タッチUI1904の幅に合わせてページ2300の表示倍率を制御すると共に、ページ2300の始点を制御して、ページの表示範囲を決定する。S2503において、表示変更イベント処理部2400は、当該決定されたページの表示範囲に基づいて、タッチUI1904の表示状態を更新する。
また、モード切替ボタン2301が指示されたときに設定中の表示モードがページ表示モードであった場合には、S2504において、表示変更イベント処理部2400は、表示モードを部分領域表示モードへ切り替る。そして、表示変更イベント処理部2400は、半透明マスク2600を表示する設定(半透明マスクON)に変更する。
次に、S2505において、表示変更イベント処理部2400は、ページ2300内の先頭オブジェクトを読み込み、先頭オブジェクトの始点と幅、高さを取得する。ここで、先頭オブジェクトとは、アプリケーション画像データの文書構造ツリーにおいて、最初に読み込まれるオブジェクトである。
表示変更イベント処理部2400が備える表示範囲制御部2403は、S2506において、後述する部分領域表示範囲決定処理を行った後、S2503で、当該決定された表示範囲に基づいてタッチUI1904の表示状態を更新する。なお、S2506の部分領域表示範囲決定処理では、S2505で読み込んだオブジェクトの属性に応じて、ページの表示倍率や始点を制御し、タッチUI1904に表示する部分領域の表示範囲を決定する。また、このとき表示対象となっているオブジェクトの部分領域以外の領域にはグレーの半透明マスクがかけられるので、ユーザは、表示対象となっているオブジェクトを識別しやすくなる。
次に、図20のS2506において表示範囲制御部2403が行う部分領域表示範囲決定処理の詳細について、図22のフローチャートを用いて説明する。まず、S2700において、表示範囲制御部2403は、読み込んだオブジェクトの属性を判定する。属性が文字の場合はS2701に進み、属性が表である場合はS2711に進み、それ以外の属性である場合はS2712に進む。
S2701において、表示範囲制御部2403は、文字属性である当該表示対象のオブジェクトが、箇条書きであるかを判定する。ここでいう箇条書きのオブジェクトとは、各文字列もしくは行の先頭に点や数字といった行頭文字が存在するオブジェクトを指すものとする。なお、行頭文字は、OCR結果から取得することができる。オブジェクトが箇条書きでなく、通常の文字列であった場合にはS2702に進み、箇条書きであった場合にはS2712に進む。
S2702において、表示範囲制御部2403は、オブジェクトの文字の組み方向を取得する。オブジェクトの組み方向は、S504のベクトル化の過程で得られている。S2703において、表示範囲制御部2403は、文字の組み方向を判定する。組み方向が縦書きである場合には処理はS2704に進み、横書きである場合にはS2705に進む。文字の組み方向が縦書きの場合、S2704において、表示範囲制御部2403は、当該オブジェクトの高さがタッチUI1904の画面の高さに入るようにページの表示倍率を設定する。また、文字の組み方向が横書きの場合、S2705において、表示範囲制御部2403は、当該オブジェクトの幅がタッチUI1904の画面の幅に入るようにページの表示倍率を設定する。
次に、S2706において、S2704またはS2705で設定した表示倍率に拡縮したオブジェクトの全体がタッチUI1904に表示できるかを判断する。オブジェクト全体がタッチUI1904よりも大きく、全体を表示できない場合にはS2707に進み、一方、オブジェクト全体がタッチUI1904よりも小さく、全体を表示できる場合にはS2710に進む。
S2707において、表示範囲制御部2403は、当該オブジェクトにおける文字の組み方向を判定し、縦書きであると判定した場合はS2708に進み、横書きであると判定した場合はS2709に進む。
S2708において、表示範囲制御部2403は、オブジェクト全体がタッチUI1904に表示できない縦書きの文字領域を表示するので、当該オブジェクトの右上端がタッチUI1904の右上端に合うように、ページ2300の始点位置を設定する。すなわち、縦書きの場合の先頭行が表示されるように表示位置を設定する。
S2709において、表示範囲制御部2403は、オブジェクト全体がタッチUI1904に表示できない横書きの文字領域を表示するので、当該オブジェクトの左上端がタッチUI1904の左上端に合うように、ページの始点を設定する。すなわち、横書きの場合の先頭行が表示されるように表示位置を設定する。
また、S2710において、オブジェクト全体がタッチUI1904の画面内に収まるので、表示範囲制御部2403は、当該オブジェクトの中央がタッチUI1904の中央に合うようにページ2300の始点を設定する。
なお、S2700でオブジェクトの属性が表であると判定した場合には、S2711において、表示範囲制御部2403は、表のヘッダ位置を検出する。ヘッダの位置は、例えば、先頭行(一番上の行)と先頭列(一番左の列)の文字のフォント種がボールドであるか否かや、ベクトル化した際のベクトルデータの近似曲線の太さ、表罫線の太さ、表の各セルの背景色などによって判断することができる。S2711で検出した表のヘッダ位置が先頭行である場合には、S2703からS2705に進む。また、表のヘッダ位置が先頭列である場合には、S2703からS2704に進む。また、S2707では、表のヘッダは一番上の行か一番左の列に存在することが一般的であるため、S2709に進み、オブジェクトの左上端がタッチUIの左上端に合うようにページの始点を設定する。このようにすることで、表のヘッダが表示されるように表示位置が設定されることになる。すなわち、上述の処理において表示範囲制御部2403は、オブジェクト属性が文字または表の場合に、文字の組み方向の範囲が画面内に入るように表示倍率と先頭オブジェクトの表示位置とを設定する。
また、S2700でオブジェクトの属性がその他の属性(文字・表以外の属性)と判定された場合、または、S2701で箇条書きであると判断された場合、S2712において、表示範囲制御部2403は、以下の処理を行う。すなわち、表示範囲制御部2403は、当該オブジェクト全体がタッチUI1904に入るように、ページの表示倍率を設定する。そして、S2710において、オブジェクトの中央がタッチUI1904の中央に合うようにページ2300の始点を設定する。
「次へボタン」2302がユーザによりタップ(指定)されたときに実行される「次選択処理(次へボタン選択処理)」について、図23のフローチャートを用いて説明する。S2800において、表示変更イベント処理部2400は、次処理項目である「次へボタン」2302がタップされたときに携帯端末107に設定されている表示モードを取得する。取得した表示モードが部分領域表示モードである場合には、S2801に進み、ページ表示モードである場合にはS2805に進む。
S2801において、表示順番制御部2402は、現在読み込んでいるページの全オブジェクトから、文書構造ツリーに基づいて次に表示すべきオブジェクトを選択し、そのオブジェクトを読み込む。本実施形態において、文書ツリー構造上の表示順番は、文書ツリー構造において、先頭の上位階層のオブジェクト、そのオブジェクトの下位階層に属するオブジェクトの順とする。更に、その下位階層のオブジェクトの表示が全て終わった後、次の上位階層のオブジェクト、その下位階層のオブジェクト、というような順番であるとする。
例えば、図12(B)に示すように、V0はページを表し、最初に読み込まれるオブジェクトはH1である。H1のオブジェクトが部分領域表示モードでタッチUI1904に表示されている状態で、「次選択処理」が行われると、H1は下位階層を持つため、T1のオブジェクトが読み込まれる。さらに、T1のオブジェクトが表示されている状態で「次選択処理」が行われると、T1は下位階層を持たず、同階層にT2が存在するため、T2が読み込まれる。T2のオブジェクトが表示されている状態で「次選択処理」が行われると、T2は下位階層を持たず、同階層に次のオブジェクトは存在しないため、次の上位階層のS1が読み込まれる。なお、本実施例において、描画要素を持たないH1を選択して読み込むとしているが、描画要素を持つT1やT2だけを選択するようにしても良いことは言うまでもない。また、例えば、文字属性のオブジェクトのみなど、特定の属性を持つオブジェクトのみを選択したり、特定の属性のみを除外して選択することも可能である。さらに、H1やV1といったそれ単体では描画要素を持たず、下位下層に描画要素を持つオブジェクトのみを選択することも可能である。
S2802において、表示順番制御部2402は、S2801で次のオブジェクトを読み込めたか否かを判定する。S2801で次のオブジェクトが読み込めた場合(選択可能なオブジェクトがあった場合)は、当該読み込んだオブジェクトを処理対象としてS2506に進む。なお、S2506の部分領域表示範囲決定処理は図20で説明した処理と同様であるため、ここでの説明は省く。そして、S2803において、当該読み込まれたオブジェクトの属性および始点と幅、高さに基づいて制御されたページの表示倍率と始点を用いて、タッチUI1904の表示状態を更新する。
一方、S2801で次のオブジェクトが読み込めなかった場合(次に選択可能なオブジェクトが無かった場合)は、既にページ内の最終オブジェクトが読み込まれている状態である。従って、表示順番制御部2402は、S2802で全てのオブジェクトの表示処理が終了したと判断し、S2804に進む。S2804において、表示順番制御部2402は、部分領域表示モードを終了して半透明マスク2600を非表示にして、ページ表示モードへと切り替える。
S2805において、表示モードがページ表示モードであるので、RAM1911に保存したアプリケーション画像データの構文を解析し、次のページと、それに含まれるオブジェクトを読み込む。
S2806において、表示順番制御部2402は、S2805で次のページが読み込めた場合はS2807に進む。一方、既にRAM1911に保存したアプリケーション画像データの最終ページが読み込まれている状態であり、S2805で次に読み込み可能なページが無かった場合は、S2808に進む。S2808では、RAM1911に保存したアプリケーション画像データの構文を解析し、先頭ページと、それに含まれるオブジェクトを読み込む。
次に、S2807において、表示範囲制御部2403は、前述した通り、タッチUI1904の幅に合わせてページの表示倍率を制御すると共に、ページの始点を制御して、ページの表示範囲を決定する。S2803で、表示範囲制御部2403は、当該決定されたページ表示範囲に基づいてタッチUI1904の表示状態を更新する。
次に、「前へボタン」2303がユーザによりタップ(指定)されたときに実行される「前選択処理(前へボタン選択処理)」について、図24のフローチャートを用いて説明する。前選択処理は、次選択処理とほぼ同じ構成であるため、ここでは処理が異なるS2900とS2901、S2902についてのみ説明する。
現在の表示モードが部分領域モードの場合、S2900において、表示順番制御部2402は、現在読み込んでいるページの全オブジェクトから文書構造ツリーに基づいて次に表示すべきオブジェクトを選択し、そのオブジェクトを読み込む。本実施例において、「前へボタン」が指定されたときの文書ツリー構造上の表示順番は、文書ツリー構造において末尾の下位階層のオブジェクト、そのオブジェクトの上位階層のオブジェクトというように、下位階層から上位階層への順番であるとする。すなわち、下位階層のオブジェクトの表示が全て終わった後、その上位階層における他のオブジェクトの表示へと移るものとする。
例えば、図12(B)に示すように、最初に読み込まれるオブジェクトは末尾の下位階層オブジェクトであるT7である。部分領域表示モードで、T7のオブジェクトがタッチUI1904に表示されている状態で、前処理項目である「前へボタン」が押下されると、同じ階層にT6が存在するため、T6のオブジェクトが読み込まれる。さらに、T6のオブジェクトが表示されている状態で「前選択処理」が行われると、同じ階層にその他のオブジェクトが存在しないため、その上位階層であるV2が読み込まれる。V2のオブジェクトが表示されている状態で「前選択処理」が行われると、V2は同じ階層にV1を持ち、更にV1は下位階層にオブジェクトを持つため、V1の下位階層の末尾にあるT5のオブジェクトが読み込まれる。
なお、「前選択処理」においても、「次選択処理」と同様に、描画要素を持つオブジェクトだけを選択するようにしても良く、また、特定の属性を持つオブジェクトのみを選択したり、特定の属性のみを除外して選択することも可能である。さらに、H1やV1といったそれ単体では描画要素を持たず、下位下層に描画要素を持つオブジェクトのみを選択することも可能である。
S2901において、表示モードがページ表示モードであるので、RAM1911に保存したアプリケーション画像データの構文を解析し、前のページと、それに含まれるオブジェクトを読み込む。
S2806において、既にRAM1911に保存したアプリケーション画像データの先頭ページが読み込まれている状態であり、S2901で次に読み込み可能なページが無かった場合は、S2902に処理が進む。S2902において、表示順番制御部2402は、RAM1911に保存したアプリケーション画像データの構文を解析し、最終ページと、それに含まれるオブジェクトを読み込む。
次に、ピンチイン操作がなされたときに、縮小時表示モード切替部2406が行う縮小時表示モード切替処理について、図25のフローチャートを用いて説明する。S3100において、縮小時表示モード切替部2406は、ユーザにより操作が行われたときの携帯情報端末107に設定されている表示モードを取得する。取得した表示モードが部分領域表示モードである場合にはS3101に進み、そうでない場合には何も行わずに処理を終了する。
S3101において、縮小時表示モード切替部2406は、現在のページの表示倍率で表示したときの現在読み込まれているオブジェクトの幅が、タッチUI1904の画面の幅より小さいか否かを判定する。オブジェクトの幅がタッチUIの画面幅よりも小さい場合には、S3102に進み、そうでない場合には何も行わずに処理を終了する。
S3102において、縮小時表示モード切替部2406は、現在のページの表示倍率で表示したときの現在読み込まれているオブジェクトの高さが、タッチUI1904の画面の高さより小さいか否かを判定する。このとき、オブジェクトの高さがタッチUIの画面高さよりも小さい場合には、S3103に進み、そうでない場合には何も行わずに処理を終了する。
S3103において、該オブジェクトを含むページの表示倍率がさらに縮小されようとしているのかを判断する。すなわち、縮小時表示モード切替部2406が受信したイベントがピンチインイベントであるか否かを判定する。ここで、ページがさらに縮小されようとしていると判断した場合には、S3104に進み、そうでない場合には何も行わずに処理を終了する。
S3104において、縮小時表示モード切替部2406は、半透明マスク2600を非表示にして、携帯情報端末107の表示モードを部分領域表示モードからページ表示モードに切り替える。最後に、S3105において、表示変更イベント処理部2400は、該ピンチインイベントに基づいて決定されるページの表示倍率と始点に応じてタッチUI1904の表示状態を更新する。
次に、ダブルタップ操作が行われたときに、オブジェクト選択処理部2408で行われるオブジェクト選択処理について、図26のフローチャートを用いて説明する。まず、S3200において、オブジェクト選択処理部2408は、ユーザにより操作が行われたときの携帯情報端末107に設定されている表示モードを取得する。取得した表示モードがページ表示モードである場合にはS3201に進み、部分領域表示モードである場合には何も行わすに処理を終了する。
S3201において、オブジェクト選択処理部2408は、受信したダブルタップイベントのタッチ座標の座標値を取得する。タッチ座標の座標値はタッチUI1904上の座標値であるため、タッチUIに表示しているページの表示倍率と始点に基づいて、ページにおける座標値に換算する。
S3202において、オブジェクト選択処理部2408は、タッチUIに表示している現在のページ内の全オブジェクトの中から先頭オブジェクトの情報を読み込む。S3203において、オブジェクト選択処理部2408は、S3201で求めたページにおける座標値が、読み込んだオブジェクトの領域情報内に含まれるか否かを判定する。ページにおける座標値が当該読み込んだオブジェクトの領域情報内にある場合には処理はS3204に進み、そうでない場合には処理はS3206に進む。
S3204において、オブジェクト選択処理部2408は、携帯端末107の表示モードをページ表示モードから部分領域表示モードに切り替える。同時に、非表示であった半透明マスク2600を表示することで、当該ダブルタップされたオブジェクト以外の領域に半透明マスクがかかるように制御し、S2506に進む。
S2506において、表示範囲制御部2403は、S3202またはS3206で読み込んだオブジェクト(すなわち、当該ダブルタップされたオブジェクト)の部分領域表示範囲決定処理を行う。部分領域表示範囲決定処理については前述した通りであるので、ここでの詳細な説明は省く。
そして、S3205において、表示変更イベント処理部2400は、部分領域表示範囲決定処理で決定したページの表示倍率と始点に応じてタッチUI1904の表示状態を更新する。
また一方、S3206において、オブジェクト選択処理部2408は、現在のページ内の全オブジェクトの中から、現在読み込んでいるオブジェクトの次のオブジェクトの情報を読み込む。
S3207において、オブジェクト選択処理部2408は、S3206で次のオブジェクトが読み込めたか否かを判定し、読み込めた場合にはS3203に戻り、読み込めなかった場合には何もせずに処理を終了する。
なお、本実施例において、現在タッチUIに表示しているページ内の全オブジェクトを対象に、ページにおける座標値がオブジェクトの領域情報内にあるか否かを判定しているが、それに限るものではない。例えば、前選択処理や後選択処理と同様に、描画要素を持たないオブジェクトを無視し、描画要素を持つオブジェクトだけを選択するようにしても良い。また、例えば、文字属性のオブジェクトのみなど、特定の属性を持つオブジェクトのみを選択したり、特定の属性のみを除外して選択することも可能である。さらに、オブジェクト自体は描画要素を持たず、下位下層に描画要素を持つオブジェクトを選択することも可能である。
次に、移動範囲制限部2404で行われる移動範囲制限処理について、図27のフローチャートを用いて説明する。なお、本実施例において、移動範囲制限処理は、スワイプ操作が終了したとき、すなわち、ユーザの指がタッチUI1904から離れたときに行われる。
S3000において、移動範囲制限部2404は、スワイプ操作が終了したときの携帯情報端末107に設定されている表示モードを取得して、部分領域表示モードであるか判定する。表示モードが部分領域表示モードである場合にはS3001に進み、ページ表示モードである場合には何も行わずに処理を終了する。
S3000で表示モードが部分領域表示モードであると判定した場合には、処理はS3001に進む。S3001において、移動範囲制限部2404は、現在のページの表示倍率で表示したときの現在読み込まれているオブジェクトの幅が、タッチUI1904の画面の幅より大きいか否かを判定する。このとき、オブジェクトの幅がタッチUIの画面幅よりも大きい場合には、処理はS3002に進み、そうでない場合には、S3004に進む。
S3002において、スワイプイベント処理部2401がスワイプイベントの移動距離に応じてオブジェクトを含むページの表示位置を移動させる。このとき、移動範囲制限部2404は、オブジェクトの左端または右端がタッチUI1904の画面内に移動したかを判定する。その結果、オブジェクトの左端または右端がタッチUIの画面内にあると判定した場合には、処理はS3003に進み、そうでない場合には、S3006に進む。
S3003において、移動範囲制限部2404は、図28を用いて後述する画面内水平移動範囲制限処理を行い、処理はS3006に進む。また、S3001でオブジェクトの幅がタッチUIの画面幅よりも大きくない場合には、S3004に処理は進む。S3004において、スワイプイベントの移動距離に応じてオブジェクトを含むページの表示位置を移動させる。このとき、移動範囲制限部2404は、オブジェクトの左端または右端がタッチUIの画面外に移動したかを判定する。その結果、オブジェクトの左端または右端がタッチUIの画面外にあると判定した場合には、処理はS3005に進み、そうでない場合には、S3006に進む。S3005において、移動範囲制限部2404は、当該オブジェクトの左端または右端を画面の端に移動させて、該オブジェクトの全体が表示されるようにページの始点のx座標を補正する。
S3006において、移動範囲制限部2404は、現在のページの表示倍率で表示したときの現在読み込まれているオブジェクトの高さが、タッチUI1904の画面の高さより大きいか否かを判定する。このとき、オブジェクトの高さがタッチUIの画面高さよりも大きい場合には、処理はS3007に進み、そうでない場合には、S3009に進む。S3007において、移動範囲制限部2404は、スワイプイベントの移動距離に応じてオブジェクトを含むページの表示位置を移動した際に、オブジェクトの上端または下端がタッチUI1904の画面内に移動したかを判定する。その結果、オブジェクトの上端または下端がタッチUIの画面内にあると判定した場合には、処理はS3008に進み、そうでない場合には、S3011に進む。S3008において、移動範囲制限部2404は、図29を用いて後述する画面内垂直移動範囲制限処理を行い、S3011に進む。
S3006でオブジェクトの高さがタッチUIの画面高さよりも大きくない場合には、処理はS3009に進む。S3009において、移動範囲制限部2404は、スワイプイベントの移動距離に応じてオブジェクトを含むページの表示位置を移動した際に、オブジェクトの上端または下端がタッチUIの画面外に移動したかを判定する。オブジェクトの上端または下端がタッチUIの画面外に移動したと判定した場合には、処理はS3010に進み、そうでない場合には、S3011に進む。
S3010において、移動範囲制限部2404は、当該オブジェクトの上端または下端を画面内に移動させて、該オブジェクトの全体が表示されるようにページの始点のy座標を補正する。最後に、S3011において、表示変更イベント処理部2400は、ページの表示倍率と始点に応じてタッチUI1904の表示状態を更新する。
次に、図28のフローチャートを用いて、移動範囲制限部2404が備える水平移動制限部2407が行う画面内水平移動範囲制限処理について詳細に説明する。S3300において、水平移動制限部2407は、現在読み込まれているオブジェクトの属性を判定する。属性が文字の場合はS3301に進み、それ以外の属性である場合はS3307に進む。
S3301において、水平移動制限部2407は、オブジェクトの文字の組み方向を取得・判定する。組み方向が横書きの場合にはS3302に、縦書きの場合にはS3307に処理が進む。なお、オブジェクトの組み方向は、S504のベクトル化の過程で得られている。S3302において、水平移動制限部2407は、オブジェクトの左端または右端がタッチUI1904の画面内に移動した移動量を算出し、処理はS3303に進む。
S3303において、水平移動制限部2407は、オブジェクトの右端の画面内への移動量が所定量以上であるか否かを判定し、その結果、所定量以上であった場合には、処理はS3304に進み、そうでない場合には、S3305に進む。S3304において、水平移動制限部2407は、画面の内側へ移動したオブジェクトの端部と移動方向において対向するオブジェクトの端部が、画面の端部の位置に表示されるように設定する。具体的には、水平移動制限部2407は、画面内に所定量以上移動されたオブジェクトの右端を画面外へ、左端をタッチUIの画面端へ移動させて、できるだけ該オブジェクトの左側が表示されるようにページの始点のx座標を補正する。水平移動制限部2407は、オブジェクトの左端がタッチUIの左端位置に表示されるように制御すると、処理を終了する。
また、S3303でオブジェクトの右端の画面内への移動量が所定量未満であった場合は、S3305において、水平移動制限部2407は、オブジェクトの左端の画面内への移動量が所定量以上であるか否かを判定する。その結果、所定量であった場合にはS3306に進み、そうでない場合には、S3307に進む。
S3306において、水平移動制限部2407は、画面内に所定量以上移動されたオブジェクトの左端を画面外へ、右端をタッチUIの画面の右端位置へ移動させて、できるだけ該オブジェクトの右側が表示されるようにページの始点のx座標を補正する。つまり、水平移動制限部2407は、オブジェクトの右端がタッチUIの右端に表示されるように制御し、処理を終了する。また、S3300、S3301、S3305で条件に合致しなかった場合は、処理はS3307に進む。S3307において、水平移動制限部2407は、画面内に移動された該オブジェクトの左端または右端をタッチUIの画面の端に移動させる。つまり、水平移動制限部2407は、できるだけ該オブジェクトが表示されるように、ページの始点のx座標を補正して処理を終了する。
次に、図29のフローチャートを用いて、移動範囲制限部2404が備える垂直移動制限部2409が行う画面内垂直移動範囲制限処理について詳細に説明する。S3400において、垂直移動制限部2409は、現在読み込まれているオブジェクトの属性を判定する。属性が文字の場合はS3401に進み、それ以外の属性である場合はS3407に進む。
S3401において、垂直移動制限部2409は、オブジェクトの文字の組み方向を取得・判定し、組み方向が縦書きの場合にはS3402に、横書きの場合にはS3407に進む。なお、オブジェクトの組み方向は、S504のベクトル化の過程で得られている。S3402において、垂直移動制限部2409は、オブジェクトの上端または下端がタッチUI1904の画面内に移動した移動量を算出してS3403に進む。
S3403において、垂直移動制限部2409は、オブジェクトの下端の画面内への移動量が所定量以上であるか否かを判定し、その結果、所定量であった場合にはS3404に進み、そうでない場合には、S3405に進む。
S3404において、垂直移動制限部2409は、画面内に所定量以上移動されたオブジェクトの下端を画面外へ、上端をタッチUIの画面の上端位置へ移動させる。垂直移動制限部2409は、できるだけ該オブジェクトの上側が表示されるようにページの始点のy座標を補正して処理を終了する。
また、S3403でオブジェクトの下端の画面内への移動量が所定量未満であった場合は、S3405において、垂直移動制限部2409は、オブジェクトの上端の画面内への移動量が所定量以上であるか否かを判定する。その結果、所定量であった場合には、処理はS3406に進み、そうでない場合には、処理はS3407に進む。S3406において、垂直移動制限部2409は、画面内に所定量以上移動されたオブジェクトの上端を画面外へ、下端をタッチUIの画面の下端位置へ移動させる。垂直移動制限部2409は、できるだけ該オブジェクトの下側が表示されるようにページの始点のy座標を補正して処理を終了する。
また、S3400、S3401、S3405で条件に合致しなかった場合は、処理はS3407に進む。S3407において、垂直移動制限部2409は、画面内に移動された該オブジェクトの上端または下端をタッチUIの画面の端に移動させる。垂直移動制限部2409は、できるだけ該オブジェクト全体が表示されるように、ページの始点のy座標を補正して処理を終了する。
以上、図28および図29を参照して説明したように、携帯端末107は、表示対象のオブジェクトが画面よりも大きい場合に、移動量に基づいてオブジェクトの端部位置を設定する。このように、オブジェクトの移動範囲を制限することで、ユーザは、オブジェクトの端部を容易に、且つ確実に識別することができる。さらに、オブジェクト端部の画面内への移動が所定量以上あった場合には、文字の組み方向に基づいて、画面内に移動されたオブジェクト端部とは反対側の端部をタッチUIの画面端に移動させる。これにより、ユーザは、例えば文字の行末から行頭へと少ない操作でオブジェクトを移動させることが出来る。
次に、図30乃至図33を用いて、本実施例における移動範囲制限処理および画面内水平移動範囲制限処理を具体的に説明する。図30乃至図33は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。図30に示すように、オブジェクト3500は図面の属性を持つオブジェクトである。オブジェクト3500は、図35(A)では破線で示す領域情報を持つ。オブジェクト3500の属性は図面であるため、オブジェクト3500が読み込まれた直後は、ページの表示倍率が設定される。つまり、表示範囲制御部2403が、画面領域表示範囲決定処理において、オブジェクトの幅と高さがタッチUI1904の画面幅と高さに入る倍率に、ページの表示倍率を設定する。また、表示範囲制御部2403は、オブジェクト中心がタッチUI1904の中心に合うように、ページの始点を設定する。設定された表示例を図30(B)に示す。
図35(C)は、ユーザの指3600から指3601にかけて左方向にスワイプ操作されたときの表示例である。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。図35(C)に示すように、ユーザのスワイプ操作によって、オブジェクト3500の左端がタッチUI1904の画面外に移動している。
図35(D)は、スワイプイベント処理部2401によって、オブジェクト3500が画面内に表示されるようにページの始点が補正された場合の表示例である。オブジェクト3500は、オブジェクトの幅と高さがタッチUIの画面幅と高さよりも小さい。従って、オブジェクト3500が画面外に移動すると、移動範囲制限処理によって、該オブジェクト全体が画面内に表示されるようにページの始点が補正される。
図31は、横書きの文字の属性を持つオブジェクト3600を含む画面例を示す。オブジェクト3600は、図31(A)のように破線で示す領域情報を持つ。オブジェクト3600の属性は文字であるため、部分領域表示モードでオブジェクト3600が読み込まれた直後は、ページの表示倍率が設定される。つまり、表示範囲制御部2403が、部分領域表示範囲決定処理において、オブジェクトの幅がタッチUI1904の画面幅に入る倍率に、ページの表示倍率が設定される。
オブジェクト3600の場合、当該設定されたページの表示倍率において、オブジェクトの高さも、タッチUI1904の画面の高さより小さくなる。従って、表示範囲制御部2403は、該オブジェクトの中心がタッチUI1904の中心に合うように、ページの始点を設定する。設定された表示例を図31(B)に示す。
図32は、オブジェクト3600をピンチアウト動作によって拡大してタッチUI1904に表示例を示す。図32(A)は、オブジェクト3600の幅がタッチUI1904の画面幅よりも大きく、オブジェクト3600の右端がタッチUIの画面外に、上下端が画面内に表示されている。
図32(B)は、ユーザの指3700から指3701にかけて左方向にスワイプ操作されたときの表示例である。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。図32(B)に示すように、ユーザのスワイプ操作によって、オブジェクト3600の右端がタッチUI1904の画面内に移動している。図32(B)に示すアイコン3702は、現在読み込んでいるオブジェクトが文字属性であり、且つ文字の組み方向に対してユーザのスワイプ操作があった場合に、該オブジェクトの端部が画面内に移動した移動量に応じて表示される。アイコン3702は、ユーザのスワイプ操作が終了したとき、すなわち指3701がタッチUIから離れたときに、オブジェクト3600の右端または左端のどちらがタッチUI1904に表示されるのかを示している。図32(B)に示すように、画面内への移動が所定量よりも少ないため、水平移動制限部2407は、スワイプ操作が終了したときにオブジェクト3600の右端がタッチUI1904の画面右端に表示される旨をユーザに伝えるアイコン3702を表示する。
図32(C)は、スワイプイベント処理部2401によって右端が画面内に移動されたオブジェクト3600を、水平移動制限部2407が画面の右端に表示されるようにページの始点を補正した場合の表示例である。オブジェクト3600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト3600が画面内に移動すると、画面内水平移動範囲制限処理によって、画面の右端に表示されるようにページの始点を補正する。なお、本実施例においては、水平移動制限部2407は、オブジェクトの端部を画面の端部へと表示するためにページの始点を補正する際、オブジェクトの端部が明確になるように補正する。すなわち、水平移動制限部2407は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
図32(D)は、図32(B)の状態に対して、ユーザの指3703から指3704にかけて左方向にさらにスワイプ操作されたときの表示例を示す。図32(D)は、ユーザのスワイプ操作によって、オブジェクト3600の右端がタッチUI1904の画面内に大きく移動する例を示す。つまり、水平移動制限部2407は、画面内水平移動範囲制限処理のS3303において、オブジェクト3600が画面の内側へ所定量以上移動したと判断する。このとき、水平移動制限部2407は、スワイプ操作が終了したときにオブジェクト3600の左端がタッチUI1904の画面左端に表示される旨をユーザに伝えるアイコン3705を表示する。
図32(E)は、スワイプ操作が終了したときに画面内水平移動範囲制限処理によって、該オブジェクトの左端がタッチUI1904の左端に表示されるようにページの始点を補正した場合の表示例である。オブジェクト3600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト3600の右端が所定量以上画面内に移動すると、画面内水平移動範囲制限処理によって、該オブジェクトの左端がタッチUIの左端に表示されるようにページの始点を補正する。なお、図32(E)においても同様に、本実施例においては、水平移動制限部2407は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正している。
図33は、オブジェクト3600をピンチアウト動作によって拡大してタッチUI1904に表示した表示例を示す。図33(A)は、図32(E)の状態で、ユーザの指3800から指3801にかけて右方向にスワイプ操作されたときの表示例を示す。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。図33(A)では、ユーザのスワイプ操作によって、オブジェクト3600の左端がタッチUI1904の画面内に移動してしまっている。図33(A)のアイコン3802は、図32(B)の3702と同様に、ユーザのスワイプ操作が終了したときに、オブジェクト3600の左端がタッチUI1904の右端と左端のどちらに移動するのかを示している。図33(A)に示す画面例では、画面内への移動が所定量よりも少ない。従って、水平移動制限部2407は、スワイプ操作が終了したときにオブジェクト3600の左端がタッチUI1904の画面左端に表示される旨をユーザに伝えるアイコン3802を表示する。
図33(B)は、スワイプイベント処理部2401によって左端が画面内に大きく移動されたオブジェクト3600を、水平移動制限部2407が画面の左端に表示されるようにページの始点を補正した場合の表示例を示す。オブジェクト3600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト3600が画面内に移動すると、水平移動制限部2407は、オブジェクト3600の左端が画面の左端に表示されるようにページの始点を補正する。なお、図33(B)においても同様に、本実施例においては、水平移動制限部2407は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正している。
図33(C)は、図33(B)の状態に対して、オブジェクト3600が、ユーザの指3803から指3804にかけて右方向に所定量以上移動されたときの表示例である。つまり、図33(C)は、水平移動制限部2407が、画面内水平移動範囲制限処理のS3305において、オブジェクト3600が画面内へ所定量以上移動していると判断する。水平移動制限部2407は、スワイプ操作が終了したときにオブジェクト3600の右端がタッチUI1904の画面右端に表示される旨をユーザに伝えるアイコン3805を表示する。
図33(D)は、スワイプイベント処理部2401によって左端が画面内に大きく移動されたオブジェクト3600に対し、水平移動制限部2407が、ページの始点を補正した場合の表示例を示す。オブジェクト3600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト3600の左端が所定量以上画面内に移動すると、右端がタッチUIの右端に表示されるようにページの始点を補正する。なお、図33(D)においても同様に、本実施例においては、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正している。
次に、図34乃至図36を用いて、本実施例における画面内垂直移動範囲制限処理を具体的に説明する。図34乃至図36は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。
図34に示すように、オブジェクト3901はページ3900内の縦書きの文字の属性を持つオブジェクトである。オブジェクト3901は、図34(A)に示すように破線で示す領域情報を持つ。オブジェクト3901の属性は文字であるため、部分領域表示モードでオブジェクト3901が読み込まれた直後は、ページの表示倍率が設定される。つまり、表示範囲制御部2403が、部分領域表示範囲決定処理により、オブジェクトの高さがタッチUI1904の画面高さに入る倍率に、ページの表示倍率を設定する。オブジェクト3901の場合、当該設定されたページの表示倍率において、オブジェクトの幅も、タッチUI1904の画面の幅より小さい。従って、表示範囲制御部2403は、該オブジェクトの中心がタッチUI1904の中心に合うように、ページ3900の始点を設定する。設定されたオブジェクトの表示例を図34(B)に示す。
図35は、オブジェクト3901をピンチアウト動作によって拡大してタッチUI1904に表示した一例である。図35(A)に示すように、オブジェクト3901の高さがタッチUI1904の画面高さよりも大きく、オブジェクト3901の上端がタッチUIの画面外に、左右端が画面内に表示されている。図35(B)は、ユーザの指4000から指4001にかけて上方向にスワイプ操作されたときの表示例である。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。図35(B)は、ユーザのスワイプ操作によって、オブジェクト3901の下端がタッチUI1904の画面内に移動している画面例を示す。
図35(B)の光4002は、現在読み込んでいるオブジェクトが文字属性であり、且つ文字の組み方向に対してユーザのスワイプ操作があった場合に、該オブジェクトの端部が画面内に移動した移動量に応じて表示される。光4002は、ユーザのスワイプ操作が終了したとき、すなわち指4001がタッチUIから離れたときに、照光によりオブジェクト3901の下端がタッチUI1904の上端と下端のどちらに移動するのかを示している。図40(B)の状態では、画面内への移動が所定量よりも少ない。垂直移動制限部2409は、スワイプ操作が終了したときにオブジェクト3901の下端がタッチUI1904の画面下端に移動する旨をユーザに伝える光4002を表示する。
図35(C)は、スワイプイベント処理部2401によって下端が画面内に移動されたオブジェクト3901を、垂直移動制限部2409が画面の下端に表示されるようにページの始点を補正した場合の表示例を示す。オブジェクト3901は、オブジェクトの高さがタッチUIの画面高さよりも大きい。オブジェクト3901が画面内に移動すると、垂直移動制限部2409は画面内垂直移動範囲制限処理によって、オブジェクト3901の下端が画面の下端に表示されるようにページの始点を補正する。なお、本実施例においては、垂直移動制限部2409は、ページの始点を補正する際、オブジェクトの端部が明確になるよう、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
図35(D)は、図35(B)の状態に対して、オブジェクト3901がユーザの指4003から指4004にかけて上方向に所定量以上移動されたときの表示例を示す。図35(D)は、ユーザのスワイプ操作によって、オブジェクト3901の下端がタッチUI1904の画面内に大きく移動した例を示す。垂直移動制限部2409は、画面内垂直移動範囲制限処理のS3403において、画面内への移動量が所定量以上であると判断する。垂直移動制限部2409は、スワイプ操作が終了したときにオブジェクト3901の上端がタッチUI1904の画面上端に表示される旨をユーザに伝える光4005を表示する。
図35(E)は、スワイプイベント処理部2401によって下端が画面内に大きく移動されたオブジェクト3901に対し、垂直移動制限部2409が、ページの始点を補正した場合の表示例を示す。オブジェクト3901は、オブジェクトの高さがタッチUIの画面高さよりも大きい。従って、垂直移動制限部2409は、オブジェクト3901の下端が所定量以上画面内に移動すると、画面内垂直移動範囲制限処理によって、該オブジェクトの上端がタッチUIの上端に表示されるようにページの始点を補正する。なお、図35(E)においても同様に、本実施例においては、垂直移動制限部2409は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
図36は、オブジェクト3901をピンチアウト動作によって拡大してタッチUI1904に表示した一例を示す。図36(A)は、図35(E)の状態で、ユーザの指4100から指4101にかけて下方向にスワイプ操作されたときの表示例を示す。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。図36(A)に示すように、ユーザのスワイプ操作によって、オブジェクト3901の上端がタッチUI1904の画面内に移動している。図36(A)の光4102は、図35(B)の4002と同様に、ユーザのスワイプ操作が終了したときに、オブジェクト3901の上端がタッチUI1904の上端と下端のどちらに移動するのかを示している。図36(A)の状態では、画面内への移動が所定量よりも少ない。垂直移動制限部2409は、スワイプ操作が終了したときにオブジェクト3901の上端がタッチUI1904の画面上端に表示される旨をユーザに伝える光4102を表示する。
図36(B)は、スワイプイベント処理部2401によって上端が画面内に移動されたオブジェクト3901を、垂直移動制限部2409が画面の上端に表示されるようにページの始点を補正した場合の表示例である。オブジェクト3901は、オブジェクトの高さがタッチUIの画面高さよりも大きい。垂直移動制限部2409は、オブジェクト3901が画面内に移動すると、画面内垂直移動範囲制限処理によって、画面の上端に表示されるようにページの始点を補正する。なお、図36(B)においても同様に、本実施例においては、垂直移動制限部2409は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
図36(C)は、図36(B)の状態に対して、オブジェクト3901がユーザの指4103から指4104にかけて下方向に所定量以上移動されたときの表示例を示す。図26(C)は、ユーザのスワイプ操作によって、オブジェクト3901の上端がタッチUI1904の画面内に大きく移動した画面例を示す。垂直移動制限部2409は、S3405において、オブジェクトの上端が画面内へ所定量以上移動したと判断する。よって、垂直移動制限部2409は、スワイプ操作が終了したときにオブジェクト3901の下端がタッチUI1904の画面下端に表示される旨をユーザに伝える光4105を表示する。
図36(D)は、スワイプイベント処理部2401によって上端が画面内に大きく移動されたオブジェクト3901に対し、垂直移動制限部2409がページの始点を補正した場合の表示例を示す。オブジェクト3901は、オブジェクトの高さがタッチUIの画面の高さよりも大きい。垂直移動制限部2409は、オブジェクト3901の上端が所定量以上画面内に移動すると、画面内垂直移動範囲制限処理によって、下端がタッチUIの下端に表示されるようにページの始点を補正する。なお、図36(D)においても同様に、本実施例においては、垂直移動制限部2409は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
なお、移動範囲制限処理や、画面内水平移動範囲制限処理、画面内垂直移動範囲制限処理において、ユーザがスワイプ操作を終了させた際、ページの始点を所定の位置に補正する。このとき、補正によって生じるタッチUI1904の表示内容の変更は補正前の位置から補正後の位置までアニメーションによってスムーズに変更される。このときの移動にかかる時間は0.5秒前後が好ましいが、移動距離に応じて変更するなどしても良いことは言うまでもない。
また、図32および図33では、スワイプ操作を終了した際のオブジェクトの移動位置をアイコン3702と3705でユーザに示した。また、図40および図41では、光4002と4005でオブジェクトの移動位置をユーザに示した。上述の通り、本実施例において、方向によって異なる二つのオブジェクトの移動位置の表示例を説明したが、これに限るものではない。例えば、文字の異なる組み方向で同じ表示方法をとっても良く、また、アイコンや光だけでなく、文字等を用いてユーザにオブジェクトの移動位置を知らせるなどしても良いことは言うまでもない。
以上説明したように、本実施例によれば、画面よりも大きな画像オブジェクトの表示位置をより精確に制御することにより、ユーザの操作性や視認性を向上させることが可能となる。従って、文字が小さいなどの理由からユーザの拡大指示によって、画面よりも大きくなった文字属性のオブジェクトを、ユーザは簡単な操作で行末から行頭へ、行頭から行末へと移動させることが可能となる。また、オブジェクト端部の画面内への移動が所定量以上である場合にのみ、画面内に移動されたオブジェクト端部とは反対側の端部をタッチUIの画面端に移動させることで、ユーザは確実にオブジェクト端部を認識することが出来る。これによって、ユーザは行内の文字を全て読んだ後に、少ない操作で行頭および行末へと移動し、スムーズにオブジェクト内の文字を閲覧することが出来る。
(実施例2)
実施例2では、移動範囲制限処理において、オブジェクトの文字の組み方向に対して所定量以上、画面内および画面外にオブジェクト端部が移動した際、文字の組み方向だけでなく、それと直交する方向にもページの始点を補正する。なお、前述した第一の実施例とは、移動範囲制御処理の一部が異なるのみであるため、前述の実施例と同様の部分に関しては、同一番号を付けて省略し、異なる部分のみを以下に説明する。
図37は、実施例2の移動範囲制御処理のフローチャートである。実施例1(図27)とは、S4200の画面外水平移動範囲制限処理とS4201の画面外垂直移動範囲制限処理が異なる。本実施例において、S3001でオブジェクトの幅がタッチUIの画面幅よりも大きくない場合には、S3004において、スワイプイベントの移動距離に応じてオブジェクトを含むページの表示位置が移動される。このとき、移動範囲制限部2404は、オブジェクトの左端または右端がタッチUIの画面外に移動したかを判定する。その結果、オブジェクトの左端または右端がタッチUIの画面外にあると判定した場合には、処理はS4200に進み、そうでない場合には、S3006に進む。また、S3006でオブジェクトの高さがタッチUIの画面高さよりも大きくない場合には、S3009において、スワイプイベントの移動距離に応じてオブジェクトを含むページの表示位置が移動される。このとき、移動範囲制限部2404は、オブジェクトの上端または下端がタッチUIの画面外に移動したかを判定する。その結果、オブジェクトの上端または下端がタッチUIの画面外にあると判定した場合には、処理はS4201に進み、そうでない場合には、S3011に進む。
次に、図38を用いて、本実施例における画面内水平移動範囲制限処理について説明する。図38は、本実施例における画面内水平移動範囲制限処理のフローチャートである。実施例1(図28)とは、S4300とS4301が加わった点が異なる。
S4300において、水平移動制限部2407は、ページの始点のy座標を、ベクトル化処理のS304で得られる文字サイズの高さだけ進むように補正して処理を終了する。S4301において、水平移動制限部2407は、ページの始点のy座標を、文字サイズの高さだけ戻るように補正して処理を終了する。
これによって、オブジェクトの右端が画面内へ所定量以上移動した場合に、オブジェクトの左端が画面の左端に来るようにページの始点が制御される。また、行末から行頭に移動するのと同時に1行分だけ次の行に文字を送ることが出来る。よって、視点を上下にずらさずに次の行を読むことができる。また、オブジェクトの左端が画面内へ所定量以上移動した場合に、オブジェクトの右端が画面の右端に来るようにページの始点を制御するが、行頭から行末に移動するのと同時に1行分だけ前の行に文字を送ることが出来る。よって、ユーザは視点を上下にずらさずに前の行を読むことが出来る。
次に、図39を用いて、本実施例における画面内垂直移動範囲制限処理について説明する。図39は、本実施例における画面内垂直移動範囲制限処理のフローチャートである。実施例1(図29)とは、S4400とS4401が加わった点が異なる。S4400において、垂直移動制限部2409は、ページの始点のx座標を、ベクトル化処理のS304で得られる文字サイズの幅だけ進むように補正して処理を終了する。S4401において、垂直移動制限部2409は、ページの始点のx座標を、文字サイズの幅だけ戻るように補正して処理を終了する。
これによって、オブジェクトの下端が画面内へ所定量以上移動した場合に、オブジェクトの上端が画面の下端に来るようにページの始点が制御される。また、行末から行頭に移動するのと同時に1行分だけ次の行へ文字を送ることが出来る。よって、ユーザは、視点を上下にずらさずに次の行を読むことが出来る。また、オブジェクトの上端が画面内へ所定量以上移動した場合に、オブジェクトの下端が画面の下端に来るようにページの始点が制御されるが、行頭から行末に移動するのと同時に1行分だけ前の行へ文字を送ることが出来る。よって、視点を上下にずらさずに前の行を読むことが出来る。
次に、図40を用いて、本実施例における画面外水平移動範囲制限処理について説明する。図40は、本実施例における画面外水平移動範囲制限処理のフローチャートである。S3005は、実施例1のS3005と同様に、オブジェクトの左端または右端を画面の端に移動させて、該オブジェクトの全体が表示されるようにページの始点のx座標を補正する。
S4500において、水平移動制限部2407は、現在読み込まれているオブジェクトの属性を判定する。属性が文字の場合はS4501に進み、それ以外の属性である場合は処理を終了する。S4501において、水平移動制限部2407は、オブジェクトの文字の組み方向を取得・判定し、組み方向が横書きの場合にはS4502に、縦書きの場合には処理を終了する。なお、オブジェクトの組み方向は、S504のベクトル化の過程で得られる。
S4502において、水平移動制限部2407は、オブジェクトの左端または右端がタッチUI1904の画面外に移動した移動量を算出してS4503に進む。S4503において、水平移動制限部2407は、オブジェクトの左端の画面外への移動量が所定量以上であるか否かを判定し、その結果、所定量であった場合にはS4504に進み、そうでない場合には、S4505に進む。
S4504において、水平移動制限部2407は、ページの始点のy座標を、画面内に表示されているオブジェクトの高さ分だけ進むように補正して処理を終了する。また、ページの始点のy座標を画面内に表示されているオブジェクトの高さ分だけ補正したときに、オブジェクトの下端が画面内に移動する場合には、オブジェクトの下端が画面の下端に移動する分だけ補正する。
また、S4503でオブジェクトの左端の画面外への移動量が所定量未満であった場合は、S4505において、水平移動制限部2407は、オブジェクトの右端の画面外への移動量が所定量以上であるか否かを判定する。その結果、所定量であった場合には処理はS4506に進み、そうでない場合には処理を終了する。
S4506において、水平移動制限部2407は、ページの始点のy座標を、画面内に表示されているオブジェクトの高さ分だけ戻るように補正して処理を終了する。また、ページの始点のy座標を画面内に表示されているオブジェクトの高さ分だけ補正したときに、オブジェクトの上端が画面内に移動する場合には、オブジェクトの上端が画面の上端に移動する分だけ補正する。
これによって、オブジェクトの幅が画面に収まる表示倍率であった場合に、オブジェクトの左端が画面外へ所定量以上移動されると、オブジェクトの左端が画面の左端に来るようにページの始点が制御される。また、左端を戻すと同時に画面に表示された分だけ画面を次に送ることが出来る。よって、より簡易なスワイプ操作だけで次の文字を読むことが出来る。また、オブジェクトの幅が画面に収まる表示倍率であった場合に、オブジェクトの右端が画面外へ所定量以上移動されると、オブジェクトの右端が画面の右端に来るようにページの始点が制御される。また、右端を戻すと同時に画面に表示された分だけ画面を前に送ることが出来る。よって、より簡易なスワイプ操作だけで前の文字を読むことが出来る。
次に、図41を用いて、本実施例における画面外垂直移動範囲制限処理について説明する。図41は、本実施例における画面外垂直移動範囲制限処理のフローチャートである。S3010は、実施例1のS3010と同様に、オブジェクトの上端または下端を画面の端に移動させて、該オブジェクトの全体が表示されるようにページの始点のy座標を補正する。
S4600において、垂直移動制限部2409は、現在読み込まれているオブジェクトの属性を判定する。属性が文字の場合はS4601に進み、それ以外の属性である場合は処理を終了する。S4601において、垂直移動制限部2409は、オブジェクトの文字の組み方向を取得・判定し、組み方向が縦書きの場合にはS4602に、横書きの場合には処理を終了する。なお、オブジェクトの組み方向は、S504のベクトル化の過程で得られる。
S4602において、垂直移動制限部2409は、オブジェクトの上端または下端がタッチUI1904の画面外に移動した移動量を算出してS4603に進む。S4603において、垂直移動制限部2409は、オブジェクトの上端の画面外への移動量が所定量以上であるか否かを判定し、その結果、所定量であった場合には処理はS4604に進み、そうでない場合には、S4605に進む。
S4604において、垂直移動制限部2409は、ページの始点のx座標を、画面内に表示されているオブジェクトの幅分だけ進むように補正して処理を終了する。また、ページの始点のx座標を画面内に表示されているオブジェクトの幅だけ補正したときに、オブジェクトの左端が画面内に移動する場合には、オブジェクトの左端が画面の左端に移動する分だけ補正する。
また、S4603でオブジェクトの上端の画面外への移動量が所定量未満であった場合は、S4605において、垂直移動制限部2409は、オブジェクトの下端の画面外への移動量が所定量以上であるか否かを判定する。その結果、所定量であった場合には処理はS4606に進み、そうでない場合には処理を終了する。
S4606において、垂直移動制限部2409は、ページの始点のy座標を、画面内に表示されているオブジェクトの幅分だけ戻るように補正して処理を終了する。また、ページの始点のy座標を画面内に表示されているオブジェクトの幅だけ補正したときに、オブジェクトの右端が画面内に移動する場合には、オブジェクトの右端が画面の右端に移動する分だけ補正する。
これによって、オブジェクトの高さが画面に収まる表示倍率であった場合に、オブジェクトの上端が画面外へ所定量以上移動されると、オブジェクトの上端が画面の上端に来るようにページの始点が制御される。また、上端を戻すと同時に画面に表示された分だけ画面を次に送ることが出来る。よって、より簡易なスワイプ操作だけで次の文字を読むことが出来る。また、オブジェクトの高さが画面に収まる表示倍率であった場合に、オブジェクトの下端が画面外へ所定量以上移動されると、オブジェクトの下端が画面の下端に来るようにページの始点が制御される。また、下端を戻すと同時に画面に表示された分だけ画面を前に送ることが出来る。よって、より簡易なスワイプ操作だけで前の文字を読むことが出来る。
なお、S4504およびS4506における画面外水平移動範囲制限処理では、ページの始点のy座標を画面内に表示されているオブジェクトの高さ分だけ補正するとした。しかし、これに限るものではなく、例えば画面に表示されている文字行の高さ分だけ補正しても良い。また、のS4604およびS4606における画面外垂直移動範囲制限処理も同様に、例えば画面に表示されている文字行の幅分だけ補正しても良いことは言うまでもない。
次に、図42乃至図44を用いて、本実施例におけるタッチUI1904の画面の一例として画面外垂直移動範囲制限処理を具体的に説明する。なお、画面外水平移動範囲制限処理については、画面外垂直移動範囲制限処理と方向が直交方向に異なるのみであるため、具体的な画面例での説明を省く。図42乃至図44は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。
図42に示すように、オブジェクト4700はページ3900内の縦書きの文字の属性を持つオブジェクトである。オブジェクト4700は、図42(A)に示すように破線で示す領域情報を持つ。オブジェクト4700の属性は文字であるため、部分領域表示モードでオブジェクト4700が読み込まれた直後は、ページの表示倍率が設定される。つまり、表示範囲制御部2403が、部分領域表示範囲決定処理において、オブジェクトの高さがタッチUI1904の画面高さに入る倍率に、ページの表示倍率を設定する。
オブジェクト4700の場合、当該設定されたページの表示倍率において、オブジェクトの幅はタッチUI1904の画面の幅より大きくなる。垂直移動制限部2409は、該オブジェクトの右端がタッチUI1904の右端に合うように、ページ3900の始点を設定する。設定された画面例を図42(B)に示す。
図43は、スワイプ操作によってオブジェクト4700が移動した際に、タッチUI1904に表示されるオブジェクトの一例を示す。図43(A)は、図43(B)を、ユーザの指4800から指4801にかけて上方向にスワイプ操作されたときの表示例である。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。
図43(A)では、ユーザのスワイプ操作によって、オブジェクト4700の上端がタッチUI1904の画面外に移動している。図43(B)は、スワイプイベント処理部2401によって上端が画面外に移動されたオブジェクト4700を、画面外垂直移動範囲制限処理によって画面内に表示されるようにページの始点を補正した場合の表示例を示す。オブジェクト4700は、オブジェクトの高さがタッチUIの画面高さよりも小さい。従って、垂直移動制限部2409は、オブジェクト4700が画面外に移動すると、画面内に表示されるようにページの始点を補正する。なお、本実施例においては、垂直移動制限部2409は、オブジェクトの端部が明確になるよう、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
図43(C)は、図43(B)の状態に対して、オブジェクト4700がユーザの指4802から指4803にかけて上方向に所定量以上移動された場合の表示例を示す。垂直移動制限部2409は、S4603において、オブジェクト4700が画面外へ所定量以上移動したと判断する。垂直移動制限部2409は、現在読み込んでいるオブジェクトが文字属性であり、且つ文字の組み方向に対してユーザのスワイプ操作があった場合に、該オブジェクトの端部が画面外に移動した移動量に応じてアイコン4804を表示する。本実施例では、アイコン4804は、ユーザのスワイプ操作が終了したとき、すなわち指4803がタッチUIから離れたときに、オブジェクト4700が画面に表示された分だけ画面を次に送ることを示している。垂直移動制限部2409は、スワイプ操作が終了したときにオブジェクト4700が画面に表示された分だけ画面を次に送る旨をユーザに伝えるアイコン4804を表示する。
図43(D)は、スワイプイベント処理部2401によって上端が画面外に大きく移動されたオブジェクト4700を、画面外垂直移動範囲制限処理によって、ページの始点を補正した場合の表示例である。オブジェクト4700は、オブジェクトの高さがタッチUIの画面高さよりも小さい。垂直移動制限部2409は、オブジェクト4700の上端が所定量以上画面外に移動すると、画面外垂直移動範囲制限処理によって、上端がタッチUIの上端に表示されるようにページの始点を補正する。垂直移動制限部2409は、オブジェクト4700が画面に表示された分だけ画面を次に送るようにさらに補正する。なお、図43(D)においても同様に、本実施例においては、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正している。
図44は、スワイプ操作によってオブジェクト4700が移動した際に、タッチUI1904に表示されるオブジェクトの一例を示す。図44(A)は、図43(D)の状態で、ユーザの指4900から指4901にかけて下方向にスワイプ操作されたときの表示例を示す。スワイプイベント処理部2401は、スワイプイベントを受信するたびに移動距離だけページの始点を動かしてタッチUI1904の表示を更新する。図44(A)に示すように、ユーザのスワイプ操作によって、オブジェクト4700の下端がタッチUI1904の画面外に移動している。
図44(B)は、垂直移動制限部2409がオブジェクト4700の下端を画面外垂直移動範囲制限処理によって画面内に表示されるようにページの始点を補正した場合の表示例を示す。オブジェクト4700は、オブジェクトの高さがタッチUIの画面高さよりも小さい。従って、垂直移動制限部2409は、オブジェクト4700が画面外に移動すると、画面外垂直移動範囲制限処理によって、画面内に表示されるようにページの始点を補正する。なお、図49(B)においても同様に、本実施例においては、垂直移動制限部2409は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正している。
図44(C)は、図44(B)の状態に対して、オブジェクト4700がユーザの指4902から指4903にかけて下方向に所定量以上移動された場合の表示例を示す。図44(C)は、ユーザのスワイプ操作によって、オブジェクト4700の下端がタッチUI1904の画面外に大きく移動した画面例を示す。垂直移動制限部2409は、画面外垂直移動範囲制限処理のS3605において、オブジェクト4700が画面外への所定量以上移動したと判断する。図44(C)のアイコン4904は、現在読み込んでいるオブジェクトが文字属性であり、且つ文字の組み方向に対してユーザのスワイプ操作があった場合に、該オブジェクトの端部が画面外に移動した移動量に応じて表示される。アイコン4904は、ユーザのスワイプ操作が終了したとき、すなわち指4903がタッチUIから離れたときに、オブジェクト4700が画面に表示された分だけ画面を前に送ることを示している。垂直移動制限部2409は、スワイプ操作が終了したときにオブジェクト4700が画面に表示された分だけ画面を前に送る旨をユーザに伝えるアイコン4904を表示する。
図44(D)は、スワイプイベント処理部2401によって下端が画面外に大きく移動されたオブジェクト4700を、垂直移動制限部2409が画面外垂直移動範囲制限処理によって、ページの始点を補正した場合の表示例を示す。オブジェクト4700は、オブジェクトの高さがタッチUIの画面高さよりも小さい。垂直移動制限部2409は、オブジェクト4700の下端が所定量以上画面外に移動すると、画面外垂直移動範囲制限処理によって、下端がタッチUIの下端に表示されるようにページの始点を補正する。垂直移動制限部2409は、さらにオブジェクト4700が画面に表示された分だけ画面を前に送るように補正する。なお、図44(D)においても同様に、本実施例においては、垂直移動制限部2409は、半透明マスク2600の一部がオブジェクト端部に写るように、若干のマージンを設けてページの始点を補正する。
なお、図43および図43では、スワイプ操作を終了した際のオブジェクトの移動位置をアイコン4804と4904でユーザに示す例を説明したが、これに限るものではない。例えば、実施例1で説明したように光などで方向を示しても良く、また、文字等を用いてユーザにオブジェクトの移動方向を知らせるなどしても良いことは言うまでもない。
以上説明したように、本実施例によれば、ユーザは確実にオブジェクト端部を認識し、行内の文字を全て読んだ後に少ない操作で行頭および行末へと移動し、スムーズにオブジェクト内の文字を閲覧することが出来る。さらには、行頭および行末へと移動する際に、同時に行を自動で次や前に送ることで、より少ない操作でオブジェクト内の文字を閲覧することが出来る。
(実施例3)
実施例3では、画面内水平移動範囲制限処理および画面内垂直移動範囲制限処理において、直前のユーザ操作を考慮した補正を行う。つまり、移動範囲制限部は、オブジェクトの文字の組み方向に対して所定量以上、画面内にオブジェクト端部が移動した際、直前のユーザ操作によって、文字の組み方向と直交する方向にもページの始点を補正する。なお、前述した実施例2とは、画面内水平移動範囲制限処理および画面内垂直移動範囲制限処理の一部が異なるのみである。従って、実施例2と同様の部分に関しては、同一番号を付けて省略し、異なる部分のみを以下に説明する。
図45は、実施例3の画面内水平移動範囲制御処理のフローチャートである。実施例2(図38)とは、S5000の条件分岐が異なる。本実施例において、S3304およびS3306でページの始点を補正した後、S5000において、水平移動範囲制御部2407は、スワイプ操作が終了する直前に、上下方向へのユーザの指の移動があったかを判定する。その結果、スワイプ操作が終了する直前に上方向に移動されていた場合、処理はS4300に、下方向に移動されていた場合にはS4301に進む。また、上下方向どちらにも移動されていなかった場合には何もせずに処理を終了する。
これによって、水平移動範囲制御部2407は、オブジェクトの幅が画面よりも大きい表示倍率であった場合に、以下の処理を行う。水平移動範囲制御部2407は、ユーザのスワイプ操作によってオブジェクトの左右端が画面内へ所定量以上移動されると、対となる端部が画面の同端部に来るようにページの始点を制御する。さらに、オブジェクトの左右端が画面内へ所定量以上移動され、且つ上下方向への指の移動の後にスワイプ操作を終了した場合、文字の組み方向とは直交する移動の向きに応じて、画面を文字行分だけ前もしくは次へ送ることが出来る。
図46は、実施例3の画面内垂直移動範囲制御処理のフローチャートである。実施例2(図39)とは、S5100の条件分岐が異なる。本実施例において、S3404およびS3406でページの始点を補正した後、S5100において、垂直移動範囲制御部2408は、スワイプ操作が終了する直前に、左右方向へのユーザの指の移動があったかを判定する。その結果、スワイプ操作が終了する直前に右方向に移動されていた場合はS4400に、左方向に移動されていた場合にはS4401に進む。また、左右方向どちらにも移動されていなかった場合には何もせずに処理を終了する。
これによって、垂直移動範囲制御部2408は、オブジェクトの高さが画面よりも大きい表示倍率であった場合に、以下の処理を行う。垂直移動範囲制御部2408は、ユーザのスワイプ操作によってオブジェクトの上下端が画面内へ所定量以上移動されると、対となる端部が画面の同端部に来るようにページの始点を制御する。さらに、オブジェクトの上下端が画面内へ所定量以上移動され、且つ左右方向への指の移動の後にスワイプ操作を終了した場合、文字の組み方向とは直交する移動の向きに応じて、画面を文字行分だけ前もしくは次へ送ることが出来る。
次に、図32、図47を用いて、本実施例における画面内水平移動範囲制限処理を具体的に説明する。なお、画面内垂直移動範囲制限処理については、後述する画面内水平移動範囲制限処理と方向が直交方向に異なるのみであるため、具体的な画面例での説明を省く。
図47は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。図47(A)は、オブジェクト3600を拡大・移動した図32(C)の状態から、ユーザの指3703から指3704にかけて左方向に大きくスワイプ操作した後に、さらに上方向に動かしたときの表示例を示す。
図47(A)は、ユーザのスワイプ操作によって、オブジェクト3600の右端がタッチUI1904の画面内に大きく移動した画面例を示す。水平移動制限部2407は、画面内水平移動範囲制限処理のS3303において、オブジェクト3600が画面内へ所定量以上移動したと判断する。よって、水平移動制限部2407は、スワイプ操作が終了したときにオブジェクト3600の左端がタッチUI1904の画面左端に表示される旨をユーザに伝えるアイコン3705を表示する。
図47(B)は、スワイプイベント処理部2401によって右端が画面内に大きく移動されたオブジェクト3600の左端を、水平移動制限部2407がタッチUI1904の左端に表示されるようにページの始点を補正した表示例を示す。図47(B)に示すように、水平移動制限部2407がS5000で上方向への指の移動を検知し、1行分だけオブジェクトを上方向に送っている。オブジェクト3600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。従って、水平移動制限部2407はオブジェクト3600の右端が所定量以上画面内に移動すると、画面内水平移動範囲制限処理によって、左端をタッチUIの左端に表示する。さらに、水平移動制限部2407は、一行の高さ分だけ画面が次に送られるようにページの始点を補正する。
図47(C)は、オブジェクト3600を拡大・移動した図32(C)の状態から、ユーザの指3703から指3704にかけて左方向に大きくスワイプ操作した後に、さらに下方向に動かしたときの表示例である。図47(C)は、ユーザのスワイプ操作によって、オブジェクト3600の右端がタッチUI1904の画面内に大きく移動した画面例を示す。水平移動制限部2407は、画面内水平移動範囲制限処理のS3303において、オブジェクト3600の右端が画面内へ所定量以上移動したと判断する。
図47(D)は、スワイプイベント処理部2401によって右端が画面内に大きく移動されたオブジェクト3600の左端を、水平移動制限部2407がタッチUI1904の左端に表示されるようにページの始点を補正した表示例を示す。図47(D)に示すように、水平移動制限部2407がさらにS5000で下方向への指の移動を検知し、1行分だけオブジェクトを下方向に戻した場合の表示例を示す。オブジェクト3600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト3600の右端が所定量以上画面内に移動すると、画面内水平移動範囲制限処理によって、左端がタッチUIの左端に表示されるように補正する。水平移動制限部2407は、さらに一行の高さ分だけ画面が前に送られるようにページの始点を補正する。
本実施例において、画面内水平移動範囲制限処理および画面内垂直移動範囲制限処理でのみ、ユーザがスワイプ操作を終了する直前の指の移動方向によって、文字の組み方向と直交する方向にも画面を送る方法を説明した。しかしながら、例えば、実施例で2説明した画面外水平移動範囲制限処理および画面外垂直移動範囲制限処理においても、同ジェスチャー操作による画面送りの方向指示を実施することができることは言うまでもない。
以上説明したように、本実施例によれば、ユーザは確実にオブジェクト端部を認識し、行内の文字を全て読んだ後に少ない操作で行頭および行末へと移動し、スムーズにオブジェクト内の文字を閲覧することが出来る。さらには、行頭および行末へと移動する際に、ユーザの連続したジェスチャー操作によって、同時に行を次や前に送ることで、より少ない操作でユーザの任意の方向にオブジェクト内の文字を閲覧することが出来る。
(実施例4)
実施例4では、画面内水平移動範囲制限処理および画面内垂直移動範囲制限処理において、文字属性のオブジェクトだけでなく、その他の属性においても所定量以上画面内にオブジェクト端部が移動した際に、ページの始点を補正する。なお、実施例3とは、画面内水平移動範囲制限処理および画面内垂直移動範囲宣言処理の一部が異なるのみである。従って、実施例3と同様の部分に関しては、同一番号を付けて省略し、異なる部分のみを以下に説明する。
引き続き図45を用いて、実施例4の画面内水平移動範囲制限処理のフローチャートを説明する。実施例3とは、S3300およびS4300、S4301のみが異なる。S3300において、水平移動制限部2407は、現在読み込まれているオブジェクトの属性を判定する。属性が文字の場合はS3301に進み、表の場合はS3302に進み、それ以外の属性である場合はS3307に進む。
S4300において、水平移動制限部2407は、ユーザのスワイプ操作が終了する直前に指が上方向に移動されていた場合に、オブジェクト属性が文字であった場合の補正処理に代えて以下の処理を行う。つまり、水平移動制限部2407は、ページの始点のy座標を、オブジェクトが文字属性であるなら文字サイズの高さだけ、表属性なら一セル分、つまりセルの高さだけ進むように補正して処理を終了する。なお、表のセルの高さは、表罫線の間隔などから取得することが可能である。一方、S4301において、水平移動制限部2407は、ユーザのスワイプ操作が終了する直前に指が下方向に移動されていた場合に、ページの始点のy座標を、表属性ならセルの高さだけ戻るように補正して処理を終了する。
次に、実施例4の画面内垂直移動範囲制限処理のフローチャートを説明する。実施例3(図46)とは、S3400およびS4400、S4401のみが異なる。S3400において、垂直移動制限部2409は、現在読み込まれているオブジェクトの属性を判定する。属性が文字の場合はS3401に進み、表の場合はS3402に進み、それ以外の属性である場合はS3407に進む。
S4400において、垂直移動制限部2409は、ユーザのスワイプ操作が終了する直前に指が右方向に移動されていた場合に、オブジェクト属性が文字であった場合の補正処理に代えて以下の補正を行う。つまり、垂直移動制限部2409は、ページの始点のx座標を、オブジェクトが文字属性であるなら文字サイズの幅だけ、表属性なら一セル分、つまりセルの幅だけ進むように補正して処理を終了する。なお、表のセルの幅は、表罫線の間隔などから取得することが可能である。S4401において、垂直移動制限部2409は、ユーザのスワイプ操作が終了する直前に指が左方向に移動されていた場合に、以下の補正を行う。つまり、垂直移動制限部2409は、ページの始点のx座標を、オブジェクトが文字属性であるなら文字サイズの幅だけ、表属性ならセルの幅だけ戻るように補正して処理を終了する。
次に、図48および図49を用いて、本実施例における画面内水平移動範囲制限処理を具体的に説明する。なお、画面内垂直移動範囲制限処理については、後述する画面内水平移動範囲制限処理と方向が直交方向に異なるのみであるため、具体的な画面例での説明を省く。図48および図49は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。
図48に示すように、オブジェクト5600はページ3900内の表の属性を持つオブジェクトである、オブジェクト5600は、図48(A)に示すように破線で示す領域情報を持つ。オブジェクト5600の属性は表であるため、部分領域表示モードでオブジェクト5600が読み込まれた直後は、ページの表示倍率が設定される。つまり、表示範囲制御部2403が、部分領域表示範囲決定処理において、オブジェクト上部の表ヘッダがタッチUI1904の画面幅に入る倍率に、ページの表示倍率を設定する。また、表示範囲制御部2403は、オブジェクト中心がタッチUI1904の中心に合うように、ページの始点を設定する。設定された画面例を図48(B)に示す。
図49(A)は、オブジェクト5600を拡大・移動し、ユーザの指3703から指3704にかけてさらに左方向にスワイプ操作した後、上方向に動かしたときの表示例である。図49(A)は、ユーザのスワイプ操作によって、オブジェクト5600の右端がタッチUI1904の画面内に大きく移動した表示例を示す。水平移動制限部2407は、画面内水平移動範囲制限処理のS3303において、オブジェクト5600の右端が画面内へ所定量以上移動したと判断する。よって、水平移動制限部2407は、スワイプ操作が終了したときにオブジェクト5600の左端がタッチUI1904の画面左端に表示される旨をユーザに伝えるアイコン3705を表示する。
図49(B)は、スワイプイベント処理部2401によって右端が画面内に大きく移動されたオブジェクト5600を、水平移動制限部2407が、該オブジェクトの左端がタッチUI1904の左端に表示されるようにページの始点を補正した表示例を示す。図49(B)は、水平移動制限部2407は、さらにS5000で上方向への指の移動を検知し、セルの分だけオブジェクト5600を下方向に送った場合の表示例を示す。オブジェクト5600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト5600の右端が所定量以上画面内に移動すると、画面内水平移動範囲制限処理によって、左端がタッチUIの左端に表示されるようにページの視点を補正する。水平移動制限部2407は、さらにセルの高さ分だけ画面が次に送られるようにページの始点を補正する。
図49(C)は、オブジェクト5600を拡大・移動し、ユーザの指3703から指3704にかけてさらに左方向にスワイプ操作した後、下方向に動かしたときの表示例を示す。図49(C)は、ユーザのスワイプ操作によって、オブジェクト5600の右端がタッチUI1904の画面内に大きく移動した画面例を示す。水平移動制限部2407は、画面内水平移動範囲制限処理のS3303において、オブジェクト5600の右端が画面内へ所定量以上移動したと判断する。
図49(D)は、右端が画面内に大きく移動されたオブジェクト5600の左端を、水平移動制限部2407が、タッチUI1904の左端に表示されるようにページの始点を補正した表示例を示す。図49(D)に示すように、水平移動制限部2407は、さらにS5000で下方向への指の移動を検知し、セルの分だけ画面を戻す。オブジェクト5600は、オブジェクトの幅がタッチUIの画面幅よりも大きい。水平移動制限部2407は、オブジェクト5600の右端が所定量以上画面内に移動すると、画面内水平移動範囲制限処理によって、左端がタッチUIの左端に表示されるようにページの視点を補正する。水平移動制限部2407は、さらにセルの高さ分だけ画面が前に送られるようにページの始点を補正する。
以上説明したように、本実施例によれば、ユーザは確実にオブジェクト端部を認識し、文字以外の表といった他の属性のオブジェクトにおいても、ユーザの連続したジェスチャー操作で、同時に行やセルを次や前に送ることが可能となる。これによって、より少ない操作でユーザの任意の方向にオブジェクト内の文字を閲覧することが出来る。
(その他の実施例)
本発明は、複数の機器(例えばホストコンピュータ、インターフェース機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。また本発明の目的は、前述の実施例の機能を実現するプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータが記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体およびプログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、本発明には、プログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれる。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた場合についても、本発明は適用される。その場合、書き込まれたプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される。
また、上述した実施形態では、コンピュータがコンピュータプログラムを実行することにより、各処理部として機能するものとしたが、処理の一部または全部を専用の電子回路(ハードウェア)で構成するようにしても構わない。