JPH0627927A - アウトライン文字描画方法 - Google Patents
アウトライン文字描画方法Info
- Publication number
- JPH0627927A JPH0627927A JP4205988A JP20598892A JPH0627927A JP H0627927 A JPH0627927 A JP H0627927A JP 4205988 A JP4205988 A JP 4205988A JP 20598892 A JP20598892 A JP 20598892A JP H0627927 A JPH0627927 A JP H0627927A
- Authority
- JP
- Japan
- Prior art keywords
- line
- character
- polygon
- contour line
- vertex
- 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
Landscapes
- Controls And Circuits For Display Device (AREA)
- Image Generation (AREA)
Abstract
(57)【要約】
【目的】 アウトラインフォント塗りつぶしの際、従来
必要とされた進入頂点リスト、左右稜線リスト、アクテ
ィブエッジリストの生成処理を含めず、処理を高速化す
る。 【構成】 文字の輪郭線を頂点の環状連鎖構造として表
現し、これを複数のポリゴンに分割する。ポリゴンを分
割する線分は例えばy軸に平行な線分で、左右に分割さ
れた2つのポリゴンによって共有される。その一端は分
割前の図形の1頂点で、y座標が極大または極小となる
凹頂点である。分割終了後の各々のポリゴンの形状が進
入頂点及び退出頂点が各1個の単純な形状であることか
ら、進入頂点から退出頂点に至る1対の左右稜線データ
を求め、中間フォントデータとする。描画の際には、中
間フォントデータを読み出し、走査線毎に左右稜線に挟
まれた部分を塗りつぶす。
必要とされた進入頂点リスト、左右稜線リスト、アクテ
ィブエッジリストの生成処理を含めず、処理を高速化す
る。 【構成】 文字の輪郭線を頂点の環状連鎖構造として表
現し、これを複数のポリゴンに分割する。ポリゴンを分
割する線分は例えばy軸に平行な線分で、左右に分割さ
れた2つのポリゴンによって共有される。その一端は分
割前の図形の1頂点で、y座標が極大または極小となる
凹頂点である。分割終了後の各々のポリゴンの形状が進
入頂点及び退出頂点が各1個の単純な形状であることか
ら、進入頂点から退出頂点に至る1対の左右稜線データ
を求め、中間フォントデータとする。描画の際には、中
間フォントデータを読み出し、走査線毎に左右稜線に挟
まれた部分を塗りつぶす。
Description
【0001】
【産業上の利用分野】本発明は、ディスプレイやプリン
タにアウトライン文字フォントを用いて描画する方法に
関する。
タにアウトライン文字フォントを用いて描画する方法に
関する。
【0002】
【従来の技術】アウトライン文字フォントは、文字の形
状をアウトライン即ち輪郭線によって表現するもので、
同一のフォントデータを用いて文字を拡大、縮小、回転
して表示することが可能な特徴を持つ。アウトライン文
字フォントにより実際に描画をするには、輪郭形状を規
定する頂点座標を表示面上に座標変換した後に輪郭線で
囲まれた領域を塗りつぶせばよい。座標変換は通常、平
行移動、伸縮、回転の組合せから成る。表示面上で輪郭
線データを用いて文字領域に属する画素を塗りつぶして
いく処理は、走査変換あるいはラスター変換と呼ばれ
る。なお、以下の説明ではフォントデータの読み込み及
び座標変換を含む文字表示処理全体を含めて走査変換と
呼ぶことがある。この種の走査変換技術は、例えば特開
昭62−237579号公報「走査変換器」によって紹
介されている。
状をアウトライン即ち輪郭線によって表現するもので、
同一のフォントデータを用いて文字を拡大、縮小、回転
して表示することが可能な特徴を持つ。アウトライン文
字フォントにより実際に描画をするには、輪郭形状を規
定する頂点座標を表示面上に座標変換した後に輪郭線で
囲まれた領域を塗りつぶせばよい。座標変換は通常、平
行移動、伸縮、回転の組合せから成る。表示面上で輪郭
線データを用いて文字領域に属する画素を塗りつぶして
いく処理は、走査変換あるいはラスター変換と呼ばれ
る。なお、以下の説明ではフォントデータの読み込み及
び座標変換を含む文字表示処理全体を含めて走査変換と
呼ぶことがある。この種の走査変換技術は、例えば特開
昭62−237579号公報「走査変換器」によって紹
介されている。
【0003】従来の走査変換のアルゴリズムには、上記
文献に開示される任意形状多角形の塗りつぶし方法があ
る。これを文字描画に適用した場合の描画方法を説明す
る。図2は従来のアウトライン文字フォント描画方法説
明図である。図は「る」の文字の従来方式による描画方
法を示しており、y座標軸を下向き、x座標軸を右向き
にとれば、輪郭線の最上頂点v1 を通る走査線y=ymi
n から最下頂点v27を通る走査線y=ymax までの各走
査線について、文字輪郭との交点を全て求め、文字の内
部領域に相当する線分を左から右に向かって塗りつぶし
ていく。図2では、「る」の文字が走査線y=yまで塗
りつぶされた状態を水平線のハッチングにより示してい
る。この走査線は4点P1 、Q1 、P2 、Q2 において
輪郭線と交差し、線分P1 Q1 及び線分P2 Q2 が塗り
つぶされる。
文献に開示される任意形状多角形の塗りつぶし方法があ
る。これを文字描画に適用した場合の描画方法を説明す
る。図2は従来のアウトライン文字フォント描画方法説
明図である。図は「る」の文字の従来方式による描画方
法を示しており、y座標軸を下向き、x座標軸を右向き
にとれば、輪郭線の最上頂点v1 を通る走査線y=ymi
n から最下頂点v27を通る走査線y=ymax までの各走
査線について、文字輪郭との交点を全て求め、文字の内
部領域に相当する線分を左から右に向かって塗りつぶし
ていく。図2では、「る」の文字が走査線y=yまで塗
りつぶされた状態を水平線のハッチングにより示してい
る。この走査線は4点P1 、Q1 、P2 、Q2 において
輪郭線と交差し、線分P1 Q1 及び線分P2 Q2 が塗り
つぶされる。
【0004】図3及び図4は従来方法による走査変換フ
ローチャートを示す。これらの図は、この方法で複数の
文字(文字列)を描画するフローチャートを示す。この
フローチャートは以下のような3重のループ構造になっ
ている。最も外側のループは1文字描画の繰り返し処
理を示している。ループは文字描画の際にその最上頂
点から最下頂点までの各走査線の繰り返し処理を示して
いる。ループは1本の走査線上において走査線と輪郭
線との交点を左から右へたどり、線分描画を繰り返す処
理を表している。水平な走査線が上方から下方に移動す
るにつれ、輪郭線との交点数が2個単位で増加または減
少していくが、この交点数を2個増加させる頂点(例え
ばv29)を進入頂点と呼び、交点数を2個減少させる頂
点(例えばv11)を退出頂点と呼ぶ。もう1つのループ
は最上頂点または以後の進入頂点に出合った時のみ実
行される処理である。
ローチャートを示す。これらの図は、この方法で複数の
文字(文字列)を描画するフローチャートを示す。この
フローチャートは以下のような3重のループ構造になっ
ている。最も外側のループは1文字描画の繰り返し処
理を示している。ループは文字描画の際にその最上頂
点から最下頂点までの各走査線の繰り返し処理を示して
いる。ループは1本の走査線上において走査線と輪郭
線との交点を左から右へたどり、線分描画を繰り返す処
理を表している。水平な走査線が上方から下方に移動す
るにつれ、輪郭線との交点数が2個単位で増加または減
少していくが、この交点数を2個増加させる頂点(例え
ばv29)を進入頂点と呼び、交点数を2個減少させる頂
点(例えばv11)を退出頂点と呼ぶ。もう1つのループ
は最上頂点または以後の進入頂点に出合った時のみ実
行される処理である。
【0005】以上の処理を効率良く実行するために、ア
クティブエッジリスト(以下AELと呼ぶ)と進入頂点
リスト及び左右稜線リストが使われる。図5に従来方法
によるアクティブエッジリストを示した。また、図6と
図7及び図8に従来方法による進入頂点リストと左右稜
線リストを示した。AELは現在の走査線と交わる稜線
(アクティブエッジと呼ぶ)をx座標の昇順にソートし
たデータ構造である。図5では交点P1 は頂点v8 から
始まる(左側)稜線に、交点Q1 は頂点v14から始まる
稜線に、交点P2 は頂点v16から始まる稜線に、交点Q
2 は頂点v29から始まる(右側)稜線にそれぞれ所属す
ることを示している。稜線(エッジ)は通常輪郭線を構
成する1本の線分であるが、y座標が増加する方向に進
む線分の系列(折れ線)をまとめて1つの稜線として扱
っている所もある。稜線が1本の線分である場合、稜線
データには始点座標、稜線の高さh、走査線毎のx座標
の増分デルタx、次の稜線へのポインタ、左右の区別
(左側稜線と右側稜線)等の情報が含まれている。稜線
データはAELを通じて呼び出され走査変換処理に使わ
れる。
クティブエッジリスト(以下AELと呼ぶ)と進入頂点
リスト及び左右稜線リストが使われる。図5に従来方法
によるアクティブエッジリストを示した。また、図6と
図7及び図8に従来方法による進入頂点リストと左右稜
線リストを示した。AELは現在の走査線と交わる稜線
(アクティブエッジと呼ぶ)をx座標の昇順にソートし
たデータ構造である。図5では交点P1 は頂点v8 から
始まる(左側)稜線に、交点Q1 は頂点v14から始まる
稜線に、交点P2 は頂点v16から始まる稜線に、交点Q
2 は頂点v29から始まる(右側)稜線にそれぞれ所属す
ることを示している。稜線(エッジ)は通常輪郭線を構
成する1本の線分であるが、y座標が増加する方向に進
む線分の系列(折れ線)をまとめて1つの稜線として扱
っている所もある。稜線が1本の線分である場合、稜線
データには始点座標、稜線の高さh、走査線毎のx座標
の増分デルタx、次の稜線へのポインタ、左右の区別
(左側稜線と右側稜線)等の情報が含まれている。稜線
データはAELを通じて呼び出され走査変換処理に使わ
れる。
【0006】図3と図4を結ぶループの中では、アク
ティブエッジポインタ(AEP)がAEL上を左から右
にたどり、ステップS118でAEPの指すアクティブ
エッジデータが呼び出され、ステップS119で左側稜
線か右側稜線かが判定される。左側稜線を通過すること
は文字領域の外部から内部に進入することを示すから、
予めステップS115で0に設定された整数変数wをス
テップS120でカウントアップし、また右側稜線では
文字領域の内部から外部に出ることを示すから、ステッ
プS123でwをカウントダウンする。wは文字の外部
領域で0、内部領域で1以上となり、負になることはな
いものとする。
ティブエッジポインタ(AEP)がAEL上を左から右
にたどり、ステップS118でAEPの指すアクティブ
エッジデータが呼び出され、ステップS119で左側稜
線か右側稜線かが判定される。左側稜線を通過すること
は文字領域の外部から内部に進入することを示すから、
予めステップS115で0に設定された整数変数wをス
テップS120でカウントアップし、また右側稜線では
文字領域の内部から外部に出ることを示すから、ステッ
プS123でwをカウントダウンする。wは文字の外部
領域で0、内部領域で1以上となり、負になることはな
いものとする。
【0007】図4の処理手順では、このwの値を0から
1に変える左側稜線から1から0に変える右側稜線ま
で、即ちwが0でない範囲を塗りつぶしている。これは
図2のように輪郭線が交差する場合に2重に内部とされ
たw=2の領域を塗りつぶすようにしている。それには
走査線y上の塗りつぶしの開始点x1 をステップS12
2で設定し、終了点xr をステップS125で設定する
と共にx1 からxr までの画素をまとめて塗りつぶす。
ステップS126では稜線のx座標を更新し(増分デル
タxを加算し)、高さhをカウントダウンし(1を引
き)、ステップS127でhが0になったらステップS
128でアクティブエッジを次の稜線に更新し、xとh
を再設定する。ここで退出頂点に到達すればそのアクテ
ィブエッジはAELから除去される。このように、AE
Lに含まれる全てのアクティブエッジに対する処理を終
了すると、ステップS116からループを抜けてステ
ップS117に進み、次の走査線に移る。AEL内のア
クティブエッジは常にx座標の昇順に並んでいなければ
ならないので、ステップS114で走査線毎にソーティ
ングをしている。
1に変える左側稜線から1から0に変える右側稜線ま
で、即ちwが0でない範囲を塗りつぶしている。これは
図2のように輪郭線が交差する場合に2重に内部とされ
たw=2の領域を塗りつぶすようにしている。それには
走査線y上の塗りつぶしの開始点x1 をステップS12
2で設定し、終了点xr をステップS125で設定する
と共にx1 からxr までの画素をまとめて塗りつぶす。
ステップS126では稜線のx座標を更新し(増分デル
タxを加算し)、高さhをカウントダウンし(1を引
き)、ステップS127でhが0になったらステップS
128でアクティブエッジを次の稜線に更新し、xとh
を再設定する。ここで退出頂点に到達すればそのアクテ
ィブエッジはAELから除去される。このように、AE
Lに含まれる全てのアクティブエッジに対する処理を終
了すると、ステップS116からループを抜けてステ
ップS117に進み、次の走査線に移る。AEL内のア
クティブエッジは常にx座標の昇順に並んでいなければ
ならないので、ステップS114で走査線毎にソーティ
ングをしている。
【0008】次に、図6〜8の進入頂点リスト及び左右
稜線リストについて説明する。進入頂点リストは、輪郭
線上のy座標の極小点(進入頂点)をy座標の昇順にソ
ートしたデータ構造である。また、各進入頂点から枝別
れする2つの稜線の連鎖構造として左側稜線リスト及び
右側稜線リストがある。図5でAELが指し示している
左側稜線と右側稜線は図7の中で斜線を施した4個の左
右稜線データである。走査線y=yの処理時点では、進
入頂点リストについては、v1 、v34、v8 、v29、v
15に対する進入処理が済み、次に進入頂点v25が進入を
待っている。
稜線リストについて説明する。進入頂点リストは、輪郭
線上のy座標の極小点(進入頂点)をy座標の昇順にソ
ートしたデータ構造である。また、各進入頂点から枝別
れする2つの稜線の連鎖構造として左側稜線リスト及び
右側稜線リストがある。図5でAELが指し示している
左側稜線と右側稜線は図7の中で斜線を施した4個の左
右稜線データである。走査線y=yの処理時点では、進
入頂点リストについては、v1 、v34、v8 、v29、v
15に対する進入処理が済み、次に進入頂点v25が進入を
待っている。
【0009】左右稜線リストについては、v1 、v34か
ら始まる左右稜線リストとv8 から始まる右側稜線リス
トと、v29から始まる左側稜線リストは既に処理が終了
しているが、v8 から始まる左側稜線リストはアクティ
ブエッジv81を、v29から始まる右側頂点リストはアク
ティブエッジv29r を処理中である。v15から始まる左
右稜線リストはアクティブエッジv16及びv14を含んで
いる。即ち、点線A1−A2 より上方にあるデータは処
理済または処理中、下方にあるデータは未処理である。
このように、2次元的なデータ構造を上方から下方へ、
中央から左右端へ向かってAELの処理が進んで行くと
いう処理方法に従来の走査変換の特徴がある。アウトラ
インフォントデータから進入頂点リストと左右稜線リス
トを作るためには、図3のステップS103、S104
に示すように座標変換及び頂点と稜線の分類が必要であ
る。座標変換の結果、文字の伸縮回転が起こるが、回転
の問題は後に述べるので、ここでは回転のない場合を考
える。
ら始まる左右稜線リストとv8 から始まる右側稜線リス
トと、v29から始まる左側稜線リストは既に処理が終了
しているが、v8 から始まる左側稜線リストはアクティ
ブエッジv81を、v29から始まる右側頂点リストはアク
ティブエッジv29r を処理中である。v15から始まる左
右稜線リストはアクティブエッジv16及びv14を含んで
いる。即ち、点線A1−A2 より上方にあるデータは処
理済または処理中、下方にあるデータは未処理である。
このように、2次元的なデータ構造を上方から下方へ、
中央から左右端へ向かってAELの処理が進んで行くと
いう処理方法に従来の走査変換の特徴がある。アウトラ
インフォントデータから進入頂点リストと左右稜線リス
トを作るためには、図3のステップS103、S104
に示すように座標変換及び頂点と稜線の分類が必要であ
る。座標変換の結果、文字の伸縮回転が起こるが、回転
の問題は後に述べるので、ここでは回転のない場合を考
える。
【0010】図9及び図10は従来方法による頂点と稜
線の分類法を示す。これらの図は、表示面上に座標変換
された頂点の系列としてのアウトラインデータを用いて
進入頂点と左右稜線を分類抽出する方法を示している。
文字の内部領域を左側に見込むように、即ち反時計回り
に輪郭線をたどってy座標の増減を調べ(増加ならdy
=1、減少ならdy=−1、不変ならdy=0)、y座
標が増加を開始する頂点(s=1)を進入頂点とし、y
座標が減少を開始する頂点(s=−1)を退出頂点、即
ち左右稜線の終点としている。この分類結果を用いて、
全ての進入頂点をy座標の昇順に並べ換えて進入頂点リ
ストを作る。ここで、進入頂点から次の進入頂点までの
y座標の差(進入差分)を求めて各進入頂点データに与
えておけば、走査変換を効率良く実行できる。また、進
入頂点から文字の内部領域を左側に見込む方向に退出頂
点まで進む稜線の系列として左側稜線リストを、文字の
内部領域を右側に見込む方向に退出頂点まで進む稜線の
系列として右側稜線リストを作り、各稜線データには前
述した高さh、増分デルタx等の値を計算して記憶させ
ておけば、走査変換処理が効率良く実行できる。この高
さh及び増分デルタxを求める処理をここでは増分値計
算と呼ぶ。以上の処理は図3のステップS105、S1
06で実行される。
線の分類法を示す。これらの図は、表示面上に座標変換
された頂点の系列としてのアウトラインデータを用いて
進入頂点と左右稜線を分類抽出する方法を示している。
文字の内部領域を左側に見込むように、即ち反時計回り
に輪郭線をたどってy座標の増減を調べ(増加ならdy
=1、減少ならdy=−1、不変ならdy=0)、y座
標が増加を開始する頂点(s=1)を進入頂点とし、y
座標が減少を開始する頂点(s=−1)を退出頂点、即
ち左右稜線の終点としている。この分類結果を用いて、
全ての進入頂点をy座標の昇順に並べ換えて進入頂点リ
ストを作る。ここで、進入頂点から次の進入頂点までの
y座標の差(進入差分)を求めて各進入頂点データに与
えておけば、走査変換を効率良く実行できる。また、進
入頂点から文字の内部領域を左側に見込む方向に退出頂
点まで進む稜線の系列として左側稜線リストを、文字の
内部領域を右側に見込む方向に退出頂点まで進む稜線の
系列として右側稜線リストを作り、各稜線データには前
述した高さh、増分デルタx等の値を計算して記憶させ
ておけば、走査変換処理が効率良く実行できる。この高
さh及び増分デルタxを求める処理をここでは増分値計
算と呼ぶ。以上の処理は図3のステップS105、S1
06で実行される。
【0011】図3のステップS107から描画処理が開
始する。進入頂点の検出処理はステップS109、S1
10、S111で実行される。新たな進入頂点が検出さ
れて、そこから始まる最初の左側稜線と右側稜線(進入
エッジ)をAELに挿入する処理がステップS108で
実行され、進入エッジ以外の左側稜線と右側稜線への更
新処理及び退出処理はステップS128で実行される。
従って、ループは稜線データの供給処理、ループは
稜線データを消費して画像データを生成する処理と考え
られ、これらの処理の各々は走査線ループのステップ
S110及びS112で実行すべきか否かを判定される
ものと考えられる。
始する。進入頂点の検出処理はステップS109、S1
10、S111で実行される。新たな進入頂点が検出さ
れて、そこから始まる最初の左側稜線と右側稜線(進入
エッジ)をAELに挿入する処理がステップS108で
実行され、進入エッジ以外の左側稜線と右側稜線への更
新処理及び退出処理はステップS128で実行される。
従って、ループは稜線データの供給処理、ループは
稜線データを消費して画像データを生成する処理と考え
られ、これらの処理の各々は走査線ループのステップ
S110及びS112で実行すべきか否かを判定される
ものと考えられる。
【0012】平仮名の「こ」の字のように上下に離れた
2つの部分から成る文字の走査変換で、走査線が2つの
部分の中間にある時は、AELは空になっているので、
ステップS112、S113、S117、S110、S
111の形成するループを繰り返す。これは稜線データ
の供給も消費も行なわれないまま走査線のみ次の進入頂
点まで下方に移動させる処理である。稜線データの供給
と消費がなく、かつ次の進入頂点が残っていない時にス
テップS113からループを抜けて1文字描画が完了
する。
2つの部分から成る文字の走査変換で、走査線が2つの
部分の中間にある時は、AELは空になっているので、
ステップS112、S113、S117、S110、S
111の形成するループを繰り返す。これは稜線データ
の供給も消費も行なわれないまま走査線のみ次の進入頂
点まで下方に移動させる処理である。稜線データの供給
と消費がなく、かつ次の進入頂点が残っていない時にス
テップS113からループを抜けて1文字描画が完了
する。
【0013】
【発明が解決しようとする課題】しかしながら、以上述
べた従来の文字の走査変換処理方法を用いたのでは、次
のような多くの処理項目を1文字描画するたびに、ある
いは1走査線毎に実行する必要がある。 a)座標変換(移動、伸縮、回転) b)進入頂点リスト作成(yソート含む) c)左右稜線リスト作成 d)増分値計算 e)AEL進入処理 f)AEL更新退出処理(xソート含む) g)走査線単位の描画処理(複数線分)
べた従来の文字の走査変換処理方法を用いたのでは、次
のような多くの処理項目を1文字描画するたびに、ある
いは1走査線毎に実行する必要がある。 a)座標変換(移動、伸縮、回転) b)進入頂点リスト作成(yソート含む) c)左右稜線リスト作成 d)増分値計算 e)AEL進入処理 f)AEL更新退出処理(xソート含む) g)走査線単位の描画処理(複数線分)
【0014】この内、b)、c)、e)、f)の進入頂
点リスト、左右稜線リスト、及びAELの作成、利用、
更新に関する処理は、描画すべき画素の座標値を求める
ために直接的に必要な計算ではなく、描画に必要なデー
タを順序正しく供給するための付随的な処理であり、こ
れら諸リストのデータ構造が複雑なために、この付随的
な処理に走査変換処理の大部分の処理時間を費やしてし
まうという問題点があった。b)、c)の処理が必要な
理由は文字の回転変換を許すためであり、またe)、
f)の処理が必要な理由は1本の走査線上で複数の線分
を描画する必要があるためである。さらに、1走査線上
に複数の描画線分が発生する理由は、輪郭線が複数個あ
るため、輪郭線の形状が複雑なため、あるいは自己交差
するため、輪郭線の内部に別の内部輪郭線が存在するた
めのいずれかである。
点リスト、左右稜線リスト、及びAELの作成、利用、
更新に関する処理は、描画すべき画素の座標値を求める
ために直接的に必要な計算ではなく、描画に必要なデー
タを順序正しく供給するための付随的な処理であり、こ
れら諸リストのデータ構造が複雑なために、この付随的
な処理に走査変換処理の大部分の処理時間を費やしてし
まうという問題点があった。b)、c)の処理が必要な
理由は文字の回転変換を許すためであり、またe)、
f)の処理が必要な理由は1本の走査線上で複数の線分
を描画する必要があるためである。さらに、1走査線上
に複数の描画線分が発生する理由は、輪郭線が複数個あ
るため、輪郭線の形状が複雑なため、あるいは自己交差
するため、輪郭線の内部に別の内部輪郭線が存在するた
めのいずれかである。
【0015】次に、文字の回転と内部輪郭線の関わる場
合の従来技術の問題点を説明する。図11は従来方法の
文字の回転と走査変換説明図である。また、図12は従
来方法による回転した文字の左右稜線リストを示す。図
11は、「る」の文字のこれまでとは別のアウトライン
が全体を囲む外部輪郭線と穴を示す内部輪郭線とから成
っており、これを回転変換した文字の内部領域を塗りつ
ぶす状況を示している。図12はこの塗りつぶしに用い
られる進入頂点リストと左右稜線リストの枠組を示して
いる。即ち、進入頂点はv1 、v2 、v3 、v4 の4頂
点がこの順に進入頂点リストを形成し、左右稜線リスト
の終了点(退出頂点)はw1 、w2 、w3 、w4 のいず
れかとなる。点線A1−A2は図11の走査線y=yの
描画時点でのAELの前線を示している。
合の従来技術の問題点を説明する。図11は従来方法の
文字の回転と走査変換説明図である。また、図12は従
来方法による回転した文字の左右稜線リストを示す。図
11は、「る」の文字のこれまでとは別のアウトライン
が全体を囲む外部輪郭線と穴を示す内部輪郭線とから成
っており、これを回転変換した文字の内部領域を塗りつ
ぶす状況を示している。図12はこの塗りつぶしに用い
られる進入頂点リストと左右稜線リストの枠組を示して
いる。即ち、進入頂点はv1 、v2 、v3 、v4 の4頂
点がこの順に進入頂点リストを形成し、左右稜線リスト
の終了点(退出頂点)はw1 、w2 、w3 、w4 のいず
れかとなる。点線A1−A2は図11の走査線y=yの
描画時点でのAELの前線を示している。
【0016】この進入頂点と退出頂点の組合せは、文字
の回転角に依存して変わることがわかる。従って、進入
頂点リストと左右稜線リストの作成は文字の回転を行な
うために描画時に必要となる処理である。文字の回転を
行なわず、x軸とy軸方向に独立に伸縮と移動を行なう
のであれば、進入頂点と退出頂点の組合せは最初から文
字毎に決まっているので、進入頂点リストと左右稜線リ
ストの作成を文字描画のたびに行なって処理時間を長引
かせる必要はなく、これらのリストそのものをフォント
データとして用いてもよい。このように文字を回転しな
い場合には、従来方式には余分な前処理b)、c)があ
ると考えられる。
の回転角に依存して変わることがわかる。従って、進入
頂点リストと左右稜線リストの作成は文字の回転を行な
うために描画時に必要となる処理である。文字の回転を
行なわず、x軸とy軸方向に独立に伸縮と移動を行なう
のであれば、進入頂点と退出頂点の組合せは最初から文
字毎に決まっているので、進入頂点リストと左右稜線リ
ストの作成を文字描画のたびに行なって処理時間を長引
かせる必要はなく、これらのリストそのものをフォント
データとして用いてもよい。このように文字を回転しな
い場合には、従来方式には余分な前処理b)、c)があ
ると考えられる。
【0017】また、図11のように頂点v4 、w4 を通
るような内部輪郭線が存在する場合に、内部輪郭線の穴
を塗りつぶさないようにするには、その内部輪郭線の作
る進入頂点リストと左右稜線リストをその内部輪郭線を
囲む外部輪郭線の作るリストに併合して走査変換する必
要がある。図11のv4 を進入頂点とする内部輪郭線は
走査線y=yとQ1 及びP2 において交わり、外部輪郭
線の発生する描画線分P1 Q2 の内、Q1 とP2 の間を
w=0とすることにより塗りつぶさないようにしてい
る。図3、図4に示す処理手順はこのような内部輪郭線
を含む場合にも適用される一般的な処理手順である。即
ち、文字を囲む各々の輪郭線に対する進入頂点リストと
左右稜線リストを作成し、これら全てのリストを併合し
て一度に走査変換するため、走査線毎に複数の描画線分
を生じ、AELを用いた走査変換を必要としている。
るような内部輪郭線が存在する場合に、内部輪郭線の穴
を塗りつぶさないようにするには、その内部輪郭線の作
る進入頂点リストと左右稜線リストをその内部輪郭線を
囲む外部輪郭線の作るリストに併合して走査変換する必
要がある。図11のv4 を進入頂点とする内部輪郭線は
走査線y=yとQ1 及びP2 において交わり、外部輪郭
線の発生する描画線分P1 Q2 の内、Q1 とP2 の間を
w=0とすることにより塗りつぶさないようにしてい
る。図3、図4に示す処理手順はこのような内部輪郭線
を含む場合にも適用される一般的な処理手順である。即
ち、文字を囲む各々の輪郭線に対する進入頂点リストと
左右稜線リストを作成し、これら全てのリストを併合し
て一度に走査変換するため、走査線毎に複数の描画線分
を生じ、AELを用いた走査変換を必要としている。
【0018】従って、従来の方法はアウトライン文字の
描画速度をより一層高速化する場合に、各種の解決すべ
き課題を持っていた。本発明は、以上の点に着目してな
されたもので、アウトライン文字の走査変換の際に進入
頂点リストやアクティブエッジリストの生成処理を伴わ
ない、高速なアウトライン文字描画方法を提供すること
を目的としてなされたものである。
描画速度をより一層高速化する場合に、各種の解決すべ
き課題を持っていた。本発明は、以上の点に着目してな
されたもので、アウトライン文字の走査変換の際に進入
頂点リストやアクティブエッジリストの生成処理を伴わ
ない、高速なアウトライン文字描画方法を提供すること
を目的としてなされたものである。
【0019】
【課題を解決するための手段】本発明の第1発明は、文
字の輪郭線を複数の線分の集合で形成した場合に、前記
各線分の頂点座標の環状連鎖構造として表現されたポリ
ゴンデータを得て、予め設定された基準座標軸に平行な
方向に見た、前記輪郭線上の位置座標が、極大又は極小
となるような、前記輪郭線に囲まれた図形の凹頂点を抽
出し、前記凹頂点を通る前記基準座標軸に平行な線分に
より、前記輪郭線に囲まれた図形を複数のポリゴンに分
割し、所定の起点より前記ポリゴンの輪郭線をそれぞれ
反対方向にたどる、前記基準座標軸の方向に見てその位
置座標を単調減少あるいは単調増加させる、一対の左側
稜線データと右側稜線データを作成し、前記複数のポリ
ゴンについての前記左右稜線データを集積した中間フォ
ントデータを、描画を要求される文字毎に予め記憶して
おき、前記中間フォントデータを読み出して、前記左右
稜線データと前記基準座標軸に垂直な走査線との交点を
認識して、前記ポリゴンを塗りつぶすことを特徴とする
アウトライン文字描画方法に関する。
字の輪郭線を複数の線分の集合で形成した場合に、前記
各線分の頂点座標の環状連鎖構造として表現されたポリ
ゴンデータを得て、予め設定された基準座標軸に平行な
方向に見た、前記輪郭線上の位置座標が、極大又は極小
となるような、前記輪郭線に囲まれた図形の凹頂点を抽
出し、前記凹頂点を通る前記基準座標軸に平行な線分に
より、前記輪郭線に囲まれた図形を複数のポリゴンに分
割し、所定の起点より前記ポリゴンの輪郭線をそれぞれ
反対方向にたどる、前記基準座標軸の方向に見てその位
置座標を単調減少あるいは単調増加させる、一対の左側
稜線データと右側稜線データを作成し、前記複数のポリ
ゴンについての前記左右稜線データを集積した中間フォ
ントデータを、描画を要求される文字毎に予め記憶して
おき、前記中間フォントデータを読み出して、前記左右
稜線データと前記基準座標軸に垂直な走査線との交点を
認識して、前記ポリゴンを塗りつぶすことを特徴とする
アウトライン文字描画方法に関する。
【0020】本発明の第2発明は、文字の輪郭線に外部
輪郭線と内部輪郭線が存在する場合に、前記内部輪郭線
上の1点と、その内部輪郭線を包囲する外部輪郭線上の
1点を結ぶ連結線分が、その両端点以外では文字のいか
なる輪郭線とも交差しないように選定し、その連結線分
を往復経路として、前記外部輪郭線と前記内部輪郭線を
連結して1本の新たな輪郭線を合成し、前記輪郭線の合
成処理によって、全ての前記内部輪郭線を除去した後、
前記輪郭線について、凹頂点の抽出を実行することを特
徴とするアウトライン文字描画方法に関する。
輪郭線と内部輪郭線が存在する場合に、前記内部輪郭線
上の1点と、その内部輪郭線を包囲する外部輪郭線上の
1点を結ぶ連結線分が、その両端点以外では文字のいか
なる輪郭線とも交差しないように選定し、その連結線分
を往復経路として、前記外部輪郭線と前記内部輪郭線を
連結して1本の新たな輪郭線を合成し、前記輪郭線の合
成処理によって、全ての前記内部輪郭線を除去した後、
前記輪郭線について、凹頂点の抽出を実行することを特
徴とするアウトライン文字描画方法に関する。
【0021】本発明の第3発明は、文字の輪郭線に囲ま
れた内部領域全体を、複数のポリゴンに分割し、前記各
ポリゴンの内部領域の論理和が文字全体の内部領域とな
るようにし、かつ、前記全てのポリゴンの輪郭線が、予
め設定された基準座標軸に垂直な任意の走査線と2個以
下の交点を持つ形状に選定して、前記ポリゴンの輪郭線
上の所定の起点より前記ポリゴンの輪郭線をそれぞれ反
対方向にたどる、一対の左側稜線データと右側稜線デー
タを作成し、前記複数のポリゴンについての前記左右稜
線データを集積した中間フォントデータを、描画を要求
される文字毎に予め記憶しておき、前記中間フォントデ
ータを読み出して、前記左右稜線データと前記基準座標
軸に垂直な走査線との交点を認識して、前記ポリゴンを
塗りつぶすことを特徴とするアウトライン文字描画方法
に関する。
れた内部領域全体を、複数のポリゴンに分割し、前記各
ポリゴンの内部領域の論理和が文字全体の内部領域とな
るようにし、かつ、前記全てのポリゴンの輪郭線が、予
め設定された基準座標軸に垂直な任意の走査線と2個以
下の交点を持つ形状に選定して、前記ポリゴンの輪郭線
上の所定の起点より前記ポリゴンの輪郭線をそれぞれ反
対方向にたどる、一対の左側稜線データと右側稜線デー
タを作成し、前記複数のポリゴンについての前記左右稜
線データを集積した中間フォントデータを、描画を要求
される文字毎に予め記憶しておき、前記中間フォントデ
ータを読み出して、前記左右稜線データと前記基準座標
軸に垂直な走査線との交点を認識して、前記ポリゴンを
塗りつぶすことを特徴とするアウトライン文字描画方法
に関する。
【0022】本発明の第4発明は、文字の外部輪郭線上
及び内部輪郭線上において、予め設定された基準座標軸
に平行な方向に見た、前記各輪郭線上の位置座標が、極
大または極小となる頂点を求め、全ての極小頂点を前記
位置座標の昇順に並べて進入頂点リストを作成し、前記
極小頂点から前記各輪郭線上をたどり極大頂点に至る、
左側稜線及び右側稜線を抽出し、これらの左右稜線デー
タを集積した中間フォントデータを、描画を要求される
文字毎に記憶しておき、前記中間フォントデータを用い
て、前記基準座標軸に平行な方向に見た文字の最上頂点
から最下頂点まで、前記基準座標軸に垂直な走査線と左
右稜線との交点を全て求め、文字の内部領域を塗りつぶ
すことを特徴とするアウトライン文字描画方法に関す
る。
及び内部輪郭線上において、予め設定された基準座標軸
に平行な方向に見た、前記各輪郭線上の位置座標が、極
大または極小となる頂点を求め、全ての極小頂点を前記
位置座標の昇順に並べて進入頂点リストを作成し、前記
極小頂点から前記各輪郭線上をたどり極大頂点に至る、
左側稜線及び右側稜線を抽出し、これらの左右稜線デー
タを集積した中間フォントデータを、描画を要求される
文字毎に記憶しておき、前記中間フォントデータを用い
て、前記基準座標軸に平行な方向に見た文字の最上頂点
から最下頂点まで、前記基準座標軸に垂直な走査線と左
右稜線との交点を全て求め、文字の内部領域を塗りつぶ
すことを特徴とするアウトライン文字描画方法に関す
る。
【0023】
【作用】第1発明においては、文字の輪郭線を頂点の環
状連鎖構造として表現することにより、特定の条件を持
った頂点の探索や頂点の挿入及び削除を容易にする。文
字の輪郭線に囲まれた多角形は、複数のポリゴンに分割
する。ポリゴンを分割する線分は例えばy軸に平行な線
分で、左右に分割された2つのポリゴンによって共有さ
れる。その一端は分割前の図形の1頂点で、y座標が極
大または極小となる凹頂点である。このような頂点が存
在しなければ分割は行なわれず、また、このような頂点
が分割された左右のポリゴンのいずれかに存在する限り
再帰的に分割される。分割終了後の各々のポリゴンの形
状は、進入頂点及び退出頂点が各1個の単純な形状であ
ることから、進入頂点から退出頂点に至る1対の左右稜
線データを求める。
状連鎖構造として表現することにより、特定の条件を持
った頂点の探索や頂点の挿入及び削除を容易にする。文
字の輪郭線に囲まれた多角形は、複数のポリゴンに分割
する。ポリゴンを分割する線分は例えばy軸に平行な線
分で、左右に分割された2つのポリゴンによって共有さ
れる。その一端は分割前の図形の1頂点で、y座標が極
大または極小となる凹頂点である。このような頂点が存
在しなければ分割は行なわれず、また、このような頂点
が分割された左右のポリゴンのいずれかに存在する限り
再帰的に分割される。分割終了後の各々のポリゴンの形
状は、進入頂点及び退出頂点が各1個の単純な形状であ
ることから、進入頂点から退出頂点に至る1対の左右稜
線データを求める。
【0024】以上の処理を必要な全ての文字の全ての外
部輪郭線について実行し、左右稜線データの集積した中
間フォントデータとして記憶装置に格納する。実際の描
画の際には、描画すべき文字の中間フォントデータを読
み出し、各左右稜線データに回転を含まない座標変換と
増分値計算を施し、走査線毎に左右稜線に挟まれた部分
を塗りつぶすことにより、文字輪郭の囲む全ての領域を
塗りつぶす。走査変換の中には、従来必要とされた進入
頂点リスト、左右稜線リスト、アクティブエッジリスト
の生成処理は含まれていないので、処理が高速化され
る。
部輪郭線について実行し、左右稜線データの集積した中
間フォントデータとして記憶装置に格納する。実際の描
画の際には、描画すべき文字の中間フォントデータを読
み出し、各左右稜線データに回転を含まない座標変換と
増分値計算を施し、走査線毎に左右稜線に挟まれた部分
を塗りつぶすことにより、文字輪郭の囲む全ての領域を
塗りつぶす。走査変換の中には、従来必要とされた進入
頂点リスト、左右稜線リスト、アクティブエッジリスト
の生成処理は含まれていないので、処理が高速化され
る。
【0025】また、第2発明では、文字の内部輪郭線と
外部輪郭線を結ぶ連結線分を選び、これを境界として文
字の内部領域を局部的に分離する。しかし、この分離に
よって文字の内部領域は2つの領域に分割されず、1つ
の連続した領域となっている。即ち、見かけ上新たな1
本の外部輪郭線が形成され、その結果、内部輪郭線が除
去される。その後は、第1発明と全く同一の手順で描画
が行なわれる。
外部輪郭線を結ぶ連結線分を選び、これを境界として文
字の内部領域を局部的に分離する。しかし、この分離に
よって文字の内部領域は2つの領域に分割されず、1つ
の連続した領域となっている。即ち、見かけ上新たな1
本の外部輪郭線が形成され、その結果、内部輪郭線が除
去される。その後は、第1発明と全く同一の手順で描画
が行なわれる。
【0026】第3発明は、文字の輪郭線に囲まれた内部
領域をそれぞれ部分的に重なり合うような複数のポリゴ
ンに分割する。各ポリゴンはこのときできるだけ単純な
形状に選定する。即ち、各ポリゴンの輪郭線は任意の走
査線と2個以下の交点を持つようにする。このようなポ
リゴン分割を行なっても、単純な塗りつぶし処理の繰り
返しによってアウトライン文字描画が可能となる。
領域をそれぞれ部分的に重なり合うような複数のポリゴ
ンに分割する。各ポリゴンはこのときできるだけ単純な
形状に選定する。即ち、各ポリゴンの輪郭線は任意の走
査線と2個以下の交点を持つようにする。このようなポ
リゴン分割を行なっても、単純な塗りつぶし処理の繰り
返しによってアウトライン文字描画が可能となる。
【0027】第4発明は、従来文字塗りつぶしの際に実
行していた進入頂点リストの作成や左右稜線リストの作
成を予め描画を要求される文字毎に実行し、中間フォン
トデータを記憶しておく。描画の際にはこの中間フォン
トデータを用いて文字の内部領域の塗りつぶしを行な
う。即ち、塗りつぶし処理の容易な稜線データの集積と
して表した中間フォントデータを描画要求される全ての
文字について記憶しておき、描画の際には、このような
準備処理無しに直ちに正確に線との交点を認識し、塗り
つぶし処理を実行する。このように元のアウトライン文
字フォントデータのデータ量を著しく増大させない中間
フォントデータを予め用意しておくことによって、実際
の文字塗りつぶし処理が高速化される。
行していた進入頂点リストの作成や左右稜線リストの作
成を予め描画を要求される文字毎に実行し、中間フォン
トデータを記憶しておく。描画の際にはこの中間フォン
トデータを用いて文字の内部領域の塗りつぶしを行な
う。即ち、塗りつぶし処理の容易な稜線データの集積と
して表した中間フォントデータを描画要求される全ての
文字について記憶しておき、描画の際には、このような
準備処理無しに直ちに正確に線との交点を認識し、塗り
つぶし処理を実行する。このように元のアウトライン文
字フォントデータのデータ量を著しく増大させない中間
フォントデータを予め用意しておくことによって、実際
の文字塗りつぶし処理が高速化される。
【0028】
【実施例】以下、本発明を図の実施例を用いて詳細に説
明する。 [第1発明]図1は、本発明の第1発明のアウトライン
文字描画方法を示す説明図である。この図では、「る」
の文字がy軸に平行な線分11によって7つの単純な形
のポリゴンに分割され、分割された7つのポリゴンP1
、P2 、P3 、P4 、P5、P6 、P7 が順番に塗りつ
ぶされていく状況を示している。線分11は輪郭線の凹
頂点12を起点としている。7つのポリゴンは実際には
互いに接触し、あるいは交差しているが、独立に描画さ
れることを示すためにx方向に引き離して描いてある。
これらのポリゴンはポインタにより関係付けられたポリ
ゴンリスト13及びポリゴンデータ14によってひとま
とまりのデータとされる。分割された各ポリゴンの形状
は、y座標の極小点である進入頂点とy座標の極大点で
ある退出頂点が1個ずつしかなく、任意の水平線と2個
以下の交点を持つ形状であるため、従来方式によるアク
ティブエッジリストを使用した描画方法に比べると、は
るかに単純な処理手順で塗りつぶしができる。本実施例
では、全ての文字のアウトラインフォントをポリゴン分
割して左右稜線データ15を得て、中間フォントデータ
として記憶装置に格納する処理と、表示面上に文字描画
を行なう走査変換処理とを別々に実行するので、ポリゴ
ン分割処理と走査変換処理を分けて説明する。
明する。 [第1発明]図1は、本発明の第1発明のアウトライン
文字描画方法を示す説明図である。この図では、「る」
の文字がy軸に平行な線分11によって7つの単純な形
のポリゴンに分割され、分割された7つのポリゴンP1
、P2 、P3 、P4 、P5、P6 、P7 が順番に塗りつ
ぶされていく状況を示している。線分11は輪郭線の凹
頂点12を起点としている。7つのポリゴンは実際には
互いに接触し、あるいは交差しているが、独立に描画さ
れることを示すためにx方向に引き離して描いてある。
これらのポリゴンはポインタにより関係付けられたポリ
ゴンリスト13及びポリゴンデータ14によってひとま
とまりのデータとされる。分割された各ポリゴンの形状
は、y座標の極小点である進入頂点とy座標の極大点で
ある退出頂点が1個ずつしかなく、任意の水平線と2個
以下の交点を持つ形状であるため、従来方式によるアク
ティブエッジリストを使用した描画方法に比べると、は
るかに単純な処理手順で塗りつぶしができる。本実施例
では、全ての文字のアウトラインフォントをポリゴン分
割して左右稜線データ15を得て、中間フォントデータ
として記憶装置に格納する処理と、表示面上に文字描画
を行なう走査変換処理とを別々に実行するので、ポリゴ
ン分割処理と走査変換処理を分けて説明する。
【0029】[ポリゴン分割処理]図13は本発明の方
法実施例説明図である。第1発明は、この文字「る」を
具体的にポリゴン分割する処理を用いて説明する。ま
た、図14は本発明の第1発明のポリゴン分割フローチ
ャートである。まず、図14ステップS1で1文字分の
アウトラインフォントデータを読み込む。アウトライン
は1個以上の外部輪郭線から成るものとし、最初は穴を
囲む内部輪郭線が存在しない場合を考える。次に、図1
4のステップS2で、外部輪郭線の1つを頂点の環状連
鎖構造として表現したポリゴンデータを作成する。ポリ
ゴンデータは、図13に示す文字「る」の輪郭線の37
個の頂点v1 〜v37及びこれらの間にあって番号を付さ
れていない全ての頂点を、頂点v1 から始め、反時計回
りに閉ループを形成したものとなっている。ポリゴンデ
ータの始めの頂点は便宜的にy座標が最小値をとる頂点
とする。頂点データは、次の頂点データへのポインタ
(記憶アドレス)、x座標、y座標、その他の情報をま
とめた記憶ブロックである。
法実施例説明図である。第1発明は、この文字「る」を
具体的にポリゴン分割する処理を用いて説明する。ま
た、図14は本発明の第1発明のポリゴン分割フローチ
ャートである。まず、図14ステップS1で1文字分の
アウトラインフォントデータを読み込む。アウトライン
は1個以上の外部輪郭線から成るものとし、最初は穴を
囲む内部輪郭線が存在しない場合を考える。次に、図1
4のステップS2で、外部輪郭線の1つを頂点の環状連
鎖構造として表現したポリゴンデータを作成する。ポリ
ゴンデータは、図13に示す文字「る」の輪郭線の37
個の頂点v1 〜v37及びこれらの間にあって番号を付さ
れていない全ての頂点を、頂点v1 から始め、反時計回
りに閉ループを形成したものとなっている。ポリゴンデ
ータの始めの頂点は便宜的にy座標が最小値をとる頂点
とする。頂点データは、次の頂点データへのポインタ
(記憶アドレス)、x座標、y座標、その他の情報をま
とめた記憶ブロックである。
【0030】図15及び図16は本発明の第1発明の頂
点分類法説明図である。ポリゴンデータにはこのような
形式の情報も含めて記憶される。頂点の隣接関係はポイ
ンタによって表されるので記憶ブロックが隣合う必要は
なく、ポインタを張り換えることによって特定の頂点デ
ータの挿入及び削除を行なうことが可能である。また、
頂点データを環状に連結することによって特定の幾何学
的条件を持った頂点を容易に探索できる。次に、図14
ステップS3でポリゴン再帰分割を行なうが、これは図
1に示すようなポリゴン分割処理を実行することであ
る。
点分類法説明図である。ポリゴンデータにはこのような
形式の情報も含めて記憶される。頂点の隣接関係はポイ
ンタによって表されるので記憶ブロックが隣合う必要は
なく、ポインタを張り換えることによって特定の頂点デ
ータの挿入及び削除を行なうことが可能である。また、
頂点データを環状に連結することによって特定の幾何学
的条件を持った頂点を容易に探索できる。次に、図14
ステップS3でポリゴン再帰分割を行なうが、これは図
1に示すようなポリゴン分割処理を実行することであ
る。
【0031】図17に本発明の第1発明のポリゴン再帰
分割フローチャートを示す。図17のステップS8の頂
点の分類では、図13に示した始点v1 から反時計回り
に進んでx座標とy座標の増減を調べ、y座標について
極大及び極小点を検出し、さらに各頂点の凹凸の判別を
する。図15及び図16に示す表の各欄は次式によって
求めたものである。但し、添字iは分割すべきポリゴン
の全頂点にもれなく順に付されているものとする。 a)dxi=sgn(xi+1−xi) b)dyi=sgn(yi+1−yi) c)dyi=1かつdyi-1≠1のときsi=1 d)dyi=−1かつdyi-1≠−1のときsi=−1 e)その他のときsi=0 f)ti=sgn{(xi+1−xi)(yi−yi-1) −(xi−xi-1)(yi+1−yi)} 但し、 g)x>0のときsgn(x)=1 h)x=0のときsgn(x)=0 i)x<0のときsgn(x)=−1 即ち、dx、dyは頂点を1つ進んだときのx座標とy
座標の増減を+1、−1または0で示す。また、y座標
が増加を開始する頂点(極小点)をs=1で、y座標が
減少を開始する頂点(極大点)をs=−1で示し、凸頂
点をt=1で、凹頂点をt=−1で示す。
分割フローチャートを示す。図17のステップS8の頂
点の分類では、図13に示した始点v1 から反時計回り
に進んでx座標とy座標の増減を調べ、y座標について
極大及び極小点を検出し、さらに各頂点の凹凸の判別を
する。図15及び図16に示す表の各欄は次式によって
求めたものである。但し、添字iは分割すべきポリゴン
の全頂点にもれなく順に付されているものとする。 a)dxi=sgn(xi+1−xi) b)dyi=sgn(yi+1−yi) c)dyi=1かつdyi-1≠1のときsi=1 d)dyi=−1かつdyi-1≠−1のときsi=−1 e)その他のときsi=0 f)ti=sgn{(xi+1−xi)(yi−yi-1) −(xi−xi-1)(yi+1−yi)} 但し、 g)x>0のときsgn(x)=1 h)x=0のときsgn(x)=0 i)x<0のときsgn(x)=−1 即ち、dx、dyは頂点を1つ進んだときのx座標とy
座標の増減を+1、−1または0で示す。また、y座標
が増加を開始する頂点(極小点)をs=1で、y座標が
減少を開始する頂点(極大点)をs=−1で示し、凸頂
点をt=1で、凹頂点をt=−1で示す。
【0032】次に、図17のステップS9でy座標が極
大または極小となる凹頂点を探す。これは、s=1また
はs=−1で、t=−1の頂点である。図15と図16
の表からこの条件を満たす頂点は6個存在する。即ち、
v8 、v15、v18、v20、v31、v36の各頂点である。
図13で、これらの頂点から文字の内部領域に向かって
(s=1なら上方、s=−1なら下方に)分割線を引
き、内部領域を横断してポリゴンの輪郭線と最初に出合
う交点(以下対点と呼ぶ)を求め、こうして得られた6
本の垂直線分を分割線として文字の内部領域を7個の部
分領域に分割している。これら7個の部分領域が図1の
7個に分割されたポリゴンに相当する。
大または極小となる凹頂点を探す。これは、s=1また
はs=−1で、t=−1の頂点である。図15と図16
の表からこの条件を満たす頂点は6個存在する。即ち、
v8 、v15、v18、v20、v31、v36の各頂点である。
図13で、これらの頂点から文字の内部領域に向かって
(s=1なら上方、s=−1なら下方に)分割線を引
き、内部領域を横断してポリゴンの輪郭線と最初に出合
う交点(以下対点と呼ぶ)を求め、こうして得られた6
本の垂直線分を分割線として文字の内部領域を7個の部
分領域に分割している。これら7個の部分領域が図1の
7個に分割されたポリゴンに相当する。
【0033】この分割処理をさらにステップを追って説
明する。図17のステップS9で始点v1 から極大極小
の凹頂点を探し、頂点v8 がそのような頂点であること
が分かると、ステップS10に進み、ステップS11で
内部領域を上方に横断して対点v′8 を求める。ステッ
プS12では垂直線分v8 v′8 で内部領域全体をまず
2分割する。その結果、この2つの内部領域を囲む2つ
のポリゴンデータが作成される。具体的にはポリゴンデ
ータ中の頂点データv8 とv′8 の複製を作ってポリゴ
ンデータを2つに分離し、各々が閉ループを作るように
ポインタを張り換える。垂直線分を境にして左側の内部
領域を囲むポリゴンを左側ポリゴン、右側の内部領域を
囲むポリゴンを右側ポリゴンと呼ぶ。また、これら分割
されたポリゴンデータへのポインタを配列構造または連
鎖構造の形で記憶しておく必要がある。図1ではポリゴ
ンリストと呼ぶ連鎖構造の形で記憶している。
明する。図17のステップS9で始点v1 から極大極小
の凹頂点を探し、頂点v8 がそのような頂点であること
が分かると、ステップS10に進み、ステップS11で
内部領域を上方に横断して対点v′8 を求める。ステッ
プS12では垂直線分v8 v′8 で内部領域全体をまず
2分割する。その結果、この2つの内部領域を囲む2つ
のポリゴンデータが作成される。具体的にはポリゴンデ
ータ中の頂点データv8 とv′8 の複製を作ってポリゴ
ンデータを2つに分離し、各々が閉ループを作るように
ポインタを張り換える。垂直線分を境にして左側の内部
領域を囲むポリゴンを左側ポリゴン、右側の内部領域を
囲むポリゴンを右側ポリゴンと呼ぶ。また、これら分割
されたポリゴンデータへのポインタを配列構造または連
鎖構造の形で記憶しておく必要がある。図1ではポリゴ
ンリストと呼ぶ連鎖構造の形で記憶している。
【0034】図17のステップS11でv8 の対点v′
8 を求めるには、v8 から反時計回りに1周し、垂直線
x=x8 と分割すべきポリゴンとの交点を全て求めて
v′8の候補とし、そのy座標y′8 が(y8 −y′8
)*s8 >0でかつ|y8 −y′8 |を最小とするも
のを求める。図13から分かるように、このようなv′
8の候補点はv8 以外に8個(上方に1個、下方に7
個)存在し、s8 =1であるからこの内1個だけがy8
−y′8 >0を満足する。こうして対点v′8 が決めら
れる。次に、図17のステップS13で左側ポリゴンに
対しポリゴン再帰分割を行ない、ステップS14で右側
ポリゴンに対しポリゴン再帰分割を行なう。ステップS
13では頂点列v1 、v2 、v3 、v4 、v5 、v6 、
v7 、v8 、v′8 、v36、v37から成るポリゴンデー
タを擁して、ポリゴン再帰分割の入口からステップS8
に進む。ここで、分割された新たなポリゴンに対して改
めて頂点の分類が行なわれ、ステップS9でv36がyの
極大凹頂点であることが分かり、ステップS10に進
む。
8 を求めるには、v8 から反時計回りに1周し、垂直線
x=x8 と分割すべきポリゴンとの交点を全て求めて
v′8の候補とし、そのy座標y′8 が(y8 −y′8
)*s8 >0でかつ|y8 −y′8 |を最小とするも
のを求める。図13から分かるように、このようなv′
8の候補点はv8 以外に8個(上方に1個、下方に7
個)存在し、s8 =1であるからこの内1個だけがy8
−y′8 >0を満足する。こうして対点v′8 が決めら
れる。次に、図17のステップS13で左側ポリゴンに
対しポリゴン再帰分割を行ない、ステップS14で右側
ポリゴンに対しポリゴン再帰分割を行なう。ステップS
13では頂点列v1 、v2 、v3 、v4 、v5 、v6 、
v7 、v8 、v′8 、v36、v37から成るポリゴンデー
タを擁して、ポリゴン再帰分割の入口からステップS8
に進む。ここで、分割された新たなポリゴンに対して改
めて頂点の分類が行なわれ、ステップS9でv36がyの
極大凹頂点であることが分かり、ステップS10に進
む。
【0035】s36=−1であるから、ステップS11で
v36からyの正方向に内部領域を横断して対点v′36を
求め、ステップS12で垂直線分v36v′36でさらにポ
リゴンが2分割される。その結果、左側ポリゴンv1 、
v2 、v3 、v4 、v′36、v36、v37及び右側ポリゴ
ンv′8 、v36、v′36、v5 、v6 、v7 、v8 が形
成される。これらのポリゴンは図1に示すP1 及びP2
の指すポリゴンに相当する。次のステップS13では、
ポリゴンP1 を再帰分割しようとして、ステップS8、
9に行くが、P1 の中には極大極小の凹頂点は存在しな
いのでフローチャートに従って分割をせずに出口から一
旦出てステップS13に戻り、ステップS14に進む。
次にポリゴンP2 を再帰分割しようとするが同様に分割
をせずにステップS14に戻ってきて出口に進む。これ
で最初の2分割における左側ポリゴンの分割処理が終了
したことになり、今度は右側ポリゴンの分割を開始す
る。
v36からyの正方向に内部領域を横断して対点v′36を
求め、ステップS12で垂直線分v36v′36でさらにポ
リゴンが2分割される。その結果、左側ポリゴンv1 、
v2 、v3 、v4 、v′36、v36、v37及び右側ポリゴ
ンv′8 、v36、v′36、v5 、v6 、v7 、v8 が形
成される。これらのポリゴンは図1に示すP1 及びP2
の指すポリゴンに相当する。次のステップS13では、
ポリゴンP1 を再帰分割しようとして、ステップS8、
9に行くが、P1 の中には極大極小の凹頂点は存在しな
いのでフローチャートに従って分割をせずに出口から一
旦出てステップS13に戻り、ステップS14に進む。
次にポリゴンP2 を再帰分割しようとするが同様に分割
をせずにステップS14に戻ってきて出口に進む。これ
で最初の2分割における左側ポリゴンの分割処理が終了
したことになり、今度は右側ポリゴンの分割を開始す
る。
【0036】右側ポリゴンの分割処理では、最初v34か
ら反時計回りに進み極小凹頂点v15を検出し、対点v′
15を求めるとそれは偶然v29に一致し、線分v15v29で
右側ポリゴンをさらに2分割する。これは図1でいえば
左側ポリゴン[P3 P4 ](P3 とP4 を合併した領域
を囲むポリゴンを表す)及び右側ポリゴン[P5 P6P7
]である。さらに、この左側ポリゴン[P3 P4 ]は
凹頂点v31によりP3とP4 に分割され、右側ポリゴン
[P5 P6 P7 ]は凹頂点v18により[P5 P6 ]とP
7 に分割され、さらに、[P5 P6 ]は凹頂点v20によ
りP5 とP6 に分割される。
ら反時計回りに進み極小凹頂点v15を検出し、対点v′
15を求めるとそれは偶然v29に一致し、線分v15v29で
右側ポリゴンをさらに2分割する。これは図1でいえば
左側ポリゴン[P3 P4 ](P3 とP4 を合併した領域
を囲むポリゴンを表す)及び右側ポリゴン[P5 P6P7
]である。さらに、この左側ポリゴン[P3 P4 ]は
凹頂点v31によりP3とP4 に分割され、右側ポリゴン
[P5 P6 P7 ]は凹頂点v18により[P5 P6 ]とP
7 に分割され、さらに、[P5 P6 ]は凹頂点v20によ
りP5 とP6 に分割される。
【0037】[左右稜線データの作成]右側ポリゴンの
分割も終了すると、図14ステップS3からS4に進
み、ポリゴンP1 〜P7 の左右稜線リストを作成する。
その方法をポリゴンP1 について説明する。ポリゴン分
割の済んだポリゴンデータにステップS8と同じ頂点の
分類を行なうと、s=1の進入頂点と、s=−1の退出
頂点が各々1個ずつ存在する。ポリゴンP1 の唯一の進
入頂点はv1 、唯一の退出頂点はv′36である。進入頂
点v1 は始点としてポリゴンリストのポインタにより指
し示されている。進入頂点v1 から退出頂点v′36まで
反時計回りに進んで頂点の連鎖構造を作ったものが左側
稜線リストであり、進入頂点v1 から退出頂点v′36ま
で時計回りに進んで頂点の連鎖構造を作ったものが右側
稜線リストである。
分割も終了すると、図14ステップS3からS4に進
み、ポリゴンP1 〜P7 の左右稜線リストを作成する。
その方法をポリゴンP1 について説明する。ポリゴン分
割の済んだポリゴンデータにステップS8と同じ頂点の
分類を行なうと、s=1の進入頂点と、s=−1の退出
頂点が各々1個ずつ存在する。ポリゴンP1 の唯一の進
入頂点はv1 、唯一の退出頂点はv′36である。進入頂
点v1 は始点としてポリゴンリストのポインタにより指
し示されている。進入頂点v1 から退出頂点v′36まで
反時計回りに進んで頂点の連鎖構造を作ったものが左側
稜線リストであり、進入頂点v1 から退出頂点v′36ま
で時計回りに進んで頂点の連鎖構造を作ったものが右側
稜線リストである。
【0038】図18及び図19は本発明の第1発明のポ
リゴンリストと左右稜線リストを示す。上記の処理の結
果は、図18最上段のポリゴンポインタP1 から枝分か
れした左側稜線リスト及び右側稜線リストになる。それ
には左側稜線リストはポリゴンデータの一部をそのまま
用いて作り、右側稜線リストについては、頂点データv
1 及びv′36の複製とポリゴンデータの残りの頂点デー
タを用いてポインタの向きを逆方向にしたリストを作
り、ポリゴンポインタPにポインタを1つ追加し、右側
稜線リストを指すようにする。こうして1本の外部輪郭
線を分割した結果のポリゴンリストと、分割されたポリ
ゴンP1 〜P7 全ての左右稜線リストが図18、図19
のように求められる。なお、図18の点線A1−A2
は、図1の線分PQの描画時点におけるアクティブエッ
ジがv8 及びv31であることを示すもので、図7に示す
従来方式のアクティブエッジリストの前線よりはるかに
単純な形をしている。
リゴンリストと左右稜線リストを示す。上記の処理の結
果は、図18最上段のポリゴンポインタP1 から枝分か
れした左側稜線リスト及び右側稜線リストになる。それ
には左側稜線リストはポリゴンデータの一部をそのまま
用いて作り、右側稜線リストについては、頂点データv
1 及びv′36の複製とポリゴンデータの残りの頂点デー
タを用いてポインタの向きを逆方向にしたリストを作
り、ポリゴンポインタPにポインタを1つ追加し、右側
稜線リストを指すようにする。こうして1本の外部輪郭
線を分割した結果のポリゴンリストと、分割されたポリ
ゴンP1 〜P7 全ての左右稜線リストが図18、図19
のように求められる。なお、図18の点線A1−A2
は、図1の線分PQの描画時点におけるアクティブエッ
ジがv8 及びv31であることを示すもので、図7に示す
従来方式のアクティブエッジリストの前線よりはるかに
単純な形をしている。
【0039】以上述べたポリゴン分割は、フォントデー
タに移動、伸縮、回転等の座標変換を施す前の座標値を
用いて行なわれるもので、後に座標変換をする際に移
動、伸縮はするが、文字の回転はしないことを前提とし
ている。文字の回転をしなければ進入頂点と退出頂点の
組合せが文字毎に決まっているのと同様に、ポリゴン分
割の結果である各頂点データに含まれているx、y座標
値に移動、伸縮の変換をかけても接続関係に変化はな
く、この左右稜線リストがいつでも使えることが分か
る。また、ポリゴン単位に内部を塗りつぶす際に、ポリ
ゴン間の順序関係や所属関係等の構造的情報は不必要で
ある。従って、図14のステップS4では、各ポリゴン
の形状を表現するのに十分な左右稜線データを求めれば
良い。
タに移動、伸縮、回転等の座標変換を施す前の座標値を
用いて行なわれるもので、後に座標変換をする際に移
動、伸縮はするが、文字の回転はしないことを前提とし
ている。文字の回転をしなければ進入頂点と退出頂点の
組合せが文字毎に決まっているのと同様に、ポリゴン分
割の結果である各頂点データに含まれているx、y座標
値に移動、伸縮の変換をかけても接続関係に変化はな
く、この左右稜線リストがいつでも使えることが分か
る。また、ポリゴン単位に内部を塗りつぶす際に、ポリ
ゴン間の順序関係や所属関係等の構造的情報は不必要で
ある。従って、図14のステップS4では、各ポリゴン
の形状を表現するのに十分な左右稜線データを求めれば
良い。
【0040】図14のステップS5では、以上述べたポ
リゴン分割を文字の全ての外部輪郭線に対して実行さ
せ、ステップS6でその結果である左右稜線データの単
純な集積を新規のアウトラインフォントとして記憶装置
に格納する。ステップS7ではアウトラインフォントの
定義された全文字に対して以上のポリゴン分割処理を実
行し、左右稜線データの集積を新規のアウトラインフォ
ントとして記憶装置に格納する。これが中間フォントデ
ータである。
リゴン分割を文字の全ての外部輪郭線に対して実行さ
せ、ステップS6でその結果である左右稜線データの単
純な集積を新規のアウトラインフォントとして記憶装置
に格納する。ステップS7ではアウトラインフォントの
定義された全文字に対して以上のポリゴン分割処理を実
行し、左右稜線データの集積を新規のアウトラインフォ
ントとして記憶装置に格納する。これが中間フォントデ
ータである。
【0041】[走査変換処理]次に、ポリゴン分割によ
り得られた中間フォントデータを用いて走査変換を行な
う手順を説明する。図20は、この方法で複数の文字を
描画する走査変換フローチャートを示している。このル
ープは文字描画の繰り返し処理を、ループはポリゴ
ン描画の繰り返し処理を、ループはポリゴンの進入頂
点から退出頂点までの走査線の繰り返し処理をそれぞれ
表している。これは図3の従来方式のフローチャートに
比べてはるかに単純な処理内容になっており、従来方式
で必要であったリスト処理を含んでいないので極めて高
速に実行できる。この走査変換が単純で高速であるとい
う点に本発明のアウトライン文字描画方法の特徴があ
る。
り得られた中間フォントデータを用いて走査変換を行な
う手順を説明する。図20は、この方法で複数の文字を
描画する走査変換フローチャートを示している。このル
ープは文字描画の繰り返し処理を、ループはポリゴ
ン描画の繰り返し処理を、ループはポリゴンの進入頂
点から退出頂点までの走査線の繰り返し処理をそれぞれ
表している。これは図3の従来方式のフローチャートに
比べてはるかに単純な処理内容になっており、従来方式
で必要であったリスト処理を含んでいないので極めて高
速に実行できる。この走査変換が単純で高速であるとい
う点に本発明のアウトライン文字描画方法の特徴があ
る。
【0042】まず、図20のステップS16で文字列表
示のコマンドを解釈し、実行する準備をしている。ステ
ップS17で1文字分の中間フォントデータを読み込
み、ステップS18で全ての頂点座標に表示面への座標
変換を施す。ここまでは従来方法と同じであるが、図3
の従来方法では座標変換S103の後に頂点と稜線の分
類処理S104、及び進入頂点リストと左右稜線リスト
の作成処理S105が入っているが、図20の本実施例
では回転をしないことを条件としてこれらリスト処理が
全く不必要になっている。次のステップS19の増分値
計算は従来方式と同じであるが、その後の描画処理は、
従来方式におけるAEL及びAEPに関する処理を本実
施例では全く含んでいない。それは前述したように分割
した結果のポリゴンの形状が進入頂点から退出頂点まで
の各走査線に1本だけの描画線分を発生するからであ
る。
示のコマンドを解釈し、実行する準備をしている。ステ
ップS17で1文字分の中間フォントデータを読み込
み、ステップS18で全ての頂点座標に表示面への座標
変換を施す。ここまでは従来方法と同じであるが、図3
の従来方法では座標変換S103の後に頂点と稜線の分
類処理S104、及び進入頂点リストと左右稜線リスト
の作成処理S105が入っているが、図20の本実施例
では回転をしないことを条件としてこれらリスト処理が
全く不必要になっている。次のステップS19の増分値
計算は従来方式と同じであるが、その後の描画処理は、
従来方式におけるAEL及びAEPに関する処理を本実
施例では全く含んでいない。それは前述したように分割
した結果のポリゴンの形状が進入頂点から退出頂点まで
の各走査線に1本だけの描画線分を発生するからであ
る。
【0043】ポリゴン描画ループに入ると、ステップ
S20では分割ポリゴンの左右稜線リストの最初の稜線
データを取り出す。ここでは左側稜線データの始点のx
座標をx1 に、高さをh1 に、右側稜線データの始点の
x座標をxr に、高さをhrにそれぞれ設定する。ステ
ップS21で進入頂点のy座標ymin をyに設定する。
走査線ループに入ると、ステップS22、23、24
で(x1 、y)(xr、y)までの画素を塗りつぶす。
ステップS25では左側稜線のx座標と高さを次の走査
線に更新し、ステップS29では右側稜線のx座標と高
さを次の走査線に更新し、ステップS32ではy座標を
次の走査線に更新している。高さh1 またはhr が0に
なると、ステップS28またはS31で次の稜線データ
を取り出し、x座標と高さhを再設定する。退出頂点に
達するとステップS27で次の左側稜線が存在しないこ
とがわかるので、そのポリゴンの処理を終了する。
S20では分割ポリゴンの左右稜線リストの最初の稜線
データを取り出す。ここでは左側稜線データの始点のx
座標をx1 に、高さをh1 に、右側稜線データの始点の
x座標をxr に、高さをhrにそれぞれ設定する。ステ
ップS21で進入頂点のy座標ymin をyに設定する。
走査線ループに入ると、ステップS22、23、24
で(x1 、y)(xr、y)までの画素を塗りつぶす。
ステップS25では左側稜線のx座標と高さを次の走査
線に更新し、ステップS29では右側稜線のx座標と高
さを次の走査線に更新し、ステップS32ではy座標を
次の走査線に更新している。高さh1 またはhr が0に
なると、ステップS28またはS31で次の稜線データ
を取り出し、x座標と高さhを再設定する。退出頂点に
達するとステップS27で次の左側稜線が存在しないこ
とがわかるので、そのポリゴンの処理を終了する。
【0044】以上でポリゴンの内部が塗りつぶされるの
で、これを全てのポリゴンについて順に実行すれば良
い。2個以上のポリゴンが共有する領域は当然塗りつぶ
される。また、垂直線分で接している2つのポリゴンは
垂直線分上で隙間を空けないように塗りつぶす必要があ
る。こうして1文字描画が済むと、ステップS17に戻
って次の文字コードの指すポリゴン分割中間フォントを
読み込み、ステップS18で表示位置を変えるように座
標変換すれば次の文字が同様に描画できる。これを指定
文字数だけ繰り返せば文字列描画が完了する。
で、これを全てのポリゴンについて順に実行すれば良
い。2個以上のポリゴンが共有する領域は当然塗りつぶ
される。また、垂直線分で接している2つのポリゴンは
垂直線分上で隙間を空けないように塗りつぶす必要があ
る。こうして1文字描画が済むと、ステップS17に戻
って次の文字コードの指すポリゴン分割中間フォントを
読み込み、ステップS18で表示位置を変えるように座
標変換すれば次の文字が同様に描画できる。これを指定
文字数だけ繰り返せば文字列描画が完了する。
【0045】[第2発明]次に、内部輪郭線を含む文字
のポリゴン分割のための第2発明を、図21を用いて説
明する。図21(a)は「囲」の字のアウトラインフォ
ントである。このフォントには4個の輪郭線があり、輪
郭線38と輪郭線40は外部輪郭線、輪郭線39と輪郭
線41は内部輪郭線である。これは文字の内部領域を左
側に見込むように各輪郭線ループを方向づけた時、それ
が反時計回りであれば外部輪郭線、時計回りであれば内
部輪郭線としたものである。このような輪郭線によって
囲まれた文字の内部領域をポリゴン分割するには、まず
内部輪郭線を除去するために、それぞれの内部輪郭線に
ついて、それを境界とする文字の内部領域を囲む外部輪
郭線を対応付ける必要がある。
のポリゴン分割のための第2発明を、図21を用いて説
明する。図21(a)は「囲」の字のアウトラインフォ
ントである。このフォントには4個の輪郭線があり、輪
郭線38と輪郭線40は外部輪郭線、輪郭線39と輪郭
線41は内部輪郭線である。これは文字の内部領域を左
側に見込むように各輪郭線ループを方向づけた時、それ
が反時計回りであれば外部輪郭線、時計回りであれば内
部輪郭線としたものである。このような輪郭線によって
囲まれた文字の内部領域をポリゴン分割するには、まず
内部輪郭線を除去するために、それぞれの内部輪郭線に
ついて、それを境界とする文字の内部領域を囲む外部輪
郭線を対応付ける必要がある。
【0046】図21(a)では、内部輪郭線39は外部
輪郭線38に対応付けられ、内部輪郭線41は外部輪郭
線40に対応付けられる。一般に、1つの連続した文字
の内部領域は1個の外部輪郭線と0個以上任意個の内部
輪郭線によって囲まれるから、1個の内部輪郭線には唯
一の親となる外部輪郭線と任意個の兄弟関係の内部輪郭
線が対応している。図21(a)はこのような兄弟関係
の内部輪郭線が存在しない例である。この輪郭線間の対
応関係はアウトラインフォントデータの中に情報として
含まれ利用できるものとする。
輪郭線38に対応付けられ、内部輪郭線41は外部輪郭
線40に対応付けられる。一般に、1つの連続した文字
の内部領域は1個の外部輪郭線と0個以上任意個の内部
輪郭線によって囲まれるから、1個の内部輪郭線には唯
一の親となる外部輪郭線と任意個の兄弟関係の内部輪郭
線が対応している。図21(a)はこのような兄弟関係
の内部輪郭線が存在しない例である。この輪郭線間の対
応関係はアウトラインフォントデータの中に情報として
含まれ利用できるものとする。
【0047】図21(a)では、内部輪郭線39上に頂
点A1 を選び、これを包含する外部輪郭線上に点A2 を
選んで両輪郭線間の連結線分A1 −A2 を作り、これを
境に両輪郭線によって囲まれた文字の内部領域を局部的
に分離しようとしている。ここでは点A1 は内部輪郭線
39上を反時計回りに進んでy座標が最大値から減少を
開始する点として選び、また点A2 はA1 を通る垂直線
上をy座標が増加する方向に進み、初めて外部輪郭線に
出合う点として選んだものである。これは前述したポリ
ゴン分割用の垂直線分の選定方法に習っている。但し、
この連結線分A1 −A2 は両端点A1 、A2 以外では文
字輪郭を構成するいかなる輪郭線とも交差しないように
しなければならない。例えばA1 を通る内部輪郭線と兄
弟関係にある内部輪郭線が仮に存在してこれと連結線分
A1 −A2 が交差する可能性がある場合には、連結線分
の選定方法を変えてこのような交差の心配のない連結線
分を選ぶ必要がある。
点A1 を選び、これを包含する外部輪郭線上に点A2 を
選んで両輪郭線間の連結線分A1 −A2 を作り、これを
境に両輪郭線によって囲まれた文字の内部領域を局部的
に分離しようとしている。ここでは点A1 は内部輪郭線
39上を反時計回りに進んでy座標が最大値から減少を
開始する点として選び、また点A2 はA1 を通る垂直線
上をy座標が増加する方向に進み、初めて外部輪郭線に
出合う点として選んだものである。これは前述したポリ
ゴン分割用の垂直線分の選定方法に習っている。但し、
この連結線分A1 −A2 は両端点A1 、A2 以外では文
字輪郭を構成するいかなる輪郭線とも交差しないように
しなければならない。例えばA1 を通る内部輪郭線と兄
弟関係にある内部輪郭線が仮に存在してこれと連結線分
A1 −A2 が交差する可能性がある場合には、連結線分
の選定方法を変えてこのような交差の心配のない連結線
分を選ぶ必要がある。
【0048】図21(b)には、連結線分A1 −A2 に
よって文字の内部領域を局部的に分離した結果を示す。
一方の領域の境界線をA1 −A2 とし、他方の領域の境
界線をA′1 −A′2として左右に分離し、これら境界
線を往復経路として外部輪郭線と内部輪郭線に結合する
と、1本の新たな外部輪郭線42が形成される。ここで
A1 とA′1 、及びA2 とA′2 はそれぞれ同じ座標値
を持つ。これは、ポリゴン分割で述べた分割線分の両端
の頂点データの複製を作ってポインタを張り変えること
によりポリゴンデータを2分割処理する方法と同様であ
る。しかし、ここでは逆に2つのポリゴンデータが1つ
に融合する。こうして内部輪郭線39が除去されたこと
になる。
よって文字の内部領域を局部的に分離した結果を示す。
一方の領域の境界線をA1 −A2 とし、他方の領域の境
界線をA′1 −A′2として左右に分離し、これら境界
線を往復経路として外部輪郭線と内部輪郭線に結合する
と、1本の新たな外部輪郭線42が形成される。ここで
A1 とA′1 、及びA2 とA′2 はそれぞれ同じ座標値
を持つ。これは、ポリゴン分割で述べた分割線分の両端
の頂点データの複製を作ってポインタを張り変えること
によりポリゴンデータを2分割処理する方法と同様であ
る。しかし、ここでは逆に2つのポリゴンデータが1つ
に融合する。こうして内部輪郭線39が除去されたこと
になる。
【0049】図21(a)に残っているもう1つの内部
輪郭線41については、その上の1頂点B1とこれを囲
む外部輪郭線40上の1点B2 を結ぶ連結線分B2 −B
2 を境に文字の内部領域を局部的に分離し、これを往復
経路として両輪郭線を結合しもう1本の新たな外部輪郭
線43を形成する。図21(b)はこうして内部輪郭線
を全て除去し、外部輪郭線のみから成る「囲」の字のア
ウトラインフォントを示している。
輪郭線41については、その上の1頂点B1とこれを囲
む外部輪郭線40上の1点B2 を結ぶ連結線分B2 −B
2 を境に文字の内部領域を局部的に分離し、これを往復
経路として両輪郭線を結合しもう1本の新たな外部輪郭
線43を形成する。図21(b)はこうして内部輪郭線
を全て除去し、外部輪郭線のみから成る「囲」の字のア
ウトラインフォントを示している。
【0050】図21(b)の外部輪郭線によって囲まれ
た領域をポリゴン分割する方法は既に述べた通りであ
る。それには2つの垂直線分C1 −C2 及びD1 −D2
を用いて分割を行なう。その結果は図21(c)のよう
になる。以上述べたように、内部輪郭線の存在するアウ
トラインフォントに対しても本発明によるポリゴン分割
が可能であり、分割されたポリゴンの左右稜線データを
生成し、ポリゴン分割中間フォントデータとして記憶し
ておけば、文字の塗りつぶし処理は前述したように極め
て高速に実行することができる。
た領域をポリゴン分割する方法は既に述べた通りであ
る。それには2つの垂直線分C1 −C2 及びD1 −D2
を用いて分割を行なう。その結果は図21(c)のよう
になる。以上述べたように、内部輪郭線の存在するアウ
トラインフォントに対しても本発明によるポリゴン分割
が可能であり、分割されたポリゴンの左右稜線データを
生成し、ポリゴン分割中間フォントデータとして記憶し
ておけば、文字の塗りつぶし処理は前述したように極め
て高速に実行することができる。
【0051】[第3発明]これまでに、外部輪郭線のみ
から成る文字のポリゴン分割と、内部輪郭線を含む文字
のポリゴン分割の2つの実施例について説明したので、
次に第3発明として、これまでとは異なる観点からのポ
リゴン分割方法について説明する。これまでの発明にお
いて、分割されたポリゴンの内部領域を塗りつぶす時に
重要なことは、その輪郭線が進入頂点と退出頂点を1個
ずつ持っていること、言い換えれば任意の水平線と2個
以下の交点を持つ形状であることであって、ポリゴン間
の分割線分は垂直でなくてもよいし、折れ線であっても
よい。また、分割線を境に排他的に分離するのでなく、
隣合うポリゴン間で領域を共有していてもよい。即ち、
各ポリゴンの内部領域の論理和が文字全体の内部領域に
一致すればよい。
から成る文字のポリゴン分割と、内部輪郭線を含む文字
のポリゴン分割の2つの実施例について説明したので、
次に第3発明として、これまでとは異なる観点からのポ
リゴン分割方法について説明する。これまでの発明にお
いて、分割されたポリゴンの内部領域を塗りつぶす時に
重要なことは、その輪郭線が進入頂点と退出頂点を1個
ずつ持っていること、言い換えれば任意の水平線と2個
以下の交点を持つ形状であることであって、ポリゴン間
の分割線分は垂直でなくてもよいし、折れ線であっても
よい。また、分割線を境に排他的に分離するのでなく、
隣合うポリゴン間で領域を共有していてもよい。即ち、
各ポリゴンの内部領域の論理和が文字全体の内部領域に
一致すればよい。
【0052】図22は第3発明のポリゴン分割方法説明
図である。第3発明は図22に示すように、この条件を
満たすように「囲」の字を8個のポリゴンP1 〜P8 に
分割したものである。図において、ポリゴンP1 とP2
間、P2 とP3 間は水平線分で分割され、P1 とP4
間、P4 とP3 間は共有部分を持つように分割され、4
つのポリゴンP5 〜P8 は分割というよりもむしろ各ポ
リゴンが単純な形で頂点数が少なくなるように再構成さ
れている。こうして得られた8個のポリゴンP1 〜P8
の各々はこれまでの実施例と同様に左側稜線データと右
側稜線データを生成するから、これら左右稜線データの
集積により文字のアウトラインフォントを表現する。こ
れら左右稜線データを用いて回転を含まない座標変換と
ポリゴン単位の塗りつぶしを第1発明と同様の走査変換
フローチャートの処理手順に従って実行すればよい。
図である。第3発明は図22に示すように、この条件を
満たすように「囲」の字を8個のポリゴンP1 〜P8 に
分割したものである。図において、ポリゴンP1 とP2
間、P2 とP3 間は水平線分で分割され、P1 とP4
間、P4 とP3 間は共有部分を持つように分割され、4
つのポリゴンP5 〜P8 は分割というよりもむしろ各ポ
リゴンが単純な形で頂点数が少なくなるように再構成さ
れている。こうして得られた8個のポリゴンP1 〜P8
の各々はこれまでの実施例と同様に左側稜線データと右
側稜線データを生成するから、これら左右稜線データの
集積により文字のアウトラインフォントを表現する。こ
れら左右稜線データを用いて回転を含まない座標変換と
ポリゴン単位の塗りつぶしを第1発明と同様の走査変換
フローチャートの処理手順に従って実行すればよい。
【0053】[第4発明]これまで説明した実施例は、
いずれもポリゴン分割中間フォントを使用してポリゴン
単位の塗りつぶしを行なっているが、次に第4発明とし
てポリゴン分割を行なわない、より従来方式に近い方法
を説明する。これは、文字の回転変換をしないことを前
提として、予めアウトラインフォントデータに対して進
入頂点リストと左右稜線リストを作成し、y座標の昇順
に並べられた進入頂点順の左右稜線データの集積をポリ
ゴン非分割方式の中間フォントデータとして記憶するも
のである。
いずれもポリゴン分割中間フォントを使用してポリゴン
単位の塗りつぶしを行なっているが、次に第4発明とし
てポリゴン分割を行なわない、より従来方式に近い方法
を説明する。これは、文字の回転変換をしないことを前
提として、予めアウトラインフォントデータに対して進
入頂点リストと左右稜線リストを作成し、y座標の昇順
に並べられた進入頂点順の左右稜線データの集積をポリ
ゴン非分割方式の中間フォントデータとして記憶するも
のである。
【0054】図23(a)はポリゴン非分割方式の中間
フォントデータの作成方法を示すフローチャートであ
る。図14のポリゴン分割のフローチャートとの比較か
ら分かるように、外部輪郭線に対するポリゴン分割のた
めの手続きを含んでおらず、内部輪郭線に対する除去手
続きももちろん不用である。輪郭線をたどってy座標の
昇順にソートされた進入頂点順の左右稜線データを求め
ればよい。各ステップの具体的内容は従来方法で説明し
たとおりである。
フォントデータの作成方法を示すフローチャートであ
る。図14のポリゴン分割のフローチャートとの比較か
ら分かるように、外部輪郭線に対するポリゴン分割のた
めの手続きを含んでおらず、内部輪郭線に対する除去手
続きももちろん不用である。輪郭線をたどってy座標の
昇順にソートされた進入頂点順の左右稜線データを求め
ればよい。各ステップの具体的内容は従来方法で説明し
たとおりである。
【0055】図24はポリゴン非分割フォントを用いて
文字列の描画処理を行なうフローチャートである。これ
は図3の従来方法による走査変換フローチャートのステ
ップS104の頂点と稜線の分類処理とステップS10
5の進入頂点リストと左右稜線リスト作成を前処理とし
て実行し、走査変換処理の中に持ち込まないようにした
ものである。走査変換処理本体である文字描画処理S2
12は従来方式と変わらず、図3及び図4に従ってAE
Lを用いて走査線毎に複数線分を描画する方式である。
それでもステップS104とS105の処理時間だけ走
査変換時間が短縮される効果は大きい。ポリゴン非分割
方式の中間フォントデータには、フォントデータの中に
分割線分や連結線分等が混入していないので、フォント
データの左右稜線に沿って折れ線を描画すれば、元のア
ウトラインのみが表示される。従って、ポリゴン非分割
方式の中間フォントデータはアウトライン内部領域の塗
りつぶしに使えるばかりでなく、アウトラインそのもの
を描画する場合にも使える。
文字列の描画処理を行なうフローチャートである。これ
は図3の従来方法による走査変換フローチャートのステ
ップS104の頂点と稜線の分類処理とステップS10
5の進入頂点リストと左右稜線リスト作成を前処理とし
て実行し、走査変換処理の中に持ち込まないようにした
ものである。走査変換処理本体である文字描画処理S2
12は従来方式と変わらず、図3及び図4に従ってAE
Lを用いて走査線毎に複数線分を描画する方式である。
それでもステップS104とS105の処理時間だけ走
査変換時間が短縮される効果は大きい。ポリゴン非分割
方式の中間フォントデータには、フォントデータの中に
分割線分や連結線分等が混入していないので、フォント
データの左右稜線に沿って折れ線を描画すれば、元のア
ウトラインのみが表示される。従って、ポリゴン非分割
方式の中間フォントデータはアウトライン内部領域の塗
りつぶしに使えるばかりでなく、アウトラインそのもの
を描画する場合にも使える。
【0056】[性能評価]以上述べたポリゴン分割方式
の中間フォントデータ及びポリゴン非分割方式の中間フ
ォントデータの作成処理及び、これら中間フォントデー
タを用いて実際に塗りつぶし処理を行なったときの性能
評価結果を説明する。図25は、性能評価比較説明図で
ある。性能評価方法は、予め平仮名全文字のアウトライ
ンフォントを前処理して、本発明によるポリゴン分割方
式の中間フォントデータ及びポリゴン非分割方式の中間
フォントデータの形に変換しておく。この変換に要する
1文字あたりの平均CPU時間を図に中間フォント作成
時間として示す。
の中間フォントデータ及びポリゴン非分割方式の中間フ
ォントデータの作成処理及び、これら中間フォントデー
タを用いて実際に塗りつぶし処理を行なったときの性能
評価結果を説明する。図25は、性能評価比較説明図で
ある。性能評価方法は、予め平仮名全文字のアウトライ
ンフォントを前処理して、本発明によるポリゴン分割方
式の中間フォントデータ及びポリゴン非分割方式の中間
フォントデータの形に変換しておく。この変換に要する
1文字あたりの平均CPU時間を図に中間フォント作成
時間として示す。
【0057】次に、32ビットマイクロプロセッサのシ
ミュレータを用い、ポリゴン分割中間フォント及びポリ
ゴン非分割中間フォントの各々に対して最高速に処理さ
れるような塗りつぶし処理プログラムを作り、また75
×75画素及び150×150画素の大きさの「る」の
1文字画像を生成するコマンドを作り、シミュレーショ
ンにより実行させ、メモリに画像を作る。その実行時間
を図に表示処理時間としてマイクロプロセッサの実時間
換算値で示す。例えば実時間換算値が600usecという
ことは、クロック周期が40nsecの処理ステップを15
000回実行することから求めたものである。この表示
処理時間は、中間フォントの読み込み、座標変換、増分
値計算に要する時間と、その後の描画処理に要する時間
の合計であり、前者はフォントのデータ量(頂点数)に
よって決まるが、描画時間は文字の大きさにも依存する
ので、文字の大きさにより2通り求めている。
ミュレータを用い、ポリゴン分割中間フォント及びポリ
ゴン非分割中間フォントの各々に対して最高速に処理さ
れるような塗りつぶし処理プログラムを作り、また75
×75画素及び150×150画素の大きさの「る」の
1文字画像を生成するコマンドを作り、シミュレーショ
ンにより実行させ、メモリに画像を作る。その実行時間
を図に表示処理時間としてマイクロプロセッサの実時間
換算値で示す。例えば実時間換算値が600usecという
ことは、クロック周期が40nsecの処理ステップを15
000回実行することから求めたものである。この表示
処理時間は、中間フォントの読み込み、座標変換、増分
値計算に要する時間と、その後の描画処理に要する時間
の合計であり、前者はフォントのデータ量(頂点数)に
よって決まるが、描画時間は文字の大きさにも依存する
ので、文字の大きさにより2通り求めている。
【0058】この結果を見ると、中間フォントデータ作
成に要する時間が6msec或は3msec程度かかるのに比較
し、表示処理時間はポリゴン非分割方式でも2msecに満
たないから、前者が後者よりも長いことがわかる。この
理由は、フォント作成には輪郭線のリスト構造に対する
複雑な処理が含まれるためである。本発明ではこのよう
な処理を前処理として実行し、表示処理の中に含まない
ようにしているから、表示処理の大幅な性能向上が得ら
れる。さらに、図の表示処理時間について見ると、ポリ
ゴン分割中間方式のフォントデータ利用の方がポリゴン
非分割方式の中間フォントデータ利用よりも2〜3倍速
いことがわかる。これは本発明のAELを用いないポリ
ゴン分割描画方式の高速性を裏付けている従来方式での
表示処理時間は、ポリゴン非分割中間フォント作成とポ
リゴン非分割表示処理時間の和と考えて4〜5msecと推
定される。これに対して本発明によるポリゴン分割方式
の表示処理時間は0.5〜0.6msecに短縮される。
成に要する時間が6msec或は3msec程度かかるのに比較
し、表示処理時間はポリゴン非分割方式でも2msecに満
たないから、前者が後者よりも長いことがわかる。この
理由は、フォント作成には輪郭線のリスト構造に対する
複雑な処理が含まれるためである。本発明ではこのよう
な処理を前処理として実行し、表示処理の中に含まない
ようにしているから、表示処理の大幅な性能向上が得ら
れる。さらに、図の表示処理時間について見ると、ポリ
ゴン分割中間方式のフォントデータ利用の方がポリゴン
非分割方式の中間フォントデータ利用よりも2〜3倍速
いことがわかる。これは本発明のAELを用いないポリ
ゴン分割描画方式の高速性を裏付けている従来方式での
表示処理時間は、ポリゴン非分割中間フォント作成とポ
リゴン非分割表示処理時間の和と考えて4〜5msecと推
定される。これに対して本発明によるポリゴン分割方式
の表示処理時間は0.5〜0.6msecに短縮される。
【0059】図26に本発明による応用描画例説明図を
示す。本発明のアウトライン文字描画方法は、回転を含
まない座標変換、即ち伸縮と平行移動の組合せを前提と
して中間フォントを作成しているが、この座標変換の制
約を緩めて図のような透視図を描画することにも応用で
きる。それは、ここで用いた座標変換によって文字フォ
ント内の線分が別の線分に変換され、任意の2頂点間の
y方向の順序が逆転しないために本発明によるポリゴン
分割あるいはポリゴン非分割の中間フォントが利用でき
るからである。従って、このような透視図法やあるいは
文字を単純に傾斜させたもの等についても本発明の方法
による塗りつぶし描画が可能である。
示す。本発明のアウトライン文字描画方法は、回転を含
まない座標変換、即ち伸縮と平行移動の組合せを前提と
して中間フォントを作成しているが、この座標変換の制
約を緩めて図のような透視図を描画することにも応用で
きる。それは、ここで用いた座標変換によって文字フォ
ント内の線分が別の線分に変換され、任意の2頂点間の
y方向の順序が逆転しないために本発明によるポリゴン
分割あるいはポリゴン非分割の中間フォントが利用でき
るからである。従って、このような透視図法やあるいは
文字を単純に傾斜させたもの等についても本発明の方法
による塗りつぶし描画が可能である。
【0060】[変形例]本発明は以上の実施例に限定さ
れない。本発明によるポリゴン分割中間フォントデータ
は、従来のアウトライン文字フォントデータに対し、分
割線分や連結線分の端点の座標値が追加される程度のわ
ずかなデータ量の増加で済む。従って、全てのアウトラ
イン文字フォントについてポリゴン分割方式の中間フォ
ントデータを前処理で作成し記憶装置に格納してもよい
し、使用頻度の高い文字のみ中間フォントデータを作成
しておけば記憶容量はより少なくて済む。この場合、中
間フォントデータを主記憶装置等の高速な記憶装置に格
納しておけば、データ読み出しが高速化され、描画時間
を短縮できる。また、ポリゴン分割方式の中間フォント
データの作成方法としては、本発明の第3発明に示した
ように、各ポリゴンの内部領域の論理和が文字全体の内
部領域となるようにし、かつ各ポリゴンの輪郭の形状が
任意の水平線と2個以下の交点を持つ形状となるように
すれば、いかなる方法であっても良い。しかし、第1の
発明に示したポリゴンの再帰分割方法、及び第2発明に
示した内部輪郭線の除去方法を用いれば、多数のアウト
ライン文字について統一的にかつ効率良くポリゴン分割
フォントが作成される。
れない。本発明によるポリゴン分割中間フォントデータ
は、従来のアウトライン文字フォントデータに対し、分
割線分や連結線分の端点の座標値が追加される程度のわ
ずかなデータ量の増加で済む。従って、全てのアウトラ
イン文字フォントについてポリゴン分割方式の中間フォ
ントデータを前処理で作成し記憶装置に格納してもよい
し、使用頻度の高い文字のみ中間フォントデータを作成
しておけば記憶容量はより少なくて済む。この場合、中
間フォントデータを主記憶装置等の高速な記憶装置に格
納しておけば、データ読み出しが高速化され、描画時間
を短縮できる。また、ポリゴン分割方式の中間フォント
データの作成方法としては、本発明の第3発明に示した
ように、各ポリゴンの内部領域の論理和が文字全体の内
部領域となるようにし、かつ各ポリゴンの輪郭の形状が
任意の水平線と2個以下の交点を持つ形状となるように
すれば、いかなる方法であっても良い。しかし、第1の
発明に示したポリゴンの再帰分割方法、及び第2発明に
示した内部輪郭線の除去方法を用いれば、多数のアウト
ライン文字について統一的にかつ効率良くポリゴン分割
フォントが作成される。
【0061】また、ポリゴン分割まで行なわず進入頂点
リストと左右稜線リストを前処理で作成するポリゴン非
分割中間フォントを用いても描画処理の高速化の効果は
大きい。また、上記ポリゴンデータは文字の輪郭線を複
数の線分の集合で形成し、その各線分の頂点座標の環状
連鎖構造として表現された。このような複数の線分はい
ずれも必ずしも直線でなくてよく、所定の曲率を持った
曲線で構成されてもよい。また、予め設定された基準座
標軸としてY軸を用いて説明したが、これはX軸を用い
るようにしてもよく、またX軸あるいはY軸に対し一定
の角度を持った軸を設定し、処理を行なうようにしても
よい。この場合に、走査線を基準座標軸に対し垂直な方
向に選定すれば、左右稜線データが基準座標軸の方向に
みて、その位置座標を単調減少し、あるいは単調増加さ
せるものである限り、走査線との交点は1個になるか
ら、上記のような単純な塗りつぶしが実行できる。一
方、第2発明における連結線分は、その両端点以外では
文字のいかなる輪郭線とも交差しないように選定すれ
ば、直線でなくてもよく、また基準座標軸に平行である
必要はない。
リストと左右稜線リストを前処理で作成するポリゴン非
分割中間フォントを用いても描画処理の高速化の効果は
大きい。また、上記ポリゴンデータは文字の輪郭線を複
数の線分の集合で形成し、その各線分の頂点座標の環状
連鎖構造として表現された。このような複数の線分はい
ずれも必ずしも直線でなくてよく、所定の曲率を持った
曲線で構成されてもよい。また、予め設定された基準座
標軸としてY軸を用いて説明したが、これはX軸を用い
るようにしてもよく、またX軸あるいはY軸に対し一定
の角度を持った軸を設定し、処理を行なうようにしても
よい。この場合に、走査線を基準座標軸に対し垂直な方
向に選定すれば、左右稜線データが基準座標軸の方向に
みて、その位置座標を単調減少し、あるいは単調増加さ
せるものである限り、走査線との交点は1個になるか
ら、上記のような単純な塗りつぶしが実行できる。一
方、第2発明における連結線分は、その両端点以外では
文字のいかなる輪郭線とも交差しないように選定すれ
ば、直線でなくてもよく、また基準座標軸に平行である
必要はない。
【0062】第4発明は、従来文字の描画の際にその都
度実行していた進入頂点リストや左右稜線リストの生成
を予め実行しておくことにより、塗りつぶし処理の高速
化を図っている。この考え方を延長すれば、文字の輪郭
線をその輪郭線上の所定の起点よりたどる複数の稜線デ
ータの集積として表した中間フォントデータを予め用意
しておくことにより、従来採用されている各種のアウト
ライン文字フォントに対し、その塗りつぶし処理を高速
化できる。
度実行していた進入頂点リストや左右稜線リストの生成
を予め実行しておくことにより、塗りつぶし処理の高速
化を図っている。この考え方を延長すれば、文字の輪郭
線をその輪郭線上の所定の起点よりたどる複数の稜線デ
ータの集積として表した中間フォントデータを予め用意
しておくことにより、従来採用されている各種のアウト
ライン文字フォントに対し、その塗りつぶし処理を高速
化できる。
【0063】
【発明の効果】以上詳細に説明したように、本発明によ
れば、外部輪郭線及び内部輪郭線を組み合わせてできる
複雑なアウトライン文字でもポリゴン分割中間フォント
データを生成でき、このポリゴン分割中間フォントデー
タを用いてポリゴン単位に描画処理を行なえば、アクテ
ィブエッジリストを用いる必要がないので、文字の塗り
つぶし処理が極めて単純になり高速化される。また、文
字の輪郭線に外部輪郭線と内部輪郭線が存在する場合に
は、予め連結線分を適切な場所に引くことにより、外部
輪郭線と内部輪郭線を連結し、1本の新たな輪郭線を合
成できる。これによって、第1発明のポリゴン分割が可
能となり、複雑な輪郭構造の文字に対しても本発明が適
用できる。また、各ポリゴンの内部領域の論理和が文字
全体の内部領域となるような複数のポリゴンに分割する
ことによっても、そのポリゴンが走査線と2個以下の交
点を持つものであれば、同様の高速塗りつぶし処理が可
能である。さらに、従来文字の描画の際に実行されてい
た左右稜線データの生成を予め実行し、中間フォントデ
ータとして記憶しておき、これを用いて描画を実行する
ことにより塗りつぶしの高速化が図れる。従って、これ
らポリゴン分割方式の中間フォントデータやポリゴン非
分割方式の中間フォントデータを用いれば、CRTディ
スプレイやページプリンタにアウトライン文字を描画す
るための高性能なシステムが構築できる。
れば、外部輪郭線及び内部輪郭線を組み合わせてできる
複雑なアウトライン文字でもポリゴン分割中間フォント
データを生成でき、このポリゴン分割中間フォントデー
タを用いてポリゴン単位に描画処理を行なえば、アクテ
ィブエッジリストを用いる必要がないので、文字の塗り
つぶし処理が極めて単純になり高速化される。また、文
字の輪郭線に外部輪郭線と内部輪郭線が存在する場合に
は、予め連結線分を適切な場所に引くことにより、外部
輪郭線と内部輪郭線を連結し、1本の新たな輪郭線を合
成できる。これによって、第1発明のポリゴン分割が可
能となり、複雑な輪郭構造の文字に対しても本発明が適
用できる。また、各ポリゴンの内部領域の論理和が文字
全体の内部領域となるような複数のポリゴンに分割する
ことによっても、そのポリゴンが走査線と2個以下の交
点を持つものであれば、同様の高速塗りつぶし処理が可
能である。さらに、従来文字の描画の際に実行されてい
た左右稜線データの生成を予め実行し、中間フォントデ
ータとして記憶しておき、これを用いて描画を実行する
ことにより塗りつぶしの高速化が図れる。従って、これ
らポリゴン分割方式の中間フォントデータやポリゴン非
分割方式の中間フォントデータを用いれば、CRTディ
スプレイやページプリンタにアウトライン文字を描画す
るための高性能なシステムが構築できる。
【図1】第1発明のアウトライン文字描画方法説明図で
ある。
ある。
【図2】従来のアウトライン文字フォント描画方法説明
図である。
図である。
【図3】従来方法による走査変換フローチャート(その
1)である。
1)である。
【図4】従来方法による走査変換フローチャート(その
2)である。
2)である。
【図5】従来方法によるアクティブエッジリストであ
る。
る。
【図6】従来方法による進入頂点リストと左右稜線リス
ト(その1)である。
ト(その1)である。
【図7】従来方法による進入頂点リストと左右稜線リス
ト(その2)である。
ト(その2)である。
【図8】従来方法による進入頂点リストと左右稜線リス
ト(その3)である。
ト(その3)である。
【図9】従来方法による頂点と稜線の分類法(その1)
である。
である。
【図10】従来方法による頂点と稜線の分類法(その
2)である。
2)である。
【図11】従来方法の文字の回転と走査変換説明図であ
る。
る。
【図12】従来方法による回転した文字の左右稜線リス
トである。
トである。
【図13】本発明の方法実施例説明図である。
【図14】本発明の第1発明のポリゴン分割フローチャ
ートである。
ートである。
【図15】本発明の第1発明の頂点分類法(その1)で
ある。
ある。
【図16】本発明の第1発明の頂点分類法(その2)で
ある。
ある。
【図17】本発明の第1発明のポリゴン再帰分割フロー
チャートである。
チャートである。
【図18】本発明の第1発明のポリゴンリストと左右稜
線リスト(その1)である。
線リスト(その1)である。
【図19】本発明の第1発明のポリゴンリストと左右稜
線リスト(その2)である。
線リスト(その2)である。
【図20】本発明の第1発明の走査変換フローチャート
である。
である。
【図21】本発明の第2発明の内部輪郭線を含む文字の
処理方法説明図である。
処理方法説明図である。
【図22】本発明の第3発明のポリゴン分割方法説明図
である。
である。
【図23】本発明の第4発明の中間フォント生成フロー
チャートである。
チャートである。
【図24】本発明の第4発明の描画フローチャートであ
る。
る。
【図25】性能評価結果比較説明図である。
【図26】本発明による応用描画例説明図である。
P1 〜P7 ポリゴン v1 〜v37 稜線データ
Claims (4)
- 【請求項1】 文字の輪郭線を複数の線分の集合で形成
した場合に、前記各線分の頂点座標の環状連鎖構造とし
て表現されたポリゴンデータを得て、 予め設定された基準座標軸に平行な方向に見た、前記輪
郭線上の位置座標が、極大又は極小となるような、前記
輪郭線に囲まれた図形の凹頂点を抽出し、 前記凹頂点を通る前記基準座標軸に平行な線分により、
前記輪郭線に囲まれた図形を複数のポリゴンに分割し、 所定の起点より前記ポリゴンの輪郭線をそれぞれ反対方
向にたどる、前記基準座標軸の方向に見てその位置座標
を単調減少あるいは単調増加させる、一対の左側稜線デ
ータと右側稜線データを作成し、 前記複数のポリゴンについての前記左右稜線データを集
積した中間フォントデータを、描画を要求される文字毎
に予め記憶しておき、 前記中間フォントデータを読み出して、前記左右稜線デ
ータと前記基準座標軸に垂直な走査線との交点を認識し
て、前記ポリゴンを塗りつぶすことを特徴とするアウト
ライン文字描画方法。 - 【請求項2】 文字の輪郭線に外部輪郭線と内部輪郭線
が存在する場合に、 前記内部輪郭線上の1点と、その内部輪郭線を包囲する
外部輪郭線上の1点を結ぶ連結線分が、その両端点以外
では文字のいかなる輪郭線とも交差しないように選定
し、 その連結線分を往復経路として、前記外部輪郭線と前記
内部輪郭線を連結して1本の新たな輪郭線を合成し、 前記輪郭線の合成処理によって、全ての前記内部輪郭線
を除去した後、 前記輪郭線について、凹頂点の抽出を実行することを特
徴とする請求項1記載のアウトライン文字描画方法。 - 【請求項3】 文字の輪郭線に囲まれた内部領域全体
を、複数のポリゴンに分割し、 前記各ポリゴンの内部領域の論理和が文字全体の内部領
域となるようにし、 かつ、前記全てのポリゴンの輪郭線が、予め設定された
基準座標軸に垂直な任意の走査線と2個以下の交点を持
つ形状に選定して、 前記ポリゴンの輪郭線上の所定の起点より前記ポリゴン
の輪郭線をそれぞれ反対方向にたどる、一対の左側稜線
データと右側稜線データを作成し、 前記複数のポリゴンについての前記左右稜線データを集
積した中間フォントデータを、描画を要求される文字毎
に予め記憶しておき、 前記中間フォントデータを読み出して、前記左右稜線デ
ータと前記基準座標軸に垂直な走査線との交点を認識し
て、前記ポリゴンを塗りつぶすことを特徴とするアウト
ライン文字描画方法。 - 【請求項4】 文字の外部輪郭線上及び内部輪郭線上に
おいて、予め設定された基準座標軸に平行な方向に見
た、前記各輪郭線上の位置座標が、極大または極小とな
る頂点を求め、 全ての極小頂点を前記位置座標の昇順に並べて進入頂点
リストを作成し、 前記極小頂点から前記各輪郭線上をたどり極大頂点に至
る、左側稜線及び右側稜線を抽出し、 これらの左右稜線データを集積した中間フォントデータ
を、描画を要求される文字毎に記憶しておき、 前記中間フォントデータを用いて、前記基準座標軸に平
行な方向に見た文字の最上頂点から最下頂点まで、前記
基準座標軸に垂直な走査線と左右稜線との交点を全て求
め、文字の内部領域を塗りつぶすことを特徴とするアウ
トライン文字描画方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4205988A JPH0627927A (ja) | 1992-07-09 | 1992-07-09 | アウトライン文字描画方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4205988A JPH0627927A (ja) | 1992-07-09 | 1992-07-09 | アウトライン文字描画方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0627927A true JPH0627927A (ja) | 1994-02-04 |
Family
ID=16516045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4205988A Pending JPH0627927A (ja) | 1992-07-09 | 1992-07-09 | アウトライン文字描画方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0627927A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111523531A (zh) * | 2020-04-14 | 2020-08-11 | 北京奇艺世纪科技有限公司 | 文字处理方法、装置、电子设备及计算机可读存储介质 |
-
1992
- 1992-07-09 JP JP4205988A patent/JPH0627927A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111523531A (zh) * | 2020-04-14 | 2020-08-11 | 北京奇艺世纪科技有限公司 | 文字处理方法、装置、电子设备及计算机可读存储介质 |
CN111523531B (zh) * | 2020-04-14 | 2023-09-29 | 北京奇艺世纪科技有限公司 | 文字处理方法、装置、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2626153B2 (ja) | レイアウトのコンパクション方法 | |
JP2608571B2 (ja) | 入力走査画像データのベクトル化のための装置及び方法 | |
EP0202686B1 (en) | Geometric processing system | |
EP0447224A2 (en) | Decomposition of arbitrary polygons into trapezoids | |
JP5854802B2 (ja) | 画像処理装置、画像処理方法、及びコンピュータプログラム | |
JPH05151394A (ja) | 光学的文字認識のための傾きのあるテキスト行の高速文字認識の方法および装置 | |
CN112837328B (zh) | 一种二维多边形图元的矩形视窗剪裁绘图方法 | |
Tanase et al. | Polygon decomposition based on the straight line skeleton | |
US4972330A (en) | Clipping process and processor | |
EP0742537B1 (en) | Visible line determination method | |
JPH0810465B2 (ja) | ラスタ生成方法および装置 | |
US4811244A (en) | Drawing information management system | |
JP2681367B2 (ja) | 図形処理方法及びその装置 | |
US5920324A (en) | Character pattern producing apparatus capable of producing character pattern having connected character elements | |
JPH0627927A (ja) | アウトライン文字描画方法 | |
US5694536A (en) | Method and apparatus for automatic gap closing in computer aided drawing | |
US5574839A (en) | Method and apparatus for automatic gap closing in computer aided drawing | |
JP2644735B2 (ja) | 図面情報管理方法 | |
JPH11147344A (ja) | 描画処理装置および方法 | |
JP2590327B2 (ja) | 図面情報の管理方法 | |
JP2000222449A (ja) | 図形処理方法 | |
JPH06309469A (ja) | アウトライン文字描画方法 | |
JPH05108824A (ja) | 多角形の輪郭抽出方法 | |
JP3536894B2 (ja) | 図形処理装置 | |
JPH07319444A (ja) | アウトライン文字描画方法 |