(57)【特許請求の範囲】
【請求項１】
スケーラブルフォントデータを記憶する記憶手段と、前記記憶手段に記憶された所定サイズのスケーラブルフォントデータを設定サイズのビットマップフォントデータへ変換する際の線幅と線間距離を設定する設定手段と、前記線幅及び前記線間距離の合計と前記所定サイズのスケーラブルフォントデータを前記設定サイズのスケーラブルフォントデータに変換したときの該スケーラブルフォントデータに含まれる複数のストロークに対する各隣接ストローク間の距離とを比較する比較手段を備え、その比較結果に応じて前記ストロークを移動することにより前記隣接ストローク間の距離を補正することを特徴とするフォント処理装置。
【請求項２】
前記比較手段は、隣接する３本のストロークに対して前記比較を行うことを特徴とする請求項1に記載のフォント処理装置。
【請求項３】
前記比較手段による比較結果に応じて、前記３本のストロークの内、内側にあるストロークを移動することにより、前記隣接ストローク間の距離を補正することを特徴とする請求項２に記載のフォント処理装置。
【請求項４】
前記比較手段による比較結果に応じて、前記３本のストロークの内、内側にあるストロークの線幅を補正することを特徴とする請求項２あるいは請求項３に記載のフォント処理装置。
【請求項５】
前記隣接ストローク間の距離の値を前記線幅の値に応じて変化させることを特徴とする、請求項１あるいは請求項２あるいは請求項３に記載のフォント処理装置。
【請求項６】
コンピュータにフォント処理機能を付与するプログラムを格納したコンピュータ読み取り可能な記憶媒体において、該プログラムは、
スケーラブルフォントデータを記憶するデータベースと、前記データベースに記憶された所定サイズのスケーラブルフォントデータを設定サイズのビットマップフォントデータへ変換する際の線幅と線間距離を設定する設定処理工程と、前記線幅及び前記線間距離の合計と前記所定サイズのスケーラブルフォントデータを前記設定サイズのスケーラブルフォントデータに変換したときの該スケーラブルフォントデータに含まれる複数のストロークに対する各隣接ストローク間の距離とを比較する比較処理工程と、その比較結果に応じて前記ストロークを移動することにより前記隣接ストローク間の距離を補正する補正処理工程を有することを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項７】
前記比較処理工程では、隣接する３本のストロークに対して前記比較が行われることを特徴とする請求項６に記載のコンピュータ読み取り可能な記憶媒体。
【請求項８】
前記補正処理工程では、前記比較処理工程による比較結果に応じて、前記３本のストロークの内、内側にあるストロークを移動することにより、前記隣接ストローク間の距離の補正が行われることを特徴とする請求項７に記載のコンピュータ読み取り可能な記憶媒体。
【請求項９】
前記補正処理工程では、前記比較処理工程による比較結果に応じて、前記３本のストロークの内、内側にあるストロークの線幅の補正が行われることを特徴とする請求項７あるいは請求項８に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１０】
前記補正処理工程では、前記隣接ストローク間の距離の値を前記線幅の値に応じて変化させることを特徴とする、請求項６あるいは請求項７あるいは請求項８に記載のコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、携帯情報端末、パーソナルコンピュータ、ワードプロセッサ等の電子機器において、任意の文字サイズの文字表示を行うフォント処理装置および当該フォント処理機能をコンピュータに付与するプログラムを格納した記憶媒体に関する。
【０００２】
【従来の技術】
従来の芯線ストロークフォントやアウトラインフォントといったベクトルフォントでは、文字サイズに拘わらず、1種類のフォントデータを元に比例計算により、多様なサイズの文字を表示したり、印刷していた。例えば、アウトラインフォントから線幅の太い文字を生成する方式が特開平０５−３１３６２９号公報に開示されている。この方法は、アウトラインフォントの輪郭線を輪郭の中心から外側へ移動することにより、線幅の太いフォントを生成するものである。
【０００３】
また、本出願人の出願による発明（特開平１１−１０９９４３号公報）は、低画素サイズ用のフォントデータと高画素サイズ用の２種類のフォントデータから任意の中間画素サイズ用のフォントデータを生成する文字複雑度補間処理と、隣接ストローク間の距離を補正してストロークの接触によるつぶれを除去する線間補正処理を用いて、任意の低画素フォントを生成するものである。
【０００４】
【発明が解決しようとする課題】
従来のアウトラインフォントの輪郭線を移動することにより線幅の太いフォントを生成する方法では、小さなサイズの文字や画数の多い複雑な文字において、文字がつぶれてしまい、文字品質が大きく劣化するという欠点があった。
本出願人の出願による発明（特開平１１−１０９９４３号公報）は、低画素サイズ用のフォントデータと高画素サイズ用のフォントデータから任意の中間画素サイズ用のフォントデータを生成する文字複雑度補間処理と、隣接ストローク間の距離を補正してストロークの接触によるつぶれを除去する線間補正処理を用いて、小さな文字サイズにおいても文字品質の劣化が極力少ないフォントを生成しようとするものであり、図３はこの手法を用いて生成した文字の例である。
【０００５】
しかし、この手法では1ドット線幅の文字では、文字のつぶれを起こさずに所望の小さなサイズの文字フォントを生成することは可能であるが、生成された文字フォントの線幅を単純に太くしてしまうと文字のつぶれが発生する場合がある。例えば、図４は、単純に線幅を太くしたために潰れが発生した例である。
本発明は、このような事情に鑑みなされたものであり、隣接ストローク間の距離を補正した後、線幅を補正することにより、補正データを付加することなく、小サイズや複雑な文字においてもつぶれがなく視認性の高い、線幅の異なる文字フォントデータを生成する装置を提供することを目的とする。
【０００６】
【問題点を解決するための手段】
本発明は、隣接ストローク間の距離を補正した後、隣接ストローク間の距離が線幅と線間の合計より小さく、文字の潰れが発生しない程度にストロークを移動することが可能な場合にストロークを移動する。また、ストロークが移動できない場合は、線幅を細く設定する。これにより、文字のつぶれを除去し、かつ、線幅の太い文字を生成すること特徴とするものであり、上記目的を達成するために、
請求項１に記載のフォント処理装置は、スケーラブルフォントデータを記憶する記憶手段と、記憶手段に記憶された所定サイズのスケーラブルフォントデータを設定サイズのビットマップフォントデータへ変換する際の線幅と線間距離を設定する設定手段と、線幅及び線間距離の合計と所定サイズのスケーラブルフォントデータを設定サイズのスケーラブルフォントデータに変換したときの該スケーラブルフォントデータに含まれる複数のストロークに対する各隣接ストローク間の距離とを比較する比較手段を備え、その比較結果に応じてストロークを移動することにより隣接ストローク間の距離を補正し、所望のフォントデータを生成するものである。
【０００７】
請求項２に記載のフォント処理装置は、比較手段において、隣接する３本のストロークに対して前記請求項１に記載の比較が行われるものである。
請求項３に記載のフォント処理装置は、請求項２に記載のフォント処理装置において、比較手段による比較結果に応じて、前記３本のストロークの内、内側にあるストロークを移動することにより、前記隣接ストローク間の距離を補正するものである。
【０００８】
請求項４に記載のフォント処理装置は、請求項２あるいは請求項３に記載のフォント処理装置において、比較手段による比較結果に応じて、前記３本のストロークの内、内側にあるストロークの線幅を補正することを特徴とする。
請求項５に記載のフォント処理装置は、請求項１あるいは請求項２あるいは請求項３に記載のフォント処理装置において、前記隣接ストローク間の距離の値を前記線幅の値に応じて変化させるものである。
【０００９】
請求項６に記載の発明は、コンピュータにフォント処理機能を付与するプログラムを格納したコンピュータ読み取り可能な記憶媒体において、該プログラムは、スケーラブルフォントデータを記憶するデータベースと、前記データベースに記憶された所定サイズのスケーラブルフォントデータを設定サイズのビットマップフォントデータへ変換する際の線幅と線間距離を設定する設定処理工程と、前記線幅及び前記線間距離の合計と前記所定サイズのスケーラブルフォントデータを前記設定サイズのスケーラブルフォントデータに変換したときの該スケーラブルフォントデータに含まれる複数のストロークに対する各隣接ストローク間の距離とを比較する比較処理工程と、その比較結果に応じて前記ストロークを移動することにより前記隣接ストローク間の距離を補正する補正処理工程を有することを特徴とする。
【００１０】
請求項７に記載のコンピュータ読み取り可能な記憶媒体は、請求項６に記載のコンピュータ読み取り可能な記憶媒体において、前記比較処理工程において、隣接する３本のストロークに対して前記比較が行われることを特徴とする。
【００１１】
請求項８に記載のコンピュータ読み取り可能な記憶媒体は、請求項７に記載のコンピュータ読み取り可能な記憶媒体において、前記補正処理工程では、前記比較処理工程による比較結果に応じて、前記３本のストロークの内、内側にあるストロークを移動することにより、前記隣接ストローク間の距離の補正が行われることを特徴とする。
【００１２】
請求項９に記載のコンピュータ読み取り可能な記憶媒体は、請求項７あるいは請求項８に記載のコンピュータ読み取り可能な記憶媒体において、前記補正処理工程では、前記比較処理工程による比較結果に応じて、前記３本のストロークの内、内側にあるストロークの線幅の補正が行われることを特徴とする。
【００１３】
請求項１０の発明では、請求項６あるいは請求項７あるいは請求項８に記載のコンピュータ読み取り可能な記憶媒体において、前記補正処理工程では、前記隣接ストローク間の距離の値を前記線幅の値に応じて変化させることを特徴とする。
【００１５】
【発明の実施の形態】
図を用いて本発明の一実施例を説明する。
尚、本実施例においては、図１０に示すように、文字の左上を原点とし、Ｘ軸の正の向きが水平右向き、Ｙ軸の正の向きが垂直下向きとなるような座標系を用いる。
【００１６】
図１は、本発明を実施するための装置の構成図である。
ＣＰＵ（101）は、ＲＯＭ（103）に格納されたプログラムにしたがって処理を行う。また、ＲＯＭ（103）には、文字の芯線ストロークを表す座標データも格納されている。ＲＡＭ（102）は、ＣＰＵ（101）がプログラムを実行する際のワークエリアやビットマップ化したデータを格納するエリアとなる。キーボード（104）は生成するフォントの文字コードや展開サイズを入力する。プリンタ（105）は、生成したビットマップデータの出力に用いる。ディスプレイ（107）は生成した文字データを表示する。さらに、外部記憶装置（106）はフロッピー（登録商標）ディスクドライブやハードディスクドライブなどであり、文字座標データの格納や、生成した文字データの保存に用いることができる。
【００１７】
上記ＲＯＭ（103）には、図２に示す流れに沿って文字フォントデータを生成する処理プログラムが格納されている。
まず、キーボード（104）から文字コードが入力され（ステップS201）、展開サイズが入力される（ステップS202）と、ＲＯＭ（103）から文字の芯線ストロークを表す座標データを取り出し（ステップS203）、指定の展開サイズが得られるように座標計算を行い（ステップS204）、線幅補正を行った（ステップS205）後に、ビットマップ変換する（ステップS206）。
【００１８】
ステップS204の座標計算処理は、図５の流れ図で表される。図5においてSは出力サイズ、lwは線幅、spは線間距離を表す。
ステップS501では、ステップS203で取得した座標データのメッシュサイズmを(S-lw+1)に変倍し、かつX軸,Y軸両方向に(lw-1)/2平行移動する。メッシュサイズをSに変倍しないのは、最も外側の線を線幅lwにしたときに、出力サイズを超えないようにするためである。また、平行移動するのは、ストロークを中心として線幅lwの線を描画した時に出力サイズを超えないようにするためである。
【００１９】
次に、ステップS502において隣接する前ストロークとの距離dを求める。ステップS503ではdが0である場合、現在のストロークに対しての処理を終了し、ステップS514へ移行し、次のストロークの処理を行う。ステップS503においてdが0で無いときは、ステップS504へ移行し、dの小数点以下を切り捨てる。次にステップS505において、前のストロークとの距離がｄとなるように移動した場合の次のストロークとの距離d1を求める。
【００２０】
ステップS506では、距離dが２より小さいかどうかを比較し、dが2未満の場合はステップS507へ移行し、dが2以上場合はステップS510へ移行する。ここで、dが2未満となる場合は、ストロークが接しているため、文字のつぶれが発生することを意味する。逆にdが2以上の場合、隣接するストローク間に空白があり、文字のつぶれが発生しないことを表す。文字のつぶれが発生する場合、ステップS507において、d1が2以下かどうかを比較しd1が2以下の場合はステップS508へ移行し、d1がより大きい場合はステップS509へ移行する。ここでd1が2以下の場合は、次のストロークと接しているため真中のストロークを移動することにより線間を確保することができない。このため、図６に示すように、前ストロークとの距離dが0となるように線を移動し（ステップS513）、みかけ上のストロークの省略を行う。
【００２１】
ステップS507において、d1が２より大きい場合は、次のストロークとの間に十分な空白があるため、真中の線を移動することにより文字のつぶれを除去することが可能である。このため、図7に示すように、前ストロークとの距離dが２となるように移動し(ステップS509、S513)、線間を確保する。ステップS506において、線間dが2以上の場合は、S510へ移行し、dが3以上であるかどうかを比較する。dが3未満の場合は、前ストロークとの線間が文字のつぶれが生じない最小限であるため、線の移動を行わずステップS514へ移行し、次のストロークの処理へ移る。
【００２２】
ステップS510においてdが3以上の場合は、前ストロークとの間に十分な空白があるため、ステップ511へ移行し、次の線間d1が１であるかどうかを比較する。d1が１でない場合は、線間d、d1の両方において文字のつぶれが発生しないため、線の移動を行わず、次のストロークの処理（ステップS514）へ移行する。ステップS511において、線間d1が１の場合、次のストロークと接しており文字のつぶれが生じる。このため、図8に示すように、次ストロークとの距離d1が２となるように真中の線を移動する（ステップS512、S513）。最後にステップS514へ移行し、全ストロークに対して処理を終了していない場合は、次のストロークに対してステップS502以降を繰り返す。全てのストロークに対して処理を行った場合は、ステップS205へ移行する。図5の処理により、線幅１の文字において文字のつぶれがない状態となっている。
【００２３】
次にステップS205において、線幅補正を行う。線幅補正処理は、図11の流れ図で表される。図11でｉは線幅補正対象となるストロークの番号、w0は標準線幅、lwは補正後の線幅、w[i]はストローク番号iの線幅を表す。
ステップS1101では、線幅補正対象となるストローク番号を0に、補正後の線幅を標準線幅に初期化する。
【００２４】
次に、ステップS1102において隣接する次ストロークとの距離dを求める。ステップS1103では隣接ストローク間距離dが0かどうかを比較する。比較の結果、dが0の場合は、ステップS1114へ移行しストローク番号iの線幅w[i]をlwの値に設定し、次のストロークの処理を行う。ステップＳ1103においてdが0でない時は，ステップS1104で小数点以下を切り捨てる。
【００２５】
次に、ステップS1105でdと、標準線幅w0と線間spの合計とを比較する。dの方が等しいか大きい場合は、線間が十分あいているため線幅をw0にしても文字がつぶれない。そこで、ステップS1106、S1114で線幅をw0に設定し、次のストロークの処理を行う。ステップS1105でdの方が小さい場合は、ステップS1107へ移行する。ステップS1107ではストローク番号が0の場合、前ストロークが存在しないため、ステップS1110、S1114で線幅を(d-sp)に設定する。ステップS1107においてストローク番号が0でない場合は、隣接する前ストロークとの距離d1を求める（ステップS1108）。
【００２６】
次に、ステップS1109において、前ストロークとの距離d1と、前ストロークの線幅w[i-1]と線間spの合計とを比較する。比較の結果、d1が等しいかまたは小さい場合は、ストロークの移動を行わず、ステップS1110、S1114にて線幅に（d-sp）を設定する。ステップS1109の比較の結果、d1の方が大きい場合、前ストローク側の線間に余裕があるため、ストロークの移動を行う。
【００２７】
ステップS1111において、線幅を（d+d1-w[i-1]-2sp）に設定し、d1が（w[i-1]+sp）となるようにi番目のストロークを移動する（ステップS1112、S1113）。
最後に線幅をw[i]に設定し（ステップS1114）、次のストロークの処理を行う。ステップS1116にてすべてのストロークについて処理が終了した場合は、ステップS206へ移行する。
【００２８】
ステップS206では、以上で得られた座標データからビットマップデータへの変換を行う。この変換の際に、ステップＳ205で設定した線幅を用いてストロークを描画する。これには、 JAMES D. FOLEY著「コンピュータ・グラフィックス」（日本コンピュータ協会）に記述されているBresenhamの線分アルゴリズム、及びDAVID D.ROGERS著「実践コンピュータグラフィックス」（日刊工業新聞社）のキャラクタマスクが適用できる。図9は、lw=2、sp=1として得られた出力サイズ20ドットの「書」のビットマップデータである。
【００２９】
尚、本実施例では、芯線ストロークフォントのメッシュサイズを縦横ともにmで同一としたが、これは異なるサイズとすることも可能である。
同様に出力フォントサイズも縦横ともにSで同一としたがこれを異なる値として、縦横の比率が異なる文字を出力することも可能である。
また、線幅lwも、線間距離spも縦横共に同一としたが、これらを異なる値として縦横の線幅、線間が異なる文字を出力することも可能である。
【００３０】
本実施例では、ステップS203においてメッシュサイズmのストロークフォントデータを(S-lw+1)に変倍した後、(lw-1)/2平行移動している。この際の変倍は、線幅lwを描画したときに出力サイズSを超えないようにするためであり、(S-lw+1)以下であれば同様の効果を得ることが可能である。
また、本発明の実施例では、線幅がXY方向で同じでかつ、線幅lwが偶数の時XY軸の正の方向へlw/2ドット、負の方向へ(lw-1)/2ドット線幅を変化させるための平行移動量を(lw-1)/2としているが、平行移動量は線幅を変化させたときの各軸の負方向への移動量に等しければ変更することが可能である。例えば、常に線幅をXY軸正方向へ変化させる場合は、つまり線幅lwでは常に各軸の正方向へ線幅をlw変化させる場合、平行移動量は0となる。当然、X及びY軸方向の線幅が異なれば、X及びY方向それぞれの平行移動量も異なる。
【００３１】
また、本実施例では、ストロークフォントを用いたが、アウトラインフォントにおいても同様な処理が可能である。アウトラインフォントにおいて本発明を実施する際は，線を表す両端の輪郭線の中間にストロークがあると仮定して線間調整を行う。
【００３２】
【効果】
本発明を用いれば、線幅と線間距離を用いて、隣接する線間の距離を補正した後に、更に線幅を補正することにより、補正データを追加せずに、つぶれがなく視認性の高い、線幅の異なるフォントを生成する装置を提供することができる。
【図面の簡単な説明】
【図１】  本発明の一実施例を示すための図である。
【図２】  本発明の処理方法全体の流れを説明するための図である。
【図３】  線幅及び線間を考慮せず線間補正を行ったフォントデータの一例である。
【図４】  線幅及び線間を考慮せず線間補正を行ったフォントデータの線幅を2ドットに太めたフォントデータの一例である。
【図５】  本発明の線幅及び線間を用いた線間補正の流れを説明するための図である。
【図６】  前ストロークとの距離が0となるようにストロークを移動することを説明するための図である。
【図７】  前ストロークとの距離が２となるようにストロークを移動することを説明するための図である。
【図８】  次ストロークとの距離が２となるようにストロークを移動することを説明するための図である。
【図９】  本発明によって生成した線幅２ドットのフォントの一例である。
【図１０】  本発明で使用する座標系を説明するための図である。
【図１１】  本発明の線幅補正の流れを説明するための図である。
【符号の説明】
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
１０４  キーボード
１０５  プリンタ
１０６  外部記憶装置
１０７  ディスプレイ
【図１】
0003819688.tif 000002
【図２】
0003819688.tif 000003
【図３】
0003819688.tif 000004
【図４】
0003819688.tif 000005
【図５】
0003819688.tif 000006
【図６】
0003819688.tif 000007
【図７】
0003819688.tif 000008
【図８】
0003819688.tif 000009
【図９】
0003819688.tif 000010
【図１０】
0003819688.tif 000011
【図１１】
0003819688.tif 000012