JP2009258381A - フォント描画装置および情報処理装置 - Google Patents
フォント描画装置および情報処理装置 Download PDFInfo
- Publication number
- JP2009258381A JP2009258381A JP2008107133A JP2008107133A JP2009258381A JP 2009258381 A JP2009258381 A JP 2009258381A JP 2008107133 A JP2008107133 A JP 2008107133A JP 2008107133 A JP2008107133 A JP 2008107133A JP 2009258381 A JP2009258381 A JP 2009258381A
- Authority
- JP
- Japan
- Prior art keywords
- glyph
- contour
- line
- data
- pixel
- 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)
- Image Generation (AREA)
Abstract
【課題】パーツグリフの輪郭線を合成した後で塗り潰しを行うこと。
【解決手段】フォント描画装置は、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有する。
【選択図】図2
【解決手段】フォント描画装置は、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有する。
【選択図】図2
Description
本発明は、アウトラインフォントを描画する技術に関する。
グリフ(文字の可視化表現またはその構成部分から大きさ及び意匠を正規化した抽象表現)の形をコンピュータ上で表現するためのデータ形式として、アウトラインフォントが知られている。アウトラインフォントは、グリフの形状を、基準となる点の座標と輪郭線の集まりとして表現する形式である。グリフの形状が複雑である場合、パーツとなるグリフ(以下「パーツグリフ」という)を組み合わせたグリフ(以下「複合グリフ」という)が用いられる。特許文献1は、複合グリフを描画する技術を開示している。特許文献1によれば、各パーツグリフについてキャッシュ上でレンダリングが行われた後、メモリ上でレンダリング結果が合成され、複合グリフが得られる。
特許文献1に記載の技術によっても、黒い丸に白抜き数字など、パーツグリフのレンダリングをした後に合成するのでは描画できない複合グリフがある。
これに対し本発明は、パーツグリフのアウトライン(輪郭線)を合成した後でレンダリング(塗り潰し)を行う技術を提供する。
これに対し本発明は、パーツグリフのアウトライン(輪郭線)を合成した後でレンダリング(塗り潰し)を行う技術を提供する。
本発明は、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを備え、前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理であることを特徴とするフォント描画装置を提供する。
このフォント描画装置によれば、第1のグリフおよび第2のグリフの輪郭線が描かれた後で、対象線と輪郭線とが交わる向きに応じて増減するパラメータに応じて塗り潰しが行われる。
このフォント描画装置によれば、第1のグリフおよび第2のグリフの輪郭線が描かれた後で、対象線と輪郭線とが交わる向きに応じて増減するパラメータに応じて塗り潰しが行われる。
好ましい態様において、前記パラメータは、前記対象線と前記輪郭線とがある向きで交わるときに増加し、前記対象線と前記輪郭線とが別の向きで交わるときに減少してもよい。
このフォント描画装置によれば、対象線と輪郭線とがある向きで交わるときに増加し、対象線と輪郭線とが別の向きで交わるときに減少するパラメータに応じて画素の階調が決定される。
このフォント描画装置によれば、対象線と輪郭線とがある向きで交わるときに増加し、対象線と輪郭線とが別の向きで交わるときに減少するパラメータに応じて画素の階調が決定される。
別の好ましい態様において、前記グリフデータは、前記輪郭線を構成する線の端点の座標および2つの端点を結ぶ線を描画させる命令を含み、前記画素の階調を示すデータは、前記輪郭線が当該画素を通ったか否かを示すストローク情報を含み、前記輪郭描画手段は、前記グリフデータに含まれる命令により描画される線を所定の最小単位まで分割し、前記分割された線が通る画素のストローク情報を前記輪郭線が当該画素を通ったことを示すものに更新し、前記ストローク情報により輪郭線が通ることが示される画素の階調のデータを前記メモリに書き込んでもよい。
このフォント描画装置によれば、ストローク情報により輪郭線が通ることが示される画素の階調のデータがメモリに書き込まれる。
このフォント描画装置によれば、ストローク情報により輪郭線が通ることが示される画素の階調のデータがメモリに書き込まれる。
さらに別の好ましい態様において、前記グリフデータは、前記輪郭線を構成する線の端点の座標および2つの端点を結ぶ線を描画させる命令を含み、前記画素の階調を示すデータは、前記パラメータを含み、前記輪郭描画手段は、前記グリフデータに含まれる命令により描画される線を所定の最小単位まで分割し、前記分割された線が通る画素のパラメータを、前記分割された線の向きに応じて更新してもよい。
このフォント描画装置によれば、グリフデータを分解した線の向きに応じてパラメータが更新される。
このフォント描画装置によれば、グリフデータを分解した線の向きに応じてパラメータが更新される。
また、本発明は、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、描画の対象となるグリフを対象グリフとして、前記対象グリフを特定する情報をスタックし、前記対象グリフが第1のパーツグリフおよび第2のパーツグリフから構成される複合グリフである場合には前記第1のパーツグリフおよび前記第2のパーツグリフを特定する情報をスタックするスタックと、前記スタックから順番に情報を読み出し、前記スタックにまだ情報がスタックされている場合には読み出した情報に対応するグリフデータを対象とする輪郭描画命令を発行し、前記スタックが空になった場合には読み出した情報に対応するグリフデータを対象とする輪郭描画および塗り潰し命令を発行する制御装置と、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有するフォント描画装置とを有し、前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理であることを特徴とする情報処理装置を提供する。
この情報処理装置によれば、第1のパーツグリフおよび第2のパーツグリフからなる複合グリフが描画される場合、第1のグリフおよび第2のグリフの輪郭線が描かれた後で塗り潰しが行われる。
この情報処理装置によれば、第1のパーツグリフおよび第2のパーツグリフからなる複合グリフが描画される場合、第1のグリフおよび第2のグリフの輪郭線が描かれた後で塗り潰しが行われる。
さらに、本発明は、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、描画の対象となるグリフを対象グリフとして、前記対象グリフを特定する情報をスタックし、前記対象グリフが第1のパーツグリフおよび第2のパーツグリフから構成される複合グリフである場合には前記第1のパーツグリフおよび前記第2のパーツグリフを特定する情報をスタックするスタックと、前記スタックから順番に情報を読み出し、前記読み出した情報に対応するグリフデータを対象とする輪郭描画命令を発行し、前記スタックが空になった場合には空のグリフデータであるダミーデータを対象とする輪郭描画および塗り潰し命令を発行する制御装置と、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有し、前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理であることを特徴とする情報処理装置を提供する。
この情報処理装置によれば、第1のパーツグリフおよび第2のパーツグリフからなる複合グリフが描画される場合、第1のグリフおよび第2のグリフの輪郭線が描かれた後で塗り潰しが行われる。
この情報処理装置によれば、第1のパーツグリフおよび第2のパーツグリフからなる複合グリフが描画される場合、第1のグリフおよび第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の構成を示す図である。メインコントローラ101は、フォントプロセッサ100の各要素を制御する。メインコントローラ101は、レジスタ102を有する。レジスタ102は、例えば、メインコントローラ101が読み出すべきデータのアドレスを記憶するのに用いられる。フォント描画コントローラ103は、フォント描画に必要な情報、例えばアフィン変換パラメータを記憶する。フォント描画コントローラ103はさらに、与えられた命令がDrawCharなのかDrawCharFillなのかを記憶する。DrawCharは、輪郭描画処理の実行を指示する命令である。DrawCharFillは、輪郭描画処理および塗り潰し処理の実行を指示する命令である。輪郭描画モジュール104(輪郭描画手段の一例)は、命令DrawCharまたは命令DrawCharFillが与えられた場合に、輪郭計算処理、描画位置計算処理および輪郭描画処理を行う。まず、輪郭描画モジュール104は、グリフデータを用いてグリフの輪郭を計算する(輪郭計算処理)。また、輪郭描画モジュール104は、輪郭線を描画する画素の位置を計算する(描画位置計算処理)。輪郭描画モジュール104はさらに、計算した輪郭を示すデータをワークメモリ105に書き込む(輪郭描画処理)。複合グリフを描画する場合、輪郭描画モジュール104は、第1のグリフの輪郭を示すデータをワークメモリ105に書き込んだ後さらに第2のグリフの輪郭を示すデータをワークメモリ105に書き込む。ワークメモリ105は、マトリクス状に2次元配置された画素の階調(この例では、塗り潰すか塗り潰さないかの2階調)を示すデータを記憶する、レンダリング用メモリとして用いられる。塗り潰しモジュール106(塗り潰し手段の一例)は、命令DrawCharが与えられた場合に、塗り潰し処理、背景合成処理および転送処理を行う。まず、塗り潰しモジュール106は、輪郭描画モジュール104により描画された輪郭の内部、すなわち輪郭線で囲まれた領域を塗り潰す(塗り潰し処理)。塗り潰し処理において、2本の輪郭線によって囲まれる領域については2本の輪郭線の向きに応じてその領域が塗りつぶされるか否かが決定される(詳細は後述)。塗り潰しモジュール106は、さらに、必要に応じて画素と背景を合成する(背景合成処理)。塗り潰しモジュール106は、さらに、生成した画素のデータを出力する(転送処理)。バスインターフェースモジュール107は、バス80を介してCPU10・ROM20・RAM30等の他の要素との間で信号やデータの入出力を行う。メインバス108およびサブバス109は、要素間のデータや信号の伝送に用いられる伝送路である。
輪郭描画モジュール104と塗り潰しモジュール106との間の信号線は、輪郭描画処理の終了の通知に用いられる。フォント描画コントローラ103と塗り潰しモジュール106との間の信号線は、ワークメモリ105のビット幅、データの範囲などの情報の伝送に用いられる。塗り潰しモジュール106とメインバス108との間の信号線は、背景データの伝送、塗り潰し処理の結果の伝送に用いられる。特に説明しないがこれら以外の信号線も、必要なデータや命令の伝送に用いられる。また、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.従来技術および本実施形態のフォント描画方法
2−2−1.True Typeフォントで推奨されている方法
図5は、True Typeフォントで推奨されている描画方法を説明する図である。ここでは、グリフAおよびグリフBの2つのパーツグリフを合成して複合グリフを生成する例を説明する。まず、ROMに記憶されたグリフAおよびグリフBのグリフデータ(図5(A)および(B))は、あらかじめ設けられた輪郭データ用メモリ上で合成される(図5(C))。こうして、複合グリフのグリフデータが輪郭データ用メモリに記憶される。図5(A)−(C)では理解を助けるために図形として示しているが、記憶されているのはビットマップデータではなくグリフデータである。図中の矢印は輪郭線の向きを示している。
2−2−1.True Typeフォントで推奨されている方法
図5は、True Typeフォントで推奨されている描画方法を説明する図である。ここでは、グリフAおよびグリフBの2つのパーツグリフを合成して複合グリフを生成する例を説明する。まず、ROMに記憶されたグリフAおよびグリフBのグリフデータ(図5(A)および(B))は、あらかじめ設けられた輪郭データ用メモリ上で合成される(図5(C))。こうして、複合グリフのグリフデータが輪郭データ用メモリに記憶される。図5(A)−(C)では理解を助けるために図形として示しているが、記憶されているのはビットマップデータではなくグリフデータである。図中の矢印は輪郭線の向きを示している。
次に、複合グリフのグリフデータを用いて、レンダリング用メモリ上で輪郭線が描画される(図5(D))。レンダリング用メモリが記憶するのはマトリクス状に配置された複数の画素の各々について塗り潰すか塗り潰さないかを示すビットマップデータである。最後に、レンダリング用メモリ上において輪郭線の内部が塗り潰される(図5(E))。この方法によれば、レンダリング用メモリとは別に、輪郭データ用のメモリを設ける必要がある。
2−2−2.特許文献1による方法
図6は、特許文献1による描画方法を説明する図である。ROMに記憶されたグリフAおよびグリフBのグリフデータ(図5(A)および(B))を用いて、あらかじめ設けられたパーツ用キャッシュメモリに、グリフAおよびグリフBの輪郭線がそれぞれ描画される(図6(A)および(B))。パーツ用キャッシュメモリは、ビットマップデータを記憶する。次に、パーツ用キャッシュメモリ上においてグリフAおよびグリフBの輪郭線の内部が塗り潰される(図6(C)および(D))。最後に、レンダリング用メモリ上において塗り潰されたパーツグリフが合成される(図6(E))。
図6は、特許文献1による描画方法を説明する図である。ROMに記憶されたグリフAおよびグリフBのグリフデータ(図5(A)および(B))を用いて、あらかじめ設けられたパーツ用キャッシュメモリに、グリフAおよびグリフBの輪郭線がそれぞれ描画される(図6(A)および(B))。パーツ用キャッシュメモリは、ビットマップデータを記憶する。次に、パーツ用キャッシュメモリ上においてグリフAおよびグリフBの輪郭線の内部が塗り潰される(図6(C)および(D))。最後に、レンダリング用メモリ上において塗り潰されたパーツグリフが合成される(図6(E))。
この方法によれば、レンダリング用メモリとは別に、パーツ用キャッシュメモリを設ける必要がある。パーツ用キャッシュメモリは、合成するパーツグリフの数ぶん必要である。例えば、3つのパーツグリフを合成する複合グリフを描画するには、3つ分のパーツ用キャッシュメモリが必要である。また、次に説明するようにこの方法では複合グリフを正確に描画できない場合がある。
図7は、特許文献1による描画方法では正確に描画できない複合グリフを例示する図である。図7(D)は、得たい結果を示している。この表示を得るための理論上の輪郭線は図(C)に示されるとおりである。この複合グリフは、パーツグリフC(図7(A))およびパーツグリフD(図7(B))から構成される。しかし、これらのパーツグリフに対して特許文献1による描画方法を適用すると、パーツグリフを塗り潰してから合成するため、図7(E)のような結果が得られる。これは、本来得たい結果とは異なるものである。
2−2−3.本実施形態による方法
図8は、本実施形態による描画方法を説明する図である。まず、ROMに記憶されたグリフAのグリフデータ(図5(A))を用いて、レンダリング用メモリにグリフAの輪郭線が描画される(図8(A))。さらに、レンダリング用メモリにグリフAの輪郭線が描画された状態で、グリフBのグリフデータ(図5(B))を用いて、レンダリング用メモリにグリフBの輪郭線が描画される(図8(B))。すなわち、グリフAの輪郭線の上にグリフBの輪郭線が上書きされる。最後に、レンダリング用メモリ上において輪郭線の内部が塗り潰される(図8(C))。
図8は、本実施形態による描画方法を説明する図である。まず、ROMに記憶されたグリフAのグリフデータ(図5(A))を用いて、レンダリング用メモリにグリフAの輪郭線が描画される(図8(A))。さらに、レンダリング用メモリにグリフAの輪郭線が描画された状態で、グリフBのグリフデータ(図5(B))を用いて、レンダリング用メモリにグリフBの輪郭線が描画される(図8(B))。すなわち、グリフAの輪郭線の上にグリフBの輪郭線が上書きされる。最後に、レンダリング用メモリ上において輪郭線の内部が塗り潰される(図8(C))。
この方法によれば、レンダリング用メモリのほかに、輪郭データ用メモリやパーツ用キャッシュメモリを設ける必要はない。また、塗り潰し処理(詳細は後述)においては、2本の輪郭線で囲まれた領域については輪郭線の向きに応じて塗り潰すか塗り潰さないかが決定されるので、図7のような複合グリフも正確に描画できる。
2−3.情報表示装置1の動作
2−3−1.全体動作
図9は、情報表示装置1の動作を示すフローチャートである。図9に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体40に表示される画像を更新するイベントを契機として開始される。ここでは、描画の対象となるグリフ(以下「対象グリフ」という)が図5(E)に示される複合グリフである場合を例に説明する。この複合グリフは、グリフA(図5(A))およびグリフB(図5(B))の2つのパーツグリフから構成される。以下の処理は、CPU10が、ROM20に記憶された制御プログラムに従って動作することにより行われる。
2−3−1.全体動作
図9は、情報表示装置1の動作を示すフローチャートである。図9に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体40に表示される画像を更新するイベントを契機として開始される。ここでは、描画の対象となるグリフ(以下「対象グリフ」という)が図5(E)に示される複合グリフである場合を例に説明する。この複合グリフは、グリフA(図5(A))およびグリフB(図5(B))の2つのパーツグリフから構成される。以下の処理は、CPU10が、ROM20に記憶された制御プログラムに従って動作することにより行われる。
ステップS100において、CPU10は、スタックを空にする。この例でスタックはLIFO(Last In First Out)であり、RAM30上に記憶領域が設けられている。また、CPU10は、レンダリング用メモリを初期化する。
ステップS110において、CPU10は、対象グリフのグリフ番号をスタックに積む(プッシュする)。グリフ番号は、グリフデータを特定する情報の一例である。
ステップS110において、CPU10は、対象グリフのグリフ番号をスタックに積む(プッシュする)。グリフ番号は、グリフデータを特定する情報の一例である。
ステップS120において、CPU10は、スタックからグリフ番号を取得する(ポップする)。スタックはLIFOなので、最も新しいデータが取得される。
ステップS130において、CPU10は、取得したグリフ番号から、そのグリフ番号によって示されるグリフ(以下「取得グリフ」という)が複合グリフであるか判断する。この例でグリフデータは、そのグリフが複合グリフであるか単純グリフ(非複合グリフ)であるかを示すフラグを有しており、CPU10は、ROM20から取得グリフのフラグを読み出して判断する。取得グリフが複合グリフであると判断された場合(S130:YES)、CPU10は、処理をステップS140に移行する。取得グリフが複合グリフでないと判断された場合(S130:NO)、CPU10は、処理をステップS150に移行する。
ステップS130において、CPU10は、取得したグリフ番号から、そのグリフ番号によって示されるグリフ(以下「取得グリフ」という)が複合グリフであるか判断する。この例でグリフデータは、そのグリフが複合グリフであるか単純グリフ(非複合グリフ)であるかを示すフラグを有しており、CPU10は、ROM20から取得グリフのフラグを読み出して判断する。取得グリフが複合グリフであると判断された場合(S130:YES)、CPU10は、処理をステップS140に移行する。取得グリフが複合グリフでないと判断された場合(S130:NO)、CPU10は、処理をステップS150に移行する。
ステップS140において、CPU10は、取得グリフを構成するパーツグリフのグリフ番号をすべてスタックに積む。パーツグリフのグリフ番号はグリフデータに記述されている。CPU10は、ROM20から取得グリフのグリフデータを読み出す。CPU10は、読み出したグリフデータから取得グリフを構成するパーツグリフを特定し、パーツグリフのグリフ番号をスタックに積む。パーツグリフのグリフ番号をスタックに積むと、CPU10は、処理を再びステップS120に移行する。
ステップS150において、CPU10は、取得グリフのグリフデータを読み出す。
ステップS160において、CPU10は、スタックが空であるか判断する。スタックが空であると判断された場合(S160:YES)、CPU10は、処理をステップS180に移行する。スタックが空でないと判断された場合(S160:NO)、CPU10は、処理をステップS170に移行する。
ステップS160において、CPU10は、スタックが空であるか判断する。スタックが空であると判断された場合(S160:YES)、CPU10は、処理をステップS180に移行する。スタックが空でないと判断された場合(S160:NO)、CPU10は、処理をステップS170に移行する。
ステップS170において、CPU10は、命令DrawCharを発行する。すなわち、CPU10は、命令DrawCharとともに、取得グリフのグリフデータが記憶されているアドレスをフォントプロセッサ100のレジスタ102に書き込む。
CPU10から命令DrawCharを受け取ると、フォントプロセッサ100のメインコントローラ101は、フォント描画コントローラ103に、命令がDrawCharであることを記憶させる。さらに、メインコントローラ101は、ROM20からグリフデータを読み出し、輪郭描画モジュール104に、グリフデータに従った輪郭線を描画させる。輪郭描画モジュール104の動作は後述する。輪郭描画モジュール104は、ワークメモリ105に、グリフデータに従った輪郭線を描画する。受け取った命令がDrawCharである場合、塗り潰しモジュール106は処理を行わない。輪郭線の描画が完了すると、フォントプロセッサ100は、CPU10に輪郭線の描画完了を通知する。描画完了を通知されると、CPU10は、処理を再びステップS120に移行する。
ステップS180において、CPU10は、命令DrawCharFillを発行する。すなわち、CPU10は、命令DrawCharFillとともに、取得グリフのグリフデータが記憶されているアドレスをフォントプロセッサ100のレジスタ102に書き込む。
CPU10から命令DrawCharFillを受け取ると、フォントプロセッサ100のメインコントローラ101は、フォント描画コントローラ103に、命令がDrawCharFillであることを記憶させる。さらに、メインコントローラ101は、ROM20からグリフデータを読み出し、輪郭描画モジュール104に、グリフデータに従った輪郭線を描画させる。すなわち、輪郭描画モジュール104は、ワークメモリ105に、グリフデータに従った輪郭線のビットマップデータを書き込む。受け取った命令がDrawCharFillである場合、塗り潰しモジュール106は、ワークメモリ105に記憶されているビットマップデータにおいて、輪郭線で囲まれた領域を塗り潰す塗り潰し処理を行う。塗り潰しモジュール106の動作は後述する。塗り潰し処理が完了すると、フォントプロセッサ100は、CPU10に塗り潰し完了を通知する。塗り潰し完了を通知されると、CPU10は、図9の処理を終了する。
ここで、図5(E)の複合グリフが描画される場合を例に、具体的な動作例を説明する。この例で、複合グリフのグリフ番号は150であり、グリフAおよびグリフBのグリフ番号はそれぞれ100および10である。まず最初に、スタックにはグリフ番号150が積まれる(ステップS110)。スタックからグリフ番号150が取得される(ステップS120)。グリフ番号150のグリフは複合グリフであるので(S130:YES)、パーツグリフのグリフ番号10および100がスタックに積まれる(ステップS140)。次に、スタックからグリフ番号100が取得される(ステップS120)。グリフ番号100のグリフ(グリフA)は単純グリフであるので(S130:NO)、グリフAのグリフデータが読み出される(ステップS150)。スタックにはまだグリフ番号10が詰まれているので空ではないから(S160:NO)、命令DrawCharが発行される(ステップS170)。ここでグリフAの輪郭線が描画される。次に、スタックからグリフ番号10が取得される(ステップS120)。グリフ番号10のグリフ(グリフB)は単純グリフであるので(S130:NO)、グリフBのグリフデータが読み出される(ステップS150)。スタック空になったので(S160:YES)、命令DrawCharFillが発行される(ステップS180)。ここで、グリフBの輪郭線が上書きされて複合グリフの輪郭線が描画され、さらに輪郭線の内部が塗り潰される。
2−3−2.輪郭描画モジュール104の動作
本実施形態において、輪郭描画モジュール104は、グリフデータを用いて輪郭線を計算する輪郭計算処理を実行する機能、輪郭線が通る画素すなわち輪郭線を描画すべき位置を計算する描画位置計算処理を実行する機能、およびおよび輪郭線が通る画素のデータをワークメモリ105に書き込む輪郭描画処理を実行する機能を有する。ここでは輪郭計算処理および描画位置計算処理の詳細は省略するが、概要は次のとおりである。
本実施形態において、輪郭描画モジュール104は、グリフデータを用いて輪郭線を計算する輪郭計算処理を実行する機能、輪郭線が通る画素すなわち輪郭線を描画すべき位置を計算する描画位置計算処理を実行する機能、およびおよび輪郭線が通る画素のデータをワークメモリ105に書き込む輪郭描画処理を実行する機能を有する。ここでは輪郭計算処理および描画位置計算処理の詳細は省略するが、概要は次のとおりである。
輪郭計算処理において、輪郭描画モジュール104は、与えられた命令(Move、Line、Curve2、Curve3、EOC)および点の座標に応じて、命令を生成する。輪郭計算処理により生成される命令は、Move、dVectorおよびEOCのいずれかである。命令MoveおよびEOCについては、グリフデータの項で説明したとおりである。命令dVectorは、命令Line、Curve2およびCurve3を所定の最小単位(例えば1画素)まで分解したもの(より詳細には、命令Line、Curve2およびCurve3により描画される線を所定の最小単位まで分解したもの)であり、輪郭線が通る画素すなわち塗り潰される点を特定する差分ベクトルを示す。
描画位置計算処理において、輪郭描画モジュール104は、輪郭計算処理により生成された命令に応じて、ワークメモリ105に輪郭線として書き込まれる画素を特定する命令およびパラメータを生成する。描画位置計算処理により生成される命令は、Move、dVectorおよびEOCのいずれかである。また、描画位置計算処理により生成されるパラメータは、巻き数変化量dwnおよびストロークstrokeを含む。巻き数変化量dwnは、輪郭線の向きの変化を表す。輪郭線の向きは、ある基準線(例えば、その画素を通る水平線)と輪郭線が交わる向きにより定義される。基準線に対し輪郭線が下から上に向いている場合はdwn=1であり、基準線と輪郭線とが平行である場合はdwn=0であり、基準線に対し輪郭線が上から下に向いている場合はdwn=−1である。ストロークstrokeは、輪郭線がその画素を通ったことを示す。stroke=1の場合は輪郭線が通ったことを、stroke=0の場合は輪郭線が通っていないことを示す。
図10は、輪郭描画モジュール104の動作、特に輪郭描画処理を示すフローチャートである。ステップS200において、輪郭描画モジュール104は、描画位置計算処理から与えられた命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S200:YES)、輪郭描画モジュール104は、処理をステップS208に移行する。与えられた命令がEOCでないと判断された場合(S200:NO)、輪郭描画モジュール104は、処理をステップS201に移行する。
ステップS201において、輪郭描画モジュール104は、与えられた命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S201:YES)、ワークメモリ105にアクセスする必要がないので、輪郭描画モジュール104は、その画素については何も処理をしない。与えられた命令がMoveでないと判断された場合(S201:NO)、すなわち、命令dVectorが与えられた場合、輪郭描画モジュール104は、処理をステップS202に移行する。
ステップS202において、輪郭描画モジュール104は、stroke=0かつdwn=0であるか判断する。stroke=0かつdwn=0であると判断された場合(S202:YES)、ワークメモリ105にアクセスする必要がないので、輪郭描画モジュール104は、その画素については何も処理をしない。stroke=0かつdwn=0でないと判断された場合(S202:NO)、輪郭描画モジュール104は、処理をステップS203に移行する。
ステップS203において、輪郭描画モジュール104は、画素の座標から、その画素のデータを記憶しているワークメモリ105のアドレスを算出する。
ステップS204において、輪郭描画モジュール104は、ワークメモリ105のうちステップS203で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークstroke(ストローク情報)および巻き数変化量dwnを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、1つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量dwnが記録されている。
ステップS204において、輪郭描画モジュール104は、ワークメモリ105のうちステップS203で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークstroke(ストローク情報)および巻き数変化量dwnを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、1つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量dwnが記録されている。
ステップS205において、輪郭描画モジュール104は、ストローク情報を上書きする。描画位置計算処理から与えられたストロークがstroke=0である場合、輪郭描画モジュール104は、その画素のストローク情報を変更しない。与えられたストロークがstroke=1である場合、輪郭描画モジュール104は、その画素のストローク情報を、「1」に変更する。ステップS206において、輪郭描画モジュール104は、画素の巻き数変化量にdwnを加算する。例えば、画素の巻き数変化量として「2」が記憶されており与えられた巻き数変化量dwn=+1であった場合、画素の巻き数変化量は「3」となる。ステップS207において、輪郭描画モジュール104は、更新したデータでワークメモリ105上のデータを上書きする。
ステップS208において、輪郭描画モジュール104は、輪郭描画処理が終了したことを塗り潰しモジュール106に通知する。
2−3−3.塗り潰しモジュール106の動作
図11は、フォントプロセッサ100の塗り潰しモジュール106の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール106は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをVRAM50に転送する転送処理を実行する機能を有する。図11のフローは、図10のステップS208において輪郭描画モジュール104から塗り潰しモジュール106に輪郭描画処理の終了が通知されたことを契機として開始される。
図11は、フォントプロセッサ100の塗り潰しモジュール106の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール106は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをVRAM50に転送する転送処理を実行する機能を有する。図11のフローは、図10のステップS208において輪郭描画モジュール104から塗り潰しモジュール106に輪郭描画処理の終了が通知されたことを契機として開始される。
ステップS300において、塗り潰しモジュール106は、パラメータyを初期化する。ビットマップデータにおける画素はxy座標系を用いて特定される。xy座標系は、マトリクス状に配置された画素の左上端の画素を原点とし、右方向がx軸の正方向、下方向がy軸の正方向である。パラメータxおよびyは、画素の座標を示す。この例で、塗り潰しモジュール106は、y=yMinとしてパラメータyを初期化する。yMinはフォントを描画する領域のy座標の最小値である。以下、マトリクス状に配置された複数の画素のうちパラメータyで特定される行を「対象行」という。
ステップS301において、塗り潰しモジュール106は、まだ対象行となっていない行があるか、具体的にはパラメータyがy≦yMaxを満たすか判断する。yMaxはフォントを描画する領域のy座標の最大値である。まだ処理されていない行があると判断された場合(S301:YES)、塗り潰しモジュール106は、処理をステップS302に移行する。処理されていない行はないと判断された場合(S301:NO)、塗り潰しモジュール106は、図11の処理を終了する。
ステップS302において、塗り潰しモジュール106は、パラメータwnを初期化、すなわちパラメータwnにゼロを代入する。パラメータwnは巻き数(winding number)を示す。巻き数は、対象行と輪郭線とがある向き(例えば、上向き)で交わるときに増加し、対象行と輪郭線とが別の向き(例えば、下向き)で交わるときに減少する。
ステップS303において、塗り潰しモジュール106は、パラメータxを初期化する。この例で、塗り潰しモジュール106は、x=xMinとしてパラメータxを初期化する。xMinはフォントを描画する領域のx座標の最小値である。塗り潰し処理において対象行のうちパラメータxで特定される画素を「対象画素」という。
ステップS304において、塗り潰しモジュール106は、対象行の中にまだ対象画素となっていない画素があるか、具体的にはパラメータxがx≦xMaxを満たすか判断する。xMaxはフォントを描画する領域のx座標の最大値である。まだ対象画素となっていない画素があると判断された場合(S304:YES)、塗り潰しモジュール106は、処理をステップS306に移行する。対象画素となっていない画素はないと判断された場合(S304:NO)、塗り潰しモジュール106は、処理をステップS305に移行する。
ステップS305において、塗り潰しモジュール106は、パラメータyを更新する。この例で、塗り潰しモジュール106は、y=y+1としてパラメータyを更新する。パラメータyを更新すると、塗り潰しモジュール106は、処理をステップS301に移行する。
ステップS306において、塗り潰しモジュール106は、対象画素の背景データ(背景の階調を示すデータ)を、ワークメモリ105に書き込む。背景データは、例えばRAM30から読み出される。
ステップS307において、塗り潰しモジュール106は、ワークメモリ105に記憶されている輪郭を示すビットマップデータ(輪郭データ)から、巻き数変化量wdnを取得する。詳細には以下のとおりである。塗り潰しモジュール106は、パラメータxおよびyから、対象画素のデータを記憶しているアドレスを算出する。塗り潰しモジュール106は、算出されたアドレスから対象画素のデータを読み出す。塗り潰しモジュール106は、読み出されたデータから巻き数変化量wdnを抽出する。
ステップS308において、塗り潰しモジュール106は、パラメータwnの値をwn=wn+dwnとして更新する。パラメータwnは対象行が更新されるたびにゼロに初期化される(ステップS302)から、パラメータwnは、対象行を基準点(この例では左端点)から1画素ずつ順番に、巻き数変化量wdnを積算した値である。
図12は、巻き数wnの変化を例示する図である。図12(A)は、輪郭が描画されたビットマップデータの一部を示す。この例では、4本の輪郭線が描かれている。マトリクスの上部に記載されている矢印は、輪郭線の向きを示している。図12(B)は、図12(A)のビットマップデータのうち上から2行目の画素の巻き数の変化を示している。処理の始点(左端点)においては巻き数wnの初期値としてゼロが与えられる。1画素ずつ右に向かって処理され、輪郭線が現れるたびにその向きに応じて巻き数が増加または減少する。
再び図11を参照する。ステップS309において、塗り潰しモジュール106は、画素を塗り潰す条件が満たされたか判断する。ここでは、画素を塗り潰す条件として、巻き数wnとストロークstrokeの値が、(wn,stroke)=(0,0)以外であるという条件が用いられる。画素を塗り潰す条件が満たされたと判断された場合(S309:YES)、塗り潰しモジュール106は、処理をステップS310に移行する。画素を塗り潰す条件が満たされていないと判断された場合(S309:NO)、塗り潰しモジュール106は、処理をステップS311に移行する。
ステップS310において、塗り潰しモジュール106は、対象画素を塗り潰す。すなわち、対象画素の階調(カラー表示の場合、各色要素の階調)を指定された値にする。
ステップS311において、塗り潰しモジュール106は、パラメータxをx=x+1として更新する。これにより対象画素が更新される。対象画素を更新すると、塗り潰しモジュール106は、処理をステップS304に移行する。
以上の処理により、ワークメモリ105に記憶された輪郭線のビットマップデータの内部は塗りつぶされる。塗り潰しモジュール106は、こうして生成されたデータを、バスインターフェースモジュール107およびバス80を介してVRAM50に転送する。塗り潰し処理が完了すると、フォントプロセッサ100は、塗り潰し処理の完了をCPU10に通知する。
3.他の実施形態
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち2つ以上のものが組み合わせて用いられてもよい。
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち2つ以上のものが組み合わせて用いられてもよい。
3−1.変形例1
図13は、変形例1に係る情報表示装置1の動作を示すフローチャートである。図9のフローに代わり、図13のフローが用いられてもよい。図13のフローにおいて、ステップS100−S150までの処理は図9のフローと共通である。図9のステップS160−180の処理に代わり、ステップS400−S430の処理が行われる。
図13は、変形例1に係る情報表示装置1の動作を示すフローチャートである。図9のフローに代わり、図13のフローが用いられてもよい。図13のフローにおいて、ステップS100−S150までの処理は図9のフローと共通である。図9のステップS160−180の処理に代わり、ステップS400−S430の処理が行われる。
ステップS400において、CPU10は、命令DrawCharを発行する。ステップS410において、CPU10は、スタックが空であるか判断する。スタックが空であると判断された場合(S410:YES)、CPU10は、処理をステップS420に移行する。スタックが空でないと判断された場合(S410:NO)、CPU10は、処理をステップS120に移行する。
ステップS420において、CPU10は、ダミーデータ(空のグリフデータ)を読み出す。ステップS430において、CPU10は、ダミーデータを対象グリフのデータとして命令DrawCharFillを発行する。ステップS420でダミーデータを読み出すのは、誤動作を防ぐためである。ステップS400−S430の処理は、順番が異なっているものの、基本的には図9のステップS160−180の処理と同様に行われる。
3−2.変形例2
グリフデータの形式は、図4で説明したものに限定されない。Move、Line、Curve2、Curve3、EOC以外の命令が用いられてもよい。曲線を記述する関数として、4次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが2つのパーツグリフから構成される例を説明したが、複合グリフは3つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
グリフデータの形式は、図4で説明したものに限定されない。Move、Line、Curve2、Curve3、EOC以外の命令が用いられてもよい。曲線を記述する関数として、4次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが2つのパーツグリフから構成される例を説明したが、複合グリフは3つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
3−3.変形例3
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数wnに限定されない。巻き数wnは輪郭線の向きに応じて1ずつ増減するパラメータであったが、増減の単位は1でなくてもよい。また、実施形態では対象行を決めて、対象行について1画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について1画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量dwnは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの1つの行または1つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数wnに限定されない。巻き数wnは輪郭線の向きに応じて1ずつ増減するパラメータであったが、増減の単位は1でなくてもよい。また、実施形態では対象行を決めて、対象行について1画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について1画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量dwnは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの1つの行または1つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
3−4.変形例4
実施形態において、輪郭描画モジュール104は、輪郭計算処理、描画位置計算処理、および輪郭描画処理を実行する機能を兼ね備えていた。しかし、これらの機能はそれぞれ別個のモジュールにより実現されてもよい。塗り潰しモジュール106についても同様である。
実施形態において、輪郭描画モジュール104は、輪郭計算処理、描画位置計算処理、および輪郭描画処理を実行する機能を兼ね備えていた。しかし、これらの機能はそれぞれ別個のモジュールにより実現されてもよい。塗り潰しモジュール106についても同様である。
3−5.他の変形例
情報表示装置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…メインコントローラ、102…レジスタ、103…フォント描画コントローラ、104…輪郭描画モジュール、105…ワークメモリ、106…塗り潰しモジュール、107…バスインターフェースモジュール、108…メインバス、109…サブバス
Claims (6)
- マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、
グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、
前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段と
を有し、
前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理である
ことを特徴とするフォント描画装置。 - 前記パラメータは、前記対象線と前記輪郭線とがある向きで交わるときに増加し、前記対象線と前記輪郭線とが別の向きで交わるときに減少する
ことを特徴とする請求項1に記載のフォント描画装置。 - 前記グリフデータは、前記輪郭線を構成する線の端点の座標および2つの端点を結ぶ線を描画させる命令を含み、
前記画素の階調を示すデータは、前記輪郭線が当該画素を通ったか否かを示すストローク情報を含み、
前記輪郭描画手段は、前記グリフデータに含まれる命令により描画される線を所定の最小単位まで分割し、前記分割された線が通る画素のストローク情報を前記輪郭線が当該画素を通ったことを示すものに更新し、前記ストローク情報により輪郭線が通ることが示される画素の階調のデータを前記メモリに書き込む
ことを特徴とする請求項1に記載のフォント描画装置。 - 前記グリフデータは、前記輪郭線を構成する線の端点の座標および2つの端点を結ぶ線を描画させる命令を含み、
前記画素の階調を示すデータは、前記パラメータを含み、
前記輪郭描画手段は、前記グリフデータに含まれる命令により描画される線を所定の最小単位まで分割し、前記分割された線が通る画素のパラメータを、前記分割された線の向きに応じて更新する
ことを特徴とする請求項1に記載のフォント描画装置。 - グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、
描画の対象となるグリフを対象グリフとして、前記対象グリフを特定する情報をスタックし、前記対象グリフが第1のパーツグリフおよび第2のパーツグリフから構成される複合グリフである場合には前記第1のパーツグリフおよび前記第2のパーツグリフを特定する情報をスタックするスタックと、
前記スタックから順番に情報を読み出し、前記スタックにまだ情報がスタックされている場合には読み出した情報に対応するグリフデータを対象とする輪郭描画命令を発行し、前記スタックが空になった場合には読み出した情報に対応するグリフデータを対象とする輪郭描画および塗り潰し命令を発行する制御装置と、
マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有するフォント描画装置と
を有し、
前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理である
ことを特徴とする情報処理装置。 - グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、
描画の対象となるグリフを対象グリフとして、前記対象グリフを特定する情報をスタックし、前記対象グリフが第1のパーツグリフおよび第2のパーツグリフから構成される複合グリフである場合には前記第1のパーツグリフおよび前記第2のパーツグリフを特定する情報をスタックするスタックと、
前記スタックから順番に情報を読み出し、前記読み出した情報に対応するグリフデータを対象とする輪郭描画命令を発行し、前記スタックが空になった場合には空のグリフデータであるダミーデータを対象とする輪郭描画および塗り潰し命令を発行する制御装置と、
マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第1のグリフデータが示す第1のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第2のグリフデータが示す第2のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、2本の輪郭線によって囲まれる領域については前記2本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有するフォント描画装置と
を有し、
前記塗り潰し処理は、前記マトリクスの1つの行または1つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理である
ことを特徴とする情報処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008107133A JP2009258381A (ja) | 2008-04-16 | 2008-04-16 | フォント描画装置および情報処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008107133A JP2009258381A (ja) | 2008-04-16 | 2008-04-16 | フォント描画装置および情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009258381A true JP2009258381A (ja) | 2009-11-05 |
Family
ID=41385898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008107133A Pending JP2009258381A (ja) | 2008-04-16 | 2008-04-16 | フォント描画装置および情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009258381A (ja) |
-
2008
- 2008-04-16 JP JP2008107133A patent/JP2009258381A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102275712B1 (ko) | 렌더링 방법, 렌더링 장치 및 전자 장치 | |
JPH03208094A (ja) | 種々の寸法の記号映像のアウトラインを処理する方法およびコンピュータ表示装置 | |
US20150325022A1 (en) | Technique for processing a character string for graphical representation on a man/machine interface | |
JP3791259B2 (ja) | アウトラインスムージング処理方法 | |
JP2009092759A (ja) | 描画装置、画像出力装置及びプログラム | |
US7948494B2 (en) | Character rendering device, display device, and printer | |
JP5172640B2 (ja) | ベクトル図形描画装置 | |
JP4625269B2 (ja) | 文字画像生成装置,文字画像生成方法,表示制御装置,文字画像生成プログラムおよび表示制御プログラム | |
US20100238178A1 (en) | Information processing apparatus, control device, and program | |
JP2007265035A (ja) | 描画装置及び破線描画方法 | |
US20060077210A1 (en) | Rasterizing stacked graphics objects from top to bottom | |
JP4570025B2 (ja) | コントローラドライバ及び表示パネル駆動方法 | |
JP2009271347A (ja) | フォント描画装置および情報処理装置 | |
JP2009258381A (ja) | フォント描画装置および情報処理装置 | |
JP2757614B2 (ja) | 図形塗りつぶし装置 | |
EP0062669A1 (en) | GRAPHICS AND TEXT IMAGE GENERATOR FOR A GRID SCAN DISPLAY. | |
CN102592261B (zh) | 矢量图展现方法及系统 | |
JP2005221853A (ja) | コントローラドライバ,携帯端末,及び表示パネル駆動方法 | |
JP4760390B2 (ja) | 画像処理装置 | |
JP2009265329A (ja) | フォント描画装置および情報処理装置 | |
JP4420083B2 (ja) | 画像処理回路、表示装置及び印刷装置 | |
JP2005077750A (ja) | 表示装置装置および文字表示制御方法 | |
JP4404117B2 (ja) | 画像処理回路、表示装置及び印刷装置 | |
JP2634810B2 (ja) | 情報処理装置 | |
JP2009265413A (ja) | フォント描画装置および情報処理装置 |