(57)【要約】【課題】グリフ部分の範囲をあらかじめ記憶しなくても、グリフが描画される領域を特定する点の座標を計算すること。【解決手段】フォント描画装置は、２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、グリフの描画を指示する描画指示が入力される指示入力手段と、描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、２次元座標系における対象画素の座標を描画位置として計算する描画位置計算手段と、対象画素として特定された画素の座標の最大値および最小値を記憶する最大最小記憶手段と、描画位置計算手段により計算された描画位置と最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により最大値および最小値を更新する最大最小更新手段とを有する。【選択図】図２
2009265329.tif 000002
【特許請求の範囲】
【請求項１】
２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、
グリフの描画を指示する描画指示が入力される指示入力手段と、
前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、
前記２次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、
前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、
前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段と
を有するフォント描画装置。
【請求項２】
前記メモリのうち、前記描画位置により特定される記憶領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画手段と、
前記メモリに書き込まれたデータにより特定される前記輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段と、
前記塗り潰し手段により前記塗り潰し処理が行われた後で、前記メモリに記憶されたマトリクス状に配置された複数の画素のデータのうち、前記最大最小記憶手段に記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを出力する出力手段と
を有する請求項１に記載のフォント描画装置。
【請求項３】
前記グリフデータは、前記輪郭線の向きをさらに示し、
前記塗り潰し処理においては、２本の輪郭線によって囲まれる領域については前記２本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される
ことを特徴とする請求項２に記載のフォント描画装置。
【請求項４】
前記塗り潰し処理は、前記マトリクスの１つの行または１つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理である
ことを特徴とする請求項３に記載のフォント描画装置。
【請求項５】
グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、
前記記憶装置に記憶されたグリフデータのうち１つのグリフデータにより示されるグリフの描画を指示する描画指示を出力する制御装置と、
２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、前記制御装置から前記描画指示が入力される指示入力手段と、前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記２次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置と
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アウトラインフォントを描画する技術に関する。
【背景技術】
【０００２】
グリフ（文字の可視化表現またはその構成部分から大きさ及び意匠を正規化した抽象表現）の形をコンピュータ上で表現するためのデータ形式として、アウトラインフォントが知られている。アウトラインフォントは、グリフの形状を、基準となる点の座標と輪郭線の集まりとして表現する形式である。グリフの輪郭線の描画および塗り潰しは、レンダリングメモリ上で、マトリクス状に配置された複数の画素を単にとして行われる。実際にグリフが描画される範囲、すなわち、グリフを包含する外接矩形により切り取られる領域は、このマトリクスのうち一部分であり、しかもその範囲はグリフ毎に異なっている。グリフが描画される範囲が分からないと、レンダリング用メモリからＶＲＡＭ（Video Random Access Memory）にデータを転送する際、実際にグリフが描画されていない部分も含めてマトリクス全体を転送しなければならなくなり、不必要なメモリアクセスが生じる。ここで、特許文献１は、ストロークフォントにおいて、グリフ部分の範囲をあらかじめ記憶する技術を開示している。
【０００３】
【特許文献１】特開平５−２５７４５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
グリフ部分の範囲をグリフ毎に記憶する構成とすると、その範囲を特定する４点（水平方向および垂直方向の最大値および最小値）の座標を記憶する記憶領域が各グリフについて必要になる。さらに、グリフデータをビットマップデータに変化する際に、その４点についてもビットマップデータに変化する必要が生じる。すなわち、少なくとも４回の計算をしなければならない。さらに、複数のパーツグリフを組み合わせて表現される複合グリフを描画する際には、複合グリフについても独自に、グリフ部分の範囲を特定する４点の座標を記憶する必要がある。
【０００５】
これに対し本発明は、グリフ部分の範囲をあらかじめ記憶しなくても、グリフが描画される領域を特定する点の座標を計算する技術に関する。
【課題を解決するための手段】
【０００６】
本発明は、２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、グリフの描画を指示する描画指示が入力される指示入力手段と、前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、
前記２次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置を提供する。
このフォント描画装置によれば、描画位置の最大値および最小値が計算される。
【０００７】
好ましい態様において、このフォント描画装置は、前記メモリのうち、前記描画位置により特定される記憶領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画手段と、前記メモリに書き込まれたデータにより特定される前記輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段と、前記塗り潰し手段により前記塗り潰し処理が行われた後で、前記メモリに記憶されたマトリクス状に配置された複数の画素のデータのうち、前記最大最小記憶手段に記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを出力する出力手段とを有してもよい。
このフォント描画装置によれば、最大値および最小値により特定される領域が出力される。
【０００８】
別の好ましい態様において、前記グリフデータは、前記輪郭線の向きをさらに示し、前記塗り潰し処理においては、２本の輪郭線によって囲まれる領域については前記２本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定されてもよい。
このフォント描画装置によれば、グリフデータの向きに応じて塗り潰し処理が行われる。
【０００９】
さらに別の好ましい態様において、前記塗り潰し処理は、前記マトリクスの１つの行または１つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理であってもよい。
このフォント描画装置によれば、対象線と輪郭線とが交わる向きに応じて増減するパラメータに応じて画素の階調が決定される。
【００１０】
また、本発明は、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、前記記憶装置に記憶されたグリフデータのうち１つのグリフデータにより示されるグリフの描画を指示する描画指示を出力する制御装置と、２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、前記制御装置から前記描画指示が入力される指示入力手段と、前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記２次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置を有する情報処理装置を提供する。
情報処理装置によれば、描画位置の最大値および最小値が計算される。
【発明を実施するための最良の形態】
【００１１】
１．構成
図１は、本発明の一実施形態に係る情報表示装置１のハードウェア構成を示す図である。情報表示装置１は、情報処理装置の一例である。ＣＰＵ（Central Processing Unit）１０は、情報表示装置１の各要素を制御する制御装置である。ＲＯＭ（Read Only Memory）２０は、情報表示装置１の起動・動作に必要なプログラムやデータを記憶する不揮発性の記憶装置である。本実施形態において、ＲＯＭ２０は、フォントに関するデータとしてグリフデータを記憶している。グリフデータとは、グリフの輪郭線および輪郭線の向きを示すデータである（詳細は後述）。ＲＡＭ（Random Access Memory）３０は、ＣＰＵ１０がプログラムを実行する際にワークエリアとして用いられる記憶装置である。表示体４０は、供給されたデータに従った画像を表示する装置、この例ではＥＰＤ（Electrophoretic Display）である。ＥＰＤは、記憶性表示体の一例である。ＶＲＡＭ（Video Random Access Memory）５０は、表示するデータの格納に用いられる記憶装置である。表示制御装置６０は、ＣＰＵ１０の制御下で、ＶＲＡＭ５０に記憶されているデータに従って表示体４０を制御する装置である。入力装置７０は、ユーザからの指示、データ等の入力に用いられる装置、例えば、ボタン（書き換えボタンやページ送りボタン、決定ボタンなど）・キーパッド・ホイール・レバー・タッチパネル・ペンデバイスなどである。バス８０は、要素間のデータや信号の伝送に用いられる伝送路である。バスコントローラ９０は、バス８０に接続されているすべての装置（モジュール）について、バス権（バスを使用する権利）の調停を行う装置である。フォントプロセッサ１００は、フォントの描画に用いられる装置であり、フォント描画装置の一例である。
【００１２】
ＣＰＵ１０・ＲＯＭ２０・ＲＡＭ３０・ＶＲＡＭ５０・表示制御装置６０・フォントプロセッサ１００は、バス８０に直接接続されている。この構成により、ＣＰＵ１０・表示制御装置６０・フォントプロセッサ１００は、それぞれ独立してメモリ（ＲＯＭ２０・ＲＡＭ３０・ＶＲＡＭ５０）にアクセスすることができる。ＣＰＵ１０とフォントプロセッサ１００間の信号線は、ＣＰＵ１０からフォントプロセッサ１００への描画開始命令の供給、およびフォントプロセッサ１００からＣＰＵ１０への描画完了通知の供給に用いられる。ＣＰＵ１０および表示制御装置６０間の信号線は、ＣＰＵ１０から表示制御装置６０への画面更新（すなわち表示体４０への転送命令）の供給に用いられる。この信号線は、表示体４０として液晶ディスプレイ等、記憶性表示体でない表示体を用いた場合には不要である。
【００１３】
図２は、フォントプロセッサ１００の構成を示す図である。フォントプロセッサ１００は、ＣＰＵ１０からの描画指示に応じてグリフを描画する。すなわち、フォントプロセッサ１００は、ＣＰＵ１０からの描画指示に応じて、グリフのデータをＶＲＡＭ５０に書き込む。メインコントローラ１０１は、フォントプロセッサ１００の各要素を制御する。メインコントローラ１０１は、レジスタ１０２を有する。レジスタ１０２は、例えば、メインコントローラ１０１が読み出すべきデータのアドレスを記憶するのに用いられる。フォント描画コントローラ１０３は、フォント描画に必要な情報、例えばアフィン変換パラメータを記憶する。フォント描画コントローラ１０３はさらに、与えられた命令がＤｒａｗＣｈａｒなのかＤｒａｗＣｈａｒＦｉｌｌなのかを記憶する。ＤｒａｗＣｈａｒは、輪郭描画処理の実行を指示する命令である。ＤｒａｗＣｈａｒＦｉｌｌは、輪郭描画および塗り潰し処理の実行を指示する命令である。輪郭計算モジュール１１０（輪郭計算手段の一例）は、描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する計算（輪郭計算処理）を行う。描画位置計算モジュール１１１（描画位置計算手段の一例）は、２次元座標系における対象画素の座標を描画位置として計算する（描画位置計算処理）。レジスタ１１２（最大最小記憶手段の一例）は、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に対象画素として特定された画素の、描画位置としての座標の最大値および最小値を記憶する。また、描画位置計算モジュール１１１は、計算された描画位置と、記憶されている最大値および最小値とを比較し、比較結果により最大値および最小値を更新する最大最小更新手段としての機能を有する。
【００１４】
輪郭描画モジュール１０４（輪郭描画手段の一例）は、命令ＤｒａｗＣｈａｒまたは命令ＤｒａｗＣｈａｒＦｉｌｌが与えられた場合に、輪郭描画処理を行う。輪郭描画処理は、ワークメモリ１０５のうち、描画位置により特定される記憶領域に、輪郭線が通る画素であることを示すデータを書き込む処理である。塗り潰しモジュール１０６（塗り潰し手段の一例）は、ワークメモリ１０５に書き込まれたデータにより特定される輪郭線の内部を塗り潰す塗り潰し処理を行う。塗り潰しモジュール１０６は、さらに、塗り潰し処理が行われた後で、ワークメモリ１０５に記憶された複数の画素のデータのうち、記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを、ＶＲＡＭ５０に転送する出力手段としての機能を有する。バスインターフェースモジュール１０７は、バス８０を介してＣＰＵ１０・ＲＯＭ２０・ＲＡＭ３０等の他の要素との間で信号やデータの入出力を行う。バスインターフェースモジュール１０７は、ＣＰＵ１０から描画指示が入力される指示入力手段として機能する。メインバス１０８およびサブバス１０９は、要素間のデータや信号の伝送に用いられる伝送路である。
【００１５】
輪郭描画モジュール１０４と塗り潰しモジュール１０６との間の信号線は、輪郭描画の終了の通知に用いられる。フォント描画コントローラ１０３と塗り潰しモジュール１０６との間の信号線は、ワークメモリ１０５のビット幅、データの範囲などの情報の伝送に用いられる。塗り潰しモジュール１０６とメインバス１０８との間の信号線は、背景データの伝送、塗り潰し処理の結果の伝送に用いられる。メインバス１０８と輪郭計算モジュール１１０との間の信号線は、グリフデータの伝送に用いられる。フォント描画コントローラ１０３と描画位置計算モジュール１１１との間の信号線は、アフィン変換パラメータの伝送に用いられる。輪郭計算モジュール１１０と描画位置計算モジュール１１１との間の信号線は、輪郭線を示す情報の伝送に用いられる。フォント描画コントローラ１０３と描画位置計算モジュール１１１との間の信号線は、最大値・最小値の伝送に用いられる。描画位置計算モジュール１１１と輪郭描画モジュール１０４との間の信号線は、輪郭線が通る画素の座標を示す差分情報の伝送に用いられる。特に説明しないがこれら以外の信号線も、必要なデータや命令の伝送に用いられる。また、２つのワークメモリ１０５は交互に用いられ、処理の高速化が図られる。
【００１６】
図３は、情報表示装置１の外観を示す図である。情報表示装置１は、筐体の前面に表示体４０の表示面、および入力装置７０としてのボタン群を有する。
【００１７】
２．動作
続いて、情報表示装置１の動作を説明する。ここではまず、グリフデータの構成について概説し、さらに本実施形態の転送領域計算方法について概説した後で、情報表示装置１の動作を詳細に説明する。
【００１８】
２−１．グリフデータの構成
図４は、グリフデータを例示する図である。グリフデータは、グリフの輪郭（アウトライン）を描くのに用いられる情報を含んでいる。この例で、グリフデータは、端点を特定する情報として点の座標と、２つの端点を結ぶ直線または曲線を特定する情報として直線または曲線を描画する命令（コマンド）を含む。Ｄ１〜Ｄ６は輪郭線上の点を表す。命令Ｍｏｖｅは、点位置を移動させる命令である。命令Ｍｏｖｅは、移動先の点の座標を引数として含む。命令Ｌｉｎｅは、直線（線分）を描画させる命令である。命令Ｌｉｎｅは、直線の終点の座標を引数として含む。図４の例では用いられていないが命令Ｃｕｒｖｅ２は２次のベジェ曲線を描画させる命令である。命令Ｃｕｒｖｅ２は、曲線の終点の座標および１つの制御点の座標を引数として含む。命令Ｃｕｒｖｅ３は、３次のベジェ曲線を描画させる命令である。命令Ｃｕｒｖｅ３は、曲線の終点の座標および２つの制御点の座標を引数として含む。命令ＥＯＣは、グリフデータの終端を示す。点Ｄ０は所定の基準点である。命令Ｍｏｖｅ（Ｄ１）により、点位置がＤ０からＤ１に移動する。命令Ｌｉｎｅ（Ｄ２）により、Ｄ１からＤ２まで直線が描画される。命令Ｌｉｎｅ（Ｄ３）により、Ｄ２からＤ３まで直線が描画される。命令Ｃｕｒｖｅ３（Ｄ７，Ｄ８，Ｄ４）により、Ｄ３からＤ４までＤ７およびＤ８を制御点として３次のベジェ曲線が描画される。なお点Ｄ７およびＤ８は図示していない。以下同様にして、グリフデータにより図４に示されるような、向きを持った輪郭線が記述される。図４では理解を助けるためにグリフデータを図形的に示したが、グリフデータは実際には命令および点の座標を含むテキストデータまたはバイナリデータである。
【００１９】
２−２．転送領域計算方法の概説
図５は、本実施形態に係る転送領域計算方法を概説する図である。図５（Ａ）−（Ｃ）は本実施形態の方法を用いない場合を説明するものである。図５（Ａ）は、通常状態のグリフを示す。このとき、転送領域、すなわちグリフが描画されている領域は、グリフを包含する外接長方形（破線）で囲まれる領域である。図５（Ｂ）は、斜体に変形されたグリフを示す。グリフが斜体に変形されると、図５（Ａ）の外接長方形もひし形に変形する。メモリアクセスは長方形の領域に対して行われるので、このときの転送領域はこのひし形を包含する外接長方形で囲まれる領域である。図５（Ｃ）は、反時計回りに４５°回転されたグリフを示す。グリフが回転されると、図５（Ａ）の外接長方形も回転される。このときの転送領域は回転された外接長方形を包含する外接長方形で囲まれる領域である。
【００２０】
図５（Ｄ）−（Ｆ）は本実施形態の方法を用いた場合を説明するものである。図５（Ｄ）は、通常状態のグリフを示す。このとき、転送領域は、グリフを包含する外接長方形（破線）で囲まれる領域であり、図５（Ａ）の場合と等しい。図５（Ｅ）は、斜体に変形されたグリフを、図５（Ｆ）は反時計回りに４５°回転されたグリフを示す。これらの場合においても、転送領域は変形または回転後のグリフを包含する外接長方形で囲まれる領域である。本実施形態の方法を用いない場合と比較すると、網点で示した部分についての転送を省略することができる。このように、本実施形態によれば、不要なメモリアクセスが削減される。
【００２１】
２−３．情報表示装置１の動作
２−３−１．全体動作
図６は、情報表示装置１の動作を示すフローチャートである。図６に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体４０に表示される画像を更新するイベントを契機として開始される。ステップＳ１０において、ＣＰＵ１０は、グリフデータに従って、グリフの描画を指示する描画指示を生成し、生成した描画指示をフォントプロセッサ１００に出力する。描画指示が入力されると、フォントプロセッサ１００は、初期化処理を行った後で、輪郭計算処理、描画位置計算処理および輪郭描画処理を行い（ステップＳ２０−Ｓ４０）、その結果を用いて塗り潰し処理を行う（ステップＳ５０）。ある画素について見ると、処理は、輪郭計算処理、描画位置計算処理、輪郭描画処理の順番で行われる。塗り潰し処理が完了すると、フォントプロセッサ１００は、ワークメモリ１０５に記憶されているデータの少なくとも一部をＶＲＡＭ５０に転送する（ステップＳ６０）。
【００２２】
２−３−２．輪郭計算モジュール１１０の動作
図７は、輪郭計算処理の前段、すなわち輪郭計算モジュール１１０の動作を示すフローチャートである。ＣＰＵ１０から描画指示が入力されると、メインコントローラ１０１は、描画指示により指定されるグリフデータを読み出し、グリフデータに記述されている命令を順番に輪郭計算モジュール１１０に与える。
【００２３】
ステップＳ２０１において、輪郭計算モジュール１１０は、描画位置を初期化する。描画位置とは、ワークメモリ１０５に記憶された複数の画素のデータのうち、処理の対象となる１つの画素すなわち対象画素の座標をいう。複数の画素はマトリクス状に、すなわち２次元配置されており、ｘｙ直交座標系を用いて各画素を特定することができる。座標軸の原点はマトリクスの左上端の点であり、右方向および下方向がｘ軸およびｙ軸の正方向である。この例で、描画位置は（ｘ，ｙ）＝（０，０）に初期化される。
【００２４】
ステップＳ２０２において、輪郭計算モジュール１１０は、与えられている命令がＭｏｖｅであるか判断する。与えられた命令がＭｏｖｅであると判断された場合（Ｓ２０２：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２０３に移行する。与えられた命令がＭｏｖｅでないと判断された場合（Ｓ２０２：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２０６に移行する。
【００２５】
ステップＳ２０３において、輪郭計算モジュール１１０は、命令Ｍｏｖｅの引数から移動先の点の座標を計算し、パラメータＰ３に代入する。パラメータＰ３は、直線または曲線の終点を示す。このときの座標は、ワークメモリ１０５においてマトリクス状に配置された複数の画素の２次元座標ではなく、グリフデータにおいて規格化された座標である。ステップＳ２０４において、輪郭計算モジュール１１０は、パラメータＰ３に対してアフィン変換を適用する。ステップＳ２０５において、輪郭計算モジュール１１０は、後段に、命令Ｍｏｖｅおよび変換後のパラメータＰ３を出力する。命令およびパラメータを出力すると、輪郭計算モジュール１１０は、処理をステップＳ２１８に移行する。
【００２６】
ステップＳ２０６において、輪郭計算モジュール１１０は、与えられている命令がＬｉｎｅであるか判断する。与えられた命令がＬｉｎｅであると判断された場合（Ｓ２０６：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２０７に移行する。与えられた命令がＬｉｎｅでないと判断された場合（Ｓ２０６：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２１０に移行する。
【００２７】
ステップＳ２０７において、輪郭計算モジュール１１０は、命令Ｌｉｎｅの引数から直線の端点の座標を計算し、パラメータＰ０およびＰ３に代入する。パラメータＰ０は、直線または曲線の始点を示す。ステップＳ２０８において、輪郭計算モジュール１１０は、パラメータＰ０およびＰ３に対してアフィン変換を適用する。ステップＳ２０９において、輪郭計算モジュール１１０は、後段に、命令Ｌｉｎｅおよび変換後のパラメータＰ０およびＰ３を出力する。命令およびパラメータを出力すると、輪郭計算モジュール１１０は、処理をステップＳ２１８に移行する。
【００２８】
ステップＳ２１０において、輪郭計算モジュール１１０は、与えられている命令がＣｕｒｖｅ２であるか判断する。与えられた命令がＣｕｒｖｅ２であると判断された場合（Ｓ２１０：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２１１に移行する。与えられた命令がＣｕｒｖｅ２でないと判断された場合（Ｓ２１０：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２１４に移行する。
【００２９】
ステップＳ２１１において、輪郭計算モジュール１１０は、命令Ｃｕｒｖｅ２の引数からベジェ直線の端点および制御点の座標を計算し、パラメータＰ０、Ｐ１およびＰ３に代入する。パラメータＰ１は、２次ベジェ曲線の制御点を示す。ステップＳ２１２において、輪郭計算モジュール１１０は、パラメータＰ０、Ｐ１およびＰ３に対してアフィン変換を適用する。ステップＳ２１３において、輪郭計算モジュール１１０は、後段に、命令Ｃｕｒｖｅ２および変換後のパラメータＰ０、Ｐ１およびＰ３を出力する。命令およびパラメータを出力すると、輪郭計算モジュール１１０は、処理をステップＳ２１８に移行する。
【００３０】
ステップＳ２１４において、輪郭計算モジュール１１０は、与えられている命令がＣｕｒｖｅ３であるか判断する。与えられた命令がＣｕｒｖｅ３であると判断された場合（Ｓ２１４：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２１５に移行する。与えられた命令がＣｕｒｖｅ３でないと判断された場合（Ｓ２１４：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２１９に移行する。
【００３１】
ステップＳ２１５において、輪郭計算モジュール１１０は、命令Ｃｕｒｖｅ３の引数からベジェ直線の端点および２つの制御点の座標を計算し、パラメータＰ０、Ｐ１、Ｐ２およびＰ３に代入する。パラメータＰ２は、３次ベジェ曲線の制御点を示す。ステップＳ２１６において、輪郭計算モジュール１１０は、パラメータＰ０、Ｐ１、Ｐ２およびＰ３に対してアフィン変換を適用する。ステップＳ２１７において、輪郭計算モジュール１１０は、後段に、命令Ｃｕｒｖｅ３および変換後のパラメータＰ０、Ｐ１、Ｐ２およびＰ３を出力する。命令およびパラメータを出力すると、輪郭計算モジュール１１０は、処理をステップＳ２１８に移行する。
【００３２】
ステップＳ２１８において、輪郭計算モジュール１１０は、パラメータＰ３により示される座標が新たな描画位置となるように、描画位置を更新する。描画位置を更新すると、輪郭計算モジュール１１０は、処理をステップＳ２０２に移行する。
【００３３】
ステップＳ２１９において、輪郭計算モジュール１１０は、与えられている命令がＥＯＣであるか判断する。与えられた命令がＥＯＣであると判断された場合（Ｓ２１９：ＹＥＳ）、輪郭計算モジュール１１０は、後段に命令ＥＯＣを出力する。命令ＥＯＣを出力すると、輪郭計算モジュール１１０は、図７のフローを終了する。与えられた命令がＥＯＣでないと判断された場合（Ｓ２１９：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２２１に移行する。
【００３４】
ステップＳ２２１において、輪郭計算モジュール１１０は、エラーレジスタに「１」を書き込む。エラーレジスタは、エラー発生の有無を示すデータを記憶する。記憶されているデータが「０」のときはエラーが発生していないことを、データが「１」のときはエラーが発生したことを示す。エラーレジスタに「１」が書き込まれると、ＣＰＵ１０はエラーに対処する処理、この例ではシステムのリセットを行う。システムがリセットされると、図７のフローは終了する。
【００３５】
以上で説明したように、図７のフローによれば、輪郭計算モジュール１１０の後段に、命令Ｍｏｖｅ、Ｌｉｎｅ、Ｃｕｒｖｅ２、Ｃｕｒｖｅ３、ＥＯＣのいずれか、および必要な座標が送られる。
【００３６】
図８は、輪郭計算処理の後段、すなわち輪郭計算モジュール１１０の動作を示すフローチャートである。ステップＳ２５０において、輪郭計算モジュール１１０は、スタックが空であるか判断する。この例でスタックはＬＩＦＯ（Last In First Out）であり、ワークメモリ１０５上にその記憶領域が設けられる。初期状態においてスタックは空である。スタックが空であると判断された場合（Ｓ２５０：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２５１に移行する。スタックが空でないと判断された場合（Ｓ２５０：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２６３に移行する。
【００３７】
ステップＳ２５１において、輪郭計算モジュール１１０は、前段から命令を取得する。ステップＳ２５２において、輪郭計算モジュール１１０は、与えられた命令がＭｏｖｅであるか判断する。与えられた命令がＭｏｖｅであると判断された場合（Ｓ２５２：ＹＥＳ）、輪郭計算モジュール１１０は、ステップＳ２５３において、描画位置計算モジュール１１１に命令ＭｏｖｅおよびパラメータＰ３を出力する。与えられた命令がＭｏｖｅでないと判断された場合（Ｓ２５２：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２５４に移行する。
【００３８】
ステップＳ２５４において、輪郭計算モジュール１１０は、与えられた命令がＬｉｎｅであるか判断する。与えられた命令がＬｉｎｅであると判断された場合（Ｓ２５４：ＹＥＳ）、輪郭計算モジュール１１０は、ステップＳ２５５において、命令ＬｉｎｅおよびパラメータＰ０−Ｐ３をスタックに積む（プッシュする）。与えられた命令がＬｉｎｅでないと判断された場合（Ｓ２５４：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２５６に移行する。
【００３９】
ステップＳ２５６において、輪郭計算モジュール１１０は、与えられた命令がＣｕｒｖｅ２であるか判断する。与えられた命令がＣｕｒｖｅ２であると判断された場合（Ｓ２５６：ＹＥＳ）、輪郭計算モジュール１１０は、ステップＳ２５７において、命令Ｃｕｒｖｅ２およびパラメータＰ０−Ｐ３をスタックに積む。与えられた命令がＣｕｒｖｅ２でないと判断された場合（Ｓ２５６：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２５８に移行する。
【００４０】
ステップＳ２５８において、輪郭計算モジュール１１０は、与えられた命令がＣｕｒｖｅ３であるか判断する。与えられた命令がＣｕｒｖｅ３であると判断された場合（Ｓ２５８：ＹＥＳ）、輪郭計算モジュール１１０は、ステップＳ２５９において、命令Ｃｕｒｖｅ３およびパラメータＰ０−Ｐ３をスタックに積む。与えられた命令がＣｕｒｖｅ３でないと判断された場合（Ｓ２５８：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２６０に移行する。
【００４１】
ステップＳ２６０において、輪郭計算モジュール１１０は、与えられた命令がＥＯＣであるか判断する。与えられた命令がＥＯＣであると判断された場合（Ｓ２６０：ＹＥＳ）、輪郭計算モジュール１１０は、ステップＳ２６１において、描画位置計算モジュール１１１に命令ＥＯＣを出力する。命令ＥＯＣを出力すると、輪郭計算モジュール１１０は、図８のフローを終了する。与えられた命令がＥＯＣでないと判断された場合（Ｓ２６０：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２６２に移行する。
【００４２】
ステップＳ２６２において、輪郭計算モジュール１１０は、エラーレジスタに「１」を書き込む。エラーレジスタは、エラー発生の有無を示すデータを記憶する。記憶されているデータが「０」のときはエラーが発生していないことを、データが「１」のときはエラーが発生したことを示す。エラーレジスタに「１」が書き込まれると、ＣＰＵ１０はエラーに対処する処理、この例ではシステムのリセットを行う。システムがリセットされると、図８のフローは終了する。
【００４３】
ステップＳ２６３において、輪郭計算モジュール１１０は、スタックからデータを取得する（ポップする）。取得されるデータは、命令およびパラメータＰ０−Ｐ３である。ステップＳ２６４において、輪郭計算モジュール１１０は、データによって表される距離がしきい値、この例では１画素よりも小さいか判断する。「データによって表される距離」の詳細は後述する。距離がしきい値よりも小さいと判断された場合（Ｓ２６４：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２６７に移行する。距離がしきい値よりも小さくないと判断された場合（Ｓ２６４：ＮＯ）、輪郭計算モジュール１１０は、処理をステップＳ２６５に移行する。
【００４４】
ステップＳ２６５において、輪郭計算モジュール１１０は、データを分割する。ステップＳ２６６において、輪郭計算モジュール１１０は、分割したデータを、後半、前半の順番でスタックに積む。分割したデータをスタックに積むと、輪郭計算モジュール１１０は、処理をステップＳ２５０に移行する。こうして、「データによって表される距離」がしきい値よりも小さくなるまで繰り返しデータの分割が行われる。
【００４５】
図９は、データの分割を説明する図である。図９（Ａ）は、命令Ｌｉｎｅの場合を示している。この場合、ステップＳ２６４における「データによって表される距離」は、点Ｐ０と点Ｐ３の間の距離（すなわち線分Ｐ０Ｐ３の長さ）である。データの分割は次のように行われる。まず、輪郭計算モジュール１１０は、点Ｐ０と点Ｐ３の中点Ｍの座標を計算する。輪郭計算モジュール１１０は、点Ｍを用いて、データを前半と後半に分割する。前半は、命令Ｌｉｎｅおよび引数Ｐ０、Ｍを含むデータであり、後半は、命令Ｌｉｎｅおよび引数Ｍ、Ｐ３を含むデータである。分割後のデータにおいて点Ｍは、新たな点Ｐ０またはＰ３として扱われる。
【００４６】
図９（Ｂ）は、命令Ｃｕｒｖｅ２の場合を示している。この場合、「データによって表される距離」は、線分Ｐ０Ｐ３、Ｐ０Ｐ１およびＰ１Ｐ３の長さである。データの分割は次のように行われる。輪郭計算モジュール１１０は、点Ｐ０と点Ｐ１の中点Ｍ０の座標を計算する。輪郭計算モジュール１１０は、点Ｐ１と点Ｐ３の中点Ｍ３の座標を計算する。輪郭計算モジュール１１０は、点Ｍ０と点Ｍ３の中点Ｎの座標を計算する。輪郭計算モジュール１１０は、点Ｎを用いて、データを前半と後半に分割する。前半は、命令Ｃｕｒｖｅ２および引数Ｐ０、Ｍ０、Ｎを含むデータであり、後半は、命令Ｃｕｒｖｅ２および引数Ｎ、Ｍ３、Ｐ３を含むデータである。分割後のデータにおいて点Ｎは、新たな点Ｐ０またはＰ３として扱われる。点Ｍ０およびＭ３は、新たな点Ｐ１として扱われる。
【００４７】
図９（Ｃ）は、命令Ｃｕｒｖｅ３の場合を示している。この場合、「データによって表される距離」は、線分Ｐ０Ｐ３、Ｐ０Ｐ１、Ｐ１Ｐ２およびＰ２Ｐ３の長さである。データの分割は次のように行われる。輪郭計算モジュール１１０は、点Ｐ０と点Ｐ１の中点Ｍ０の座標を計算する。輪郭計算モジュール１１０は、点Ｐ１と点Ｐ２の中点Ｍ１の座標を計算する。輪郭計算モジュール１１０は、点Ｐ２と点Ｐ３の中点Ｍ３の座標を計算する。輪郭計算モジュール１１０は、点Ｍ０と点Ｍ１の中点Ｎ０の座標を計算する。輪郭計算モジュール１１０は、点Ｍ１と点Ｍ３の中点Ｎ３の座標を計算する。輪郭計算モジュール１１０は、点Ｎ０と点Ｎ３の中点Ｌの座標を計算する。輪郭計算モジュール１１０は、点Ｌを用いて、データを前半と後半に分割する。前半は、命令Ｃｕｒｖｅ３および引数Ｐ０、Ｍ０、Ｎ０、Ｌを含むデータであり、後半は、命令Ｃｕｒｖｅ２および引数Ｌ、Ｎ３、Ｍ３、Ｐ３を含むデータである。分割後のデータにおいて点Ｌは、新たな点Ｐ０またはＰ３として扱われる。点Ｍ０およびＮ３は、新たな点Ｐ１として扱われる。点Ｎ０およびＭ３は、新たな点Ｐ２として扱われる。
【００４８】
再び図８を参照する。ステップＳ２６７において、輪郭計算モジュール１１０は、点Ｐ０と点Ｐ３の差分ベクトルを計算する。ステップＳ２６８において、輪郭計算モジュール１１０は、差分ベクトルがゼロベクトルであるか判断する。差分ベクトルがゼロベクトルであると判断された場合（Ｓ２６８：ＹＥＳ）、輪郭計算モジュール１１０は、処理をステップＳ２５０に移行する。差分ベクトルがゼロベクトルでないと判断された場合（Ｓ２６８：ＮＯ）、輪郭計算モジュール１１０は、ステップＳ２６９において、描画位置計算モジュール１１１に、命令ｄＶｅｃｔｏｒおよびその引数、あるいは必要に応じて他の命令および引数を出力する。命令ｄＶｅｃｔｏｒは、次に輪郭線が通る画素すなわち輪郭線として塗りつぶさせる画素を特定する命令であり、差分ベクトルを引数として含む。命令ｄＶｅｃｔｏｒは、命令Ｌｉｎｅ、Ｃｕｒｖｅ２またはＣｕｒｖｅ３が細分化されたものである。
【００４９】
このように、輪郭計算モジュール１１０は、グリフデータに記述された命令Ｌｉｎｅ、Ｃｕｒｖｅ２およびＣｕｒｖｅ３を細分化し、細分化したデータを後段のモジュールに出力する。
【００５０】
２−３−３．描画位置計算モジュール１１１の動作
図１０は、描画位置計算モジュール１１１の構成を示す図である。輪郭計算モジュール１１０から出力された命令は、入力ｃｍｄとして描画位置計算モジュール１１１に入力される。描画位置計算モジュール１１１に入力される命令は、Ｍｏｖｅ、ｄＶｅｃｔｏｒ、ＥＯＣのいずれかである。セレクタ２０１は、入力された命令がｄＶｅｃｔｏｒｅであった場合は「１」を出力し、命令がＭｏｖｅまたはＥＯＣであった場合は「０」を出力する。ラッチ２０２は、命令をラッチする。ラッチされた命令は、出力ｃｍｄとして後段の輪郭描画モジュール１０４に出力される。
【００５１】
輪郭計算モジュール１１０から出力される命令の引数は、入力ｄｙおよびｄｘとして描画位置計算モジュール１１１に入力される。具体的には、入力ｄｙおよびｄｘは、入力された命令がｄＶｅｃｔｏｒのときは差分ベクトルのｙ成分およびｘ成分であり、命令がＭｏｖｅのときは移動先の位置ベクトルのｙ成分およびｘ成分である。セレクタ２０３は、セレクタ２０１の出力が「０」であるとき（すなわち輪郭計算モジュール１１０から命令ＭｏｖｅまたはＥＯＣが入力されたとき）は入力ｄｙを出力し、セレクタ２０１の出力が「１」であるとき（すなわち輪郭計算モジュール１１０から命令ｄＶｅｃｔｏｒが入力されたとき）は加算器２０４からの入力を出力する。加算器２０４は、入力ｄｙおよびラッチ２０５からの入力を加算する。ラッチ２０５は、現在処理対象となっている画素のｙ座標（ｙ）をラッチする。ラッチ２０６は、ラッチ２０５からの入力、すなわち１クロック前のｙ座標（ｐｙ）をラッチする。セレクタ２０７は、入力ｄｙがｄｙ≧０のときはｐｙを、ｄｙ＜０のときはｙを出力する。
【００５２】
セレクタ２０８は、セレクタ２０１の出力が「０」であるときは入力ｄｘを出力し、セレクタ２０１の出力が「１」であるときは加算器２０９からの入力を出力する。加算器２０９は、入力ｄｘおよびラッチ２１０からの入力を加算する。ラッチ２１０は、現在処理対象となっている画素のｘ座標（ｘ）をラッチする。ラッチ２１１は、ラッチ２１０からの入力、すなわち１クロック前のｘ座標（ｐｘ）をラッチする。セレクタ２１２は、入力ｄｙ（入力ｄｘではない）がｄｙ≧０のときはｐｘを、ｄｙ＜０のときはｘを出力する。
【００５３】
クリッピングモジュール２１３は、対象画素の座標を、クリップされる領域（クリップ領域）内に修正する機能を有する。クリップ領域は、プログラムに従って動作するＣＰＵ１０によって指定される。ＣＰＵ１０は、クリップ領域のｘ座標およびｙ座標の最大値および最小値をｃｌ＿ｘｍａｘ、ｃｌ＿ｘｍｉｎ、ｃｌ＿ｙｍａｘおよびｃｌ＿ｙｍｉｎとしてフォントプロセッサ１００に出力する。
【００５４】
図１１は、クリッピングモジュール２１３の構成を示す図である。セレクタ２０７の出力すなわち対象画素のｙ座標は、入力ａとしてクリッピングモジュール２１３に入力される。ＣＰＵ１０の出力ｃｌ＿ｙｍａｘおよびｃｌ＿ｙｍｉｎは、それぞれ入力ａｍａｘおよびａｍｉｎとしてクリッピングモジュール２１３に入力される。減算器３０１は、ａからａｍａｘを減算した結果を出力する。セレクタ３０２は、ａ−ａｍａｘ＜０の場合すなわちａ＜ａｍａｘの場合、０を出力し、ａ−ａｍａｘ≧０の場合すなわちａ≧ａｍａｘの場合、「１」を出力する。減算器３０３は、ａからａｍｉｎを減算した結果を出力する。セレクタ３０４は、ａ−ａｍｉｎ≧０の場合すなわちａ≧ａｍｉｎの場合、「０」を出力し、ａ−ａｍｉｎ＜０の場合すなわちａ＜ａｍｉｎの場合、「１」を出力する。セレクタ３０２またはセレクタ３０４の出力が「１」であるということは、対象画素の座標を、クリップ領域内に修正する必要があることを示す。セレクタ３０５は、セレクタ３０４の出力が「０」である場合にはａを出力し、セレクタ３０４の出力が「１」である場合にはａｍｉｎを出力する。セレクタ３０６は、セレクタ３０２の出力が「１」である場合にはａｍａｘを出力ｒａとして出力し、セレクタ３０２の出力が０である場合にはセレクタ３０５からの入力を出力ｒａとして出力する。出力ｒａは、クリップ領域内に修正された対象画素の座標を示す。ＯＲ回路３０７は、セレクタ３０２の出力とセレクタ３０４の出力の論理和を、出力ｃｌｉｐｐｅｄとして出力する。出力ｃｌｉｐｐｅｄは、「０」のときクリッピングが行われていないことを示し、「１」のときクリッピングが行われたことを示す。
【００５５】
再び図１０を参照する。最大最小更新モジュール２１４は、レジスタ１１２に記憶されている、ｙ座標の最大値（ｙｍａｘ）および最小値（ｙｍｉｎ）を更新する。レジスタ１１２は、出力ｙｍａｘおよびｙｍｉｎを出力する。最大最小更新モジュール２１４には、クリッピングモジュール２１３の出力ｒａ、レジスタ１１２の出力ｙｍａｘおよびｙｍｉｎが入力される。
【００５６】
図１２は、最大最小更新モジュール２１４の構成を示す図である。入力ａは、クリッピングモジュール２１３の出力ｒａ、すなわちクリップ領域内に修正された対象画素の座標である。入力ａｍａｘおよびａｍｉｎは、レジスタ１１２の出力ｙｍａｘおよびｙｍｉｎ、すなわちｙ座標の最大値および最小値である。減算器４０１は、ａからａｍａｘを減算した結果を出力する。セレクタ４０２は、ａ−ａｍａｘ≧０の場合すなわちａ≧ａｍａｘの場合、出力ｒａｍａｘとしてａを出力し、ａ−ａｍａｘ＜０の場合すなわちａ＜ａｍａｘの場合、出力ｒａｍａｘとしてａｍａｘを出力する。すなわち、最大最小更新モジュール２１４は、対象画素のｙ座標がレジスタ１１２に記憶されている最大値よりも大きければ対象画素のｙ座標を出力し、対象画素のｙ座標が最大値よりも小さければ最大値を出力する。減算器４０３は、ａからａｍｉｎを減算した結果を出力する。セレクタ４０４は、ａ−ａｍｉｎ＜０の場合すなわちａ＜ａｍｉｎの場合、出力ｒａｍｉｎとしてａを出力し、ａ−ａｍｉｎ≧０の場合すなわちａ≧ａｍｉｎの場合、出力ｒａｍｉｎとしてａｍｉｎを出力する。すなわち、最大最小更新モジュール２１４は、対象画素のｙ座標がレジスタ１１２に記憶されている最小値よりも小さければ対象画素のｙ座標を出力し、対象画素のｙ座標が最小値よりも大きければ最小値を出力する。
【００５７】
再び図１０を参照する。最大最小更新モジュール２１４の出力ｒａｍａｘおよびｒａｍｉｎは、それぞれｒｙｍａｘおよびｒｙｍｉｎとしてレジスタ１１２に出力される。こうしてレジスタ１１２は、更新された最大値および最小値を記憶し、それぞれｙｍａｘおよびｙｍｉｎとして再び描画位置計算モジュール１１１に出力する。
【００５８】
クリッピングモジュール２１５および最大最小更新モジュール２１６は、クリッピングモジュール２１３および最大最小更新モジュール２１４と同一の構成を有しているが、ｙ座標ではなくｘ座標が入力される点が異なる。したがって、ｒａはｒｘとして輪郭描画モジュール１０４に出力される。また、ｒａｍａｘおよびｒａｍｉｎは、ｒｘｍａｘおよびｒｘｍｉｎとしてレジスタ１１２に出力される。こうしてレジスタ１１２は、更新された最大値および最小値を記憶し、それぞれｘｍａｘおよびｘｍｉｎとして再び描画位置計算モジュール１１１に出力する。
【００５９】
ＯＲ回路２１７は、クリッピングモジュール２１３の出力ｃｌｉｐｐｅｄおよびクリッピングモジュール２１５の出力ｃｌｉｐｐｅｄの論理和を出力ｓｔｒｏｋｅとして出力する。出力ｓｔｒｏｋｅは、「１」のときｘ座標およびｙ座標のいずれかでクリッピングが行われたことを示し、「０」のときｘ座標およびｙ座標のどちらでもクリッピングが行われていないことを示す。セレクタ２１８は、クリッピングモジュール２１３の出力ｃｌｉｐｐｅｄが「０」の場合はｄｙを出力し、出力ｃｌｉｐｐｅｄが「１」の場合は「０」を出力する。描画位置計算モジュール１１１は、セレクタ２１８の出力を、出力ｄｗｎとして輪郭描画モジュール１０４に出力する。出力ｄｗｎは、輪郭線のｙ方向における変化量を示す。
【００６０】
以上で説明したように、描画位置計算モジュール１１１は、ｃｍｄ、ｄｙ、ｄｘ、ｃｌ＿ｙｍａｘ、ｃｌ＿ｙｍｉｎ、ｙｍａｘ、ｙｍｉｎ、ｃｌ＿ｘｍａｘ、ｃｌ＿ｘｍｉｎ、ｘｍａｘおよびｘｍｉｎが入力されると、ｃｍｄ、ｓｔｒｏｋｅ、ｒｙ、ｒｘ、ｄｗｎ、ｒｙｍａｘ、ｒｙｍｉｎ、ｒｘｍｉｎ、ｒｘｍｉｎを出力する。
【００６１】
２−３−４．輪郭描画モジュール１０４の動作
図１３は、輪郭描画モジュール１０４の動作を示すフローチャートである。ステップＳ３００において、輪郭描画モジュール１０４は、輪郭計算モジュール１１０から出力された命令がＥＯＣであるか判断する。与えられた命令がＥＯＣであると判断された場合（Ｓ３００：ＹＥＳ）、輪郭描画モジュール１０４は、処理をステップＳ３０８に移行する。与えられた命令がＥＯＣでないと判断された場合（Ｓ３００：ＮＯ）、輪郭描画モジュール１０４は、処理をステップＳ３０１に移行する。
【００６２】
ステップＳ３０１において、輪郭描画モジュール１０４は、与えられた命令がＭｏｖｅであるか判断する。与えられた命令がＭｏｖｅであると判断された場合（Ｓ３０１：ＹＥＳ）、ワークメモリ１０５にアクセスする必要がないので、輪郭描画モジュール１０４は、その画素については何も処理をしない。与えられた命令がＭｏｖｅでないと判断された場合（Ｓ３０１：ＮＯ）、すなわち、命令ｄＶｅｃｔｏｒが与えられた場合、輪郭描画モジュール１０４は、処理をステップＳ３０２に移行する。
【００６３】
ステップＳ３０２において、輪郭描画モジュール１０４は、ｓｔｒｏｋｅ＝０かつｄｗｎ＝０であるか判断する。ｓｔｒｏｋｅ＝０かつｄｗｎ＝０であると判断された場合（Ｓ３０２：ＹＥＳ）、ワークメモリ１０５にアクセスする必要がないので、輪郭描画モジュール１０４は、その画素については何も処理をしない。ｓｔｒｏｋｅ＝０かつｄｗｎ＝０でないと判断された場合（Ｓ３０２：ＮＯ）、輪郭描画モジュール１０４は、処理をステップＳ３０３に移行する。
【００６４】
ステップＳ３０３において、輪郭描画モジュール１０４は、画素の位置（ｒｘ，ｒｙ）から、その画素のデータを記憶しているワークメモリ１０５のアドレスを算出する。
ステップＳ３０４において、輪郭描画モジュール１０４は、ワークメモリ１０５のうちステップＳ３０３で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークｓｔｒｏｋｅ（ストローク情報）および巻き数変化量ｄｗｎを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、１つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量ｄｗｎが記録されている。
【００６５】
ステップＳ３０５において、輪郭描画モジュール１０４は、ストローク情報を上書きする。描画位置計算処理から与えられたストロークがｓｔｒｏｋｅ＝０である場合、輪郭描画モジュール１０４は、その画素のストローク情報を変更しない。与えられたストロークがｓｔｒｏｋｅ＝０である場合、輪郭描画モジュール１０４は、その画素のストローク情報を、「１」に変更する。ステップＳ３０６において、輪郭描画モジュール１０４は、画素の巻き数変化量にｄｗｎを加算する。例えば、画素の巻き数変化量として「２」が記憶されており与えられた巻き数変化量ｄｗｎ＝＋１であった場合、画素の巻き数変化量は「３」となる。ステップＳ３０７において、輪郭描画モジュール１０４は、更新したデータでワークメモリ１０５上のデータを上書きする。
【００６６】
ステップＳ３０８において、輪郭描画モジュール１０４は、輪郭描画処理が終了したことを塗り潰しモジュール１０６に通知する。
【００６７】
２−３−３．塗り潰しモジュール１０６の動作
図１４は、フォントプロセッサ１００の塗り潰しモジュール１０６の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール１０６は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをＶＲＡＭ５０に転送する転送処理を実行する機能を有する。図１４のフローは、図１３のステップＳ３０８において輪郭描画モジュール１０４から塗り潰しモジュール１０６に輪郭描画処理の終了が通知されたことを契機として開始される。
【００６８】
ステップＳ４００において、塗り潰しモジュール１０６は、パラメータｙを初期化する。パラメータｘおよびｙは、画素の座標を示す。この例で、塗り潰しモジュール１０６は、ｙ＝ｙＭｉｎとしてパラメータｙを初期化する。ｙＭｉｎはフォントを描画する領域のｙ座標の最小値である。以下、マトリクス状に配置された複数の画素のうちパラメータｙで特定される行を「対象行」という。
【００６９】
ステップＳ４０１において、塗り潰しモジュール１０６は、まだ対象行となっていない行があるか、具体的にはパラメータｙがｙ≦ｙＭａｘを満たすか判断する。ｙＭａｘはフォントを描画する領域のｙ座標の最大値である。まだ処理されていない行があると判断された場合（Ｓ４０１：ＹＥＳ）、塗り潰しモジュール１０６は、処理をステップＳ４０２に移行する。処理されていない行はないと判断された場合（Ｓ４０１：ＮＯ）、塗り潰しモジュール１０６は、図１４の処理を終了する。
【００７０】
ステップＳ４０２において、塗り潰しモジュール１０６は、パラメータｗｎにゼロを代入する。パラメータｗｎは巻き数（winding number）を示す。巻き数は、対象行と輪郭線とがある向き（例えば、上向き）で交わるときに増加し、対象行と輪郭線とが別の向き（例えば、下向き）で交わるときに減少する。
【００７１】
ステップＳ４０３において、塗り潰しモジュール１０６は、パラメータｘを初期化する。この例で、塗り潰しモジュール１０６は、ｘ＝ｘＭｉｎとしてパラメータｘを初期化する。ｘＭｉｎはフォントを描画する領域のｘ座標の最小値である。塗り潰し処理において対象行のうちパラメータｘで特定される画素を「対象画素」という。
【００７２】
ステップＳ４０４において、塗り潰しモジュール１０６は、対象行の中にまだ対象画素となっていない画素があるか、具体的にはパラメータｘがｘ≦ｘＭａｘを満たすか判断する。ｘＭａｘはフォントを描画する領域のｘ座標の最大値である。まだ対象画素となっていない画素があると判断された場合（Ｓ４０４：ＹＥＳ）、塗り潰しモジュール１０６は、処理をステップＳ４０６に移行する。対象画素となっていない画素はないと判断された場合（Ｓ４０４：ＮＯ）、塗り潰しモジュール１０６は、処理をステップＳ４０５に移行する。
【００７３】
ステップＳ４０５において、塗り潰しモジュール１０６は、パラメータｙを更新する。この例で、塗り潰しモジュール１０６は、ｙ＝ｙ＋１としてパラメータｙを更新する。パラメータｙを更新すると、塗り潰しモジュール１０６は、処理をステップＳ４０１に移行する。
【００７４】
ステップＳ４０６において、塗り潰しモジュール１０６は、対象画素の背景データ（背景の階調を示すデータ）を、ワークメモリ１０５に書き込む。背景データは、例えばＲＡＭ３０から読み出される。
【００７５】
ステップＳ４０７において、塗り潰しモジュール１０６は、ワークメモリ１０５に記憶されている輪郭を示すビットマップデータ（輪郭データ）から、巻き数変化量ｗｄｎを取得する。詳細には以下のとおりである。塗り潰しモジュール１０６は、パラメータｘおよびｙから、対象画素のデータを記憶しているアドレスを算出する。塗り潰しモジュール１０６は、算出されたアドレスから対象画素のデータを読み出す。塗り潰しモジュール１０６は、読み出されたデータから巻き数変化量ｗｄｎを抽出する。
【００７６】
ステップＳ４０８において、塗り潰しモジュール１０６は、パラメータｗｎの値をｗｎ＝ｗｎ＋ｄｗｎとして更新する。パラメータｗｎは対象行が更新されるたびにゼロに初期化される（ステップＳ４０２）から、パラメータｗｎは、対象行を基準点（この例では左端点）から１画素ずつ順番に、巻き数変化量ｗｄｎを積算した値である。
【００７７】
図１５は、巻き数ｗｎの変化を例示する図である。図１５（Ａ）は、輪郭が描画されたビットマップデータの一部を示す。この例では、４本の輪郭線が描かれている。マトリクスの上部に記載されている矢印は、輪郭線の向きを示している。図１５（Ｂ）は、図１５（Ａ）のビットマップデータのうち上から２行目の画素の巻き数の変化を示している。処理の始点（左端点）においては巻き数ｗｎの初期値としてゼロが与えられる。１画素ずつ右に向かって処理され、輪郭線が現れるたびにその向きに応じて巻き数が増加または減少する。
【００７８】
再び図１４を参照する。ステップＳ４０９において、塗り潰しモジュール１０６は、画素を塗り潰す条件が満たされたか判断する。ここでは、画素を塗り潰す条件として、巻き数ｗｎとストロークｓｔｒｏｋｅの値が、（ｗｎ，ｓｔｒｏｋｅ）＝（０，０）以外であるという条件が用いられる。画素を塗り潰す条件が満たされたと判断された場合（Ｓ４０９：ＹＥＳ）、塗り潰しモジュール１０６は、処理をステップＳ４１０に移行する。画素を塗り潰す条件が満たされていないと判断された場合（Ｓ４０９：ＮＯ）、塗り潰しモジュール１０６は、処理をステップＳ４１１に移行する。
【００７９】
ステップＳ４１０において、塗り潰しモジュール１０６は、対象画素を塗り潰す。すなわち、対象画素の階調（カラー表示の場合、各色要素の階調）を指定された値にする。
【００８０】
ステップＳ４１１において、塗り潰しモジュール１０６は、パラメータｘをｘ＝ｘ＋１として更新する。これにより対象行が更新される。対象行を更新すると、塗り潰しモジュール１０６は、処理をステップＳ４０４に移行する。
【００８１】
以上の処理により、ワークメモリ１０５に記憶された輪郭線のビットマップデータの内部は塗りつぶされる。塗り潰しモジュール１０６は、こうして生成されたデータを、バスインターフェースモジュール１０７およびバス８０を介してＶＲＡＭ５０に転送する。塗り潰し処理が完了すると、フォントプロセッサ１００は、塗り潰し処理の完了をＣＰＵ１０に通知する。
【００８２】
２−４．実施形態の効果
以上で説明したように本実施形態によれば、レンダリングメモリにおけるグリフが占める部分、すなわち水平方向および垂直方向の最大値および最小値が、グリフが描画されるたびに逐一、動的に計算される。この計算はハードウェアで、後段への出力と並列で行われるので、計算に必要な時間すなわちこの計算による後段への出力の遅延は実質的にゼロである。
【００８３】
３．他の実施形態
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち２つ以上のものが組み合わせて用いられてもよい。
【００８４】
３−１．変形例１
グリフデータの形式は、図４で説明したものに限定されない。Ｍｏｖｅ、Ｌｉｎｅ、Ｃｕｒｖｅ２、Ｃｕｒｖｅ３、ＥＯＣ以外の命令が用いられてもよい。曲線を記述する関数として、４次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが２つのパーツグリフから構成される例を説明したが、複合グリフは３つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
【００８５】
３−２．変形例２
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数ｗｎに限定されない。巻き数ｗｎは輪郭線の向きに応じて１ずつ増減するパラメータであったが、増減の単位は１でなくてもよい。また、実施形態では対象行を決めて、対象行について１画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について１画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量ｄｗｎは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの１つの行または１つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
【００８６】
３−３．変形例３
実施形態において、輪郭計算処理、描画位置計算処理、および輪郭描画処理は、それぞれ異なるモジュールにより実行された。しかし、単一のモジュールまたはプロセッサが、複数の処理を行う機能を有していてもよい。あるいは、複数のモジュールまたはプロセッサの集合が全体として、単一の処理を行う機能を有していてもよい。
また、実施形態において、レジスタ１１２は、描画位置計算モジュール１１１の外部に設けられていた。しかし、描画位置計算モジュール１１１がレジスタ１１２を内蔵する構成であってもよい。あるいは、最大最小更新モジュール２１４がレジスタ１１２を内蔵する構成であってもよい。
さらに、スタックの記憶領域はその機能を発揮できる限りにおいてどの記憶装置上に設けられてもよい。
【００８７】
３−４．他の変形例
情報表示装置１のハードウェア構成は図１に示されるものに限定されない。必要な機能構成を実現できるものであれば、どのようなハードウェア構成を有する装置が用いられてもよい。フォントプロセッサ１００についても同様である。また上述の実施形態では情報表示装置１が電子ペーパである例について説明したが、必要な機能を有するものであれば、パーソナルコンピュータ、ＰＤＡ（Personal Digital Assistant）、携帯電話機など電子ペーパ以外の装置であってもよい。実施形態において情報表示装置１は表示装置（表示体１０７）を内蔵していたが、表示装置は外付けであってもよい。
【００８８】
上述の実施形態においてＣＰＵ１０によって実行されるプログラムは、磁気記録媒体（磁気テープ、磁気ディスク（ＨＤＤ（Hard Disk Drive）、ＦＤ（Flexible Disk））など）、光記録媒体（光ディスク（ＣＤ（Compact Disk）、ＤＶＤ（Digital Versatile Disk））など）、光磁気記録媒体、半導体メモリ（フラッシュＲＯＭなど）などのコンピュータ読取り可能な記録媒体に記憶した状態で提供されてもよい。また、このプログラムは、インターネットのようなネットワーク経由でダウンロードされてもよい。
【図面の簡単な説明】
【００８９】
【図１】一実施形態に係る情報表示装置１のハードウェア構成を示す図である。
【図２】フォントプロセッサ１００の構成を示す図である。
【図３】情報表示装置１の外観を示す図である。
【図４】グリフデータを例示する図である。
【図５】本実施形態に係る転送領域計算方法を概説する図である。
【図６】情報表示装置１の動作を示すフローチャートである。
【図７】輪郭計算処理の前段を示すフローチャートである。
【図８】輪郭計算処理の後段を示すフローチャートである。
【図９】データの分割を説明する図である。
【図１０】描画位置計算モジュール１１１の構成を示す図である。
【図１１】クリッピングモジュール２１３の構成を示す図である。
【図１２】最大最小更新モジュール２１４の構成を示す図である。
【図１３】輪郭描画モジュール１０４の動作を示すフローチャートである。
【図１４】塗り潰しモジュール１０６の動作を示すフローチャートである。
【図１５】巻き数ｗｎの変化を例示する図である。
【符号の説明】
【００９０】
１…情報表示装置、１０…ＣＰＵ、２０…ＲＯＭ、３０…ＲＡＭ、４０…表示体、５０…ＶＲＡＭ、６０…表示制御装置、７０…入力装置、８０…バス、９０…バスコントローラ、１００…フォントプロセッサ、１０１…メインコントローラ、１０３…フォント描画コントローラ、１０４…輪郭描画モジュール、１０５…ワークメモリ、１０６…塗り潰しモジュール、１０７…バスインターフェースモジュール、１０８…メインバス、１０９…サブバス、１１０…輪郭計算モジュール、１１１…描画位置計算モジュール、１１２…レジスタ、２０１…セレクタ、２０２…ラッチ、２０３…セレクタ、２０４…加算器、２０５…ラッチ、２０６…ラッチ、２０７…セレクタ、２０８…セレクタ、２０９…加算器、２１０…ラッチ、２１１…ラッチ、２１２…セレクタ、２１３…クリッピングモジュール、２１４…最大最小更新モジュール、２１５…クリッピングモジュール、２１６…最大最小更新モジュール、２１７…ＯＲ回路、２１８…セレクタ、３０１…減算器、３０２…セレクタ、３０３…減算器、３０４…セレクタ、３０５…セレクタ、３０６…セレクタ、３０７…ＯＲ回路、４０１…減算器、４０２…セレクタ、４０３…減算器、４０４…セレクタ
【図１】
2009265329.tif 000003
【図２】
2009265329.tif 000004
【図３】
2009265329.tif 000005
【図４】
2009265329.tif 000006
【図５】
2009265329.tif 000007
【図６】
2009265329.tif 000008
【図７】
2009265329.tif 000009
【図８】
2009265329.tif 000010
【図９】
2009265329.tif 000011
【図１０】
2009265329.tif 000012
【図１１】
2009265329.tif 000013
【図１２】
2009265329.tif 000014
【図１３】
2009265329.tif 000015
【図１４】
2009265329.tif 000016
【図１５】
2009265329.tif 000017