(57)【要約】【課題】グリフの輪郭線を描画した後で塗り潰しを行うこと。【解決手段】フォント描画装置は、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、第１の描画命令または第２の描画命令が入力される命令入力手段と、グリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、２次元座標系における対象画素の座標を描画位置として計算する描画位置計算手段と、メモリに輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を実行する輪郭描画手段と、命令入力手段に第２の描画命令が入力された場合、第２の描画命令で描画が命令されたグリフについて輪郭描画処理が完了した後で、メモリに書き込まれたデータにより特定される輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段とを有する。【選択図】図２
2009271347.tif 000002
【特許請求の範囲】
【請求項１】
２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、
グリフの輪郭線の描画を命令する第１の描画命令、またはグリフの輪郭線の描画および輪郭線の内部の塗り潰しを命令する第２の描画命令が入力される命令入力手段と、
前記第１の描画命令または前記第２の描画命令により描画が命令されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、
前記２次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、
前記メモリのうち、前記描画位置により特定される画素のデータを記憶する領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を実行する輪郭描画手段と、
前記命令入力手段に前記第２の描画命令が入力された場合、前記第２の描画命令で描画が命令されたグリフについて前記輪郭描画処理が完了した後で、前記メモリに書き込まれたデータにより特定される前記輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段と
を有するフォント描画装置。
【請求項２】
前記グリフデータは、輪郭線の向きを含み、
前記塗り潰し処理において、２本の輪郭線によって囲まれる領域については前記２本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される
ことを特徴とする請求項１に記載のフォント描画装置。
【請求項３】
前記塗り潰し処理は、前記マトリクスの１つの行または１つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素が塗りつぶされるかを決定する処理である
ことを特徴とする請求項２に記載のフォント描画装置。
【請求項４】
前記パラメータは、前記対象線と前記輪郭線とがある向きで交わるときに増加し、前記対象線と前記輪郭線とが別の向きで交わるときに減少する
ことを特徴とする請求項３に記載のフォント描画装置。
【請求項５】
グリフの輪郭線を示すグリフデータを記憶した記憶装置と、
描画すべき少なくとも１つのグリフを特定する情報をスタックするスタックと、
前記スタックから順番に情報を読み出し、前記スタックにまだ情報がスタックされている場合には読み出した情報に対応するグリフデータを対象とする第１の描画命令を発行し、前記スタックが空になった場合には読み出した情報に対応するグリフデータを対象とする第２の描画命令を発行する制御装置と、
２次元配置され、２次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶するメモリと、前記第１の描画命令または前記第２の描画命令が入力される命令入力手段と、前記第１の描画命令または前記第２の描画命令により描画が命令されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記２次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、前記メモリのうち、前記描画位置により特定される画素のデータを記憶する領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を実行する輪郭描画手段と、前記命令入力手段に前記第２の描画命令が入力された場合、前記第２の描画命令で描画が命令されたグリフについて前記輪郭描画処理が完了した後で、前記メモリに書き込まれたデータにより特定される前記輪郭線の内部を塗り潰す塗り潰し処理を行う塗り潰し手段とを有するフォント描画装置と
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アウトラインフォントを描画する技術に関する。
【背景技術】
【０００２】
グリフ（文字の可視化表現またはその構成部分から大きさ及び意匠を正規化した抽象表現）の形をコンピュータ上で表現するためのデータ形式として、アウトラインフォントが知られている。アウトラインフォントは、グリフの形状を、基準となる点の座標と輪郭線の集まりとして表現する形式である。ここで、必要に応じて、パーツとなるグリフ（以下「パーツグリフ」という）を組み合わせたグリフ（以下「複合グリフ」という）が用いられる。特許文献１は、複合グリフを描画する技術を開示している。特許文献１によれば、各パーツグリフについてキャッシュ上でレンダリングが行われた後、メモリ上でレンダリング結果が合成され、複合グリフが得られる。
【０００３】
【特許文献１】特開平６−０６７６４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の技術によっても、黒い丸に白抜き数字など、パーツグリフのレンダリングをした後に合成するのでは描画できない複合グリフがある。
これに対し本発明は、パーツグリフのアウトライン（輪郭線）を合成した後でレンダリング（塗り潰し）を行う技術を提供する。
【課題を解決するための手段】
【０００５】
本発明は、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第１のグリフデータが示す第１のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第２のグリフデータが示す第２のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、２本の輪郭線によって囲まれる領域については前記２本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有するフォント描画装置を提供する。
このフォント描画装置によれば、第１のグリフおよび第２のグリフの輪郭線が描かれた後で塗り潰しが行われる。
【０００６】
好ましい態様において、前記塗り潰し処理は、前記マトリクスの１つの行または１つの列を対象線とし、前記対象線に沿って一画素ずつ階調を決定する処理であって、前記対象線と前記輪郭線とが交わる向きに応じて増減するパラメータに応じて前記画素の階調を決定する処理であってもよい。
このフォント描画装置によれば、対象線と輪郭線とが交わる向きに応じて増減するパラメータに応じて画素の階調が決定される。
【０００７】
別の好ましい態様において、前記パラメータは、前記対象線と前記輪郭線とがある向きで交わるときに増加し、前記対象線と前記輪郭線とが別の向きで交わるときに減少してもよい。
このフォント描画装置によれば、対象線と輪郭線とがある向きで交わるときに増加し、対象線と輪郭線とが別の向きで交わるときに減少するパラメータに応じて画素の階調が決定される。
【０００８】
また、本発明は、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶装置と、描画の対象となるグリフを対象グリフとして、前記対象グリフを特定する情報をスタックし、前記対象グリフが第１のパーツグリフおよび第２のパーツグリフから構成される複合グリフである場合には前記第１のパーツグリフおよび前記第２のパーツグリフを特定する情報をスタックするスタックと、前記スタックから順番に情報を読み出し、前記スタックにまだ情報がスタックされている場合には読み出した情報に対応するグリフデータを対象とする輪郭描画命令を発行し、前記スタックが空になった場合には読み出した情報に対応するグリフデータを対象とする輪郭描画および塗り潰し命令を発行する制御装置と、マトリクス状に配置された画素の階調を示すデータを記憶するメモリと、グリフの輪郭および前記輪郭の向きを示すグリフデータを記憶した記憶手段から読み出された第１のグリフデータが示す第１のグリフの輪郭線を示すデータを前記メモリに書き込み、さらに前記記憶手段から読み出された第２のグリフデータが示す第２のグリフの輪郭線を示すデータを前記メモリに書き込む輪郭描画手段と、前記メモリに記憶された画素のうち前記輪郭線の内部にある画素を塗り潰す塗り潰し処理であって、２本の輪郭線によって囲まれる領域については前記２本の輪郭線の向きに応じて前記領域が塗りつぶされるか否かが決定される塗り潰し処理を実行する塗り潰し手段とを有するフォント描画装置とを有する情報処理装置を提供する。
この情報処理装置によれば、第１のパーツグリフおよび第２のパーツグリフからなる複合グリフが描画される場合、第１のグリフおよび第２のグリフの輪郭線が描かれた後で塗り潰しが行われる。
【発明を実施するための最良の形態】
【０００９】
１．構成
図１は、本発明の一実施形態に係る情報表示装置１のハードウェア構成を示す図である。情報表示装置１は、情報処理装置の一例である。ＣＰＵ（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））など）、光磁気記録媒体、半導体メモリ（フラッシュＲＯＭなど）などのコンピュータ読取り可能な記録媒体に記憶した状態で提供されてもよい。また、このプログラムは、インターネットのようなネットワーク経由でダウンロードされてもよい。
【図面の簡単な説明】
【００７９】
【図１】一実施形態に係る情報表示装置１のハードウェア構成を示す図である。
【図２】フォントプロセッサ１００の構成を示す図である。
【図３】情報表示装置１の外観を示す図である。
【図４】グリフデータを例示する図である。
【図５】Ｔｒｕｅ  Ｔｙｐｅフォントで推奨されている描画方法を説明する図である。
【図６】特許文献１による描画方法を説明する図である。
【図７】正確に描画できない複合グリフを例示する図である。
【図８】本実施形態による描画方法を説明する図である。
【図９】情報表示装置１の動作を示すフローチャートである。
【図１０】輪郭描画モジュール１０４の動作を示すフローチャートである。
【図１１】塗り潰しモジュール１０６の動作を示すフローチャートである。
【図１２】巻き数ｗｎの変化を例示する図である。
【図１３】複数の文字を描画する動作を示すフローチャートである。
【図１４】各グリフの大きさおよびＶＲＡＭ５０上の描画範囲を示す。
【図１５】各グリフを個別に描画した場合のメモリアクセス量を示す。
【図１６】本実施形態に係る描画方法によるメモリアクセス量を示す。
【図１７】変形例１に係る情報表示装置１の動作を示すフローチャートである。
【符号の説明】
【００８０】
１…情報表示装置、１０…ＣＰＵ、２０…ＲＯＭ、３０…ＲＡＭ、４０…表示体、５０…ＶＲＡＭ、６０…表示制御装置、７０…入力装置、８０…バス、９０…バスコントローラ、１００…フォントプロセッサ、１０１…メインコントローラ、１０２…レジスタ、１０３…フォント描画コントローラ、１０４…輪郭描画モジュール、１０５…ワークメモリ、１０６…塗り潰しモジュール、１０７…バスインターフェースモジュール、１０８…メインバス、１０９…サブバス
【図１】
2009271347.tif 000003
【図２】
2009271347.tif 000004
【図３】
2009271347.tif 000005
【図４】
2009271347.tif 000006
【図５】
2009271347.tif 000007
【図６】
2009271347.tif 000008
【図７】
2009271347.tif 000009
【図８】
2009271347.tif 000010
【図９】
2009271347.tif 000011
【図１０】
2009271347.tif 000012
【図１１】
2009271347.tif 000013
【図１２】
2009271347.tif 000014
【図１３】
2009271347.tif 000015
【図１４】
2009271347.tif 000016
【図１５】
2009271347.tif 000017
【図１６】
2009271347.tif 000018
【図１７】
2009271347.tif 000019