(57)【要約】  入力部から入力された文字コードに対応する文字ベクトルデータをフォントデータベースから取得するフォントデータロード部(102)と、フォントデータロード部(102)で取得された文字ベクトルデータ内の各ベクトルの上下左右位置関係および同一位置関係を表現する有向グラフで構築された有向グラフ構造を算出する有向グラフ算出部(103)と、有向グラフ算出部(103)において算出された有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下左右関係でのグリッド・フィッティング処理を行うグリッド・フィッティング部(104)と、グリッド・フィッティング部(104)においてグリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部(105)と、スタライズ部(105)でラスタライズして得られた文字画像を表示する表示部(106)を備えている。
2013175520.tif 000002
【特許請求の範囲】
【請求項１】
情報を入力する入力部と、  文字ベクトルデータから成るフォントデータを格納するフォントデータベースと、  前記入力部から入力された文字コードに対応する文字ベクトルデータを前記フォントデータベースから取得するフォントデータロード部と、  前記フォントデータロード部で取得された文字ベクトルデータ内の各ベクトルの上下左右位置関係および同一位置関係を表現する有向グラフで構築された有向グラフ構造を算出する有向グラフ算出部と、  前記有向グラフ算出部において算出された有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下左右位置関係でのグリッド・フィッティング処理を行うグリッド・フィッティング部と、  前記グリッド・フィッティング部においてグリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部と、  前記ラスタライズ部でラスタライズして得られた文字画像を表示する表示部とを備えた文字描画装置。
【請求項２】
有向グラフ算出部は、同一位置関係の有無を、水平ベクトルの場合は、Ｙ座標の差が所定の閾値以内であり、かつ、幅の差が所定の閾値以内であるか否か、垂直ベクトルの場合は、Ｘ座標の差が所定の閾値以内であり、かつ、幅の差が所定の閾値以内であるか否かによって判断することを特徴とする請求項１記載の文字描画装置。
【請求項３】
有向グラフ算出部およびグリッド・フィッティング部の各々は、水平ベクトルに対する処理と垂直ベクトルに対する処理を並列に実行することを特徴とする請求項１記載の文字描画装置。
【請求項４】
有向グラフ算出部は、水平ベクトル同士または垂直ベクトル同士でベクトル間を分断するベクトルが存在する場合には、同一位置関係を構築しないことを特徴とする請求項２記載の文字描画装置。
【請求項５】
有向グラフ算出部は、水平ベクトル同士または垂直ベクトル同士でベクトル間を分断するベクトルが存在する場合であって、上下左右位置関係において同一位置関係がある場合は、該分断するベクトルを無視することを特徴とする請求項４記載の文字描画装置。
【発明の詳細な説明】
【技術分野】
【０００１】  この発明は、低解像度の表示器に高品質なスケーラブルフォントの文字を表示させるために、フォントデータの各ベクトルの位置をグリッドに合わせるグリッド・フィッティングを行う文字描画装置に関するものである。
【背景技術】
【０００２】  従来、高解像度の表示器に文字を描画する際には、スケーラブルなベクトルデータで表現された文字（スケーラブルフォント）が使用される。この際、文字の輪郭をスムーズに見せるためにアンチエイリアス処理が行われる。【０００３】  一方、低解像度の表示器にスケーラブルフォントの文字を表示させると、アンチエイリアス処理が行われた部分がぼけ、または、かすれに見えてしまい、文字の視認性が低下する。この問題を解消するために、文字を表すベクトルデータの位置をピクセル位置に合わせるグリッド・フィッティングを行うことにより、レンダリング後の線がピクセルに跨ることを防ぎ、文字のぼけ、または、かすれを低減する方法が提案されている。【０００４】  このような文字のぼけ、または、かすれの低減を実現する最も基本的な方法は、フォントデータの中にドット数およびポイント数に基づき保持されている補正情報（「ヒント情報」という）を用いて、ベクトルデータを補正することである。この補正により、文字品質の向上を図ることができる（例えば、特許文献１参照）。ここで、ヒント情報とは、各ベクトルデータの位置および太さなどをサイズに応じてどのように制御するのかを記述した情報である。【０００５】  一方、ヒント情報を保持すると、フォントデータサイズが大きくなるため、自動的にヒント情報を作成する方法も提案されている。例えば、特許文献２は、ヒント情報を保持していないフォントデータに対し、文字を描画する際に水平ベクトルおよび垂直ベクトルを計算し、これらの幅を丸めて整数値となるようにし、ぼけ、または、かすれを低減する方法を開示している。この特許文献２は、さらに、同じ位置にある水平ベクトルおよび垂直ベクトル群をまとめることにより、文字の各ベクトルを揃え、文字の視認性を高める方法を開示している。【０００６】  さらに、特許文献３は、ヒント情報を保持していないフォントデータに対して、ＤＡＧ（Direct Acyclic Graph：有向非循環リスト）を作成し、このＤＡＧを走査して衝突が発生した場合には、セグメントをマージすることにより、文字のつぶれを発生させず、文字の品質を向上させる方法を開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平２−２５００８９号公報
【特許文献２】特開平９−２５１２９０号公報
【特許文献３】特開２０１０−１７００９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】  しかしながら、特許文献１に示されたフォントデータにヒント情報を保持する方法では、ヒント情報の分だけフォントデータサイズが増大するという問題がある。これに対し、ヒント情報をフォントデータ内に保持しないことにより、フォントデータサイズを低減できるようにした他の技術においても、以下のような問題がある。【０００９】  すなわち、特許文献２に開示された技術では、水平ベクトルおよび垂直ベクトルを抽出し、かつ、同じ位置にある水平ベクトルおよび垂直ベクトルをまとめることにより、文字の隣接関係を保持しているが、水平ベクトル間および垂直ベクトル間の関係が考慮されていないために、例えば縦に並んだ水平ベクトルが重なりあって文字のつぶれが発生する場合がある。【００１０】  また、特許文献３に開示された技術では、文字のつぶれが発生するような場合には、ベクトルをマージすることにより、文字のつぶれを防いでいるが、ＤＡＧで構築された関係についてのみつぶれ防止が考慮されるために、各ＤＡＧの位置がずれてしまい、表示された文字に違和感を覚える場合がある。【００１１】  この発明は、上述した諸問題を解決するためになされたものであり、低解像度の表示器に高品質なスケーラブルフォントの文字を描画することができ、しかも、フォントデータサイズを低減できる文字描画装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】  この発明に係る文字描画装置は、情報を入力する入力部と、文字ベクトルデータから成るフォントデータを格納するフォントデータベースと、入力部から入力された文字コードに対応する文字ベクトルデータをフォントデータベースから取得するフォントデータロード部と、フォントデータロード部で取得された文字ベクトルデータ内の各ベクトルの上下左右位置関係および同一位置関係を表現する有向グラフで構築された有向グラフ構造を算出する有向グラフ算出部と、有向グラフ算出部において算出された有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下左右位置関係でのグリッド・フィッティング処理を行うグリッド・フィッティング部と、グリッド・フィッティング部においてグリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部と、スタライズ部でラスタライズして得られた文字画像を表示する表示部を備えている。
【発明の効果】
【００１３】  この発明に係る文字描画装置によれば、低解像度の表示器に高品質なスケーラブルフォントの文字を描画することができ、しかも、フォントデータサイズを低減できる。
【図面の簡単な説明】
【００１４】
【図１】この発明の実施の形態１に係る文字描画装置の構成を示すブロック図である。
【図２】この発明の実施の形態１に係る文字描画装置で使用される有向グラフを説明するための図である。
【図３】この発明の実施の形態１に係る文字描画装置において行われる接続情報算出処理を説明するための図である。
【図４】この発明の実施の形態１に係る文字描画装置において行われる接続情報算出処理を示すフローチャートである。
【図５】この発明の実施の形態１に係る文字描画装置において使用されるｆａｍｉｌｙ関係とｆｒｉｅｎｄ関係を説明するための図である。
【図６】この発明の実施の形態１に係る文字描画装置において行われる有向グラフ構造構築処理を示すフローチャートである。
【図７】この発明の実施の形態１に係る文字描画装置において行われるグリッド・フィッティング処理を示すフローチャートである。
【図８】この発明の実施の形態１に係る文字描画装置における処理によって得られた結果の例を示す図である。
【図９】この発明の実施の形態２に係る文字描画装置において処理される文字の例を示す図である。
【図１０】この発明の実施の形態２に係る文字描画装置におけるｆｒｉｅｎｄ関係を説明するための図である。
【発明を実施するための形態】
【００１５】  以下、この発明の実施の形態を、図面を参照しながら詳細に説明する。実施の形態１．  図１は、この発明の実施の形態１に係る文字描画装置の構成を示すブロック図である。この文字描画装置は、入力部１０１、フォントデータロード部１０２、有向グラフ算出部１０３、グリッド・フィッティング部１０４、ラスタライズ部１０５、表示部１０６およびフォントデータベース１１２を備えている。
【００１６】  入力部１０１は、文字のフォントフェイス名、フォント（ローマン体、ボールド体またはイタリック体など）の設定、文字を描画する際の大きさを示すポイント数、フォントデータ内の表示する文字を指定する文字コード（ＵＴＦ−１６、ＳＨＩＦＴ―ＪＩＳコードなどで表現された文字を特定するための情報）、文字描画位置または色などを入力するために使用される。この入力部１０１から入力された情報は、フォントデータロード部１０２に送られる。
【００１７】  フォントデータベース１１２は、フォントデータを格納している。このフォントデータベース１１２に格納されているフォントデータは、基本的に、ベクトルデータで表現されたスケーラブルフォントを表すデータである。
【００１８】  フォントデータロード部１０２は、入力部１０１から送られてくる情報に基づき、フォントデータベース１１２にアクセスし、指定された文字コードのベクトルデータ（以下、「文字ベクトルデータ」という）を取得する。また、フォントデータロード部１０２は、文字ベクトルデータのみでなく、文字を描画する際に必要な文字のベースラインから上方向の高さを示すアセンダ情報、下方向の高さを示すディセンダ情報、上付き文字および下付き文字の配置位置情報なども取得する。このフォントデータロード部１０２で取得された情報は、有向グラフ算出部１０３に送られる。
【００１９】  有向グラフ算出部１０３は、フォントデータロード部１０２から送られてくる文字ベクトルデータに対して、グリッド・フィッティングを効率的に行うために、水平ベクトル同士、または、垂直ベクトル同士に関係性を持たせる処理を行い、ＤＡＧを算出する。この有向グラフ算出部１０３で算出されたＤＡＧは、グリッド・フィッティング部１０４に送られる。この有向グラフ算出部１０３で行われる処理の詳細については後述する。
【００２０】  グリッド・フィッティング部１０４は、有向グラフ算出部１０３から送られてくるＤＡＧを用いて、文字ベクトルデータのグリッド・フィッティング処理を実行する。このグリッド・フィッティング部１０４においてグリッド・フィッティング処理された結果は、ラスタライズ部１０５に送られる。このグリッド・フィッティング部１０４で行われる処理の詳細については後述する。
【００２１】  ラスタライズ部１０５は、グリッド・フィッティング部１０４から送られてきたグリッド・フィッティング済の文字ベクトルデータをラスタライズする。ラスタライズの方法については、例えば特表２００６−５２１６２６号公報および特表２００６−５２１５８２号公報に開示された技術を組み合わせることにより実現できる。ここでは詳細な説明は省略するので、必要に応じて上記公報を参照されたい。このラスタライズ部１０５におけるラスタライズによって得られたデータは、表示部１０６に送られる。
【００２２】  表示部１０６は、ラスタライズ部１０５から送られてきたデータに基づき、文字ベクトルデータをラスタライズした結果を表示する。
【００２３】  次に、有向グラフ算出部１０３で行われる処理の詳細について説明する。まず、有向グラフについて説明する。有向グラフとは、図２（Ａ）に示すように、グラフの各頂点が有向辺で結ばれているものをいう。また、ＤＡＧは有向非循環グラフのことであり、図２（Ａ）に示すように、グラフは非循環であるものを指す。ここで、非循環であるとは、グラフの各頂点を有向辺でたどったときに、もとの頂点に戻ることができないことを指す。したがって、図２（Ｂ）に示すグラフは循環しているという。
【００２４】  文字ベクトルデータの場合は、グラフの各頂点は、ベクトルデータの各セグメントになる。ここで、文字ベクトルデータの構造について説明する。文字ベクトルデータは、移動、線描画および曲線描画などといったペンコマンドから構成されており、フォントレンダラは、これらのペンコマンドで表現された文字ベクトルデータを走査して、フォントをラスタライズする。ここで、線描画および曲線描画コマンドとして表現されたベクトルデータを、セグメントと呼ぶ。以下では、水平ベクトルおよび垂直ベクトルをそれぞれ水平セグメントおよび垂直セグメントと呼ぶ場合もある。
【００２５】  有向グラフ算出部１０３では、上述した有向グラフ構造を文字ベクトルデータから構築する処理が行われる。すなわち、有向グラフ算出部１０３では、まず、有向グラフの算出に必要な構造として、接続情報が、以下に説明する接続情報算出処理によって算出される。その後、水平セグメント同士および垂直セグメント同士の各々に対して、有向グラフ構造が、以下に説明する有向グラフ構造構築処理によって構築される。
【００２６】  まず、文字ベクトルデータ内の接続情報を算出する接続情報算出処理について説明する。ここでいう接続情報として、図３に示すような２つのパターンがある。１つは図３（Ａ）に示したように、現在のセグメントから次のセグメントへ端点でつながるような場合（連接関係）であり、他の１つは図３（Ｂ）に示すような２つのセグメントが交差するような場合（交差関係）である。このような接続関係を示す情報は、ベクトルデータの各セグメントに保持できる。すなわち、連接関係については双方向リスト構造などで保持し、交差関係については、交差セグメントのリストなどとして保持することができる。
【００２７】  図４は、接続情報算出処理を示すフローチャートである。この接続情報算出処理では、ループ４０１において、すべてのセグメントが走査される。ここで、現在着目しているセグメントをｅとする。このループ４０１内で、ｅを含まない他のすべてのセグメントに対して走査が行われる（ループ４０２）。ここで、着目しているループ４０２のセグメントをｅ’とする。ｅとｅ’の組に対して、まず、ｅとｅ’が連接するかどうかが調べられる（ステップ４０３）。これは、ｅとｅ’の端点が同一であるか否かをチェックすることにより行われる。この際、端点に対して所定の閾値を設け、その範囲内に入るものを「連接する」と判断するように構成することもできる。
【００２８】  ステップ４０３において連接することが判断された場合は、ｅに対してｅ’が連接している旨が登録され（ステップ４０４）、処理はループ４０２の次のセグメントに進む。ステップ４０３において連接しないことが判断された場合は、次いで、ｅとｅ’が交差するかどうかが調べられる（ステップ４０５）。この交差するかどうかは、外積を求めることにより判断することができる。ステップ４０５において、ｅとｅ’が交差することが判断された場合は、交差関係として、ｅに対してｅ’が登録される（ステップ４０６）。その後、処理はループ４０２の次のセグメントに進む。一方、ステップ４０５において交差しないことが判断された場合には、ループ４０２の次のセグメントに進む。ループ４０２のすべてのセグメントに対する走査が完了したことが判断されると、処理はループ４０１の次のセグメントに進み、ループ４０１の全セグメントの処理が完了したら、ループ４０１は終了する。
【００２９】  上述した処理によって、ベクトルデータ内の接続情報を求めることができる。なお、ここでは接続情報を求めるために、全セグメントに対する走査を行っているが、交点算出の方法として多くのアルゴリズムが知られているので、これらのアルゴリズムを用いることもできる。
【００３０】  次に、水平セグメント同士および垂直セグメント同士に対する有向グラフ構造構築処理を説明する。水平セグメントと垂直セグメントに対する有向グラフ構造構築は、互いに独立して行うことができるため、以下では水平セグメントについて説明する。
【００３１】  まず、有向グラフ構造を抽出する際の頂点同士（セグメント同士）の辺での向き付け規則について説明する。ここでは、上下位置関係を表すｆａｍｉｌｙ関係とｆｒｉｅｎｄ関係という２つの関係で向き付けが実施される。
【００３２】  まず、ｆａｍｉｌｙ関係とは、図５（Ａ）に示す「菱」という文字を構成する「土」という文字のように、水平セグメント同士に接続情報算出処理において求められた接続関係がある場合を指す。したがって、「菱」という文字の草冠内の水平セグメントと、「土」の中の水平セグメントはｆａｍｉｌｙ関係ではない。ただし、接続関係がなくても、水平セグメントのＸ座標の範囲が一定以上共通しており、かつ、Ｙ座標の高さが所定の閾値以内にあるものをｆａｍｉｌｙ関係とすることもできる。また、水平セグメントにおいては、ｆａｍｉｌｙ関係を有するセグメントのうち、上側のセグメントをｐａｒｅｎｔ、下側のセグメントをｃｈｉｌｄと呼ぶ。これらは、文字ベクトルデータ内の各ベクトルの上下位置関係を表現する。なお、垂直セグメントについては、文字ベクトルデータ内の各ベクトルの左右位置関係を表現する。
【００３３】  また、ｆｒｉｅｎｄ関係とは、図５（Ｂ）に示す「闘」という文字に見られるように、同じ高さに存在する水平セグメント同士の関係をいい、文字ベクトルデータ内の各ベクトルの同一位置関係を表現する。そのため、「闘」という文字の門構えの一番上に存在する２本の水平セグメント同士は、ｆｒｉｅｎｄ関係となり、門構えの中に存在する「豆」と「寸」の文字の中の水平セグメント同士はｆｒｉｅｎｄ関係ではない。この関係を保持するためには、各水平セグメントに対して、ｃｈｉｌｄ関係にある水平セグメントを片方向リストで保持し、ｆｒｉｅｎｄ関係にある水平セグメントを双方向リストで保持するなどの方法を用いることができる。
【００３４】  図６は、上述した２つの関係を持つ有向グラフ構造を構築する有向グラフ構造構築処理を示すフローチャートである。まず、全セグメントを走査し、水平セグメントを抽出してリストで保持する（ステップ６０１）。ここで、水平セグメントかどうかは、その両端点が同じＹ座標の値を持つか否かによって判断される。なお、両端点のＹ座標の差が所定の閾値以内であるか否かによって判断するように構成することもできる。このようにして抽出された水平セグメントはＹ座標の昇順にソートされる（ステップ６０２）。このステップ６０２で得られた水平セグメントのソート済み双方向リストをＥとする。
【００３５】  ループ６０３では、リストＥを昇順に走査して、各セグメントｅが処理される。ループ６０３内では、さらにループ６０４の処理が行われ、ｅのＹ座標以下にあるセグメントが降順に走査される。これは、リストＥを逆順にたどることにより実現される。ここで、現在着目しているセグメントをｅ’とする。まず、ｅがｅ’のｐａｒｅｎｔかどうかが調べられる（ステップ６０５）。これは、ｅの接続関係をたどり、その中にｅ’が含まれるか否かを調べることにより行うことができる。この際、ｅと接続関係にあるセグメントを、ｅ’も接続関係として保持しているかどうかが確認される。また、ｅと接続関係にあるセグメントと連接関係にあるセグメントを、ｅ’が接続関係として保持する可能性もあるので、セグメントが幅優先探索で調べられ、ｅとｅ’にｆａｍｉｌｙ関係があるかどうかが調べられる。
【００３６】  ステップ６０５においてｅとｅ’にｆａｍｉｌｙ関係があることが判断された場合は、ｅにｅ’がｃｈｉｌｄとして登録される（ステップ６０６）。ここで、ｅと接続関係にあるセグメントからｃｈｉｌｄが得られたら、ループ６０４においてステップ６０５を再び実行する際は、このセグメントは検索の対象とされない。これは、１つのセグメントの接続関係から、複数のｃｈｉｌｄが得られる可能性があり、かつ、それらのｃｈｉｌｄにはさらにｆａｍｉｌｙ関係があるため、これらの間は直列なｆａｍｉｌｙ関係で結べばよいからである。これにより、探索回数を削減し、処理を高速化することができる。ステップ６０６が実行された後は、ループ６０４において次のセグメントが走査される。
【００３７】  ステップ６０５においてｅとｅ’にｆａｍｉｌｙ関係がないことが判断された場合は、ｅがｅ’のｆｒｉｅｎｄであるかどうかが調べられる（ステップ６０７）。このステップ６０７の処理は、ｅとｅ’のＹ座標が同じ、または、そのＹ座標の差が所定の閾値以内であり、かつ、ｅとｅ’の幅が同じ、または、その差が所定の閾値以内であるか否かを調べることにより行われる。ステップ６０７において、ｅとｅ’がｆｒｉｅｎｄ関係にあることが判断された場合は、ｆｒｉｅｎｄ関係である旨がｅとｅ’の各々に登録される（ステップ６０８）。その後、ループ６０４において次のセグメントが走査される。一方、ステップ６０７において、ｆｒｉｅｎｄ関係でないことが判断された場合は、ループ６０４において次のセグメントが走査される。ループ６０４が終了したら、次にループ６０３において次のセグメントが走査される。ループ６０３においてすべてのセグメントの走査が完了したら、有向グラフ構造構築処理は終了する。
【００３８】  以上の有向グラフ構造構築処理のフローチャートおよび説明において、「水平」と記載されている部分を「垂直」に、「上」を「右」に、「下」を「左」にというように読み替えれば、垂直セグメントについても上記と同様に有向グラフ構造を実現することができる。また、水平セグメントおよび垂直セメントの各々に対する有向グラフ構造構築処理では、各処理をシーケンシャルに実行することができるが、複数のＣＰＵを保持するシステムでは、各処理を並列に実行することもでき、この場合は、有向グラフ構造構築処理を高速化できる。
【００３９】  次に、グリッド・フィッティング部１０４で行われる処理の詳細について説明する。グリッド・フィッティング部１０４は、上述した有向グラフ構造を用いて、グリッド・フィッティング処理を実行する。グリッド・フィッティング処理も、有向グラフ算出部１０３での処理と同様に、水平セグメントおよび垂直セグメントの各々に対して独立に処理を実行できるので、以下では水平セグメントを例に挙げて説明する。なお、以下で説明する内容は垂直セグメントに対しても同様に実現できる。
【００４０】  図７は、グリッド・フィッティング部１０４で行われるグリッド・フィッティング処理を示すフローチャートである。グリッド・フィッティング部１０４では、まず、ループ７０１において、有向グラフ算出部１０３で実行される有向グラフ構造構築処理のステップ６０２で求められた双方向リストＥが使用される。ループ７０１では、リストＥの内部のセグメントが昇順に１つずつ処理される。ここで、着目しているリストのセグメントをｅとする。ループ７０１内では、まず、ｅにグリッド・フィッティングが必要であるかどうかが調べられる（ステップ７０２）。ここで、グリッド・フィッティングの要否の判断は、例えば、特許文献３に開示された技術で採用されている方法によって行うことができるが、この実施の形態１に係る文字描画装置では、その方法に依存しない。
【００４１】  ステップ７０２においてグリッド・フィッティングが必要であると判断された場合には、ｅのグリッド・フィッティング方法が調査される（ステップ７０３）。通常、グリッド・フィッティング処理は、あるルールに優先順位が決められているので、どのような規則でグリッド・フィッティングするかを求めることは可能である。また、ここで求めるグリッド・フィッティング方法はｃｈｉｌｄ関係にあるセグメントとの関係を視認性高く保つためのものである。なお、グリッド・フィッティング方法の詳細は、例えば、特許文献３に説明されているので、必要に応じて参照されたい。
【００４２】  次に、ループ７０５において、ｅとｆｒｉｅｎｄ関係にあるセグメントｅ’の各々のグリッド・フィッティング方法が調査される（ステップ７０６）。このようにして、ｅおよびｅとｆｒｉｅｎｄ関係にあるすべてのセグメントに対するグリッド・フィッティング方法が得られたら、次いで、その中ですべてのセグメントに対して適用可能なグリッド・フィッティング方法が選択され、そのグリッド・フィッティング方法による処理がｅおよびｅとｆｒｉｅｎｄ関係にあるすべてのセグメントに対して実行される（ステップ７０７）。ここで、すべてのセグメントに適用可能なグリッド・フィッティング方法を選択するのは、以下の理由による。すなわち、基本的にグリッド・フィッティング方法には優先度があり、優先度の高い方法をすべてのセグメントに対して実行できればよいが、優先度の低い方法しか適用できないセグメントには、それより優先度の高い方法は適用できない。逆に、優先度の高い方法が適用できるセグメントには、優先度の低い方法を割り当てることができるので、すべてのセグメントに適用可能なグリッド・フィッティング方法として、基本的に最も優先度の低い方法が適用される。上述した処理を、ループ７０１においてすべてのセグメントに対して実行することにより、ｆａｍｉｌｙ関係とｆｒｉｅｎｄ関係の双方を考慮し、文字のつぶれがなく、かつ、文字のバランスが整った文字を描画することができる。
【００４３】  上述した処理を実行すると、例えば図８に示すような結果が得られる。ここで、図８（Ａ）はｆｒｉｅｎｄ関係を考慮していない場合の例であり、門構えのバランスが崩れている。これに対し、図８（Ｂ）はｆｒｉｅｎｄ関係を考慮している場合の例であり、文字のバランスが整ったグリッド・フィッティング処理の結果が得られている。
【００４４】  なお、上述した水平ベクトルに対するグリッド・フィッティング処理と垂直ベクトルに対するグリッド・フィッティング処理とをシーケンシャルに実行することができるが、複数のＣＰＵを保持するシステムでは、これらを並列に実行することもでき、この場合は、グリッド・フィッティング処理を高速化できる。
【００４５】  以上説明したように、実施の形態１に係る文字描画装置によれば、低解像度の表示器に文字を表示するに際し、文字のつぶれ、または、バランスの崩れが発生しない、高品質なスケーラブルフォントの文字を描画することができる。また、ヒント情報をフォントデータ内に含まないため、フォントデータサイズを低減することができる。
【００４６】実施の形態２．  上述した実施の形態１では、ｆｒｉｅｎｄ関係を求める際に、水平セグメントの場合はＹ座標の値がほぼ等しく、長さもほぼ等しいものを対象としている。そのため、漢字としては別の部首に存在するが、たまたま同じ高さに同じ長さで配置されたものも同様に分類することになる。そこで、実施の形態２では、部首として別である場合は、これらを分離するようにしている。
【００４７】  この実施の形態２に係る文字描画装置の構成は、実施の形態１に係る文字描画装置と同じである。また、実施の形態２に係る文字描画装置の動作は、実施の形態１に係る文字描画装置の動作と基本的に同じであるが、有向グラフ算出部１０３で行われる処理のステップ６０７の判定処理のみが異なる。
【００４８】  図９に示す「脇」という文字を例に挙げて説明する。脇という文字を見たときに、「月」の部分の下側の水平セグメントと、下側に存在する２つの「力」の水平セグメントが同じ位置にあり、かつ、長さもほぼ同じである。実施の形態１では、このような３つの水平セグメントをｆｒｉｅｎｄ関係と判定するが、これをｆｒｉｅｎｄ関係と判定すると、例えば「力」の位置移動によって、「月」の中の２つの水平セグメントのバランスが悪くなる。そこで、このように部首の違いを分離するルールとして、水平セグメントを図１０に示すように分断するセグメントが存在する場合は、水平セグメント同士にｆｒｉｅｎｄ関係、つまり同一位置関係を構築しない。
【００４９】  以下、具体的な処理手順を説明する。有向グラフ算出部１０３で行われる処理のステップ６０７において、水平セグメントｅとｅ’がｆｒｉｅｎｄ関係であるかどうかを判断する際に、ｅとｅ’以外のすべてのセグメントを調査し、水平セグメントを分断する辺が存在するかチェックする。この分断するかどうかのチェックは、外積を用いることにより行うことができる。
【００５０】  また、このような方法だけでは、例えば図５（Ｂ）に示すような門構えの真ん中の水平線同士をｆｒｉｅｎｄ関係にすることができない。そこで、分断セグメントより上に存在するｐａｒｅｎｔ、または下に存在するｃｈｉｌｄの水平セグメント間でｆｒｉｅｎｄ関係、つまり同一位置関係にある文字が発生した場合は、分断セグメントの判定は無視するようにする。これは、具体的には、有向グラフ構造構築処理を２回実行することにより実現できる。すでに関係が作られているものについては無視し、一度分断セグメントでｆｒｉｅｎｄ関係を構築しなかったセグメント対に対して、各ｐａｒｅｎｔおよびｃｈｉｌｄ間でｆｒｉｅｎｄ関係が存在するか否かを判定し、存在する場合には現在着目しているセグメント対に対しても、ｆｒｉｅｎｄ関係を構築する。
【００５１】  上述した手順を実行することにより、部首ごとに必要な部分に対してｆｒｉｅｎｄ関係を作ることができ、文字全体として必要な部分のバランスを揃えた文字描画を実現することができる。
【００５２】  なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【産業上の利用可能性】
【００５３】  この発明に係る文字描画装置は、小さいフォントデータの容量であるにも拘わらず、高品質で文字を表示することが要求される種々の表示装置に適している。
【符号の説明】
【００５４】１０１  入力部、１０２  フォントデータロード部、１０３  有向グラフ算出部、１０４  グリッド・フィッティング部、１０５  ラスタライズ部、１０６  表示部、１１２  フォントデータベース。
【図１】
2013175520.tif 000003
【図２】
2013175520.tif 000004
【図３】
2013175520.tif 000005
【図４】
2013175520.tif 000006
【図５】
2013175520.tif 000007
【図６】
2013175520.tif 000008
【図７】
2013175520.tif 000009
【図８】
2013175520.tif 000010
【図９】
2013175520.tif 000011
【図１０】
2013175520.tif 000012
【手続補正書】
【提出日】平成26年4月24日(2014.4.24)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、低解像度の表示器に高品質なスケーラブルフォントの文字を表示させるために、フォントデータの各ベクトルの位置をグリッドに合わせるグリッド・フィッティングを行う文字描画装置に関するものである。
【背景技術】
【０００２】
従来、高解像度の表示器に文字を描画する際には、スケーラブルなベクトルデータで表現された文字（スケーラブルフォント）が使用される。この際、文字の輪郭をスムーズに見せるためにアンチエイリアス処理が行われる。
【０００３】
一方、低解像度の表示器にスケーラブルフォントの文字を表示させると、アンチエイリアス処理が行われた部分がぼけ、または、かすれに見えてしまい、文字の視認性が低下する。この問題を解消するために、文字を表すベクトルデータの位置をピクセル位置に合わせるグリッド・フィッティングを行うことにより、レンダリング後の線がピクセルに跨ることを防ぎ、文字のぼけ、または、かすれを低減する方法が提案されている。
【０００４】
このような文字のぼけ、または、かすれの低減を実現する最も基本的な方法は、フォントデータの中にドット数およびポイント数に基づき保持されている補正情報（「ヒント情報」という）を用いて、ベクトルデータを補正することである。この補正により、文字品質の向上を図ることができる（例えば、特許文献１参照）。ここで、ヒント情報とは、各ベクトルデータの位置および太さなどをサイズに応じてどのように制御するのかを記述した情報である。
【０００５】
一方、ヒント情報を保持すると、フォントデータサイズが大きくなるため、自動的にヒント情報を作成する方法も提案されている。例えば、特許文献２は、ヒント情報を保持していないフォントデータに対し、文字を描画する際に水平ベクトルおよび垂直ベクトルを計算し、これらの幅を丸めて整数値となるようにし、ぼけ、または、かすれを低減する方法を開示している。この特許文献２は、さらに、同じ位置にある水平ベクトルおよび垂直ベクトル群をまとめることにより、文字の各ベクトルを揃え、文字の視認性を高める方法を開示している。
【０００６】
さらに、特許文献３は、ヒント情報を保持していないフォントデータに対して、ＤＡＧ（Direct Acyclic Graph：有向非循環リスト）を作成し、このＤＡＧを走査して衝突が発生した場合には、セグメントをマージすることにより、文字のつぶれを発生させず、文字の品質を向上させる方法を開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平２−２５００８９号公報
【特許文献２】特開平９−２５１２９０号公報
【特許文献３】特開２０１０−１７００９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に示されたフォントデータにヒント情報を保持する方法では、ヒント情報の分だけフォントデータサイズが増大するという問題がある。これに対し、ヒント情報をフォントデータ内に保持しないことにより、フォントデータサイズを低減できるようにした他の技術においても、以下のような問題がある。
【０００９】
すなわち、特許文献２に開示された技術では、水平ベクトルおよび垂直ベクトルを抽出し、かつ、同じ位置にある水平ベクトルおよび垂直ベクトルをまとめることにより、文字の隣接関係を保持しているが、水平ベクトル間および垂直ベクトル間の関係が考慮されていないために、例えば縦に並んだ水平ベクトルが重なりあって文字のつぶれが発生する場合がある。
【００１０】
また、特許文献３に開示された技術では、文字のつぶれが発生するような場合には、ベクトルをマージすることにより、文字のつぶれを防いでいるが、ＤＡＧで構築された関係についてのみつぶれ防止が考慮されるために、各ＤＡＧの位置がずれてしまい、表示された文字に違和感を覚える場合がある。
【００１１】
この発明は、上述した諸問題を解決するためになされたものであり、低解像度の表示器に高品質なスケーラブルフォントの文字を描画することができ、しかも、フォントデータサイズを低減できる文字描画装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係る文字描画装置は、文字ベクトルデータ内の各ベクトルの上下左右位置関係および同一位置関係を表現する有向グラフで構築された有向グラフ構造を算出する有向グラフ算出部と、有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下左右位置関係でのグリッド・フィッティング処理を行うグリッド・フィッティング部と、グリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部と、を備えている。
【発明の効果】
【００１３】
この発明に係る文字描画装置によれば、低解像度の表示器に高品質なスケーラブルフォントの文字を描画することができ、しかも、フォントデータサイズを低減できる。
【図面の簡単な説明】
【００１４】
【図１】この発明の実施の形態１に係る文字描画装置の構成を示すブロック図である。
【図２】この発明の実施の形態１に係る文字描画装置で使用される有向グラフを説明するための図である。
【図３】この発明の実施の形態１に係る文字描画装置において行われる接続情報算出処理を説明するための図である。
【図４】この発明の実施の形態１に係る文字描画装置において行われる接続情報算出処理を示すフローチャートである。
【図５】この発明の実施の形態１に係る文字描画装置において使用されるｆａｍｉｌｙ関係とｆｒｉｅｎｄ関係を説明するための図である。
【図６】この発明の実施の形態１に係る文字描画装置において行われる有向グラフ構造構築処理を示すフローチャートである。
【図７】この発明の実施の形態１に係る文字描画装置において行われるグリッド・フィッティング処理を示すフローチャートである。
【図８】この発明の実施の形態１に係る文字描画装置における処理によって得られた結果の例を示す図である。
【図９】この発明の実施の形態２に係る文字描画装置において処理される文字の例を示す図である。
【図１０】この発明の実施の形態２に係る文字描画装置におけるｆｒｉｅｎｄ関係を説明するための図である。
【発明を実施するための形態】
【００１５】
以下、この発明の実施の形態を、図面を参照しながら詳細に説明する。
実施の形態１．
図１は、この発明の実施の形態１に係る文字描画装置の構成を示すブロック図である。この文字描画装置は、入力部１０１、フォントデータロード部１０２、有向グラフ算出部１０３、グリッド・フィッティング部１０４、ラスタライズ部１０５、表示部１０６およびフォントデータベース１１２を備えている。
【００１６】
入力部１０１は、文字のフォントフェイス名、フォント（ローマン体、ボールド体またはイタリック体など）の設定、文字を描画する際の大きさを示すポイント数、フォントデータ内の表示する文字を指定する文字コード（ＵＴＦ−１６、ＳＨＩＦＴ―ＪＩＳコードなどで表現された文字を特定するための情報）、文字描画位置または色などを入力するために使用される。この入力部１０１から入力された情報は、フォントデータロード部１０２に送られる。
【００１７】
フォントデータベース１１２は、フォントデータを格納している。このフォントデータベース１１２に格納されているフォントデータは、基本的に、ベクトルデータで表現されたスケーラブルフォントを表すデータである。
【００１８】
フォントデータロード部１０２は、入力部１０１から送られてくる情報に基づき、フォントデータベース１１２にアクセスし、指定された文字コードのベクトルデータ（以下、「文字ベクトルデータ」という）を取得する。また、フォントデータロード部１０２は、文字ベクトルデータのみでなく、文字を描画する際に必要な文字のベースラインから上方向の高さを示すアセンダ情報、下方向の高さを示すディセンダ情報、上付き文字および下付き文字の配置位置情報なども取得する。このフォントデータロード部１０２で取得された情報は、有向グラフ算出部１０３に送られる。
【００１９】
有向グラフ算出部１０３は、フォントデータロード部１０２から送られてくる文字ベクトルデータに対して、グリッド・フィッティングを効率的に行うために、水平ベクトル同士、または、垂直ベクトル同士に関係性を持たせる処理を行い、ＤＡＧを算出する。この有向グラフ算出部１０３で算出されたＤＡＧは、グリッド・フィッティング部１０４に送られる。この有向グラフ算出部１０３で行われる処理の詳細については後述する。
【００２０】
グリッド・フィッティング部１０４は、有向グラフ算出部１０３から送られてくるＤＡＧを用いて、文字ベクトルデータのグリッド・フィッティング処理を実行する。このグリッド・フィッティング部１０４においてグリッド・フィッティング処理された結果は、ラスタライズ部１０５に送られる。このグリッド・フィッティング部１０４で行われる処理の詳細については後述する。
【００２１】
ラスタライズ部１０５は、グリッド・フィッティング部１０４から送られてきたグリッド・フィッティング済の文字ベクトルデータをラスタライズする。ラスタライズの方法については、例えば特表２００６−５２１６２６号公報および特表２００６−５２１５８２号公報に開示された技術を組み合わせることにより実現できる。ここでは詳細な説明は省略するので、必要に応じて上記公報を参照されたい。このラスタライズ部１０５におけるラスタライズによって得られたデータは、表示部１０６に送られる。
【００２２】
表示部１０６は、ラスタライズ部１０５から送られてきたデータに基づき、文字ベクトルデータをラスタライズした結果を表示する。
【００２３】
次に、有向グラフ算出部１０３で行われる処理の詳細について説明する。まず、有向グラフについて説明する。有向グラフとは、図２（Ａ）に示すように、グラフの各頂点が有向辺で結ばれているものをいう。また、ＤＡＧは有向非循環グラフのことであり、図２（Ａ）に示すように、グラフは非循環であるものを指す。ここで、非循環であるとは、グラフの各頂点を有向辺でたどったときに、もとの頂点に戻ることができないことを指す。したがって、図２（Ｂ）に示すグラフは循環しているという。
【００２４】
文字ベクトルデータの場合は、グラフの各頂点は、ベクトルデータの各セグメントになる。ここで、文字ベクトルデータの構造について説明する。文字ベクトルデータは、移動、線描画および曲線描画などといったペンコマンドから構成されており、フォントレンダラは、これらのペンコマンドで表現された文字ベクトルデータを走査して、フォントをラスタライズする。ここで、線描画および曲線描画コマンドとして表現されたベクトルデータを、セグメントと呼ぶ。以下では、水平ベクトルおよび垂直ベクトルをそれぞれ水平セグメントおよび垂直セグメントと呼ぶ場合もある。
【００２５】
有向グラフ算出部１０３では、上述した有向グラフ構造を文字ベクトルデータから構築する処理が行われる。すなわち、有向グラフ算出部１０３では、まず、有向グラフの算出に必要な構造として、接続情報が、以下に説明する接続情報算出処理によって算出される。その後、水平セグメント同士および垂直セグメント同士の各々に対して、有向グラフ構造が、以下に説明する有向グラフ構造構築処理によって構築される。
【００２６】
まず、文字ベクトルデータ内の接続情報を算出する接続情報算出処理について説明する。ここでいう接続情報として、図３に示すような２つのパターンがある。１つは図３（Ａ）に示したように、現在のセグメントから次のセグメントへ端点でつながるような場合（連接関係）であり、他の１つは図３（Ｂ）に示すような２つのセグメントが交差するような場合（交差関係）である。このような接続関係を示す情報は、ベクトルデータの各セグメントに保持できる。すなわち、連接関係については双方向リスト構造などで保持し、交差関係については、交差セグメントのリストなどとして保持することができる。
【００２７】
図４は、接続情報算出処理を示すフローチャートである。この接続情報算出処理では、ループ４０１において、すべてのセグメントが走査される。ここで、現在着目しているセグメントをｅとする。このループ４０１内で、ｅを含まない他のすべてのセグメントに対して走査が行われる（ループ４０２）。ここで、着目しているループ４０２のセグメントをｅ’とする。ｅとｅ’の組に対して、まず、ｅとｅ’が連接するかどうかが調べられる（ステップ４０３）。これは、ｅとｅ’の端点が同一であるか否かをチェックすることにより行われる。この際、端点に対して所定の閾値を設け、その範囲内に入るものを「連接する」と判断するように構成することもできる。
【００２８】
ステップ４０３において連接することが判断された場合は、ｅに対してｅ’が連接している旨が登録され（ステップ４０４）、処理はループ４０２の次のセグメントに進む。ステップ４０３において連接しないことが判断された場合は、次いで、ｅとｅ’が交差するかどうかが調べられる（ステップ４０５）。この交差するかどうかは、外積を求めることにより判断することができる。ステップ４０５において、ｅとｅ’が交差することが判断された場合は、交差関係として、ｅに対してｅ’が登録される（ステップ４０６）。その後、処理はループ４０２の次のセグメントに進む。一方、ステップ４０５において交差しないことが判断された場合には、ループ４０２の次のセグメントに進む。ループ４０２のすべてのセグメントに対する走査が完了したことが判断されると、処理はループ４０１の次のセグメントに進み、ループ４０１の全セグメントの処理が完了したら、ループ４０１は終了する。
【００２９】
上述した処理によって、ベクトルデータ内の接続情報を求めることができる。なお、ここでは接続情報を求めるために、全セグメントに対する走査を行っているが、交点算出の方法として多くのアルゴリズムが知られているので、これらのアルゴリズムを用いることもできる。
【００３０】
次に、水平セグメント同士および垂直セグメント同士に対する有向グラフ構造構築処理を説明する。水平セグメントと垂直セグメントに対する有向グラフ構造構築は、互いに独立して行うことができるため、以下では水平セグメントについて説明する。
【００３１】
まず、有向グラフ構造を抽出する際の頂点同士（セグメント同士）の辺での向き付け規則について説明する。ここでは、上下位置関係を表すｆａｍｉｌｙ関係とｆｒｉｅｎｄ関係という２つの関係で向き付けが実施される。
【００３２】
まず、ｆａｍｉｌｙ関係とは、図５（Ａ）に示す「菱」という文字を構成する「土」という文字のように、水平セグメント同士に接続情報算出処理において求められた接続関係がある場合を指す。したがって、「菱」という文字の草冠内の水平セグメントと、「土」の中の水平セグメントはｆａｍｉｌｙ関係ではない。ただし、接続関係がなくても、水平セグメントのＸ座標の範囲が一定以上共通しており、かつ、Ｙ座標の高さが所定の閾値以内にあるものをｆａｍｉｌｙ関係とすることもできる。また、水平セグメントにおいては、ｆａｍｉｌｙ関係を有するセグメントのうち、上側のセグメントをｐａｒｅｎｔ、下側のセグメントをｃｈｉｌｄと呼ぶ。これらは、文字ベクトルデータ内の各ベクトルの上下位置関係を表現する。なお、垂直セグメントについては、文字ベクトルデータ内の各ベクトルの左右位置関係を表現する。
【００３３】
また、ｆｒｉｅｎｄ関係とは、図５（Ｂ）に示す「闘」という文字に見られるように、同じ高さに存在する水平セグメント同士の関係をいい、文字ベクトルデータ内の各ベクトルの同一位置関係を表現する。そのため、「闘」という文字の門構えの一番上に存在する２本の水平セグメント同士は、ｆｒｉｅｎｄ関係となり、門構えの中に存在する「豆」と「寸」の文字の中の水平セグメント同士はｆｒｉｅｎｄ関係ではない。この関係を保持するためには、各水平セグメントに対して、ｃｈｉｌｄ関係にある水平セグメントを片方向リストで保持し、ｆｒｉｅｎｄ関係にある水平セグメントを双方向リストで保持するなどの方法を用いることができる。
【００３４】
図６は、上述した２つの関係を持つ有向グラフ構造を構築する有向グラフ構造構築処理を示すフローチャートである。まず、全セグメントを走査し、水平セグメントを抽出してリストで保持する（ステップ６０１）。ここで、水平セグメントかどうかは、その両端点が同じＹ座標の値を持つか否かによって判断される。なお、両端点のＹ座標の差が所定の閾値以内であるか否かによって判断するように構成することもできる。このようにして抽出された水平セグメントはＹ座標の昇順にソートされる（ステップ６０２）。このステップ６０２で得られた水平セグメントのソート済み双方向リストをＥとする。
【００３５】
ループ６０３では、リストＥを昇順に走査して、各セグメントｅが処理される。ループ６０３内では、さらにループ６０４の処理が行われ、ｅのＹ座標以下にあるセグメントが降順に走査される。これは、リストＥを逆順にたどることにより実現される。ここで、現在着目しているセグメントをｅ’とする。まず、ｅがｅ’のｐａｒｅｎｔかどうかが調べられる（ステップ６０５）。これは、ｅの接続関係をたどり、その中にｅ’が含まれるか否かを調べることにより行うことができる。この際、ｅと接続関係にあるセグメントを、ｅ’も接続関係として保持しているかどうかが確認される。また、ｅと接続関係にあるセグメントと連接関係にあるセグメントを、ｅ’が接続関係として保持する可能性もあるので、セグメントが幅優先探索で調べられ、ｅとｅ’にｆａｍｉｌｙ関係があるかどうかが調べられる。
【００３６】
ステップ６０５においてｅとｅ’にｆａｍｉｌｙ関係があることが判断された場合は、ｅにｅ’がｃｈｉｌｄとして登録される（ステップ６０６）。ここで、ｅと接続関係にあるセグメントからｃｈｉｌｄが得られたら、ループ６０４においてステップ６０５を再び実行する際は、このセグメントは検索の対象とされない。これは、１つのセグメントの接続関係から、複数のｃｈｉｌｄが得られる可能性があり、かつ、それらのｃｈｉｌｄにはさらにｆａｍｉｌｙ関係があるため、これらの間は直列なｆａｍｉｌｙ関係で結べばよいからである。これにより、探索回数を削減し、処理を高速化することができる。ステップ６０６が実行された後は、ループ６０４において次のセグメントが走査される。
【００３７】
ステップ６０５においてｅとｅ’にｆａｍｉｌｙ関係がないことが判断された場合は、ｅがｅ’のｆｒｉｅｎｄであるかどうかが調べられる（ステップ６０７）。このステップ６０７の処理は、ｅとｅ’のＹ座標が同じ、または、そのＹ座標の差が所定の閾値以内であり、かつ、ｅとｅ’の幅が同じ、または、その差が所定の閾値以内であるか否かを調べることにより行われる。ステップ６０７において、ｅとｅ’がｆｒｉｅｎｄ関係にあることが判断された場合は、ｆｒｉｅｎｄ関係である旨がｅとｅ’の各々に登録される（ステップ６０８）。その後、ループ６０４において次のセグメントが走査される。一方、ステップ６０７において、ｆｒｉｅｎｄ関係でないことが判断された場合は、ループ６０４において次のセグメントが走査される。ループ６０４が終了したら、次にループ６０３において次のセグメントが走査される。ループ６０３においてすべてのセグメントの走査が完了したら、有向グラフ構造構築処理は終了する。
【００３８】
以上の有向グラフ構造構築処理のフローチャートおよび説明において、「水平」と記載されている部分を「垂直」に、「上」を「右」に、「下」を「左」にというように読み替えれば、垂直セグメントについても上記と同様に有向グラフ構造を実現することができる。また、水平セグメントおよび垂直セメントの各々に対する有向グラフ構造構築処理では、各処理をシーケンシャルに実行することができるが、複数のＣＰＵを保持するシステムでは、各処理を並列に実行することもでき、この場合は、有向グラフ構造構築処理を高速化できる。
【００３９】
次に、グリッド・フィッティング部１０４で行われる処理の詳細について説明する。グリッド・フィッティング部１０４は、上述した有向グラフ構造を用いて、グリッド・フィッティング処理を実行する。グリッド・フィッティング処理も、有向グラフ算出部１０３での処理と同様に、水平セグメントおよび垂直セグメントの各々に対して独立に処理を実行できるので、以下では水平セグメントを例に挙げて説明する。なお、以下で説明する内容は垂直セグメントに対しても同様に実現できる。
【００４０】
図７は、グリッド・フィッティング部１０４で行われるグリッド・フィッティング処理を示すフローチャートである。グリッド・フィッティング部１０４では、まず、ループ７０１において、有向グラフ算出部１０３で実行される有向グラフ構造構築処理のステップ６０２で求められた双方向リストＥが使用される。ループ７０１では、リストＥの内部のセグメントが昇順に１つずつ処理される。ここで、着目しているリストのセグメントをｅとする。ループ７０１内では、まず、ｅにグリッド・フィッティングが必要であるかどうかが調べられる（ステップ７０２）。ここで、グリッド・フィッティングの要否の判断は、例えば、特許文献３に開示された技術で採用されている方法によって行うことができるが、この実施の形態１に係る文字描画装置では、その方法に依存しない。
【００４１】
ステップ７０２においてグリッド・フィッティングが必要であると判断された場合には、ｅのグリッド・フィッティング方法が調査される（ステップ７０３）。通常、グリッド・フィッティング処理は、あるルールに優先順位が決められているので、どのような規則でグリッド・フィッティングするかを求めることは可能である。また、ここで求めるグリッド・フィッティング方法はｃｈｉｌｄ関係にあるセグメントとの関係を視認性高く保つためのものである。なお、グリッド・フィッティング方法の詳細は、例えば、特許文献３に説明されているので、必要に応じて参照されたい。
【００４２】
次に、ループ７０５において、ｅとｆｒｉｅｎｄ関係にあるセグメントｅ’の各々のグリッド・フィッティング方法が調査される（ステップ７０６）。このようにして、ｅおよびｅとｆｒｉｅｎｄ関係にあるすべてのセグメントに対するグリッド・フィッティング方法が得られたら、次いで、その中ですべてのセグメントに対して適用可能なグリッド・フィッティング方法が選択され、そのグリッド・フィッティング方法による処理がｅおよびｅとｆｒｉｅｎｄ関係にあるすべてのセグメントに対して実行される（ステップ７０７）。ここで、すべてのセグメントに適用可能なグリッド・フィッティング方法を選択するのは、以下の理由による。すなわち、基本的にグリッド・フィッティング方法には優先度があり、優先度の高い方法をすべてのセグメントに対して実行できればよいが、優先度の低い方法しか適用できないセグメントには、それより優先度の高い方法は適用できない。逆に、優先度の高い方法が適用できるセグメントには、優先度の低い方法を割り当てることができるので、すべてのセグメントに適用可能なグリッド・フィッティング方法として、基本的に最も優先度の低い方法が適用される。上述した処理を、ループ７０１においてすべてのセグメントに対して実行することにより、ｆａｍｉｌｙ関係とｆｒｉｅｎｄ関係の双方を考慮し、文字のつぶれがなく、かつ、文字のバランスが整った文字を描画することができる。
【００４３】
上述した処理を実行すると、例えば図８に示すような結果が得られる。ここで、図８（Ａ）はｆｒｉｅｎｄ関係を考慮していない場合の例であり、門構えのバランスが崩れている。これに対し、図８（Ｂ）はｆｒｉｅｎｄ関係を考慮している場合の例であり、文字のバランスが整ったグリッド・フィッティング処理の結果が得られている。
【００４４】
なお、上述した水平ベクトルに対するグリッド・フィッティング処理と垂直ベクトルに対するグリッド・フィッティング処理とをシーケンシャルに実行することができるが、複数のＣＰＵを保持するシステムでは、これらを並列に実行することもでき、この場合は、グリッド・フィッティング処理を高速化できる。
【００４５】
以上説明したように、実施の形態１に係る文字描画装置によれば、低解像度の表示器に文字を表示するに際し、文字のつぶれ、または、バランスの崩れが発生しない、高品質なスケーラブルフォントの文字を描画することができる。また、ヒント情報をフォントデータ内に含まないため、フォントデータサイズを低減することができる。
【００４６】
実施の形態２．
上述した実施の形態１では、ｆｒｉｅｎｄ関係を求める際に、水平セグメントの場合はＹ座標の値がほぼ等しく、長さもほぼ等しいものを対象としている。そのため、漢字としては別の部首に存在するが、たまたま同じ高さに同じ長さで配置されたものも同様に分類することになる。そこで、実施の形態２では、部首として別である場合は、これらを分離するようにしている。
【００４７】
この実施の形態２に係る文字描画装置の構成は、実施の形態１に係る文字描画装置と同じである。また、実施の形態２に係る文字描画装置の動作は、実施の形態１に係る文字描画装置の動作と基本的に同じであるが、有向グラフ算出部１０３で行われる処理のステップ６０７の判定処理のみが異なる。
【００４８】
図９に示す「脇」という文字を例に挙げて説明する。脇という文字を見たときに、「月」の部分の下側の水平セグメントと、下側に存在する２つの「力」の水平セグメントが同じ位置にあり、かつ、長さもほぼ同じである。実施の形態１では、このような３つの水平セグメントをｆｒｉｅｎｄ関係と判定するが、これをｆｒｉｅｎｄ関係と判定すると、例えば「力」の位置移動によって、「月」の中の２つの水平セグメントのバランスが悪くなる。そこで、このように部首の違いを分離するルールとして、水平セグメントを図１０に示すように分断するセグメントが存在する場合は、水平セグメント同士にｆｒｉｅｎｄ関係、つまり同一位置関係を構築しない。
【００４９】
以下、具体的な処理手順を説明する。有向グラフ算出部１０３で行われる処理のステップ６０７において、水平セグメントｅとｅ’がｆｒｉｅｎｄ関係であるかどうかを判断する際に、ｅとｅ’以外のすべてのセグメントを調査し、水平セグメントを分断する辺が存在するかチェックする。この分断するかどうかのチェックは、外積を用いることにより行うことができる。
【００５０】
また、このような方法だけでは、例えば図５（Ｂ）に示すような門構えの真ん中の水平線同士をｆｒｉｅｎｄ関係にすることができない。そこで、分断セグメントより上に存在するｐａｒｅｎｔ、または下に存在するｃｈｉｌｄの水平セグメント間でｆｒｉｅｎｄ関係、つまり同一位置関係にある文字が発生した場合は、分断セグメントの判定は無視するようにする。これは、具体的には、有向グラフ構造構築処理を２回実行することにより実現できる。すでに関係が作られているものについては無視し、一度分断セグメントでｆｒｉｅｎｄ関係を構築しなかったセグメント対に対して、各ｐａｒｅｎｔおよびｃｈｉｌｄ間でｆｒｉｅｎｄ関係が存在するか否かを判定し、存在する場合には現在着目しているセグメント対に対しても、ｆｒｉｅｎｄ関係を構築する。
【００５１】
上述した手順を実行することにより、部首ごとに必要な部分に対してｆｒｉｅｎｄ関係を作ることができ、文字全体として必要な部分のバランスを揃えた文字描画を実現することができる。
【００５２】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００５３】
１０１  入力部、１０２  フォントデータロード部、１０３  有向グラフ算出部、１０４  グリッド・フィッティング部、１０５  ラスタライズ部、１０６  表示部、１１２  フォントデータベース。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
文字ベクトルデータ内の各ベクトルの上下左右位置関係および同一位置関係を表現する有向グラフで構築された有向グラフ構造を算出する有向グラフ算出部と、
前記有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下左右位置関係でのグリッド・フィッティング処理を行うグリッド・フィッティング部と、
前記グリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部と、
を備えた文字描画装置。
【請求項２】
前記有向グラフ算出部は、同一位置関係の有無を、水平ベクトルの場合は、Ｙ座標の差が所定の閾値以内であり、かつ、幅の差が所定の閾値以内であるか否か、垂直ベクトルの場合は、Ｘ座標の差が所定の閾値以内であり、かつ、幅の差が所定の閾値以内であるか否かによって判断することを特徴とする請求項１記載の文字描画装置。
【請求項３】
前記有向グラフ算出部および前記グリッド・フィッティング部の各々は、水平ベクトルに対する処理と垂直ベクトルに対する処理を並列に実行することを特徴とする請求項１記載の文字描画装置。
【請求項４】
前記有向グラフ算出部は、水平ベクトル同士または垂直ベクトル同士でベクトル間を分断するベクトルが存在する場合には、同一位置関係を構築しないことを特徴とする請求項２記載の文字描画装置。
【請求項５】
前記有向グラフ算出部は、水平ベクトル同士または垂直ベクトル同士でベクトル間を分断するベクトルが存在する場合であって、上下左右位置関係において同一位置関係がある場合は、該分断するベクトルを無視することを特徴とする請求項４記載の文字描画装置。
【手続補正書】
【提出日】平成27年6月19日(2015.6.19)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
この発明に係る文字描画装置は、文字ベクトルデータ内の水平ベクトル同士の上下位置関係と垂直方向の同一位置関係、および垂直ベクトル同士の左右位置関係と水平方向の同一位置関係を表現する有向グラフ構造を算出する有向グラフ算出部と、有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下方向または左右方向でのグリッド・フィッティング処理を行うグリッド・フィッティング部と、グリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部と、を備えている。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
文字ベクトルデータ内の水平ベクトル同士の上下位置関係と垂直方向の同一位置関係、および垂直ベクトル同士の左右位置関係と水平方向の同一位置関係を表現する有向グラフ構造を算出する有向グラフ算出部と、
前記有向グラフ構造を用いて、水平ベクトルおよび垂直ベクトルの各々に対して、同一位置関係にある文字ベクトルデータのすべてのセグメントに適用可能なグリッド・フィッティング方法で、上下方向または左右方向でのグリッド・フィッティング処理を行うグリッド・フィッティング部と、
前記グリッド・フィッティング処理がなされた文字ベクトルデータをラスタライズして文字画像にするラスタライズ部と、
を備えた文字描画装置。
【請求項２】
前記有向グラフ算出部は、同一位置関係の有無を、水平ベクトルの場合は、Ｙ座標の差が所定の閾値以内であり、かつ、幅の差が所定の閾値以内であるか否か、垂直ベクトルの場合は、Ｘ座標の差が所定の閾値以内であり、かつ、幅の差が所定の閾値以内であるか否かによって判断することを特徴とする請求項１記載の文字描画装置。
【請求項３】
前記有向グラフ算出部および前記グリッド・フィッティング部の各々は、水平ベクトルに対する処理と垂直ベクトルに対する処理を並列に実行することを特徴とする請求項１記載の文字描画装置。
【請求項４】
前記有向グラフ算出部は、水平ベクトル同士または垂直ベクトル同士でベクトル間を分断するベクトルが存在する場合には、同一位置関係を構築しないことを特徴とする請求項２記載の文字描画装置。
【請求項５】
前記有向グラフ算出部は、水平ベクトル同士または垂直ベクトル同士でベクトル間を分断するベクトルが存在する場合であって、上下左右位置関係において同一位置関係がある場合は、該分断するベクトルを無視することを特徴とする請求項４記載の文字描画装置。
【国際調査報告】
2013175520.tif 000013
2013175520.tif 000014
2013175520.tif 000015
2013175520.tif 000016