JP2009265329A - フォント描画装置および情報処理装置 - Google Patents
フォント描画装置および情報処理装置 Download PDFInfo
- Publication number
- JP2009265329A JP2009265329A JP2008114087A JP2008114087A JP2009265329A JP 2009265329 A JP2009265329 A JP 2009265329A JP 2008114087 A JP2008114087 A JP 2008114087A JP 2008114087 A JP2008114087 A JP 2008114087A JP 2009265329 A JP2009265329 A JP 2009265329A
- Authority
- JP
- Japan
- Prior art keywords
- glyph
- contour
- pixel
- data
- maximum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
【課題】グリフ部分の範囲をあらかじめ記憶しなくても、グリフが描画される領域を特定する点の座標を計算すること。
【解決手段】フォント描画装置は、2次元配置され、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、グリフの描画を指示する描画指示が入力される指示入力手段と、描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、2次元座標系における対象画素の座標を描画位置として計算する描画位置計算手段と、対象画素として特定された画素の座標の最大値および最小値を記憶する最大最小記憶手段と、描画位置計算手段により計算された描画位置と最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により最大値および最小値を更新する最大最小更新手段とを有する。
【選択図】図2
【解決手段】フォント描画装置は、2次元配置され、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、グリフの描画を指示する描画指示が入力される指示入力手段と、描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、2次元座標系における対象画素の座標を描画位置として計算する描画位置計算手段と、対象画素として特定された画素の座標の最大値および最小値を記憶する最大最小記憶手段と、描画位置計算手段により計算された描画位置と最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により最大値および最小値を更新する最大最小更新手段とを有する。
【選択図】図2
Description
本発明は、アウトラインフォントを描画する技術に関する。
グリフ(文字の可視化表現またはその構成部分から大きさ及び意匠を正規化した抽象表現)の形をコンピュータ上で表現するためのデータ形式として、アウトラインフォントが知られている。アウトラインフォントは、グリフの形状を、基準となる点の座標と輪郭線の集まりとして表現する形式である。グリフの輪郭線の描画および塗り潰しは、レンダリングメモリ上で、マトリクス状に配置された複数の画素を単にとして行われる。実際にグリフが描画される範囲、すなわち、グリフを包含する外接矩形により切り取られる領域は、このマトリクスのうち一部分であり、しかもその範囲はグリフ毎に異なっている。グリフが描画される範囲が分からないと、レンダリング用メモリからVRAM(Video Random Access Memory)にデータを転送する際、実際にグリフが描画されていない部分も含めてマトリクス全体を転送しなければならなくなり、不必要なメモリアクセスが生じる。ここで、特許文献1は、ストロークフォントにおいて、グリフ部分の範囲をあらかじめ記憶する技術を開示している。
グリフ部分の範囲をグリフ毎に記憶する構成とすると、その範囲を特定する4点(水平方向および垂直方向の最大値および最小値)の座標を記憶する記憶領域が各グリフについて必要になる。さらに、グリフデータをビットマップデータに変化する際に、その4点についてもビットマップデータに変化する必要が生じる。すなわち、少なくとも4回の計算をしなければならない。さらに、複数のパーツグリフを組み合わせて表現される複合グリフを描画する際には、複合グリフについても独自に、グリフ部分の範囲を特定する4点の座標を記憶する必要がある。
これに対し本発明は、グリフ部分の範囲をあらかじめ記憶しなくても、グリフが描画される領域を特定する点の座標を計算する技術に関する。
本発明は、2次元配置され、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、グリフの描画を指示する描画指示が入力される指示入力手段と、前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、
前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置を提供する。
このフォント描画装置によれば、描画位置の最大値および最小値が計算される。
前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置を提供する。
このフォント描画装置によれば、描画位置の最大値および最小値が計算される。
好ましい態様において、このフォント描画装置は、前記メモリのうち、前記描画位置により特定される記憶領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画手段と、前記メモリに書き込まれたデータにより特定される前記輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段と、前記塗り潰し手段により前記塗り潰し処理が行われた後で、前記メモリに記憶されたマトリクス状に配置された複数の画素のデータのうち、前記最大最小記憶手段に記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを出力する出力手段とを有してもよい。
このフォント描画装置によれば、最大値および最小値により特定される領域が出力される。
このフォント描画装置によれば、最大値および最小値により特定される領域が出力される。
別の好ましい態様において、前記グリフデータは、前記輪郭線の向きをさらに示し、前記塗り潰し処理においては、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定されてもよい。
このフォント描画装置によれば、グリフデータの向きに応じて塗り潰し処理が行われる。
このフォント描画装置によれば、グリフデータの向きに応じて塗り潰し処理が行われる。
さらに別の好ましい態様において、前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理であってもよい。
このフォント描画装置によれば、対象線と輪郭線とが交わる向きに応じて増減するパラメータに応じて画素の階調が決定される。
このフォント描画装置によれば、対象線と輪郭線とが交わる向きに応じて増減するパラメータに応じて画素の階調が決定される。
また、本発明は、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、前記記憶装置に記憶されたグリフデータのうち1つのグリフデータにより示されるグリフの描画を指示する描画指示を出力する制御装置と、2次元配置され、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、前記制御装置から前記描画指示が入力される指示入力手段と、前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置を有する情報処理装置を提供する。
情報処理装置によれば、描画位置の最大値および最小値が計算される。
情報処理装置によれば、描画位置の最大値および最小値が計算される。
1.構成
図1は、本発明の一実施形態に係る情報表示装置1のハードウェア構成を示す図である。情報表示装置1は、情報処理装置の一例である。CPU(Central Processing Unit)10は、情報表示装置1の各要素を制御する制御装置である。ROM(Read Only Memory)20は、情報表示装置1の起動・動作に必要なプログラムやデータを記憶する不揮発性の記憶装置である。本実施形態において、ROM20は、フォントに関するデータとしてグリフデータを記憶している。グリフデータとは、グリフの輪郭線および輪郭線の向きを示すデータである(詳細は後述)。RAM(Random Access Memory)30は、CPU10がプログラムを実行する際にワークエリアとして用いられる記憶装置である。表示体40は、供給されたデータに従った画像を表示する装置、この例ではEPD(Electrophoretic Display)である。EPDは、記憶性表示体の一例である。VRAM(Video Random Access Memory)50は、表示するデータの格納に用いられる記憶装置である。表示制御装置60は、CPU10の制御下で、VRAM50に記憶されているデータに従って表示体40を制御する装置である。入力装置70は、ユーザからの指示、データ等の入力に用いられる装置、例えば、ボタン(書き換えボタンやページ送りボタン、決定ボタンなど)・キーパッド・ホイール・レバー・タッチパネル・ペンデバイスなどである。バス80は、要素間のデータや信号の伝送に用いられる伝送路である。バスコントローラ90は、バス80に接続されているすべての装置(モジュール)について、バス権(バスを使用する権利)の調停を行う装置である。フォントプロセッサ100は、フォントの描画に用いられる装置であり、フォント描画装置の一例である。
図1は、本発明の一実施形態に係る情報表示装置1のハードウェア構成を示す図である。情報表示装置1は、情報処理装置の一例である。CPU(Central Processing Unit)10は、情報表示装置1の各要素を制御する制御装置である。ROM(Read Only Memory)20は、情報表示装置1の起動・動作に必要なプログラムやデータを記憶する不揮発性の記憶装置である。本実施形態において、ROM20は、フォントに関するデータとしてグリフデータを記憶している。グリフデータとは、グリフの輪郭線および輪郭線の向きを示すデータである(詳細は後述)。RAM(Random Access Memory)30は、CPU10がプログラムを実行する際にワークエリアとして用いられる記憶装置である。表示体40は、供給されたデータに従った画像を表示する装置、この例ではEPD(Electrophoretic Display)である。EPDは、記憶性表示体の一例である。VRAM(Video Random Access Memory)50は、表示するデータの格納に用いられる記憶装置である。表示制御装置60は、CPU10の制御下で、VRAM50に記憶されているデータに従って表示体40を制御する装置である。入力装置70は、ユーザからの指示、データ等の入力に用いられる装置、例えば、ボタン(書き換えボタンやページ送りボタン、決定ボタンなど)・キーパッド・ホイール・レバー・タッチパネル・ペンデバイスなどである。バス80は、要素間のデータや信号の伝送に用いられる伝送路である。バスコントローラ90は、バス80に接続されているすべての装置(モジュール)について、バス権(バスを使用する権利)の調停を行う装置である。フォントプロセッサ100は、フォントの描画に用いられる装置であり、フォント描画装置の一例である。
CPU10・ROM20・RAM30・VRAM50・表示制御装置60・フォントプロセッサ100は、バス80に直接接続されている。この構成により、CPU10・表示制御装置60・フォントプロセッサ100は、それぞれ独立してメモリ(ROM20・RAM30・VRAM50)にアクセスすることができる。CPU10とフォントプロセッサ100間の信号線は、CPU10からフォントプロセッサ100への描画開始命令の供給、およびフォントプロセッサ100からCPU10への描画完了通知の供給に用いられる。CPU10および表示制御装置60間の信号線は、CPU10から表示制御装置60への画面更新(すなわち表示体40への転送命令)の供給に用いられる。この信号線は、表示体40として液晶ディスプレイ等、記憶性表示体でない表示体を用いた場合には不要である。
図2は、フォントプロセッサ100の構成を示す図である。フォントプロセッサ100は、CPU10からの描画指示に応じてグリフを描画する。すなわち、フォントプロセッサ100は、CPU10からの描画指示に応じて、グリフのデータをVRAM50に書き込む。メインコントローラ101は、フォントプロセッサ100の各要素を制御する。メインコントローラ101は、レジスタ102を有する。レジスタ102は、例えば、メインコントローラ101が読み出すべきデータのアドレスを記憶するのに用いられる。フォント描画コントローラ103は、フォント描画に必要な情報、例えばアフィン変換パラメータを記憶する。フォント描画コントローラ103はさらに、与えられた命令がDrawCharなのかDrawCharFillなのかを記憶する。DrawCharは、輪郭描画処理の実行を指示する命令である。DrawCharFillは、輪郭描画および塗り潰し処理の実行を指示する命令である。輪郭計算モジュール110(輪郭計算手段の一例)は、描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する計算(輪郭計算処理)を行う。描画位置計算モジュール111(描画位置計算手段の一例)は、2次元座標系における対象画素の座標を描画位置として計算する(描画位置計算処理)。レジスタ112(最大最小記憶手段の一例)は、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に対象画素として特定された画素の、描画位置としての座標の最大値および最小値を記憶する。また、描画位置計算モジュール111は、計算された描画位置と、記憶されている最大値および最小値とを比較し、比較結果により最大値および最小値を更新する最大最小更新手段としての機能を有する。
輪郭描画モジュール104(輪郭描画手段の一例)は、命令DrawCharまたは命令DrawCharFillが与えられた場合に、輪郭描画処理を行う。輪郭描画処理は、ワークメモリ105のうち、描画位置により特定される記憶領域に、輪郭線が通る画素であることを示すデータを書き込む処理である。塗り潰しモジュール106(塗り潰し手段の一例)は、ワークメモリ105に書き込まれたデータにより特定される輪郭線の内部を塗り潰す塗り潰し処理を行う。塗り潰しモジュール106は、さらに、塗り潰し処理が行われた後で、ワークメモリ105に記憶された複数の画素のデータのうち、記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを、VRAM50に転送する出力手段としての機能を有する。バスインターフェースモジュール107は、バス80を介してCPU10・ROM20・RAM30等の他の要素との間で信号やデータの入出力を行う。バスインターフェースモジュール107は、CPU10から描画指示が入力される指示入力手段として機能する。メインバス108およびサブバス109は、要素間のデータや信号の伝送に用いられる伝送路である。
輪郭描画モジュール104と塗り潰しモジュール106との間の信号線は、輪郭描画の終了の通知に用いられる。フォント描画コントローラ103と塗り潰しモジュール106との間の信号線は、ワークメモリ105のビット幅、データの範囲などの情報の伝送に用いられる。塗り潰しモジュール106とメインバス108との間の信号線は、背景データの伝送、塗り潰し処理の結果の伝送に用いられる。メインバス108と輪郭計算モジュール110との間の信号線は、グリフデータの伝送に用いられる。フォント描画コントローラ103と描画位置計算モジュール111との間の信号線は、アフィン変換パラメータの伝送に用いられる。輪郭計算モジュール110と描画位置計算モジュール111との間の信号線は、輪郭線を示す情報の伝送に用いられる。フォント描画コントローラ103と描画位置計算モジュール111との間の信号線は、最大値・最小値の伝送に用いられる。描画位置計算モジュール111と輪郭描画モジュール104との間の信号線は、輪郭線が通る画素の座標を示す差分情報の伝送に用いられる。特に説明しないがこれら以外の信号線も、必要なデータや命令の伝送に用いられる。また、2つのワークメモリ105は交互に用いられ、処理の高速化が図られる。
図3は、情報表示装置1の外観を示す図である。情報表示装置1は、筐体の前面に表示体40の表示面、および入力装置70としてのボタン群を有する。
2.動作
続いて、情報表示装置1の動作を説明する。ここではまず、グリフデータの構成について概説し、さらに本実施形態の転送領域計算方法について概説した後で、情報表示装置1の動作を詳細に説明する。
続いて、情報表示装置1の動作を説明する。ここではまず、グリフデータの構成について概説し、さらに本実施形態の転送領域計算方法について概説した後で、情報表示装置1の動作を詳細に説明する。
2−1.グリフデータの構成
図4は、グリフデータを例示する図である。グリフデータは、グリフの輪郭(アウトライン)を描くのに用いられる情報を含んでいる。この例で、グリフデータは、端点を特定する情報として点の座標と、2つの端点を結ぶ直線または曲線を特定する情報として直線または曲線を描画する命令(コマンド)を含む。D1〜D6は輪郭線上の点を表す。命令Moveは、点位置を移動させる命令である。命令Moveは、移動先の点の座標を引数として含む。命令Lineは、直線(線分)を描画させる命令である。命令Lineは、直線の終点の座標を引数として含む。図4の例では用いられていないが命令Curve2は2次のベジェ曲線を描画させる命令である。命令Curve2は、曲線の終点の座標および1つの制御点の座標を引数として含む。命令Curve3は、3次のベジェ曲線を描画させる命令である。命令Curve3は、曲線の終点の座標および2つの制御点の座標を引数として含む。命令EOCは、グリフデータの終端を示す。点D0は所定の基準点である。命令Move(D1)により、点位置がD0からD1に移動する。命令Line(D2)により、D1からD2まで直線が描画される。命令Line(D3)により、D2からD3まで直線が描画される。命令Curve3(D7,D8,D4)により、D3からD4までD7およびD8を制御点として3次のベジェ曲線が描画される。なお点D7およびD8は図示していない。以下同様にして、グリフデータにより図4に示されるような、向きを持った輪郭線が記述される。図4では理解を助けるためにグリフデータを図形的に示したが、グリフデータは実際には命令および点の座標を含むテキストデータまたはバイナリデータである。
図4は、グリフデータを例示する図である。グリフデータは、グリフの輪郭(アウトライン)を描くのに用いられる情報を含んでいる。この例で、グリフデータは、端点を特定する情報として点の座標と、2つの端点を結ぶ直線または曲線を特定する情報として直線または曲線を描画する命令(コマンド)を含む。D1〜D6は輪郭線上の点を表す。命令Moveは、点位置を移動させる命令である。命令Moveは、移動先の点の座標を引数として含む。命令Lineは、直線(線分)を描画させる命令である。命令Lineは、直線の終点の座標を引数として含む。図4の例では用いられていないが命令Curve2は2次のベジェ曲線を描画させる命令である。命令Curve2は、曲線の終点の座標および1つの制御点の座標を引数として含む。命令Curve3は、3次のベジェ曲線を描画させる命令である。命令Curve3は、曲線の終点の座標および2つの制御点の座標を引数として含む。命令EOCは、グリフデータの終端を示す。点D0は所定の基準点である。命令Move(D1)により、点位置がD0からD1に移動する。命令Line(D2)により、D1からD2まで直線が描画される。命令Line(D3)により、D2からD3まで直線が描画される。命令Curve3(D7,D8,D4)により、D3からD4までD7およびD8を制御点として3次のベジェ曲線が描画される。なお点D7およびD8は図示していない。以下同様にして、グリフデータにより図4に示されるような、向きを持った輪郭線が記述される。図4では理解を助けるためにグリフデータを図形的に示したが、グリフデータは実際には命令および点の座標を含むテキストデータまたはバイナリデータである。
2−2.転送領域計算方法の概説
図5は、本実施形態に係る転送領域計算方法を概説する図である。図5(A)−(C)は本実施形態の方法を用いない場合を説明するものである。図5(A)は、通常状態のグリフを示す。このとき、転送領域、すなわちグリフが描画されている領域は、グリフを包含する外接長方形(破線)で囲まれる領域である。図5(B)は、斜体に変形されたグリフを示す。グリフが斜体に変形されると、図5(A)の外接長方形もひし形に変形する。メモリアクセスは長方形の領域に対して行われるので、このときの転送領域はこのひし形を包含する外接長方形で囲まれる領域である。図5(C)は、反時計回りに45°回転されたグリフを示す。グリフが回転されると、図5(A)の外接長方形も回転される。このときの転送領域は回転された外接長方形を包含する外接長方形で囲まれる領域である。
図5は、本実施形態に係る転送領域計算方法を概説する図である。図5(A)−(C)は本実施形態の方法を用いない場合を説明するものである。図5(A)は、通常状態のグリフを示す。このとき、転送領域、すなわちグリフが描画されている領域は、グリフを包含する外接長方形(破線)で囲まれる領域である。図5(B)は、斜体に変形されたグリフを示す。グリフが斜体に変形されると、図5(A)の外接長方形もひし形に変形する。メモリアクセスは長方形の領域に対して行われるので、このときの転送領域はこのひし形を包含する外接長方形で囲まれる領域である。図5(C)は、反時計回りに45°回転されたグリフを示す。グリフが回転されると、図5(A)の外接長方形も回転される。このときの転送領域は回転された外接長方形を包含する外接長方形で囲まれる領域である。
図5(D)−(F)は本実施形態の方法を用いた場合を説明するものである。図5(D)は、通常状態のグリフを示す。このとき、転送領域は、グリフを包含する外接長方形(破線)で囲まれる領域であり、図5(A)の場合と等しい。図5(E)は、斜体に変形されたグリフを、図5(F)は反時計回りに45°回転されたグリフを示す。これらの場合においても、転送領域は変形または回転後のグリフを包含する外接長方形で囲まれる領域である。本実施形態の方法を用いない場合と比較すると、網点で示した部分についての転送を省略することができる。このように、本実施形態によれば、不要なメモリアクセスが削減される。
2−3.情報表示装置1の動作
2−3−1.全体動作
図6は、情報表示装置1の動作を示すフローチャートである。図6に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体40に表示される画像を更新するイベントを契機として開始される。ステップS10において、CPU10は、グリフデータに従って、グリフの描画を指示する描画指示を生成し、生成した描画指示をフォントプロセッサ100に出力する。描画指示が入力されると、フォントプロセッサ100は、初期化処理を行った後で、輪郭計算処理、描画位置計算処理および輪郭描画処理を行い(ステップS20−S40)、その結果を用いて塗り潰し処理を行う(ステップS50)。ある画素について見ると、処理は、輪郭計算処理、描画位置計算処理、輪郭描画処理の順番で行われる。塗り潰し処理が完了すると、フォントプロセッサ100は、ワークメモリ105に記憶されているデータの少なくとも一部をVRAM50に転送する(ステップS60)。
2−3−1.全体動作
図6は、情報表示装置1の動作を示すフローチャートである。図6に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体40に表示される画像を更新するイベントを契機として開始される。ステップS10において、CPU10は、グリフデータに従って、グリフの描画を指示する描画指示を生成し、生成した描画指示をフォントプロセッサ100に出力する。描画指示が入力されると、フォントプロセッサ100は、初期化処理を行った後で、輪郭計算処理、描画位置計算処理および輪郭描画処理を行い(ステップS20−S40)、その結果を用いて塗り潰し処理を行う(ステップS50)。ある画素について見ると、処理は、輪郭計算処理、描画位置計算処理、輪郭描画処理の順番で行われる。塗り潰し処理が完了すると、フォントプロセッサ100は、ワークメモリ105に記憶されているデータの少なくとも一部をVRAM50に転送する(ステップS60)。
2−3−2.輪郭計算モジュール110の動作
図7は、輪郭計算処理の前段、すなわち輪郭計算モジュール110の動作を示すフローチャートである。CPU10から描画指示が入力されると、メインコントローラ101は、描画指示により指定されるグリフデータを読み出し、グリフデータに記述されている命令を順番に輪郭計算モジュール110に与える。
図7は、輪郭計算処理の前段、すなわち輪郭計算モジュール110の動作を示すフローチャートである。CPU10から描画指示が入力されると、メインコントローラ101は、描画指示により指定されるグリフデータを読み出し、グリフデータに記述されている命令を順番に輪郭計算モジュール110に与える。
ステップS201において、輪郭計算モジュール110は、描画位置を初期化する。描画位置とは、ワークメモリ105に記憶された複数の画素のデータのうち、処理の対象となる1つの画素すなわち対象画素の座標をいう。複数の画素はマトリクス状に、すなわち2次元配置されており、xy直交座標系を用いて各画素を特定することができる。座標軸の原点はマトリクスの左上端の点であり、右方向および下方向がx軸およびy軸の正方向である。この例で、描画位置は(x,y)=(0,0)に初期化される。
ステップS202において、輪郭計算モジュール110は、与えられている命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S202:YES)、輪郭計算モジュール110は、処理をステップS203に移行する。与えられた命令がMoveでないと判断された場合(S202:NO)、輪郭計算モジュール110は、処理をステップS206に移行する。
ステップS203において、輪郭計算モジュール110は、命令Moveの引数から移動先の点の座標を計算し、パラメータP3に代入する。パラメータP3は、直線または曲線の終点を示す。このときの座標は、ワークメモリ105においてマトリクス状に配置された複数の画素の2次元座標ではなく、グリフデータにおいて規格化された座標である。ステップS204において、輪郭計算モジュール110は、パラメータP3に対してアフィン変換を適用する。ステップS205において、輪郭計算モジュール110は、後段に、命令Moveおよび変換後のパラメータP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS206において、輪郭計算モジュール110は、与えられている命令がLineであるか判断する。与えられた命令がLineであると判断された場合(S206:YES)、輪郭計算モジュール110は、処理をステップS207に移行する。与えられた命令がLineでないと判断された場合(S206:NO)、輪郭計算モジュール110は、処理をステップS210に移行する。
ステップS207において、輪郭計算モジュール110は、命令Lineの引数から直線の端点の座標を計算し、パラメータP0およびP3に代入する。パラメータP0は、直線または曲線の始点を示す。ステップS208において、輪郭計算モジュール110は、パラメータP0およびP3に対してアフィン変換を適用する。ステップS209において、輪郭計算モジュール110は、後段に、命令Lineおよび変換後のパラメータP0およびP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS210において、輪郭計算モジュール110は、与えられている命令がCurve2であるか判断する。与えられた命令がCurve2であると判断された場合(S210:YES)、輪郭計算モジュール110は、処理をステップS211に移行する。与えられた命令がCurve2でないと判断された場合(S210:NO)、輪郭計算モジュール110は、処理をステップS214に移行する。
ステップS211において、輪郭計算モジュール110は、命令Curve2の引数からベジェ直線の端点および制御点の座標を計算し、パラメータP0、P1およびP3に代入する。パラメータP1は、2次ベジェ曲線の制御点を示す。ステップS212において、輪郭計算モジュール110は、パラメータP0、P1およびP3に対してアフィン変換を適用する。ステップS213において、輪郭計算モジュール110は、後段に、命令Curve2および変換後のパラメータP0、P1およびP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS214において、輪郭計算モジュール110は、与えられている命令がCurve3であるか判断する。与えられた命令がCurve3であると判断された場合(S214:YES)、輪郭計算モジュール110は、処理をステップS215に移行する。与えられた命令がCurve3でないと判断された場合(S214:NO)、輪郭計算モジュール110は、処理をステップS219に移行する。
ステップS215において、輪郭計算モジュール110は、命令Curve3の引数からベジェ直線の端点および2つの制御点の座標を計算し、パラメータP0、P1、P2およびP3に代入する。パラメータP2は、3次ベジェ曲線の制御点を示す。ステップS216において、輪郭計算モジュール110は、パラメータP0、P1、P2およびP3に対してアフィン変換を適用する。ステップS217において、輪郭計算モジュール110は、後段に、命令Curve3および変換後のパラメータP0、P1、P2およびP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS218において、輪郭計算モジュール110は、パラメータP3により示される座標が新たな描画位置となるように、描画位置を更新する。描画位置を更新すると、輪郭計算モジュール110は、処理をステップS202に移行する。
ステップS219において、輪郭計算モジュール110は、与えられている命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S219:YES)、輪郭計算モジュール110は、後段に命令EOCを出力する。命令EOCを出力すると、輪郭計算モジュール110は、図7のフローを終了する。与えられた命令がEOCでないと判断された場合(S219:NO)、輪郭計算モジュール110は、処理をステップS221に移行する。
ステップS221において、輪郭計算モジュール110は、エラーレジスタに「1」を書き込む。エラーレジスタは、エラー発生の有無を示すデータを記憶する。記憶されているデータが「0」のときはエラーが発生していないことを、データが「1」のときはエラーが発生したことを示す。エラーレジスタに「1」が書き込まれると、CPU10はエラーに対処する処理、この例ではシステムのリセットを行う。システムがリセットされると、図7のフローは終了する。
以上で説明したように、図7のフローによれば、輪郭計算モジュール110の後段に、命令Move、Line、Curve2、Curve3、EOCのいずれか、および必要な座標が送られる。
図8は、輪郭計算処理の後段、すなわち輪郭計算モジュール110の動作を示すフローチャートである。ステップS250において、輪郭計算モジュール110は、スタックが空であるか判断する。この例でスタックはLIFO(Last In First Out)であり、ワークメモリ105上にその記憶領域が設けられる。初期状態においてスタックは空である。スタックが空であると判断された場合(S250:YES)、輪郭計算モジュール110は、処理をステップS251に移行する。スタックが空でないと判断された場合(S250:NO)、輪郭計算モジュール110は、処理をステップS263に移行する。
ステップS251において、輪郭計算モジュール110は、前段から命令を取得する。ステップS252において、輪郭計算モジュール110は、与えられた命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S252:YES)、輪郭計算モジュール110は、ステップS253において、描画位置計算モジュール111に命令MoveおよびパラメータP3を出力する。与えられた命令がMoveでないと判断された場合(S252:NO)、輪郭計算モジュール110は、処理をステップS254に移行する。
ステップS254において、輪郭計算モジュール110は、与えられた命令がLineであるか判断する。与えられた命令がLineであると判断された場合(S254:YES)、輪郭計算モジュール110は、ステップS255において、命令LineおよびパラメータP0−P3をスタックに積む(プッシュする)。与えられた命令がLineでないと判断された場合(S254:NO)、輪郭計算モジュール110は、処理をステップS256に移行する。
ステップS256において、輪郭計算モジュール110は、与えられた命令がCurve2であるか判断する。与えられた命令がCurve2であると判断された場合(S256:YES)、輪郭計算モジュール110は、ステップS257において、命令Curve2およびパラメータP0−P3をスタックに積む。与えられた命令がCurve2でないと判断された場合(S256:NO)、輪郭計算モジュール110は、処理をステップS258に移行する。
ステップS258において、輪郭計算モジュール110は、与えられた命令がCurve3であるか判断する。与えられた命令がCurve3であると判断された場合(S258:YES)、輪郭計算モジュール110は、ステップS259において、命令Curve3およびパラメータP0−P3をスタックに積む。与えられた命令がCurve3でないと判断された場合(S258:NO)、輪郭計算モジュール110は、処理をステップS260に移行する。
ステップS260において、輪郭計算モジュール110は、与えられた命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S260:YES)、輪郭計算モジュール110は、ステップS261において、描画位置計算モジュール111に命令EOCを出力する。命令EOCを出力すると、輪郭計算モジュール110は、図8のフローを終了する。与えられた命令がEOCでないと判断された場合(S260:NO)、輪郭計算モジュール110は、処理をステップS262に移行する。
ステップS262において、輪郭計算モジュール110は、エラーレジスタに「1」を書き込む。エラーレジスタは、エラー発生の有無を示すデータを記憶する。記憶されているデータが「0」のときはエラーが発生していないことを、データが「1」のときはエラーが発生したことを示す。エラーレジスタに「1」が書き込まれると、CPU10はエラーに対処する処理、この例ではシステムのリセットを行う。システムがリセットされると、図8のフローは終了する。
ステップS263において、輪郭計算モジュール110は、スタックからデータを取得する(ポップする)。取得されるデータは、命令およびパラメータP0−P3である。ステップS264において、輪郭計算モジュール110は、データによって表される距離がしきい値、この例では1画素よりも小さいか判断する。「データによって表される距離」の詳細は後述する。距離がしきい値よりも小さいと判断された場合(S264:YES)、輪郭計算モジュール110は、処理をステップS267に移行する。距離がしきい値よりも小さくないと判断された場合(S264:NO)、輪郭計算モジュール110は、処理をステップS265に移行する。
ステップS265において、輪郭計算モジュール110は、データを分割する。ステップS266において、輪郭計算モジュール110は、分割したデータを、後半、前半の順番でスタックに積む。分割したデータをスタックに積むと、輪郭計算モジュール110は、処理をステップS250に移行する。こうして、「データによって表される距離」がしきい値よりも小さくなるまで繰り返しデータの分割が行われる。
図9は、データの分割を説明する図である。図9(A)は、命令Lineの場合を示している。この場合、ステップS264における「データによって表される距離」は、点P0と点P3の間の距離(すなわち線分P0P3の長さ)である。データの分割は次のように行われる。まず、輪郭計算モジュール110は、点P0と点P3の中点Mの座標を計算する。輪郭計算モジュール110は、点Mを用いて、データを前半と後半に分割する。前半は、命令Lineおよび引数P0、Mを含むデータであり、後半は、命令Lineおよび引数M、P3を含むデータである。分割後のデータにおいて点Mは、新たな点P0またはP3として扱われる。
図9(B)は、命令Curve2の場合を示している。この場合、「データによって表される距離」は、線分P0P3、P0P1およびP1P3の長さである。データの分割は次のように行われる。輪郭計算モジュール110は、点P0と点P1の中点M0の座標を計算する。輪郭計算モジュール110は、点P1と点P3の中点M3の座標を計算する。輪郭計算モジュール110は、点M0と点M3の中点Nの座標を計算する。輪郭計算モジュール110は、点Nを用いて、データを前半と後半に分割する。前半は、命令Curve2および引数P0、M0、Nを含むデータであり、後半は、命令Curve2および引数N、M3、P3を含むデータである。分割後のデータにおいて点Nは、新たな点P0またはP3として扱われる。点M0およびM3は、新たな点P1として扱われる。
図9(C)は、命令Curve3の場合を示している。この場合、「データによって表される距離」は、線分P0P3、P0P1、P1P2およびP2P3の長さである。データの分割は次のように行われる。輪郭計算モジュール110は、点P0と点P1の中点M0の座標を計算する。輪郭計算モジュール110は、点P1と点P2の中点M1の座標を計算する。輪郭計算モジュール110は、点P2と点P3の中点M3の座標を計算する。輪郭計算モジュール110は、点M0と点M1の中点N0の座標を計算する。輪郭計算モジュール110は、点M1と点M3の中点N3の座標を計算する。輪郭計算モジュール110は、点N0と点N3の中点Lの座標を計算する。輪郭計算モジュール110は、点Lを用いて、データを前半と後半に分割する。前半は、命令Curve3および引数P0、M0、N0、Lを含むデータであり、後半は、命令Curve2および引数L、N3、M3、P3を含むデータである。分割後のデータにおいて点Lは、新たな点P0またはP3として扱われる。点M0およびN3は、新たな点P1として扱われる。点N0およびM3は、新たな点P2として扱われる。
再び図8を参照する。ステップS267において、輪郭計算モジュール110は、点P0と点P3の差分ベクトルを計算する。ステップS268において、輪郭計算モジュール110は、差分ベクトルがゼロベクトルであるか判断する。差分ベクトルがゼロベクトルであると判断された場合(S268:YES)、輪郭計算モジュール110は、処理をステップS250に移行する。差分ベクトルがゼロベクトルでないと判断された場合(S268:NO)、輪郭計算モジュール110は、ステップS269において、描画位置計算モジュール111に、命令dVectorおよびその引数、あるいは必要に応じて他の命令および引数を出力する。命令dVectorは、次に輪郭線が通る画素すなわち輪郭線として塗りつぶさせる画素を特定する命令であり、差分ベクトルを引数として含む。命令dVectorは、命令Line、Curve2またはCurve3が細分化されたものである。
このように、輪郭計算モジュール110は、グリフデータに記述された命令Line、Curve2およびCurve3を細分化し、細分化したデータを後段のモジュールに出力する。
2−3−3.描画位置計算モジュール111の動作
図10は、描画位置計算モジュール111の構成を示す図である。輪郭計算モジュール110から出力された命令は、入力cmdとして描画位置計算モジュール111に入力される。描画位置計算モジュール111に入力される命令は、Move、dVector、EOCのいずれかである。セレクタ201は、入力された命令がdVectoreであった場合は「1」を出力し、命令がMoveまたはEOCであった場合は「0」を出力する。ラッチ202は、命令をラッチする。ラッチされた命令は、出力cmdとして後段の輪郭描画モジュール104に出力される。
図10は、描画位置計算モジュール111の構成を示す図である。輪郭計算モジュール110から出力された命令は、入力cmdとして描画位置計算モジュール111に入力される。描画位置計算モジュール111に入力される命令は、Move、dVector、EOCのいずれかである。セレクタ201は、入力された命令がdVectoreであった場合は「1」を出力し、命令がMoveまたはEOCであった場合は「0」を出力する。ラッチ202は、命令をラッチする。ラッチされた命令は、出力cmdとして後段の輪郭描画モジュール104に出力される。
輪郭計算モジュール110から出力される命令の引数は、入力dyおよびdxとして描画位置計算モジュール111に入力される。具体的には、入力dyおよびdxは、入力された命令がdVectorのときは差分ベクトルのy成分およびx成分であり、命令がMoveのときは移動先の位置ベクトルのy成分およびx成分である。セレクタ203は、セレクタ201の出力が「0」であるとき(すなわち輪郭計算モジュール110から命令MoveまたはEOCが入力されたとき)は入力dyを出力し、セレクタ201の出力が「1」であるとき(すなわち輪郭計算モジュール110から命令dVectorが入力されたとき)は加算器204からの入力を出力する。加算器204は、入力dyおよびラッチ205からの入力を加算する。ラッチ205は、現在処理対象となっている画素のy座標(y)をラッチする。ラッチ206は、ラッチ205からの入力、すなわち1クロック前のy座標(py)をラッチする。セレクタ207は、入力dyがdy≧0のときはpyを、dy<0のときはyを出力する。
セレクタ208は、セレクタ201の出力が「0」であるときは入力dxを出力し、セレクタ201の出力が「1」であるときは加算器209からの入力を出力する。加算器209は、入力dxおよびラッチ210からの入力を加算する。ラッチ210は、現在処理対象となっている画素のx座標(x)をラッチする。ラッチ211は、ラッチ210からの入力、すなわち1クロック前のx座標(px)をラッチする。セレクタ212は、入力dy(入力dxではない)がdy≧0のときはpxを、dy<0のときはxを出力する。
クリッピングモジュール213は、対象画素の座標を、クリップされる領域(クリップ領域)内に修正する機能を有する。クリップ領域は、プログラムに従って動作するCPU10によって指定される。CPU10は、クリップ領域のx座標およびy座標の最大値および最小値をcl_xmax、cl_xmin、cl_ymaxおよびcl_yminとしてフォントプロセッサ100に出力する。
図11は、クリッピングモジュール213の構成を示す図である。セレクタ207の出力すなわち対象画素のy座標は、入力aとしてクリッピングモジュール213に入力される。CPU10の出力cl_ymaxおよびcl_yminは、それぞれ入力amaxおよびaminとしてクリッピングモジュール213に入力される。減算器301は、aからamaxを減算した結果を出力する。セレクタ302は、a−amax<0の場合すなわちa<amaxの場合、0を出力し、a−amax≧0の場合すなわちa≧amaxの場合、「1」を出力する。減算器303は、aからaminを減算した結果を出力する。セレクタ304は、a−amin≧0の場合すなわちa≧aminの場合、「0」を出力し、a−amin<0の場合すなわちa<aminの場合、「1」を出力する。セレクタ302またはセレクタ304の出力が「1」であるということは、対象画素の座標を、クリップ領域内に修正する必要があることを示す。セレクタ305は、セレクタ304の出力が「0」である場合にはaを出力し、セレクタ304の出力が「1」である場合にはaminを出力する。セレクタ306は、セレクタ302の出力が「1」である場合にはamaxを出力raとして出力し、セレクタ302の出力が0である場合にはセレクタ305からの入力を出力raとして出力する。出力raは、クリップ領域内に修正された対象画素の座標を示す。OR回路307は、セレクタ302の出力とセレクタ304の出力の論理和を、出力clippedとして出力する。出力clippedは、「0」のときクリッピングが行われていないことを示し、「1」のときクリッピングが行われたことを示す。
再び図10を参照する。最大最小更新モジュール214は、レジスタ112に記憶されている、y座標の最大値(ymax)および最小値(ymin)を更新する。レジスタ112は、出力ymaxおよびyminを出力する。最大最小更新モジュール214には、クリッピングモジュール213の出力ra、レジスタ112の出力ymaxおよびyminが入力される。
図12は、最大最小更新モジュール214の構成を示す図である。入力aは、クリッピングモジュール213の出力ra、すなわちクリップ領域内に修正された対象画素の座標である。入力amaxおよびaminは、レジスタ112の出力ymaxおよびymin、すなわちy座標の最大値および最小値である。減算器401は、aからamaxを減算した結果を出力する。セレクタ402は、a−amax≧0の場合すなわちa≧amaxの場合、出力ramaxとしてaを出力し、a−amax<0の場合すなわちa<amaxの場合、出力ramaxとしてamaxを出力する。すなわち、最大最小更新モジュール214は、対象画素のy座標がレジスタ112に記憶されている最大値よりも大きければ対象画素のy座標を出力し、対象画素のy座標が最大値よりも小さければ最大値を出力する。減算器403は、aからaminを減算した結果を出力する。セレクタ404は、a−amin<0の場合すなわちa<aminの場合、出力raminとしてaを出力し、a−amin≧0の場合すなわちa≧aminの場合、出力raminとしてaminを出力する。すなわち、最大最小更新モジュール214は、対象画素のy座標がレジスタ112に記憶されている最小値よりも小さければ対象画素のy座標を出力し、対象画素のy座標が最小値よりも大きければ最小値を出力する。
再び図10を参照する。最大最小更新モジュール214の出力ramaxおよびraminは、それぞれrymaxおよびryminとしてレジスタ112に出力される。こうしてレジスタ112は、更新された最大値および最小値を記憶し、それぞれymaxおよびyminとして再び描画位置計算モジュール111に出力する。
クリッピングモジュール215および最大最小更新モジュール216は、クリッピングモジュール213および最大最小更新モジュール214と同一の構成を有しているが、y座標ではなくx座標が入力される点が異なる。したがって、raはrxとして輪郭描画モジュール104に出力される。また、ramaxおよびraminは、rxmaxおよびrxminとしてレジスタ112に出力される。こうしてレジスタ112は、更新された最大値および最小値を記憶し、それぞれxmaxおよびxminとして再び描画位置計算モジュール111に出力する。
OR回路217は、クリッピングモジュール213の出力clippedおよびクリッピングモジュール215の出力clippedの論理和を出力strokeとして出力する。出力strokeは、「1」のときx座標およびy座標のいずれかでクリッピングが行われたことを示し、「0」のときx座標およびy座標のどちらでもクリッピングが行われていないことを示す。セレクタ218は、クリッピングモジュール213の出力clippedが「0」の場合はdyを出力し、出力clippedが「1」の場合は「0」を出力する。描画位置計算モジュール111は、セレクタ218の出力を、出力dwnとして輪郭描画モジュール104に出力する。出力dwnは、輪郭線のy方向における変化量を示す。
以上で説明したように、描画位置計算モジュール111は、cmd、dy、dx、cl_ymax、cl_ymin、ymax、ymin、cl_xmax、cl_xmin、xmaxおよびxminが入力されると、cmd、stroke、ry、rx、dwn、rymax、rymin、rxmin、rxminを出力する。
2−3−4.輪郭描画モジュール104の動作
図13は、輪郭描画モジュール104の動作を示すフローチャートである。ステップS300において、輪郭描画モジュール104は、輪郭計算モジュール110から出力された命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S300:YES)、輪郭描画モジュール104は、処理をステップS308に移行する。与えられた命令がEOCでないと判断された場合(S300:NO)、輪郭描画モジュール104は、処理をステップS301に移行する。
図13は、輪郭描画モジュール104の動作を示すフローチャートである。ステップS300において、輪郭描画モジュール104は、輪郭計算モジュール110から出力された命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S300:YES)、輪郭描画モジュール104は、処理をステップS308に移行する。与えられた命令がEOCでないと判断された場合(S300:NO)、輪郭描画モジュール104は、処理をステップS301に移行する。
ステップS301において、輪郭描画モジュール104は、与えられた命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S301:YES)、ワークメモリ105にアクセスする必要がないので、輪郭描画モジュール104は、その画素については何も処理をしない。与えられた命令がMoveでないと判断された場合(S301:NO)、すなわち、命令dVectorが与えられた場合、輪郭描画モジュール104は、処理をステップS302に移行する。
ステップS302において、輪郭描画モジュール104は、stroke=0かつdwn=0であるか判断する。stroke=0かつdwn=0であると判断された場合(S302:YES)、ワークメモリ105にアクセスする必要がないので、輪郭描画モジュール104は、その画素については何も処理をしない。stroke=0かつdwn=0でないと判断された場合(S302:NO)、輪郭描画モジュール104は、処理をステップS303に移行する。
ステップS303において、輪郭描画モジュール104は、画素の位置(rx,ry)から、その画素のデータを記憶しているワークメモリ105のアドレスを算出する。
ステップS304において、輪郭描画モジュール104は、ワークメモリ105のうちステップS303で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークstroke(ストローク情報)および巻き数変化量dwnを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、1つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量dwnが記録されている。
ステップS304において、輪郭描画モジュール104は、ワークメモリ105のうちステップS303で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークstroke(ストローク情報)および巻き数変化量dwnを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、1つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量dwnが記録されている。
ステップS305において、輪郭描画モジュール104は、ストローク情報を上書きする。描画位置計算処理から与えられたストロークがstroke=0である場合、輪郭描画モジュール104は、その画素のストローク情報を変更しない。与えられたストロークがstroke=0である場合、輪郭描画モジュール104は、その画素のストローク情報を、「1」に変更する。ステップS306において、輪郭描画モジュール104は、画素の巻き数変化量にdwnを加算する。例えば、画素の巻き数変化量として「2」が記憶されており与えられた巻き数変化量dwn=+1であった場合、画素の巻き数変化量は「3」となる。ステップS307において、輪郭描画モジュール104は、更新したデータでワークメモリ105上のデータを上書きする。
ステップS308において、輪郭描画モジュール104は、輪郭描画処理が終了したことを塗り潰しモジュール106に通知する。
2−3−3.塗り潰しモジュール106の動作
図14は、フォントプロセッサ100の塗り潰しモジュール106の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール106は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをVRAM50に転送する転送処理を実行する機能を有する。図14のフローは、図13のステップS308において輪郭描画モジュール104から塗り潰しモジュール106に輪郭描画処理の終了が通知されたことを契機として開始される。
図14は、フォントプロセッサ100の塗り潰しモジュール106の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール106は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをVRAM50に転送する転送処理を実行する機能を有する。図14のフローは、図13のステップS308において輪郭描画モジュール104から塗り潰しモジュール106に輪郭描画処理の終了が通知されたことを契機として開始される。
ステップS400において、塗り潰しモジュール106は、パラメータyを初期化する。パラメータxおよびyは、画素の座標を示す。この例で、塗り潰しモジュール106は、y=yMinとしてパラメータyを初期化する。yMinはフォントを描画する領域のy座標の最小値である。以下、マトリクス状に配置された複数の画素のうちパラメータyで特定される行を「対象行」という。
ステップS401において、塗り潰しモジュール106は、まだ対象行となっていない行があるか、具体的にはパラメータyがy≦yMaxを満たすか判断する。yMaxはフォントを描画する領域のy座標の最大値である。まだ処理されていない行があると判断された場合(S401:YES)、塗り潰しモジュール106は、処理をステップS402に移行する。処理されていない行はないと判断された場合(S401:NO)、塗り潰しモジュール106は、図14の処理を終了する。
ステップS402において、塗り潰しモジュール106は、パラメータwnにゼロを代入する。パラメータwnは巻き数(winding number)を示す。巻き数は、対象行と輪郭線とがある向き(例えば、上向き)で交わるときに増加し、対象行と輪郭線とが別の向き(例えば、下向き)で交わるときに減少する。
ステップS403において、塗り潰しモジュール106は、パラメータxを初期化する。この例で、塗り潰しモジュール106は、x=xMinとしてパラメータxを初期化する。xMinはフォントを描画する領域のx座標の最小値である。塗り潰し処理において対象行のうちパラメータxで特定される画素を「対象画素」という。
ステップS404において、塗り潰しモジュール106は、対象行の中にまだ対象画素となっていない画素があるか、具体的にはパラメータxがx≦xMaxを満たすか判断する。xMaxはフォントを描画する領域のx座標の最大値である。まだ対象画素となっていない画素があると判断された場合(S404:YES)、塗り潰しモジュール106は、処理をステップS406に移行する。対象画素となっていない画素はないと判断された場合(S404:NO)、塗り潰しモジュール106は、処理をステップS405に移行する。
ステップS405において、塗り潰しモジュール106は、パラメータyを更新する。この例で、塗り潰しモジュール106は、y=y+1としてパラメータyを更新する。パラメータyを更新すると、塗り潰しモジュール106は、処理をステップS401に移行する。
ステップS406において、塗り潰しモジュール106は、対象画素の背景データ(背景の階調を示すデータ)を、ワークメモリ105に書き込む。背景データは、例えばRAM30から読み出される。
ステップS407において、塗り潰しモジュール106は、ワークメモリ105に記憶されている輪郭を示すビットマップデータ(輪郭データ)から、巻き数変化量wdnを取得する。詳細には以下のとおりである。塗り潰しモジュール106は、パラメータxおよびyから、対象画素のデータを記憶しているアドレスを算出する。塗り潰しモジュール106は、算出されたアドレスから対象画素のデータを読み出す。塗り潰しモジュール106は、読み出されたデータから巻き数変化量wdnを抽出する。
ステップS408において、塗り潰しモジュール106は、パラメータwnの値をwn=wn+dwnとして更新する。パラメータwnは対象行が更新されるたびにゼロに初期化される(ステップS402)から、パラメータwnは、対象行を基準点(この例では左端点)から1画素ずつ順番に、巻き数変化量wdnを積算した値である。
図15は、巻き数wnの変化を例示する図である。図15(A)は、輪郭が描画されたビットマップデータの一部を示す。この例では、4本の輪郭線が描かれている。マトリクスの上部に記載されている矢印は、輪郭線の向きを示している。図15(B)は、図15(A)のビットマップデータのうち上から2行目の画素の巻き数の変化を示している。処理の始点(左端点)においては巻き数wnの初期値としてゼロが与えられる。1画素ずつ右に向かって処理され、輪郭線が現れるたびにその向きに応じて巻き数が増加または減少する。
再び図14を参照する。ステップS409において、塗り潰しモジュール106は、画素を塗り潰す条件が満たされたか判断する。ここでは、画素を塗り潰す条件として、巻き数wnとストロークstrokeの値が、(wn,stroke)=(0,0)以外であるという条件が用いられる。画素を塗り潰す条件が満たされたと判断された場合(S409:YES)、塗り潰しモジュール106は、処理をステップS410に移行する。画素を塗り潰す条件が満たされていないと判断された場合(S409:NO)、塗り潰しモジュール106は、処理をステップS411に移行する。
ステップS410において、塗り潰しモジュール106は、対象画素を塗り潰す。すなわち、対象画素の階調(カラー表示の場合、各色要素の階調)を指定された値にする。
ステップS411において、塗り潰しモジュール106は、パラメータxをx=x+1として更新する。これにより対象行が更新される。対象行を更新すると、塗り潰しモジュール106は、処理をステップS404に移行する。
以上の処理により、ワークメモリ105に記憶された輪郭線のビットマップデータの内部は塗りつぶされる。塗り潰しモジュール106は、こうして生成されたデータを、バスインターフェースモジュール107およびバス80を介してVRAM50に転送する。塗り潰し処理が完了すると、フォントプロセッサ100は、塗り潰し処理の完了をCPU10に通知する。
2−4.実施形態の効果
以上で説明したように本実施形態によれば、レンダリングメモリにおけるグリフが占める部分、すなわち水平方向および垂直方向の最大値および最小値が、グリフが描画されるたびに逐一、動的に計算される。この計算はハードウェアで、後段への出力と並列で行われるので、計算に必要な時間すなわちこの計算による後段への出力の遅延は実質的にゼロである。
以上で説明したように本実施形態によれば、レンダリングメモリにおけるグリフが占める部分、すなわち水平方向および垂直方向の最大値および最小値が、グリフが描画されるたびに逐一、動的に計算される。この計算はハードウェアで、後段への出力と並列で行われるので、計算に必要な時間すなわちこの計算による後段への出力の遅延は実質的にゼロである。
3.他の実施形態
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち2つ以上のものが組み合わせて用いられてもよい。
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち2つ以上のものが組み合わせて用いられてもよい。
3−1.変形例1
グリフデータの形式は、図4で説明したものに限定されない。Move、Line、Curve2、Curve3、EOC以外の命令が用いられてもよい。曲線を記述する関数として、4次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが2つのパーツグリフから構成される例を説明したが、複合グリフは3つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
グリフデータの形式は、図4で説明したものに限定されない。Move、Line、Curve2、Curve3、EOC以外の命令が用いられてもよい。曲線を記述する関数として、4次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが2つのパーツグリフから構成される例を説明したが、複合グリフは3つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
3−2.変形例2
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数wnに限定されない。巻き数wnは輪郭線の向きに応じて1ずつ増減するパラメータであったが、増減の単位は1でなくてもよい。また、実施形態では対象行を決めて、対象行について1画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について1画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量dwnは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの1つの行または1つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数wnに限定されない。巻き数wnは輪郭線の向きに応じて1ずつ増減するパラメータであったが、増減の単位は1でなくてもよい。また、実施形態では対象行を決めて、対象行について1画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について1画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量dwnは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの1つの行または1つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
3−3.変形例3
実施形態において、輪郭計算処理、描画位置計算処理、および輪郭描画処理は、それぞれ異なるモジュールにより実行された。しかし、単一のモジュールまたはプロセッサが、複数の処理を行う機能を有していてもよい。あるいは、複数のモジュールまたはプロセッサの集合が全体として、単一の処理を行う機能を有していてもよい。
また、実施形態において、レジスタ112は、描画位置計算モジュール111の外部に設けられていた。しかし、描画位置計算モジュール111がレジスタ112を内蔵する構成であってもよい。あるいは、最大最小更新モジュール214がレジスタ112を内蔵する構成であってもよい。
さらに、スタックの記憶領域はその機能を発揮できる限りにおいてどの記憶装置上に設けられてもよい。
実施形態において、輪郭計算処理、描画位置計算処理、および輪郭描画処理は、それぞれ異なるモジュールにより実行された。しかし、単一のモジュールまたはプロセッサが、複数の処理を行う機能を有していてもよい。あるいは、複数のモジュールまたはプロセッサの集合が全体として、単一の処理を行う機能を有していてもよい。
また、実施形態において、レジスタ112は、描画位置計算モジュール111の外部に設けられていた。しかし、描画位置計算モジュール111がレジスタ112を内蔵する構成であってもよい。あるいは、最大最小更新モジュール214がレジスタ112を内蔵する構成であってもよい。
さらに、スタックの記憶領域はその機能を発揮できる限りにおいてどの記憶装置上に設けられてもよい。
3−4.他の変形例
情報表示装置1のハードウェア構成は図1に示されるものに限定されない。必要な機能構成を実現できるものであれば、どのようなハードウェア構成を有する装置が用いられてもよい。フォントプロセッサ100についても同様である。また上述の実施形態では情報表示装置1が電子ペーパである例について説明したが、必要な機能を有するものであれば、パーソナルコンピュータ、PDA(Personal Digital Assistant)、携帯電話機など電子ペーパ以外の装置であってもよい。実施形態において情報表示装置1は表示装置(表示体107)を内蔵していたが、表示装置は外付けであってもよい。
情報表示装置1のハードウェア構成は図1に示されるものに限定されない。必要な機能構成を実現できるものであれば、どのようなハードウェア構成を有する装置が用いられてもよい。フォントプロセッサ100についても同様である。また上述の実施形態では情報表示装置1が電子ペーパである例について説明したが、必要な機能を有するものであれば、パーソナルコンピュータ、PDA(Personal Digital Assistant)、携帯電話機など電子ペーパ以外の装置であってもよい。実施形態において情報表示装置1は表示装置(表示体107)を内蔵していたが、表示装置は外付けであってもよい。
上述の実施形態においてCPU10によって実行されるプログラムは、磁気記録媒体(磁気テープ、磁気ディスク(HDD(Hard Disk Drive)、FD(Flexible Disk))など)、光記録媒体(光ディスク(CD(Compact Disk)、DVD(Digital Versatile Disk))など)、光磁気記録媒体、半導体メモリ(フラッシュROMなど)などのコンピュータ読取り可能な記録媒体に記憶した状態で提供されてもよい。また、このプログラムは、インターネットのようなネットワーク経由でダウンロードされてもよい。
1…情報表示装置、10…CPU、20…ROM、30…RAM、40…表示体、50…VRAM、60…表示制御装置、70…入力装置、80…バス、90…バスコントローラ、100…フォントプロセッサ、101…メインコントローラ、103…フォント描画コントローラ、104…輪郭描画モジュール、105…ワークメモリ、106…塗り潰しモジュール、107…バスインターフェースモジュール、108…メインバス、109…サブバス、110…輪郭計算モジュール、111…描画位置計算モジュール、112…レジスタ、201…セレクタ、202…ラッチ、203…セレクタ、204…加算器、205…ラッチ、206…ラッチ、207…セレクタ、208…セレクタ、209…加算器、210…ラッチ、211…ラッチ、212…セレクタ、213…クリッピングモジュール、214…最大最小更新モジュール、215…クリッピングモジュール、216…最大最小更新モジュール、217…OR回路、218…セレクタ、301…減算器、302…セレクタ、303…減算器、304…セレクタ、305…セレクタ、306…セレクタ、307…OR回路、401…減算器、402…セレクタ、403…減算器、404…セレクタ
Claims (5)
- 2次元配置され、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、
グリフの描画を指示する描画指示が入力される指示入力手段と、
前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、
前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、
前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、
前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段と
を有するフォント描画装置。 - 前記メモリのうち、前記描画位置により特定される記憶領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画手段と、
前記メモリに書き込まれたデータにより特定される前記輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段と、
前記塗り潰し手段により前記塗り潰し処理が行われた後で、前記メモリに記憶されたマトリクス状に配置された複数の画素のデータのうち、前記最大最小記憶手段に記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを出力する出力手段と
を有する請求項1に記載のフォント描画装置。 - 前記グリフデータは、前記輪郭線の向きをさらに示し、
前記塗り潰し処理においては、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される
ことを特徴とする請求項2に記載のフォント描画装置。 - 前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理である
ことを特徴とする請求項3に記載のフォント描画装置。 - グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、
前記記憶装置に記憶されたグリフデータのうち1つのグリフデータにより示されるグリフの描画を指示する描画指示を出力する制御装置と、
2次元配置され、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、前記制御装置から前記描画指示が入力される指示入力手段と、前記描画指示により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記描画指示により描画が指示されたグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する最大最小記憶手段と、前記描画位置計算手段により計算された描画位置と前記最大最小記憶手段に記憶されている最大値および最小値とを比較し、比較結果により前記最大値および最小値を更新する最大最小更新手段とを有するフォント描画装置と
を有する情報処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008114087A JP2009265329A (ja) | 2008-04-24 | 2008-04-24 | フォント描画装置および情報処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008114087A JP2009265329A (ja) | 2008-04-24 | 2008-04-24 | フォント描画装置および情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009265329A true JP2009265329A (ja) | 2009-11-12 |
Family
ID=41391272
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008114087A Pending JP2009265329A (ja) | 2008-04-24 | 2008-04-24 | フォント描画装置および情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009265329A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116188293A (zh) * | 2022-12-21 | 2023-05-30 | 北京海天瑞声科技股份有限公司 | 图像处理方法、装置、设备、介质及程序产品 |
-
2008
- 2008-04-24 JP JP2008114087A patent/JP2009265329A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116188293A (zh) * | 2022-12-21 | 2023-05-30 | 北京海天瑞声科技股份有限公司 | 图像处理方法、装置、设备、介质及程序产品 |
CN116188293B (zh) * | 2022-12-21 | 2023-08-29 | 北京海天瑞声科技股份有限公司 | 图像处理方法、装置、设备、介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3030206B2 (ja) | グラフィック多角形をクリップ領域にクリップする方法および装置 | |
US6693637B2 (en) | Method and apparatus for determining bins to be updated for polygons, including lines | |
KR102275712B1 (ko) | 렌더링 방법, 렌더링 장치 및 전자 장치 | |
CN111798372B (zh) | 图像渲染方法、装置、设备和可读介质 | |
US7898549B1 (en) | Faster clears for three-dimensional modeling applications | |
JPS63198174A (ja) | 図形処理装置 | |
US10403040B2 (en) | Vector graphics rendering techniques | |
JP3791259B2 (ja) | アウトラインスムージング処理方法 | |
JP4370438B2 (ja) | ベクター画像描画装置、ベクター画像描画方法およびプログラム | |
US20150325022A1 (en) | Technique for processing a character string for graphical representation on a man/machine interface | |
JP2009265329A (ja) | フォント描画装置および情報処理装置 | |
US20030122850A1 (en) | Method and apparatus for determining bins to be updated for polygons, including triangles | |
JP2009265413A (ja) | フォント描画装置および情報処理装置 | |
JP2009265414A (ja) | 情報処理装置および制御方法 | |
JP2001283242A (ja) | 画像処理装置および画像処理方法 | |
JP2009271347A (ja) | フォント描画装置および情報処理装置 | |
EP2346002A1 (en) | Vector image drawing device, vector image drawing method, and recording medium | |
JP4152383B2 (ja) | ナビゲーションシステム | |
JPH1021415A (ja) | 図形処理装置並びに図形処理方法 | |
JP3337385B2 (ja) | 表示制御回路 | |
JPH0822555A (ja) | 図形描画方法及びその装置 | |
JP2836617B2 (ja) | レンダリングプロセッサ | |
JP2009258381A (ja) | フォント描画装置および情報処理装置 | |
JP3517982B2 (ja) | 図形描画装置 | |
JPS6315617B2 (ja) |