(57)【要約】【課題】文字間隔を縮める際に、デザイン性あるいは可読性の劣化を低減しつつメモリ使用量の増加を抑制する文字描画装置を提供する。【解決手段】隣り合う二つの文字である隣接文字を所定の描画領域に描画する際に、形状データ取得部３０３が、二つの文字の形状及び描画位置を含む形状データを取得し、隣接文字間隔算出部３０４が形状データを用いて隣接文字の文字間隔を算出する。隣接文字状態判定部３０５は、隣接文字の文字間の状態を所定基準との比較により検証する。文字間隔設定部３０６は検証の結果に応じて文字間隔を動的に調整し、文字描画部３０７は隣接文字を調整された文字間隔で描画領域に描画する。【選択図】図２
2017125934.tif 000002
【特許請求の範囲】
【請求項１】
描画対象の文字列のうち、隣り合う二つの文字の形状及び描画位置を含む情報を取得する取得手段と、
取得した情報を用いて前記隣り合う二つの文字の文字間隔を算出する間隔算出手段と、
前記隣り合う二つの文字の文字間の状態を所定基準との比較により検証する検証手段と、
前記検証の結果に応じて前記文字間隔を調整する調整手段と、
前記隣り合う二つの文字を前記調整された文字間隔で前記描画領域に描画する描画手段と、
を有することを特徴とする、文字描画装置。
【請求項２】
前記間隔算出手段は、ゼロ値を含む文字間隔を算出することを特徴とする、
請求項１に記載の文字描画装置。
【請求項３】
前記取得手段が取得する情報は、当該文字を構成するパスの制御点と該パスの描画態様を指示する１つ以上のコマンドを含むパスコマンド情報とを含んでおり、
前記検証手段は、前記取得手段が取得する情報に含まれる前記制御点と前記パスコマンドの情報とに基づいて当該文字における所定の探索範囲を取得するとともに、当該探索範囲における当該文字が占める割合を算出し、算出した割合に応じた係数を前記検証の結果として出力するものであり、
前記調整手段は、前記間隔算出手段により算出された文字間隔に前記係数を反映させることにより当該文字間隔を調整することを特徴とする、
請求項１又は２に記載の文字描画装置。
【請求項４】
前記探索範囲は、前記隣り合う二つの文字のうち、それぞれ隣り合う他方の文字の領域に近い一方の部分領域であることを特徴とする、
請求項３に記載の文字描画装置。
【請求項５】
前記検証手段は、前記探索範囲の面積に対する前記文字の描画領域の面積の比較結果により前記割合を算出することを特徴とする、
請求項４に記載の文字描画装置。
【請求項６】
前記検証手段は、前記割合に応じて前記文字間隔の疎密判定を行い、該疎密判定の結果を前記係数として出力する疎密判定手段を有することを特徴とする、
請求項３に記載の文字描画装置。
【請求項７】
前記疎密判定手段は、前記割合が所定の閾値以上の場合は前記文字間隔の調整を要する密状態、それ以外は前記調整を要しない疎状態と判定し、各状態に応じて異なる前記係数を出力することを特徴とする、
請求項６に記載の文字描画装置。
【請求項８】
前記疎密判定手段は、前記疎密判定の結果を変数とする関数の算出結果に応じた前記係数を出力することを特徴とする、
請求項６に記載の文字描画装置。
【請求項９】
前記検証手段は、書字方向に垂直となる方向の前記隣り合う二つの文字の接触状態を判別し、判別した接触状態と所定基準状態とを比較することにより、接触状態に応じて異なる係数を前記検証の結果として出力するものであり、
前記調整手段は、前記間隔算出手段により算出された文字間隔に前記係数を反映させることにより当該文字間隔を調整することを特徴とする、
請求項１又は２に記載の文字描画装置。
【請求項１０】
前記取得手段が取得する情報は、当該文字を構成するパスの制御点と該パスの描画態様を指示する１つ以上のコマンドを含むパスコマンド情報とを含み、かつ、前記書字方向がｘｙ直交座標系において左から右に向かう場合、
前記検証手段は、隣接する最初の文字の右端と次の文字の左端の１つ以上の制御点のｘｙ座標値をデータとして持つ端部制御点リストを生成し、
生成された端部制御点リストに基づいて前記隣り合う二つの文字が面接触状態、面接触状態ではないが部分的かつ離散的に接触する状態、前記隣り合う二つの文字が部分的かつ同じ高さで連続的に接触する状態のいずれかまたはそれ以外の状態を判別し、判別した状態に応じて異なる前記係数を出力することを特徴とする、
請求項９に記載の文字描画装置。
【請求項１１】
前記検証手段は、前記端部制御点リストの最初の要素のｘ座標と前記制御点の１つとを比較して前記制御点のｘ座標値が大きい場合、前記端部制御点リストの要素０番目に制御点座標を代入して次の前記制御点を読み込み、
前記制御点のｘ座標値が小さい場合は、前記端部制御点リストの要素０番目のｘ座標と制御点のｘ座標値が一致するかを判定し、一致する場合は新たな制御点のｘ座標値を前記端部制御点リストに追加し、一致しない場合は、次の前記制御点を読み込み、最終的に、前記端部制御点リストの生成が終わった後、当該端部制御点リストの制御点のｙ座標をもとに前記制御点を昇順又は降順に並べ替え、これにより、前記いずれかの状態の判別を可能にすることを特徴とする、
請求項１０に記載の文字描画装置。
【請求項１２】
前記検証手段は、前記端部制御点リストの制御点同士を直線又は曲線で描画するためのパスコマンド情報から同一平面の制御点かどうかを判別するための平面情報を当該端部制御点リストに付加し、該平面情報に基づいて前記いずれかの状態を判別可能にすることを特徴とする、
請求項１１に記載の文字描画装置。
【請求項１３】
前記検証手段は、検出した接触状態を変数とする関数の算出結果に応じた前記係数を出力することを特徴とする、
請求項９に記載の文字描画装置。
【請求項１４】
前記隣り合う二つの文字の少なくとも一方の文字が図形であることを特徴とする、
請求項１ないし１３のいずれか一項に記載の文字描画装置。
【請求項１５】
文字列を所定の描画領域に描画する装置が実行する方法であって、
描画対象の文字列のうち、隣り合う二つの文字の形状及び描画位置を含む情報を取得し、取得した前記情報を用いて前記隣り合う二つの文字の文字間隔を算出するとともに、前記隣り合う二つの文字の文字間の状態を所定基準との比較により検証し、前記検証の結果に応じて前記文字間隔を動的に調整し、前記隣り合う二つの文字を前記調整された文字間隔で前記描画領域に描画することを特徴とする、
文字描画方法。
【請求項１６】
コンピュータを請求項１ないし１４のいずれか一項に記載された文字描画装置として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字を所定の描画領域に描画する技術に関する。
【背景技術】
【０００２】
近年、スマートフォンやスマートウォッチに代表される携帯デバイスが普及している。この種の携帯デバイスにおいて、サイズの小さい表示領域に文字列を表示する際に文字列の文字間隔を短くして表示する手段がとられる場合がある。        
【０００３】
図１２は、文字間隔を短く調整した例を示す。図１２（ａ）は、平仮名文字列を通常の文字間隔で表示したものと文字間隔を詰めたものとを上下に並べた図である。図１２（ｂ）は、漢字を含む文字列をそれぞれ図１２（ａ）と同じ文字間隔で表記し、上下に並べたものである。それぞれ矢印で示す通り、文字列の長さを短くすることができる。
【０００４】
文字間隔を調整する従来技術として、主にアルファベット表記などの欧文文字において用いられる「カーニング」（kerning）と呼ばれる手法が知られている。カーニングでは、予め文字同士の全組み合わせに対して文字間隔がどの位なのかを表す情報を予め取得しておく。そして、その組み合わせ文字が表示されたとき、該当する文字間隔で文字の表示を行う。また、特許文献１には、１文字毎に文字の余白部分を削り、削った文字同士を使って表示することで、文字間隔を調整した文字列を表示する手法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−１１８５４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
英語や仏語などの欧文に比べて、日本語や中国語で用いられる仮名文字や漢字は、文字数が格段に多い。そのため、カーニングの技術では、表示デバイスの描画領域に描画する際に、メモリ使用量が膨大となるため、そのままではリソースの小さい組み込み機器などに適用することができない。特許文献１に開示された技術では、画数が多い文字、例えば漢字では文字間隔が過度に詰まり、デザイン性あるいは可読性が劣化する場合がある。
【０００７】
本発明は、このような問題を解決し、文字間隔を調整する際に、デザイン性あるいは可読性の劣化を低減しつつメモリ使用量の増加を抑制する文字描画装置を提供することを主たる課題とするものである。
【課題を解決するための手段】
【０００８】
本発明を適用したある実施の態様では、描画対象の文字列のうち、隣り合う二つの文字の形状及び描画位置を含む情報を取得する取得手段と、取得した情報を用いて前記隣り合う二つの文字の文字間隔を算出する間隔算出手段と、前記隣り合う二つの文字の文字間の状態を所定基準との比較により検証する検証手段と、前記検証の結果に応じて前記文字間隔を調整する調整手段と、前記隣り合う二つの文字を前記調整された文字間隔で前記描画領域に描画する描画手段と、を有することを特徴とする、文字描画装置が得られる。
【発明の効果】
【０００９】
本発明によれば、文字間隔を調整する際に、デザイン性あるいは可読性の劣化を低減しつつメモリ使用量の増加を抑制する文字描画装置を提供することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係る文字描画装置のハードウェア構成図。
【図２】第１実施形態に係る文字描画装置の機能ブロック構成図。
【図３】第１実施形態における文字描画方法の処理手順を示すフローチャート。
【図４】文字領域及び探索範囲の決定手順を示すフローチャート。
【図５】文字間隔の求め方を示す説明図。
【図６】隣接文字における探索範囲の説明図。
【図７】（ａ），（ｂ）は文字領域の算出方法の説明図。
【図８】（ａ）〜（ｃ）は隣接文字の接触状態の例示図。
【図９】第２実施形態における文字描画方法の処理手順を示すフローチャート。
【図１０】（ａ），（ｂ）同一平面情報の付加を説明する概念図。
【図１１】（ａ）〜（ｃ）は端部制御点リストの制御点と接触状態の関係説明図。
【図１２】（ａ），（ｂ）は文字間隔を調整する例を示す説明図。
【発明を実施するための形態】
【００１１】
以下、隣り合う二つの文字である隣接文字を所定の描画領域、例えばフレームバッファに描画する文字描画装置の実施の形態例を、図面を参照して説明する。この文字描画装置は、従来技術のように文字毎にカーニング情報を紐付けておくのではなく、動的に最適な文字間隔を決定するものである。
【００１２】
［第１実施形態］
第１実施形態では、隣接文字の文字間の状態を所定基準との比較により検証し、検証の結果に応じて文字間隔を調整する場合の例を説明する。第１実施形態に係る文字描画装置のハードウェア構成例を図１に示す。この文字描画装置は、バス２５０を介してＣＰＵ２００、主記憶装置２１０、描画装置２２０、入力装置２４０が接続されたコンピュータを有する。
【００１３】
ＣＰＵ（Central Processing Unit）２００は、本発明のコンピュータプログラムを読み込んで実行することにより、文字間隔の決定に関する種々の機能を形成する。主記憶装置２１０は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等を含むメモリである。主記憶装置２１０のうち、ＲＯＭは変更を要しないデータやパラメータ等が読み出し専用として記憶される。ＲＡＭは、ＣＰＵ２００が外部記憶装置２３０から取得したデータ等を一時的に保存する領域として用いられる。描画装置２２０は、ユーザに提示する表示デバイスであり、描画用の画素がマトリクス状に配列されたフレームバッファと、このフレームバッファに描画された文字列を表示する出力装置とを含んで構成される。出力装置は、ＬＣＤ（Liquid Crystal Display）や有機ＥＬ（Electroluminescence）などのモニタを搭載する。外部記憶装置２３０は、文字列のデータや上記コンピュータプログラムを記録するストレージである。入力装置２４０は、キーボードやタッチパネル等であり、データの入力を外部から行うデバイスである。
【００１４】
図２は、ＣＰＵ２００が本発明のコンピュータプログラムを実行することにより形成される機能ブロックの構成図である。
文字列取得部３００は、描画対象となる文字列を示す情報を取得する（以下、単に「文字列を取得する」という）。文字列は、外部記憶装置２３０又は入力装置２４０を通じて取得する。隣接文字抽出部３０１は、取得した文字列を分割し、隣接文字を抽出する。形状データ取得部３０３は、隣接文字の各々の文字の形状及び描画位置を含む形状データを取得する取得手段として機能する。形状データは、フォントデータ、文字形状及び制御点（座標データ）、制御点間の描画態様すなわち直線描画か曲線描画のどちらで結ぶかを指示するコマンドセットであるパスコマンド情報を含む。それ以外にも字形の最小矩形であるバウンディングボックス（Bounding Box）やフォントないしグリフの送り幅（Advanced width：ＡＷ）といった描画パラメータも形状データに含まれる。あるいは、形状データと関連付けられる。なお、送り幅は、隣接する文字の描画開始位置を示すパラメータである。形状データは、形状データ記憶部３０２に存在する。そのため、形状データ取得部３０３は、隣接する二つの文字についての形状データを形状データ記憶部３０２から読み込み、取得する。
【００１５】
隣接文字間隔算出部３０４は、取得した形状データを用いて隣接文字の文字間隔を算出する間隔算出手段として機能する。算出法については後述するが、ゼロ値を含む文字間隔を算出する点が特徴の一つである。
【００１６】
隣接文字状態判定部３０５は、隣接文字の文字間の状態を所定基準との比較により検証する検証手段として機能する。所定基準は、予め外部記憶装置２３０に設定されている。第１実施形態では、文字における所定の探索範囲を取得するとともに、当該探索範囲における当該文字が占める割合を算出する。そして算出した割合に応じた係数、より具体的には文字間隔の疎密判定の結果を検証の結果として出力する。文字間隔設定部３０６は、隣接文字状態判定部３０５による検証の結果に応じて文字間隔を動的に調整する調整手段として機能する。文字描画部３０７は、文字間隔設定部３０６で求めた文字間隔で文字を描画装置２２０の描画領域に描画する描画手段として機能する。
【００１７】
次に、上記文字描画装置が実行する文字描画方法について説明する。この方法は、二つの文字の形状及び描画位置を含む情報（便宜上「形状データ」という）を取得し、取得した形状データを用いて隣接文字の文字間隔を算出する。そして、隣接文字の文字間の状態を所定基準との比較により検証し、検証の結果に応じて文字間隔を動的に調整し、隣接文字を、調整された文字間隔で描画領域に描画することを特徴とする。
具体的な処理手順について、図３のフローチャートを参照して説明する。
まず、文字列取得部３００が、文字列を取得し、それを主記憶装置２１０のＲＡＭに一時的に保存する（Ｓ１０１）。本実施形態では、取得された文字列を構成する複数の文字のうち、隣接しあう２文字を順次処理対象として、文字間隔を決定する処理を進める。そのためにＲＡＭには、取得された文字列のうち、次に注目する文字が文字列の何文字目かを表す数値Ｎが記憶される。文字列取得部３００は、ＲＡＭに記憶されたＮを「０」で初期化する（Ｓ１０２）。次に、隣接文字抽出部３０１が、取得した文字列の文字を先頭から一つずつ読み込む。そして、Ｎ文字目とＮ＋１文字目が存在するかどうか、すなわち隣接文字が存在するかどうかを判定する（Ｓ１０３，Ｓ１０４）。隣接文字が存在しない場合（Ｓ１０３：Ｎ，Ｓ１０４：Ｎ）、処理を終了する。隣接文字が存在する場合（Ｓ１０３：Ｙ，Ｓ１０４：Ｙ）、隣接文字を構成する各文字に対する描画処理を開始する（Ｓ１０５）。
【００１８】
描画処理では、まず、形状データ取得部３０３が、注目する文字のコードポイントを取得する（Ｓ１０６）。コードポイント(code point)は文字を割り当て得る個々の点であり、良く知られているUnicodeではUnicodeスカラ値が該当する。形状データ取得部３０３は、また、コードポイントを通じて、外部記憶装置２３０から形状データを取得する（Ｓ１０７）。これらの情報を文字列を構成する文字のそれぞれで取得する（Ｓ１０８）。
【００１９】
形状データが取得されると、隣接文字間隔算出部３０４は、隣接文字について例えば送り幅などの描画パラメータを用いて文字間隔調整前の文字間隔を求める（Ｓ１０９）。文字列が横書き（書字方向がｘｙ直交座標系のｘ軸方向）の場合、取得した形状データから、隣接文字の左側の文字の送り幅ＡＷとその文字において最も右側にある制御点の座標値（ｘ）を用いて文字間隔を求める。この処理を図５を参照して詳しく説明する。図５の例では「国」という文字について、左下が描画の原点（０）であり、横軸がｘ軸である。パスの制御点は、「国」という文字を構成する直線同士または直線と曲線が交わる部分（５１，５２，５３）に存在する。この場合、その最も右側にある制御点は、丸で囲われた２つの制御点５２，５３となる。送り幅ＡＷは、原点からｘ軸方向に所定幅で指定される値である。よって、文字間隔ｄは、送り幅ＡＷと最も右側である制御点５２，５３のｘ座標値との差で表されるものとなる。隣接文字間隔算出部３０４は、このようにして文字間隔ｄを算出する。
【００２０】
文字間隔ｄが算出されると、隣接文字状態判定部３０５は、隣接文字の文字間の状態を検証する（Ｓ１１０）。この処理の内容を、図４を参照して詳しく説明すると次のようになる。
隣接文字状態判定部３０５は、まず、隣接文字における各文字の占める割合を求めるための所定の探索範囲の情報を取得する（Ｓ２０１）。探索範囲は、形状データに含まれるバウンディングボックスの座標から自動的に定めることができる。設計者が予め決めておいても良い。自動的に定める場合、隣接文字の１文字目のバウンディングボックスの横幅の１／４を、探索範囲の横幅にするといったもので良い。隣接文字が「国語」のときの探索範囲の例を図６に示す。図６では、バウンディングボックスを目立たせるために、便宜上、文字自身をグレーで示してある。この例では、「国」と「語」それぞれのバウンディングボックス７１、７２から横幅を求め、その横幅の１／４となる斜線部分を探索範囲７１１，７２１としている。それぞれの文字の縦方向の線は、バウンディングボックスの横幅を４分割したときの境界を表す。このように、第１実施形態では、それぞれ隣り合う他方の文字の領域に近い一方の文字の部分領域を探索範囲としている。なお、バウンディングボックス７１，７２に代えて、送り幅ＡＷを使って探索範囲を設定しても構わない。
【００２１】
図４に戻り、隣接文字状態判定部３０５は、隣接文字の１文字毎に着目し（Ｓ２０２）、その文字に対する探索範囲を決定していく。すなわち、図３のＳ１０５において取得されている形状データより、制御点とパスコマンド情報を取得する（Ｓ２０３）。次に、制御点とパスコマンド情報からＳ２０１で取得した探索範囲で描画する画素の集合となる文字（「文字領域」と呼ぶ）の割合がどの程度かを特定するためにスキャン処理を行う（Ｓ２０４）。すなわち、制御点とパスコマンド情報から文字を所定のキャンバス上に出力し、キャンバス上に出力した文字に対してスキャンをすることで、文字領域を求める。この処理の概念図を図７に示す。
【００２２】
図７（ａ）は、「口」という文字に対する制御点８１とパスコマンド情報とを矢線により視覚的に表したものである。この制御点とパスコマンド情報から、図７（ｂ）に表す文字がキャンバス上に出力される。つまり、制御点とパスコマンド情報より、例えばスキャンライン毎にスキャン範囲内の文字領域を抽出する（Ｓ２０５）。その文字領域に対して、図７（ｂ）に示すスキャンライン（スキャン位置を表す線）を上下に移動させ、塗りつぶされている（画素が存在する）文字領域を加算していく（Ｓ２０６〜Ｓ２０８）。このようにして、文字毎の文字領域と探索範囲とを求める（Ｓ２０９）。なお、第１実施形態において、文字領域を求める方法は、上記方法に限定されない。他には、制御点とパスコマンド情報とスキャンラインの位置関係から、どこが文字領域かを描画位置における座標値の比較で直接的に求めても良い。
【００２３】
文字領域と探索範囲が求まると、隣接文字状態判定部３０５は、探索範囲の面積（描画領域の面積）に対する文字領域の面積（有意な画素の領域の面積）の比較結果（比率など）を文字領域の割合として算出する。図５に示した「国」の文字の場合、文字領域の割合は０．６１となる。以上が文字領域の割合を求める処理である。
【００２４】
図３に戻り、隣接文字状態判定部３０５は、上記のようにして各文字の文字領域の割合を閾値処理することで、隣接文字の関係を比較し（Ｓ１１１）、文字間隔の疎密判定を行う。閾値は、システム設計者が予め定めておくが、その限りでない。隣接文字状態判定部３０５は、文字領域の割合が閾値以上の場合、文字間隔の調整を要する密状態と判定し、それ以外は、文字間隔の調整を要しない疎状態と判定し、各状態に応じて異なる係数を出力する。
文字間隔設定部３０６は、疎密判定の結果に応じた係数を文字間隔に反映させ、該文字間隔を動的に調整する。調整量は、Ｓ１０６で求めた元々の文字間隔に対して係数を反映させることで決定される。具体的には次式より調整量を決定する。
調整量＝α×interval   （０≦α≦１）
intervalはＳ１０６で求めた元々の文字間隔である。αは係数（「文字間隔係数」と呼ぶ）であり、予め複数の値のものが用意され、主記憶装置２１０のＲＯＭなどに記憶されている。
【００２５】
本実施形態では、密状態と判定された場合、α＝０．５（文字間隔をある程度狭くする）とし（Ｓ１１２）、疎状態と判定された場合はα＝０．１（より多くの文字間隔を狭くする）とする（Ｓ１１３）。検証結果は、密状態と判定された場合、α＝０．５とした時の文字間隔が出力される（Ｓ１９）。疎状態と判定された場合、α＝０．１とした時の文字間隔が出力される（Ｓ１１４）。なお、文字間隔係数を閾値処理で求める代わりに、疎密判定の結果を変数とする関数の算出結果に応じた係数を文字間隔係数として出力しても良い。例えば、次式で文字間隔係数を求めても良い。
α＝Ｃ１＋１／（Ｃ２ｒ）
ただし、Ｃ１とＣ２は任意定数、ｒは上記Ｓ２０９で求めた文字領域の割合である。
【００２６】
文字描画部３０７は、Ｓ１０９とＳ１１０で決定した文字間隔を描画パラメータに設定して文字を描画する。このように、本実施形態では、隣接文字における文字間隔の疎密判定を行い、文字間隔を動的に調整する。そのため、文字毎にカーニング情報を紐付けておく必要がなく、ＲＡＭに記憶させる情報量の増加を抑制しながら、デザイン性あるいは可読性を大きく劣化させない程度に文字列の長さを縮めることができる。そのため、描画処理時に記憶すべき情報の量をカーニングを行った場合よりも減少させることができるので、例えば組み込み機器で狭い描画領域に文字列を表示させる場合であっても可読性の高い文字列の描画が可能となる。
【００２７】
なお、本実施形態では１文字づつ描画する場合の例を説明したが、別の方法として全文字での処理が終わってから、文字列を１度の描画で出力しても構わない。また、文字列を例に挙げて説明したが、隣接文字の少なくとも一方がアイコンのような図形の場合であっても第２実施形態の描画方法は適用が可能である。また、第１実施形態では書字方向が左から右に向かう横書きの文字列を対象としていたが、縦書きの文字列での文字間隔にも同様に適用が可能である。
【００２８】
［第２実施形態］
第２実施形態では、隣接文字の接触状態を検証して文字間隔を調整する場合の例について説明する。文字描画装置のハードウェア構成および機能ブロックの構成は、第１実施形態と同様であるため割愛する。なお、第２実施形態の文字描画装置が行う処理は、図３のＳ１０１〜Ｓ１０６までと同一であるため、第１実施形態と異なる点を中心に説明する。
【００２９】
図８は、第２実施形態で検知する隣接文字の接触状態の説明図である。第２実施形態では、隣接文字の接触状態を分類するために、まず隣接文字の接触量を考慮する。接触量とは、隣接文字の接触する箇所が、書字方向に垂直となる一次元方向に持つ幅の大きさをいう。図８（a）は、隣接文字が線幅以下の接触量で部分的かつ離散的に接触する離散接触状態のパターンである。図８（ｂ）は、隣接文字が面接触状態のパターンである。ここでの面接触は、一般的にボルトとナットの接触方式を「点接触」あるいは「面接触」という場合の「面接触」の考え方に準じる。ただし、本実施形態で隣接文字の接触量を考えるのは書字方向に垂直となる一次元方向であり、奥行き方向の次元は存在しないため、見た目には図８（ｂ）のように、線幅よりも長い「線」で接触している隣接文字が、面接触のパターンに相当する。従って、本実施形態で面接触とは、図８（ｂ）のように、隣接文字が線幅よりも多くの接触量を持つパターンである。例えば、立体的にデザインされた装飾文字であれば、面接触のパターンは、文字通り「面」で接触することが見た目にも理解され易い。図８（ｃ）は隣接文字が部分的（接触量が線幅以下）で、かつ、同じ高さで連続的に接触する部分連続接触状態のパターンである。ここでいう高さとは、図５に示すｙ軸方向を言う。すなわち同じ高さとは、少なくとも文字の境界付近において、ｙ座標が略一致することを言う。第２実施形態では、このような書字方向に垂直となる方向の隣接文字の接触状態を検出し、検出した接触状態と所定基準状態とを比較することにより、接触状態に応じて異なる係数を検証の結果として出力する。また、文字間隔設定部３０６が、文字間隔に上記係数を反映させることにより当該文字間隔を調整する。
例えば、デザイン性あるいは可読性にそれほど影響を与えない図８（a）のような接触状態であれば、接する程度まで文字詰めをしてもそれほど問題ないとして文字間隔を短めにする。一方、デザイン性あるいは可読性にある程度、影響を与えるような図８（ｂ），（ｃ）のような場合は、文字詰め量を緩めて文字間隔を設定する。なお、接触状態は、図８（ａ）〜（ｃ）以外の状態を含めて分類しても良い。
【００３０】
第２実施形態における文字描画方法の手順を図９のフローチャートを参照して説明する。  第２実施形態において、各文字の形状データは、当該文字を構成するパスの制御点と該パスの描画態様を指示する１つ以上のコマンドを含むパスコマンド情報とを含む。また、各文字の形状データが、当該文字を構成するパスの制御点と該パスの描画態様を指示する１つ以上のコマンドを含むパスコマンド情報とを含み、かつ、書字方向がｘｙ直交座標系において左から右に向かうものとする。また、隣接文字状態判定部３０５が、隣接する最初の文字の右端と次の文字の左端の１つ以上の制御点のｘｙ座標値をデータとして持つ端部制御点リストを生成し、この端部制御点リストを用いて接触状態を検証するものとする。図９において、Ｓ３０１からＳ３１９までを隣接文字状態判定部３０５が実行し、Ｓ３２０からＳ３２３までを文字間隔設定部３０６が実行する。
【００３１】
図９を参照して説明する。隣接文字状態判定部３０５は、隣接文字の１文字目、２文字目というように、順次描画処理を行う（Ｓ３０１）。まず、対象とする文字について、制御点およびパスコマンド情報を取得する（Ｓ３０２）。また、端部制御点リストを「０」で初期化する（Ｓ３０３）。端部制御点リストは、１文字目であれば最右端であり、２文字目であれば最左端の制御点の座標値をデータとして持つ配列である。例えば図８（a）の「圏」という文字の場合、端部制御点リストは、国構えの右側の上下の点の座標値のセットとなる。
【００３２】
隣接文字状態判定部３０５は、取得した制御点に１つずつアクセスするループ制御を行う（Ｓ３０４）。すなわち、端部制御点リストの最初の要素のｘ座標（xy[0].x）と制御点（xy.x)の１つとを比較する（Ｓ３０５）。ここで、座標系は図５と同じく、横方向をｘ軸、縦方向をｙ軸である。制御点のｘ座標値が大きい場合、端部制御点リストの要素０番目に制御点座標を代入し、次の制御点を読み込む（Ｓ３０７）。一方、制御点のｘ座標値が、端部制御点リストの要素０番目のｘ座標より大きくはない場合は、端部制御点リストの要素０番目のｘ座標と制御点のｘ座標値が一致するかの判定を行う（Ｓ３０６）。一致する場合、制御点データの座標値を端部制御点リストに追加する（Ｓ３０８）。一方、一致しない場合は、次の制御点データを読み込む。最終的に、端部制御点リストの生成が終わったのち、リスト内の制御点のｙ座標をもとに制御点データを昇順又は降順で並べ替えておく。これを利用して、上記いずれかの接触状態を判別可能にする。
【００３３】
次に、端部制御点リスト内の制御点について、連続する制御点同士を結ぶパスコマンド情報から、それらが同じ文字（隣接文字のうち何れか片方の文字）の周囲を成す面のうち、同一平面上の制御点かどうかを判別するための平面情報を付加する（Ｓ３０９）。ここで端部制御点リストに含まれる制御点は、Ｓ３０６において、ｘ座標が一致していることが既に確認された制御点である。従って、Ｓ３０９の処理で判定される同一平面とは、少なくともｙ軸に平行な面である。ただし、立体的な装飾がないような平面的な文字の描画では、奥行き方向の次元は意味を持たないため、ここではy軸に沿った直線で考えることができる。Ｓ３０９で判定される内容は、対象となっている２つの制御点が、同じ文字の周囲のうちｙ軸方向に平行な線分状の部分に存在する２点であるかを判定することに相当する。言い換えれば、処理中の文字のエッジの中で、その該制御点同士を接続する部分が、ｙ軸に平行な線分であるかを判定する。
【００３４】
本実施形態では、端部制御点リスト内の制御点について、連続する制御点同士を順次選んで上記判定を繰り返すことになる。そして、判定結果に応じて、同一平面にあると判定された制御点同士に、平面情報として、その制御点が属する平面毎に異なる識別子を付与する。そして、続く処理では、Ｓ３０９の判定結果に応じて付与された平面情報に基づいていずれかの状態（接触状態）を判別可能となる。
【００３５】
図１０は、同一平面情報の付加を説明する概念図である。図１０（ａ）は、Ｓ３０２で取得する制御点とパスコマンド情報の端部制御点リストを表している。また図１０（ｂ）は、Ｓ３０８で作成する端部制御点リストを表す。図１０（ａ）は、制御点と各制御点をどう結ぶかのコマンドセットの例示図である。コマンドセットは、制御点Ａと制御点Ｂをどう結ぶか（描画するか）を指示するコマンドないしその組み合わせであり、例えば直線描画であれば直線で結ぶというコマンドが付加される。一方、図１０（ｂ）の端部制御点リストは、Ｓ３０６〜Ｓ３０９の処理結果として、端部を構成する制御点としてＡ、Ｂ及びＤが選択された場合を表す。制御点Ａ、Ｂのパスコマンド情報を参照すると、「直線描画」とあるのでＡとＢは同一平面上と判断できる。よって、同一平面を表す平面情報を制御点Ａ,Ｂそれぞれに付加する。平面情報は、一例として、平面毎に異なる番号であるとする。例えば、本実施形態では端点制御点リストに列挙されるうち、制御点Ａ，Ｂが同一平面にあることから「０」を割り当てている。ここで、制御点Ｂの次に存在するはずの制御点Ｃは、端点制御点リスト（図１０（ａ））に含まれない。これは、制御点Ｃのｘ座標が、制御点Ａ，Ｂのｘ座標と一致しなかったことを意味する。すなわち、制御点Ｃは、制御点Ｂと同一平面上には存在しない。さらに言えば、制御点Ａ，Ｂが存在した同一平面は、制御点Ｂで途切れたことが解る。よって、制御点Ｃの次の制御点Ｄは、端点制御点リスト（図１０（ａ））に含まれるが、制御点Ｂと同一の平面上にある訳ではなく、ｘ座標が同じ別の平面に存在すると言える。従って、制御点Ａ，Ｂの平面情報「０」とは異なる、別の平面情報を意味する「１」（又は「２」でもよい）を割り当てる。以上の処理を、隣接文字を構成する文字それぞれで行う。
【００３６】
その後、これまでに求めた隣接文字を構成する各文字の端点制御点リストを参照する（Ｓ３１０，Ｓ３１１）。そして、隣接文字の接触面の長さを算出する（Ｓ３１２）。なお、接触面の長さとは、隣接文字の面接触する部分の、ｙ軸方向の長さである。本実施形態で描画する文字は二次元であるので、見た目には縦線の長さに相当する。以下では、接触面の長さを「接触長」という。接触長は端部制御点リストの制御点と平面情報に基づいて算出する。算出方法について、図１１に示す隣接文字の第１文字目と第２文字目の端部制御点リスト（図１１（ａ）および図１１（ｂ））をもとに説明する。
図１１（ｃ）は、端部制御点リストの各制御点のｙ座標を数直線上に並べたものである。上の数直線が１文字目、下の数直線が２文字目である。図１１（ｃ）に示すようにｙ座標の大小関係から接触する部分を求めることができる。図１１（ｃ）では接触する部分の長さがＬ１とＬ２であり、最終的に１文字目と２文字目の接触長Ｌは、Ｌ＝Ｌ１＋Ｌ２となる。図１１で説明したように、隣接文字それぞれの端部制御点リストを参照して、接触長を算出する。
【００３７】
隣接文字状態判定部３０５は、Ｓ３１２で求めた接触長を基に隣接文字の接触状態を検証する（Ｓ３１３〜Ｓ３１８）。例えば、接触長が所定の閾値Ｔｈ以上の場合（Ｓ３１９：Ｙ）は面接触状態にあると判定する。例えば図８（ｂ）の状態と判定する。この場合、文字間隔係数α＝０．５を文字間隔設定部３０６に出力する（Ｓ３２０）。面接触状態のときは接触する部分が多いため、なるべく文字間隔を空けて描画することになる。
また、接触長が閾値Ｔｈ以下の場合（Ｓ３１９：Ｎ）、接触長と端部制御点（接触する部分のｙ方向の位置）とが一致するかどうかを判定する（Ｓ３２１）。一致する場合（Ｓ３２１：Ｙ）、図８（ｃ）で示したような部分連続接触状態と判定し、文字間隔係数α＝０．３を文字間隔設定部３０６に出力する（Ｓ３２２）。
接触長と端部制御点とが一致しない場合（Ｓ３２１：Ｎ）、図８（ａ）で示したように線幅以下で離散的に接する部分離散接触状態と判定し、文字間隔係数α＝０．１を文字間隔設定部３０６に出力する。文字描画部３０７は、これらの文字間隔係数αが反映された文字間隔で隣接文字をフレームバッファに描画する。
【００３８】
なお、第２実施形態では文字間隔係数αを閾値処理により求める例について説明したが、これに限定されず、接触応対を変数とする関数の算出結果に応じた文字間隔係数αを用いても良い。例えば、次式で文字間隔係数αを決定する。
α＝Ｃ１＋Ｌ／（Ｃ２ＨＢ）
ここで、Ｃ１とＣ２は任意定数である。またＨＢは隣接文字のBounding
Boxの高さである。隣接文字でＨＢが異なることがあるが、そのときは小さい方の値をＨＢとすれば良い。Ｌは、上記した接触長である。
【００３９】
図９の処理で文字間隔係数αが決まった後は、図３と同様に文字間隔を定め、第１実施形態の図３のＳ１１２で説明した処理で文字を描画する。このような描画処理を行うことで、隣接文字の接し方で文字間隔を調整することができる。
このように、第２実施形態では、隣接文字の接触状態及び接触する部分の位置関係に応じて決定された文字間隔係数αを用いて文字間隔を動的に調整するので、第１実施形態と同様、文字毎にカーニング情報を紐付けておく必要がない。そのため、ＲＡＭに記憶させる情報量の増加を抑制しながらデザイン性あるいは可読性が劣化しない程度に文字列の長さを縮めることができる。
なお、縦書きの文字列にも適用可能である点、隣接文字の少なくとも一つが図形である場合にも適用可能である点は、第１実施形態と同じである。
【００４０】
［他の実施形態］
本発明は、コンピュータプログラム若しくは記録媒体（記憶媒体）等としての実施態様をとることも可能である。また、本発明の目的は、以下のようにすることによっても達成される。すなわち、前述した各実施形態の機能ブロックを実現するコンピュータプログラムのプログラムコード（コンピュータプログラム）を記録した記録媒体（または記憶媒体）を、端末に供給する。かかる記憶媒体は、コンピュータ読み取り可能な記憶媒体である。そして、その端末のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成する。
【図１】
2017125934.tif 000003
【図２】
2017125934.tif 000004
【図３】
2017125934.tif 000005
【図４】
2017125934.tif 000006
【図５】
2017125934.tif 000007
【図６】
2017125934.tif 000008
【図７】
2017125934.tif 000009
【図８】
2017125934.tif 000010
【図９】
2017125934.tif 000011
【図１０】
2017125934.tif 000012
【図１１】
2017125934.tif 000013
【図１２】
2017125934.tif 000014