(57)【要約】【課題】文字の一部が書字方向に重複する文字列をメモリ使用量を抑制しながら描画することができる文字描画方法を提供する。【解決手段】境界設定部２５は、書字方向において前後となるグリフの重複領域の直前の位置に境界を設定する。パス管理部１６は、対象グリフを構成するパスのうち境界内のパスを描画パス、境界を越えるパスを後続グリフの描画のために用いる越境パスとして情報保持部１１に保持しておく。描画処理部１７は、描画パス及び一つ前のグリフについて保持されている越境パスを描画する。【選択図】図２
2017116859.tif 000002
【特許請求の範囲】
【請求項１】
文字列及び当該文字列の個々の文字を表すグリフの描画情報を取得する取得手段と、
描画対象となる対象グリフと当該対象グリフの次に描画対象となる後続グリフとが描画時に重複するかどうかを各グリフの描画情報を基に判定する重複判定手段と、
前記対象グリフと前記後続グリフとが重複する場合にグリフ間に境界を設定する境界設定手段と、
前記対象グリフを構成するパスのうち前記境界を越えない部分を当該対象グリフの描画に用いる描画パス、越える部分を前記後続グリフの描画に用いる越境パスとしてそれぞれ所定メモリに登録するパス管理手段と、
前記対象グリフについて登録された前記描画パス及び当該対象グラフの一つ前のグリフについて登録された前記越境パスを用いて前記対象グリフを描画する描画処理手段と、
を有することを特徴とする文字描画装置。
【請求項２】
前記取得手段は、予め文字毎に作成されたグリフの前記描画情報を識別するためのグリフインデックスを前記文字列と共に取得し、このグリフインデックスを通じて前記対象グリフ、前記後続グリフ及びこれらのグリフについての描画情報を取得することを特徴とする、
請求項１に記載の文字描画装置。
【請求項３】
前記重複判定手段は、前記対象グラフを構成するパスと前記後続グリフを構成するパスとが交差するかどうかを解析し、交差するときは重複すると判定することを特徴とする、
請求項２に記載の文字描画装置。
【請求項４】
前記重複判定手段は、前記対象グリフと前記後続グリフとについてそれぞれの形状を内包する最小矩形であるバウンディングボックスの位置及び前記対象グリフの書字方向の送り幅に基づいて重複の有無を判定することを特徴とする、
請求項２に記載の文字描画装置。
【請求項５】
前記重複判定手段は、書字方向における対象グリフのバウンディングボックスの最大座標が、当該対象グリフの描画開始位置から前記後続グリフの描画開始位置までの送り幅と、前記後続グリフのバウンディングボックスの最小座標との合算値以上の場合に重複すると判定することを特徴とする、
請求項４に記載の文字描画装置。
【請求項６】
前記境界設定手段は、前記対象グリフのバウンディングボックスと前記後続グリフのバウンディングボックスとの重複領域に至る直前の整数座標の画素領域に、書字方向と垂直方向に延びる境界線を設定する、
請求項５に記載の文字描画装置。
【請求項７】
前記境界線設定手段は、前記重複領域、前記対象グリフ及び前記後続グリフの形状を解析し、前記越境パスをより多くなるように、かつ、画素境界を通るように、前記境界線を設定することを特徴とする、
請求項６に記載の文字描画装置。
【請求項８】
前記対象グリフ及び前記後続グリフの描画情報に基づいて、前記対象グリフと前記後続グリフのパスが重なる場合に前記描画パスの色の濃淡が生じるかどうかを判定するパラメータ判定手段をさらに備えることを特徴とする、
請求項１ないし７のいずれか一項に記載の文字描画装置。
【請求項９】
前記パラメータ判定手段は、不透明度が所定値でないときに前記色の濃淡が生じると判定することを特徴とする、
請求項８に記載の文字描画装置。
【請求項１０】
前記対象グリフ及び前記後続グリフの描画情報に基づいて、各グリフが交差する交差領域において、アンチエイリアス部分の色の濃淡が目立つ形状かどうかを判定する交差判定手段をさらに備えることを特徴とする、
請求項８又は９に記載の文字描画装置。
【請求項１１】
前記交差判定手段は、前記対象グリフと前記後続グリフとが前記交差領域を挟んで連続するときに、前記アンチエイリアス部分の色の濃淡が目立つ形状であると判定することを特徴とする、
請求項１０に記載の文字描画装置。
【請求項１２】
前記交差判定手段は、前記対象グリフと前記後続グリフとが、言語的特徴に基づき前記交差領域を挟んで直線上で連続するときに前記アンチエイリアス部分の色の濃淡が目立つ形状であると判定することを特徴とする、
請求項１０に記載の文字描画装置。
【請求項１３】
文字の一部が書字方向に重複する文字列を描画領域に描画する装置が実行する方法であって、
パスで構成される各文字に対応するグリフのうち相対的に前となる対象グリフと後ろとなる後続グリフとの間に境界を設定するとともに、前記対象グリフのパスのうち前記境界内の部分を描画パス、越える部分を越境パスとして所定のメモリに保持しておき、
前記対象グリフについて保持された前記描画パス及び当該対象グラフの一つ前のグリフについて保持された前記越境パスを用いて前記対象グリフを描画することを特徴とする、
文字描画方法。
【請求項１４】
コンピュータを請求項１乃至１２のいずれか１項に記載の文字描画装置として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は文字の一部が書字方向に重複する文字列を描画するための文字描画装置及び文字描画方法に関する。
【背景技術】
【０００２】
アウトラインフォントの中には、例えば筆記体のアルファベットを手書したようなデザインのスクリプト系フォントのように、前後の文字が部分的に重なるようにデザインされたものがある。また、ヒンディー語やアラビア語などのフォントでは、前後の文字が描画時に接続するようにデザインされているのが一般的である。こうした文字を描画するときに、描画条件によって、前後の文字の接続部が不自然な描画結果となることがある。例えば、文字の描画色として透明度が設定されていると、重なりが生じる部分が濃く描画されてしまうことがある。また、文字の輪郭にジャギが発生しないようにアンチエイリアス処理を行う場合、半透明の画素が重なりあうと、濃い色になる画素が生じることがある。また、前後の文字の形状が重ならず接するようにデザインすると、描画位置によっては文字の間に隙間が空いてしまうことがある。
【０００３】
このような問題を解決する技術として、文字を構成する各グリフの輪郭線を合成してから塗り潰し処理を行うフォント描画装置が特許文献１に開示されている。このフォント描画装置では、各文字のアウトラインを合成してから塗り潰し処理が行われるため、上記の問題が解消される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２７１３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示されたフォント描画装置では、書字方向に重複部分が存在する文字列を描画する際、合成されたアウトラインのデータ量が多くなる。そのため、一時的にメモリ使用量を圧迫するという新たな課題を残す。
本発明は、文字の一部が書字方向に重複する文字列を、メモリ使用量を抑制しながら描画領域に描画させる文字描画装置を提供することを主たる課題とする。
【課題を解決するための手段】
【０００６】
本発明が提供する文字描画装置は、文字列及び当該文字列の個々の文字を表すグリフの描画情報を取得する取得手段と、描画対象となる対象グリフと当該対象グリフの次に描画対象となる後続グリフとが描画時に重複するかどうかを各グリフの描画情報を基に判定する重複判定手段と、前記対象グリフと前記後続グリフとが重複する場合にグリフ間に境界を設定する境界設定手段と、前記対象グリフを構成するパスのうち前記境界を越えない部分を当該対象グリフの描画に用いる描画パス、越える部分を前記後続グリフの描画に用いる越境パスとしてそれぞれ所定メモリに登録するパス管理手段と、前記対象グリフについて登録された前記描画パス及び当該対象グラフの一つ前のグリフについて登録された前記越境パスを用いて前記対象グリフを描画する描画処理手段と、を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、文字の一部が書字方向に重なる文字列を、メモリ使用量を抑制しながら描画領域に描画することができる。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態に係る文字描画装置のハードウェア構成図。
【図２】第１実施形態に係る文字描画装置の機能構成図。
【図３】（ａ）はコードポイントの例示図、（ｂ）はグリフインデックスとの対応図。
【図４】（ａ）〜（ｇ）は描画されるグリフの説明図。
【図５】境界決定の説明図。
【図６】（ａ），（ｂ）は描画パス及び越境パスの説明図。
【図７】第１実施形態に係る文字描画装置の処理手順を示すフローチャート。
【図８】（ａ）はスクリプト系フォントの模式図、（ｂ）は境界線の説明図。
【図９】第２実施形態に係る文字描画装置の機能ブロック図。
【図１０】（ａ）〜（ｃ）は描画パラメータの説明図。
【図１１】第２実施形態に係る文字描画装置の処理手順を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施形態例は特許請求の範囲に関る本発明を限定するものではなく、また、実施形態例で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１０】
［第１実施形態］
図１は本実施形態に係る文字描画装置のハードウェア構成図である。図１において、文字描画装置１００は、バス１０１にＣＰＵ１０２、ＲＯＭ１０３、ＲＡＭ１０４および表示コントローラ１０５を接続したコンピュータをハードウェアとして含む。ＣＰＵ（Central Processing Unit）１０２は、本発明のコンピュータプログラムを実行することにより種々の機能ブロックを構築する。ＲＯＭ（Read Only Memory）１０３は、変更を必要としないプログラムや各種パラメータを格納する。ＲＡＭ（Random Access Memory）１０４は外部装置などから供給されるプログラムやデータを一時記憶する。ＲＡＭ１０４は、ＳＤＲＡＭ(Synchronous Dynamic ＲＡＭ) 、ＤＲＡＭ（DynamicＲＡＭ）などで構成される。表示コントローラ１０５は描画領域であるフレームバッファに描画したグラフィックスを図示しない表示デバイスなどに出力する。
【００１１】
図２は、文字描画装置１００に形成される機能ブロックの構成図である。文字描画装置１００は、取得部１０、情報保持部１１、重複判定部１２、境界設定部１５、パス管理部１６及び描画処理部１７として機能する。これらの機能ブロックは、ＣＰＵ１０２が、ＲＯＭ１０３に格納されたプログラムをＲＡＭ１０４に展開し、後述する各フローチャートに従った処理を実行することで実現される。
【００１２】
以下、文字描画装置１００の各機能ブロックの内容について説明する。第１実施形態では、書字方向が横書きで、隣り合う文字との重複が多いヒンディー語の文字列をフレームバッファに描画する場合の例を示す。また、ヒンディー語の文字列を個々の文字毎に分割していくが、その際、予め作成された、文字の骨組みとなる形であるグリフと、各グリフの描画情報とを用いて描画処理を行うものとする。グリフは複数のパス（線分など）で構成される。グリフの描画情報には、描画対象となる文字を表すグリフ（「対象グリフ」と呼ぶ）の形状が含まれる。また、当該対象グリフの次に描画対象となるグリフ（「後続グリフ」と呼ぶ）の描画開始位置までの送り幅、グリフの形状を内包する最小矩形であるバウンディングボックスの情報などが含まれる。コンピュータなどに表示されるときは、フォント（グリフに一定のスタイルでデザインを施したもの）に変換される。
【００１３】
取得部１０は、フレームバッファ情報、すなわち描画領域の画素領域の座標のほか、上記の文字列及び当該文字列の個々の文字を表すグリフの描画情報を取得する。具体的には、予め文字毎に作成されたグリフの描画情報を識別するためのグリフインデックスを取得し、このグリフインデックスを通じて対象グリフ、後続グリフ及びこれらのグリフについての描画情報を取得する。文字列は図示しない入力装置などから取得する。グリフインデックスは図示しない外部記憶装置などから取得する。取得した文字毎のグリフの描画情報は、情報保持部１１に一時的に保持される。
【００１４】
ここで、文字列（データ）について説明する。文字列は、Ｕｎｉｃｏｄｅスカラ値（コードポイント）の配列を用いて表現される。Ｕｎｉｃｏｄｅスカラ値は、１６進数表記を“Ｕ＋”の後に続けて記述される。図３（ａ）は、書字方向に重複する部分が多い文字列の一例となるヒンディー語のコードポイントの例示図である。図示の例では、Ｕｎｉｃｏｄｅスカラ値で表現された値が５個並んだ文字列となっている。グリフインデックスと上記のＵｎｉｃｏｄｅスカラ値とは１対１に対応するとは限らず、複数のＵｎｉｃｏｄｅスカラ値で１つのグリフインデックスに対応していることもある。例えば良く知られている「ＴｒｕｅＴｙｐｅ」のように、「ｃｍａｐテーブル」および「ＧＳＵＢテーブル」の情報を用いてコードポイントとグリフインデックスとの対応付けを行う場合もある。
なお、コードポイントとグリフインデックスとを対応付けるデータは、グリフ毎に外部記憶装置などに記憶されているが、任意の領域を参照するようにしても構わない。この対応付けるデータの一例を図３（ｂ）に示す。本実施形態において入力される文字列に対応した部分だけを図示しているが、この限りでない。なお、図３（ｂ）の例では、コードポイントＵ＋０９２８とＵ＋０９４Ｄは、組み合わせて１つのグリフインデックスに対応していること、つまり、文字列が４つのグリフの列（４つのグリフインデックス列）で表現されることを示している。
【００１５】
図３（ａ）の４つのグリフインデックスに対応したグリフの具体例を図４（ａ）に示す。図３（ａ）右側のグリフインデックス２２０は、図４（ａ）では左側のグリフ４０１に対応する。このグリフ４０１は、２つのコードポイント（Ｕ＋０９２８とＵ＋０９４Ｄ）に対応する。フレームバッファへの描画開始位置をＸＹ直交座標系の座標値（１００，１００）とすると、グリフの形状は、それぞれバウンディングボックスの原点（０，０）を基準にデザインされ、指定された描画開始位置がグリフデザインの原点に一致するように描画される。ＸＹ直交座標系の座標は対象グリフを描画するフレームバッファ（描画領域）の画素毎に定められている。フレームバッファには正方形の画素がタイル状に並んでおり、１画素の幅、高さがＸＹ座標の長さ「１」に相当する。また、画素の境界（画素境界）がＸＹ座標では整数座標の位置となっている。整数座標とは、Ｘ座標、Ｙ座標がともに整数になることをいう。
【００１６】
グリフは、例えば１０００を単位としてデザインされる。描画時に文字サイズがＳに指定された場合はＳ／１０００にスケールして描画される。第１実施形態では、文字サイズが「３０ｐｘ」で描画されるものとする。そのため、グリフ４０１では、３０／１０００、すなわち０．０３倍にスケールして描画される場合の数値が表記されている。図４（ａ）において、「送り幅」は当該グリフ４０１を対象グリフとしたときに、当該対象グリフの描画位置から後続グリフの描画位置までの幅である。この幅は３６０であるが、０．０３倍では１０．８となる。「Ｘ最小値」は、書字方向（Ｘ方向）における当該グリフ４０１の描画位置の最小値である。「Ｘ最大値」は、書字方向における当該グリフ４０１の描画位置の最大値である。つまり、当該グリフ４０１の描画位置から送り幅ずらした位置が後続グリフの描画位置となる。図４（ａ）の他のグリフ４０２〜４０４についても同様の内容となる。すなわち、グリフ４０２は図３（ｂ）に示されたグリンインデックス１４０に対応したグリフ、グリフ４０３は図３（ｂ）に示されたグリンインデックス５４０に対応したグリフである。同様に、グリフ４０４は図３（ｂ）に示されたグリンインデックス４９に対応したグリフである。各グリフ４０２〜４０４には、それぞれ、グリフ４０１と同様、描画開始位置などを含む描画情報が関連付けられている。
【００１７】
重複判定部１２は、描画対象となる対象グリフと当該対象グリフの次に描画対象となる後続グリフとが描画時に重複するかどうかを各グリフの描画情報を基に判定する。重複するかどうかを判定する基準としては以下のような基準を用いることができる。
（ａ）対象グラフを構成するパスと後続グリフを構成するパスとが交差するかどうかをパスの座標を基に解析し、交差するときは重複すると判定する。
（ｂ）対象グリフと後続グリフとについてそれぞれの上記バウンディングボックスの位置及び対象グリフの書字方向の送り幅に基づいて重複の有無を判定する。例えば、書字方向における対象グリフのバウンディングボックスの最大座標が、当該対象グリフの描画開始位置から後続グリフの描画開始位置までの送り幅と、後続グリフのバウンディングボックスの最小座標との合算値以上の場合に重複すると判定する。数式で表すと下記の式（１）のようになる。なお、文字列の最後のグリフを描画するときは後続グリフが存在しないので重複しないと判定することになる。
（対象グリフのＸ最大値）≧（対象グリフの送り幅）
＋（後続グリフのＸ最小値）…（１）
【００１８】
境界設定部１５は、対象グリフと後続グリフとが重複する場合にグリフ間に境界を設定する。境界線の設定は以下のようにして行う。例えば、図５に示すように、対象グリフのバウンディングボックス（実線で表記）５０１と後続グリフのバウンディングボックス（破線で表記）５０２とが重複し、重複領域５０３が生じているとする。図５において、５０１１は対象グリフの描画開始位置、５０２１は後続グリフの描画開始位置である。また、Ｘ方向の直線とＹ方向の線で囲まれるタイル状の輪郭は画素領域であり、それぞれ整数座標で特定される。境界設定部１５は、重複領域５０３に至る直前の整数座標の画素領域に、書字方向と垂直方向に延びる境界線５０４を設定する。この境界線５０４は、重複領域５０３のＸ最小値以下のうち最大の整数座標となるＸ座標を基点として設定される。
境界線のＸ座標を求める式は、ＦＬＯＯＲ（ｘ）関数（実数ｘに対して、ｘ以下の最大の整数を求める関数）を用いて式（２）のようになる。
Ｘ＝ＦＬＯＯＲ（（対象グリフの描画位置）
＋（対象グリフの送り幅）＋（後続グリフのＸ最小値））…（２）
【００１９】
パス管理部１６は、対象グリフを構成するパスのうち境界を越えない部分を当該対象グリフの描画に用いる描画パス、越える部分を後続グリフの描画に用いる越境パスとしてそれぞれ所定メモリ（情報保持部１１）に保持（登録）する。ここでは、境界が例えば図５に示した要領で設定された境界線であるものとする。
図６（ａ），（ｂ）は描画パスと越境パスの説明図である。これらの図において、破線で示される線は境界線６０９である。この境界線６０９を跨っているパスは分割され、境界線６０９を超えない部分が描画パス、越える部分が越境パスとなる。情報保持部１１に保持（登録）されるのは、各パスの始端座標と終端座標である。図６（ａ）のパス６１０，６１２は境界線６０９を跨っているので、図６（ｂ）のようにパス６１５とパス６１４、６１８とパス６１７とに分割される。そして、パス６１５，６１７が越境パスとして登録される。パス６１１はもともと境界線６０９を越えた位置に存在するので、そのまま越境パス６１６として登録される。パス６１３については描画パス６１９として登録される。なお、対象グリフの一つ前のグリフの越境パスが既に登録されている場合、対象グリフではそれが描画パスとして登録される。
【００２０】
描画処理部１７は、対象グリフについて登録された描画パス及び当該対象グラフの一つ前のグリフについて登録された越境パスを用いて対象グリフを描画する。描画に際しては、様々な描画パラメータが用いられる。詳しくは第２実施形態で説明するが、ここでは、５階調のアンチエイリアスを有効にして描画するものとする。描画色が黒、不透明度が５０％で、背景色が白なので、パスの被覆率が１００％の画素は５０％の灰色（＃８０８０８０）に、被覆率が２５％の画素は１２．５％の灰色（＃２０２０２０）となる。被覆率とは、画素に対し、パスの内部に含まれる割合を示す。パスの内部に一部が含まれている画素に対してはアンチエイリアス処理を行われているが、境界線を越えた位置にある画素の色は変更されない。
【００２１】
＜文字描画方法＞
次に、文字の一部が書字方向に重複する文字列を描画領域に描画する文字描画装置１００が実行する文字描画方法について説明する。この方法では、まず、パスで構成される各文字に対応するグリフのうち相対的に前となる対象グリフと後ろとなる後続グリフとの間に境界を設定する。また、対象グリフのパスのうち境界内の部分を描画パス、越える部分を越境パスとして所定のメモリに保持しておく。そして、対象グリフについて保持された描画パス及び当該対象グラフの一つ前のグリフについて保持された越境パスを用いて対象グリフを描画することを特徴とする。
【００２２】
図７は、この文字描画方法の詳細手順を示すフローチャートである。ここでは、図４（ａ）に示した４つのグリフ４０１〜４０４を実際に描画する場合の例に即して説明する。
文字描画装置１００は、取得部１０において、描画対象となる文字列を取得する（Ｓ１０１）。この文字列は、図３（ａ）で示されるコードポイントに対応するものである。また、文字列から図３（ｂ）に示した４つのグリフインデックスを取得する（Ｓ１０２）。さらに、グリフインデックスに対応した４つのグリフ、すなわち、図４（ａ）に示したグリフ４０１〜４０４及びそれらの描画情報を取得する（Ｓ１０３）。そして、グリフ４０１からグリフ４０４まで、順次対象グリフとし（Ｓ１０４）、以下の処理を行う。
パス管理部１６は、前のグリフの越境パスが登録されているかどうかを判定する（Ｓ１０５）。最初のグリフはグリフ４０１なので、越境パスが登録されていない（Ｓ１０５：Ｎ）。そのため、処理はＳ１０８へ進む。Ｓ１０８では、重複判定部１２が、次のグリフ４０２と重複するかどうかを判定する。対象グリフのＸ最大値は１１．４、対象グリフの送り幅は１０．８、後続グリフのＸ最小値は０．０である（「３０」のスケール換算前）。そのため式（１）を満たすので、重複すると判定される（Ｓ１０８：Ｙ）。そのため、境界設定部１５が境界線を設定する（Ｓ１０９）。境界線はＸ座標で対象グリフの描画位置が１００、対象グリフの送り幅が１０．８、後続グリフのＸ最小値が０．０なので、式（２）から１１０と求まる。
【００２３】
パス管理部１６は、グリフ４０１の越境パスを登録する（Ｓ１１０）。登録されるのはパスのＩＤ、始端座標、終端座標である。図４（ｂ）の模式図の例では、Ｘ座標＝１１０に設定された境界線４０５を跨いでいるか、あるいは越えている２つのパスがそれぞれ越境パス４０６となる。パス管理部１６は、また、図４（ｂ）において破線で示す境界内のパスを描画パスとして登録する（Ｓ１１１）。
【００２４】
描画処理部１７は、登録された描画パスをフレームバッファに描画する（Ｓ１１２）。グリフ４０１の描画パスを描画した結果を図４（ｃ）に示す。パスの内部に一部が含まれている画素に対してはアンチエイリアス処理が行われているが、境界線４０５を越えた位置にある画素の色は変更されない。
【００２５】
その後、Ｓ１０４に戻り、対象グリフをグリフ４０２として再び同様の処理を行う。すなわち、パス管理部１６が、前のグリフ４０１の越境パス４０６を取得する（Ｓ１０５）。グリフ４０１についてはＳ１１０において越境パス４０６が登録されているので、前のグリフの越境パスが登録されている（Ｓ１０５：Ｙ）と判定される。そのため、パス管理部１６は、前のグリフ４０１の越境パス４０６をグリフ４０２の描画パスとして登録する（Ｓ１０６）。描画パスの登録を完了した場合、それまで登録されていた越境パスの情報をクリアする（Ｓ１０７）。
【００２６】
次に、重複判定部１２が、後続グリフと重複するかを判定する（Ｓ１０８）。グリフ４０２の後続グリフはグリフ４０３であり、図４（ａ）より、グリフ４０２のＸ最大値は１２．０、送り幅は１１．４、グリフ４０３のＸ最小値は−５．７である。これらの値は式（１）を満たすので、重複すると判定される（Ｓ１０８：Ｙ）。そのため、境界設定部１５は境界線を設定する（Ｓ１０９）。境界線の位置は、グリフ４０２の描画位置が１１０．８、グリフ４０２の送り幅が１１．４、後続グリフであるグリフ４０３のＸ最小値が−５．７なので、式（２）を用いて１１６と求まる。
【００２７】
次に、パス管理部１６は、越境パスを登録する（Ｓ１１０）。図４（ｄ）は、グリフ４０２から越境パスを生成する処理の模式図である。Ｘ座標＝１１６にある境界線４０７を跨いでいるか、あるいは越えているパスから越境パス４０８を生成し、登録する。パス管理部１６は、また、破線で示した境界内のパスを描画パスとして登録する（Ｓ１１１）。描画処理部１７は、パス管理部１６で登録された描画パスをフレームバッファに描画する（Ｓ１１２）。登録された描画パスは、図４（ｄ）における、グリフ４０２の点線部と、前のグリフ４０１の越境パス４０６であり、これらを合わせて描画する。図４（ｅ）はグリフ４０１，４０２について、パス管理部１６で登録された描画パスを描画した結果を示した図である。
【００２８】
Ｓ１０４に戻り、対象グリフをグリフ４０３とした場合についても同様に処理を行う。すなわち、Ｓ１０５において越境パスが登録されていると判定され（Ｓ１０５：Ｙ）、Ｓ１０６、Ｓ１０７の処理を行う。次に、Ｓ１０８において、後続グリフと重複するかどうかを判定する。グリフ４０３の後続グリフはグリフ４０４であり、グリフ４０３のＸ最大値は６．３、グリフ４０３の送り幅は５．７、後続グリフであるグリフ４０４のＸ最小値は２．４である。これらの値は式（１）を満たさないから、書字方向では重複しないと判定される（Ｓ１０８：Ｎ）。この場合、パス管理部１６は、グリフ４０３を構成するパスをすべて描画パスとして登録する（Ｓ１１３）。
【００２９】
パス管理部１６は、登録された描画パスを描画する（Ｓ１１２）。登録された描画パスは、図４（ｆ）における、グリフ４０３の点線部と、前のグリフ４０２の越境パス４０８であり、これらを合わせて描画する。図４（ｇ）はグリフ４０３について、パス管理部１６で登録された描画パスを描画した結果を示した図である。
【００３０】
Ｓ１０４に戻り、グリフ４０４を対象グリフとして、Ｓ１０５〜Ｓ１１３の処理を行う。グリフ４０４の場合、Ｓ１０５において越境パスが登録されていないと判定され（Ｓ１０５：Ｎ）、Ｓ１０８に進む。Ｓ１０８では、グリフ４０４が最後のグリフなので重複しないと判定され（Ｓ１０８：Ｎ）、Ｓ１１３に進む。Ｓ１１３では、すべてのパスを描画パスとして登録する。最後にＳ１１２で描画処理を行い、文字描画処理を終了する。
【００３１】
このように、第１実施形態によれば、書字方向に前後する文字が重なるようにデザインされた文字列であっても、対象グリフの描画領域を越えるパスについては越境パスとして次のグリフを描画するときの描画パスとして扱うことができる。そのため、重なり合ったまま描画処理する場合に比べてメモリ使用量を格段に抑制することができる。
なお、第１実施形態では、Ｓ１１０の越境パスを登録する際に、境界線を跨っているパスについてもそのまま登録しても構わない。この場合、図６（ａ）において、パス６１０、パス６１１、パス６１２をそのまま越境パスとして登録することになる。しかし、例えば描画処理時に境界線でクリッピングすることで、越えた部分のパスを生成するのと同じ描画結果を得ることができる。
【００３２】
また、第１実施形態では、Ｓ１０９の境界設定処理において、書字方向（Ｘ方向）に垂直な画素境界で、重複領域に最も近い直線を境界線とする場合について説明したが、必ずしも重複領域に最も近い直線でなくても良い。例えば、式（２）で求めたＸ座標からさらに−１した直線を境界線としても良い。ただし、この場合、境界線の位置はなるべく重複領域に近い直線を選択する方が望ましい。
【００３３】
また、境界線は、Ｘ座標のみならずＹ座標を考慮して決定しても構わない。例えば図８（ａ）は、スクリプト系フォントで文字が重複する例を示す模式図である。隣り合うグリフ８２０とグリフ８２１とは重複しているが、接続部の輪郭は、書字方向（Ｘ方向）にもそれと垂直の方向（Ｙ方向）にも平行ではない。このような例の場合、重複領域、対象グリフ及び後続グリフの形状を解析し、越境パスがなるべく多くなるように、かつ、画素境界を通るように、境界線を設定することが望ましい。図８（ａ）に示される文字列をフレームバッファに描画するときの様子を示したのが図８（ｂ）である。図８（ｂ）では、グリフ８２１とグリフ８２２の重複部分を中心に図示されている。タイル状の各マスは画素境界である。
図８（ｂ）を参照すると、境界線は、画素境界の書字方向に対して垂直方向（Ｙ方向）の輪郭同士を接続することを基本としつつ、隣り合う画素が有値（無色でない）場合は、当該画素を避けるように補正する。つまり、隣り合う画素が有値になるまで書字方向に対して平行方向（Ｘ方向）の輪郭を接続した線の集合となっている。境界線をこのように設定することで、対象グリフについての越境パスが少なくなり、メモリ使用量の増大を防止することができる。
【００３４】
なお、第１実施形態では、書字方向が横書きであることを前提にして説明したが、縦書きの場合にも同様に適用することが可能である。横書きのときは書字方向がＸ軸方向なので境界線を書字方向に垂直なＹ軸に平行に設定したが、縦書きでは書字方向がＹ軸方向となり、境界線を書字方向に垂直なＸ軸に平行に設定することになる。
【００３５】
［第２実施形態］
次に、本発明の第２実施形態について説明する。第２実施形態では、第１実施形態の例に加え、前後のグリフの重複形状と描画パラメータによって文字描画処理を効率化させる例について説明する。ハードウェア構成については、第１実施形態と同じである。第２実施形態における文字描画装置のブロック構成図を図９に示す。第２実施形態の文字描画装置は、取得部２０、情報保持部２１、重複判定部２２、パラメータ判定部２３、交差判定部２４、境界設定部２５、パス管理部２６及び描画処理部２７を有する。取得部２０、情報保持部２１、重複判定部２２、境界設定部２５、パス管理部２６及び描画処理部２７は、それぞれ第１実施形態における取得部１０、情報保持部１１、重複判定部１２、境界設定部１５、パス管理部１６及び描画処理部１７と同じである。これらの機能ブロックは、第１実施形態と同様、ＣＰＵ１０２が、ＲＯＭ１０３に格納されたコンピュータプログラムをＲＡＭ１０４に展開し、後述する各フローチャートに従った処理を実行することで実現される。
【００３６】
パラメータ判定部２３は、重複領域での色の濃淡が目立つ描画パラメータかどうかを判定する。この判定の内容を、図１０を参照して説明する。
図１０（ａ）は対象グリフと後続グリフの重複領域について説明した図である。対象グリフ８０１と後続グリフ８０２の重複領域に対して、被覆率が０％でない画素の集合を重複領域画素８０３とする。重複領域内部の色の濃淡が目立つのは、描画パラメータのうち、不透明度が１００％でないケースである。これは、不透明度が１００％ではない図形を重ねて描画すると、アルファブレンドの処理によって重複領域の色が濃くなることが理由である。色成分（事前にアルファを乗算した値）をＣ、不透明度をＡとし、合成される側のパラメータをｄ、合成する側のパラメータをｓ、合成結果のパラメータをｒという添字を付加して表すと、アルファブレンドの式は式（３）および式（４）のように表される。
Ｃｒ＝Ｃｄ（１−Ａｓ）＋Ｃｓ  …  （３）
Ａｒ＝Ａｓ＋（１−Ａｓ）Ａｄ  …  （４）
【００３７】
Ｃｒの計算結果はＣｄに依存する。そのため、Ａｓが１００％あるいは０％（所定値）でない場合、重複領域と重複領域外の色は異なった値となる。そこで、パラメータ判定部２３は、描画パラメータが重複領域内部での色の濃淡が発生するものかどうか、例えば不透明度が所定値、例えば１００％かどうかを判定する。グリフの接続部が不自然にならないようにするための描画処理を行えるようにした。
【００３８】
また、交差判定部２４は、グリフが交差する交差領域においてアンチエイリアス部分の色の濃淡が目立つ形状かどうかを判定する。例えば文字列を背景色が白、描画色が黒、不透明度１００％で描画したとする。交差領域のアンチエイリアス部分の濃淡は、直線上に連続した画素において、同じ色になることが期待されているにも関わらず、所々に濃い画素が挟まるようなケースもある。アンチエイリアス部分は灰色で表現され、灰色を明度（０が黒、１００が白）で表現したとすると、図１０（ｂ）に示した例では、画素８０４の明度は５０が期待されるのに３７．５になってしまう。一方、図１０（ｃ）のように、交差領域においてグリフが連続的につながらない場合には、交差領域において明度が低くなる（灰色が濃くなる）ことはあまり気にならない。これは、各グリフの交差領域にあたる画素８０５のグリフに対する被覆率は、隣接する画素８０６のグリフに対する被覆率より上昇するためである。画素８０５の明度は、本来ならば明度は３７．５にならなければならないが、アンチエイリアス部分が重なった結果、明度が２５．０になることは、視覚的には大きな違和感を生じるものではない。
【００３９】
そこで、交差判定部２４は、対象グリフと後続グリフとが交差領域を挟んで連続するかどうか、つまりパスが重複領域において一致するかどうかを判定する。一致する場合、交差領域におけるアンチエイリアス部分の濃淡が目立つ形状と判定することとした。一方、対象グリフと後続グリフのパスが重複領域において一致しない場合は、交差部分におけるアンチエイリアスの濃淡が目立たない形状と判定することとした。
【００４０】
次に、第２実施形態における文字描画方法を図１１のフローチャートを参照して説明する。図７に示した第１実施形態のフローチャートと相違するのは、Ｓ１０８とＳ１０９との間に、パラメータ判定部２３による処理Ｓ２０１と、交差判定部２４による処理Ｓ２０２とが挿入されている点である。そこで、これらの相違する処理を中心に説明し、第１実施形態と同じ内容の処理については重複記載及び説明を割愛する。
第２実施形態では、Ｓ１０８において、対象グリフが後続グリフと重複すると判定された場合、パラメータ判定部２３で、重複領域での色の濃淡が目立つ描画パラメータかどうかを判定する（Ｓ２０１）。例えば描画パラメータが不透明度１００％のために重複領域内部での色の濃淡が発生するものかどうかを判定する。不透明度が１００％でなければ（Ｓ２０１：Ｎ）、Ｓ１０９に進み、第１実施形態で説明したとおりの処理を実行する。
【００４１】
他方、不透明度が１００％の場合（Ｓ２０１：Ｙ）、交差判定部２４において、交差部分のアンチエイリアスの濃淡が目立つ形状かどうか、例えば対象グリフと後続グリフのパスが重複部分において一致するかどうかを判定する（Ｓ２０２）。一致する場合、交差部分におけるアンチエイリアスの濃淡が目立つ形状であるため（Ｓ２０２：Ｙ）、Ｓ１０９に進む。一方、対象グリフと後続グリフのパスが重複部分において一致しない場合は、交差部分におけるアンチエイリアスの濃淡が目立たない形状と判定し（Ｓ２０２：Ｎ）、Ｓ１１３に進む。Ｓ１０９、Ｓ１１３以降の処理については、第１実施形態で説明したとおりであるため、ここでは説明を省略する。
【００４２】
なお、Ｓ２０２の処理において、交差部分のアンチエイリアスの濃淡が目立つ形状かどうかを判定する際に、第２実施形態では前後のグリフの交差状態に基づいて判定する処理について説明したが、他の情報を用いて判断しても良い。例えば、ヒンディー語では、各グリフが水平線（シローレーカー）を持ち、その水平線がつながって描画されることが言語の特徴として存在する。こういった言語的特徴に基づき、交差領域を挟んで直線上に連続するときにアンチエイリアス部分の色の濃淡が目立つ形状と判定しても良い。具体的には、前後のグリフが同じフォントデータに含まれ、そのフォントデータがヒンディー語のフォントであれば、前後のグリフが重複領域を挟んで連続していることを推定しても良い。また、前後のグリフのグリフインデックスからＵｎｉｃｏｄｅスカラ値を取得し、それらがデーヴァナーガリー文字のブロックに含まれているかどうかを判定するようにしても良い。さらに、ヒンディー語の文字には、例外的にシローレーカーを含まないグリフや、途切れて繋がらないグリフもあるので、繋がるグリフかどうかを別データとして登録し、そのデータを参照するようにしても良い。
【００４３】
なお、ヒンディー語に限らず、アラビア語など、他の言語で同じような特徴を持つ言語でも、同様の処理を行うようにして良い。
また、Ｓ２０２の処理では、グリフの交差部分のアンチエイリアスの濃淡が目立つ形状かどうかを判定しているが、アンチエイリアス機能がＯＦＦになっている場合は、直ちにＳ１１３に進むようにしても良い。
【００４４】
以上説明した処理制御を行うことで、重複による濃淡が目立たないときは通常の描画処理をさせることで、効率的に接続部において不自然にならないような描画結果を得ることができる。
【００４５】
［他の実施形態］
本発明は、プログラム若しくは記録媒体（記憶媒体）等としての実施態様をとることも可能である。また、本発明の目的は、以下のようにすることによっても達成される。すなわち、前述した各実施形態の機能ブロックを実現するコンピュータプログラムのプログラムコード（コンピュータプログラム）を記録した記録媒体（または記憶媒体）を、端末に供給する。かかる記憶媒体は、コンピュータ読み取り可能な記憶媒体である。そして、その端末のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成する。
【図１】
2017116859.tif 000003
【図２】
2017116859.tif 000004
【図３】
2017116859.tif 000005
【図４】
2017116859.tif 000006
【図５】
2017116859.tif 000007
【図６】
2017116859.tif 000008
【図７】
2017116859.tif 000009
【図８】
2017116859.tif 000010
【図９】
2017116859.tif 000011
【図１０】
2017116859.tif 000012
【図１１】
2017116859.tif 000013