(57)【要約】【課題】ベクトル図形の描画で処理が必要なデータ量を大幅に削減することができ、かつベクトル図形を高速に描画できる図形描画装置を提供する。【解決手段】輪郭線の構成点の座標を含むベクトル図形データを入力し、当該入力データに基づいてベクトル図形の輪郭線を構成する曲線を順に選択して、入力データから輪郭線に関する輪郭線データを選定する入力制御部１と、入力制御部１により選定された輪郭線データに基づいて、画面上をＹ軸方向に走査する走査線とベクトル図形の輪郭線との交点Ｘ座標を算出する演算部２と、演算部２により算出された交点Ｘ座標に基づいて、ベクトル図形の輪郭線を境界とする内部領域を判定し、当該内部領域に塗り潰し処理を実行する塗潰し処理部３を備える。【選択図】図１
2008097450.tif 000002
【特許請求の範囲】
【請求項１】
輪郭線の構成点の座標を含むベクトル図形データを入力し、当該入力データに基づいて前記ベクトル図形の輪郭線を構成する曲線を順に選択して、前記入力データから前記輪郭線に関するデータを選定する入力制御部と、
前記入力制御部により選定された輪郭線に関するデータに基づいて、前記ベクトル図形の輪郭線と走査線との交点座標を算出する演算部と、
前記演算部により算出された交点座標に基づいて、前記ベクトル図形の輪郭線を境界とする内部領域を特定し、当該内部領域に塗り潰し処理を実行する塗潰し処理部とを備えた図形描画装置。
【請求項２】
演算部は、ベクトル図形の輪郭線と走査線との交点座標を算出するにあたり、前記輪郭線を構成する曲線を方程式で定義し、当該方程式の解から前記輪郭線を描画する際の前記曲線の座標を求めることを特徴とする請求項１記載の図形描画装置。
【請求項３】
入力制御部は、複数のベクトル図形データから各ベクトル図形の輪郭線に関するデータを選定する処理を並列に実行し、
演算部は、前記入力制御部により選定された各輪郭線に関するデータに基づいて、前記輪郭線と走査線との交点座標を算出する処理を並列に実行することを特徴とする請求項１または請求項２記載の図形描画装置。
【請求項４】
輪郭線の構成点の座標を含むベクトル図形データを入力し、当該入力データに基づいて前記ベクトル図形の輪郭線を構成する曲線を順に選択して、前記入力データから前記輪郭線に関するデータを選定する入力制御部、
前記入力制御部により選定された輪郭線に関するデータに基づいて、前記ベクトル図形の輪郭線と走査線との交点座標を算出する演算部、
前記演算部により算出された交点座標に基づいて、前記ベクトル図形の輪郭線を境界とする内部領域を特定し、当該内部領域に塗り潰し処理を実行する塗潰し処理部としてコンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ベクトル図形を描画する図形描画装置およびこの装置としてコンピュータを機能させるプログラムに関するものである。
【背景技術】
【０００２】
従来の図形描画装置では、輪郭線のデータがベジェ（Ｂｅｚｉｅｒ）曲線に代表されるパラメトリック曲線で与えられた場合、曲線関数のパラメータを適当な間隔で変化させて新たに頂点座標を生成し、曲線を微小な線分（エッジ）で近似することにより描画する。
このような曲線描画の応用として、例えば特許文献１では従来よりも少ない演算量で正確に曲線の折れ線近似を行って曲線を描画する曲線描画方法が開示されている。
【０００３】
【特許文献１】特開２００２−１１７４１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来のエッジ分割による曲線描画では、エッジの分割数を増加させるほど、図形の輪郭を曲線に折れ線近似できるが、頂点数が増加して複雑な図形になるという課題があった。
【０００５】
例えば、図７に示すような４本の２次ベジェ曲線（図中、白丸記号で表した頂点で定義される４つの曲線）が連結された円形の図形を描画する場合、エッジ分割を行うと頂点数が４×Ｎ（分割数）個（図中の拡大図における黒丸記号で表した頂点）に増加する。また、分割数Ｎが小さいと図形を拡大した場合、その輪郭に乱れが生じる。
【０００６】
このように、従来のベクトルグラフィック描画技術では、多大な計算量を要することなく高速に描画を実行することが困難であった。
【０００７】
この発明は上記のような課題を解決するためになされたもので、ベクトル図形の描画で処理が必要なデータ量を大幅に削減することができ、かつベクトル図形を高速に描画できる図形描画装置およびこの装置としてコンピュータを機能させるプログラムを得ることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係る図形描画装置は、輪郭線の構成点の座標を含むベクトル図形データを入力し、当該入力データに基づいてベクトル図形の輪郭線を構成する曲線を順に選択して、入力データから輪郭線に関するデータを選定する入力制御部と、入力制御部により選定された輪郭線に関するデータに基づいて、ベクトル図形の輪郭線と走査線との交点座標を算出する演算部と、演算部により算出された交点座標に基づいて、ベクトル図形の輪郭線を境界とする内部領域を特定し、当該内部領域に塗り潰し処理を実行する塗潰し処理部とを備えるものである。
【発明の効果】
【０００９】
この発明よれば、ベクトル図形の輪郭線と走査線との交点座標を算出し、この交点座標に基づいてベクトル図形の輪郭線を境界とする内部領域を特定し、その塗り潰し処理を行うので、エッジ分割のように頂点数が増加することなく、描画処理におけるデータ量を削減することができるという効果がある。これにより、塗潰し処理の高速化を図ることができる。また、描画処理におけるデータ量が削減されるので、複数のベクトル図形に関する描画処理を並列して実行することも可能である。これにより、複数のベクトル図形の高速な描画が可能である。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
図１は、この発明の実施の形態１による図形描画装置の構成を示すブロック図である。この実施の形態１によるベクトルグラフィック描画装置（図形描画装置）５は、入力制御部１、演算部２、及び塗潰し処理部３から構成され、フレームバッファ４に保持したピクセルデータが適宜読み出されて表示される。
【００１１】
入力制御部１は、電子データとして入力されたベクトル図形データからベクトル図形の輪郭線データを抽出し、この輪郭線データを演算部２の処理に適したデータ形式に変換する。例えば、ベクトル図形における、頂点座標、曲線の制御点の座標、描画色等の情報から、当該ベクトル図形の輪郭線に関する情報（輪郭線を構成する曲線の始点、終点、制御点の座標等）を輪郭線データとして抽出する。
【００１２】
演算部２は、ＡＤＤ（加算）、ＭＵＬ（乗算）、ＭＩＮ（最小値）、ＭＡＸ（最大値）、ＤＩＶ（除算）、ＳＱＲＴ（平方根）などの各種演算器を備えており、入力制御部１から入力された輪郭線データを使用して、輪郭線を構成する曲線と走査線との交点座標を算出する。例えば、４−ＳＩＭＤ形式のＦＰＵで演算部２を構成することにより、容易に複数の輪郭線データに対する処理を並列に行う。
【００１３】
塗潰し処理部３では、図形の内部の領域に対して塗潰し処理を実行する。フレームバッファ４には、ベクトルグラフィック描画装置５が生成したベクトル図形のピクセルデータを保持する。
【００１４】
ベクトルグラフィック描画装置５の構成要素である入力制御部１、演算部２、及び塗潰し処理部３は、本発明の趣旨に従う図形描画プログラムをコンピュータに読み込ませてその動作を制御することにより、当該コンピュータ上でソフトウエアとハードウェアが協働した具体的な手段として実現することができる。このコンピュータには、通信機能を有し、上記図形描画プログラムを実行することができる携帯電話や携帯情報端末も含まれる。
【００１５】
なお、コンピュータ自体の構成及びその基本的な機能については、当業者が当該技術分野の技術常識に基づいて容易に認識できるものであり、本発明の本質に直接関わるものでないので詳細な記載を省略する。
【００１６】
次に動作について説明する。
ベクトルグラフィック描画装置５は、本装置５が搭載されたシステムのＣＰＵから入力された図形の情報として、頂点座標、曲線の制御点の座標、描画色等の情報が設定され、起動命令を受けることにより動作を開始する。起動命令を受けると、入力制御部１が起動する。
【００１７】
演算部２は、入力制御部１から入力した輪郭線データを用いて輪郭線と走査線との交点座標を算出する。ここでは、例として輪郭線を構成する曲線が２次ベジェ曲線である場合を例に挙げる。２次ベジェ曲線は、パラメータｔ（０≦ｔ≦１）を用いたパラメトリック形式で表すことにより、下記式（１）、（２）のように定義される。
ｘ（ｔ）＝（１−ｔ）2ｘ０＋２（１−ｔ）ｔｘ１＋ｔ2ｘ２    ・・・（１）
ｙ（ｔ）＝（１−ｔ）2ｙ０＋２（１−ｔ）ｔｙ１＋ｔ2ｙ２    ・・・（２）
但し、（ｘ０，ｙ０）は始点、（ｘ１，ｙ１）は制御点、（ｘ２，ｙ２）は終点を表す。
【００１８】
上記式（２）をｔについて整理すると、下記のようになる。
（ｙ０−２ｙ１＋ｙ２）ｔ2＋２（ｙ１−ｙ０）ｔ＋ｙ０−ｙ＝０
ここで、ｙ０〜ｙ２は定数なので、下記式（３）のように表現することができる。
ａｔ2＋ｂｔ＋ｃ（ｙ）＝０    ・・・（３）
但し、係数ａ〜ｃは下記式（４）〜（６）で表される。
ａ＝ｙ０−２ｙ１＋ｙ２    ・・・（４）
ｂ＝２（ｙ１−ｙ０）    ・・・（５）
ｃ（ｙ）＝ｙ０−ｙ    ・・・（６）
【００１９】
上記式（３）は、走査線のＹ座標を決定すると、ｔの値が下記式（７）のような２次方程式の解として求められることを意味する。
ｔ＝（−ｂ±ｓｑｒｔ（ｂ2−４ａｃ））／２ａ  （ａ！＝０）    ・・・（７）
なお、上記式（７）には除算が含まれるが係数ａの値は定数なので、予め（１／２ａ）という逆数を求めておき乗算を行ってもよい。
【００２０】
上記式（７）におけるｔの実数解の個数（０〜２個）は、判別式ｂ2−４ａｃの値によって判定することができる。ｂ2−４ａｃ≧０であれば実数解が存在する。
また、ａ＝０のときは、輪郭線が直線となり、下記式（８）でｔの解を求めることができる。
ｔ＝−ｃ／ｂ    ・・・（８）
【００２１】
上記式（７）または上記式（８）によって求められたｔの値が（０≦ｔ≦１）の範囲にあれば、ｔの値を上記式（１）に代入することにより、輪郭線と走査線の交点のＸ座標を求めることができる。
【００２２】
演算部２は、上述の算出処理を行った最終的な結果として得られた輪郭線と走査線との交点座標を塗潰し処理部３に出力する。塗潰し処理部３では、演算部２から入力した交点座標に基づいてベクトル図形の内部と判定した領域に対して塗潰し処理を行う。
【００２３】
次にベクトルグラフィック描画処理の詳細について説明する。
図２は、実施の形態１によるベクトルグラフィック描画処理の流れを示すフローチャートであり、この図に沿って説明する。
先ず、入力制御部１は、入力されたベクトル図形データから輪郭線データを読み出し（ステップＳＴ１）、このベクトル図形の輪郭線データに対して演算部２の処理に適したデータ形式になるように座標変換処理を行う（ステップＳＴ２）。ここでは、変換行列Ｍを３×２の行列とし、第ｉ行第ｊ列の成分をＭｉｊのように表して、座標変換後のＸＹ座標（Ｘ’，Ｙ’）を下記式（９）で算出する。
Ｘ’＝Ｍ００×Ｘ＋Ｍ０１×Ｙ＋Ｍ０２
Ｙ’＝Ｍ１０×Ｘ＋Ｍ１１×Ｙ＋Ｍ１２      ・・・（９）
【００２４】
輪郭線データとしては、輪郭線を構成する各曲線の始点、制御点、終点のＸＹ座標が与えられるので、各点に対して同様の座標変換処理を行う。このように座標変換することで、元の図形を、拡大、縮小、平行移動、回転させた図形も容易に描画することができる。なお、ＣＰＵから指定された輪郭線データをそのまま使用したい場合には、ステップＳＴ２の座標変換処理を省略してもよい。
【００２５】
次に、入力制御部１は、座標変換結果後の曲線の座標におけるＹ座標の最大値、最小値を判定し、Ｙ座標カウンタｙを初期化する（ステップＳＴ３）。
図３は、ベクトル図形の拡大描画方法と包含矩形を説明するための図であり、元の図形を拡大する描画例を示している。ステップＳＴ３において、図３に示すようなベクトル図形を処理する場合、Ｙ座標カウンタｙの初期値として各入力ベクトルの包含矩形（図３中の矩形（１）〜（３））の中から最小のＹ座標を選択する。
【００２６】
また、入力制御部１は、同時に処理中の曲線状態判定フラグを設定する。曲線状態判定フラグには、交点算出処理に関する状態として、例えば図４に示すように処理待ち（ＩＮＩＴ）、処理中（ＡＣＴＩＶＥ）、処理終了（ＥＮＤ）の３通りの状態を割り当てておく。入力制御部１は、描画開始時にはＩＮＩＴ（０）、曲線の処理が開始されればＡＣＴＩＶＥ（１）として、交点算出処理終了後にＥＮＤ（２）を処理対象の曲線に関してフラグ設定する。このようにすると、一度交点算出処理が終了した曲線の識別が容易となる。
【００２７】
続いて、入力制御部１は、曲線状態判定フラグがＩＮＩＴの曲線でＹ座標の最小値が小さいものから順に選択し、曲線状態判定フラグをＡＣＴＩＶＥにする。これにより、演算部２が、当該曲線についての交点座標算出処理を開始する（ステップＳＴ４）。
図５は、実施の形態１による描画処理における交点算出処理の流れを示すフローチャートであり、この図を用いて交点座標算出処理を詳細に説明する。なお、図５に示す処理で扱う曲線としては、上記式（１）及び上記式（２）で定義される２次ベジェ曲線を前提とする。
【００２８】
また、図５では単一の曲線に対する処理を示したが、例えば４−ＳＩＭＤ形式のＦＰＵなどで演算部２を構成することにより、複数の曲線に対して図５に示す処理を並列で行う構成とすることが可能である。例えば、図３に示すベクトル図形を描画する場合、点ｙｓｔａｒｔの位置から走査を開始して、走査線が点Ｃ’と交差するまでの範囲においては曲線Ａ’Ｂ’とＣ’Ａ’の２つを並列処理する。
【００２９】
この後、走査線が点Ｃ’と交差してから点Ｂ’と交差するまでの範囲においては、曲線Ａ’Ｂ’とＣ’Ｂ’の２つを並列処理することが可能である。このとき、曲線Ｃ’Ａ’については曲線状態判定フラグをＥＮＤ状態として処理を行わないようにすればよい。入力制御部１は、演算部２がアイドル状態となる期間ができるだけ少なくなるように曲線状態判定フラグの設定を制御する。
【００３０】
図５の説明に戻る。演算部２は、入力制御部１からの起動命令により起動すると、上記式（４）〜（６）を用いて、上記式（３）のＹの係数ａ、ｂ、ｃの値を算出する（ステップＳＴ４−１）。但し、係数ａ、ｂの値は１つの曲線を処理している間は変化しないので、各曲線に対する処理で一度だけ計算すればよい。
【００３１】
次に、演算部２は、ステップＳＴ９において算出した係数ａ、ｂ、ｃの値を用いて、判別式ｂ2−４ａｃを求め、計算結果が０より小さいか否かを判定する（ステップＳＴ４−２）。ここで、判定結果が０より小さくＹＥＳである場合、現在処理中の走査線と曲線との交点座標は存在しないことになるので、交点座標算出処理を終了し、図２におけるステップＳＴ５に進み、ステップＳＴ５以降の処理を行う。
【００３２】
一方、判定結果が０以上でＮＯである場合、演算部２は、現在処理中の走査線と曲線との交点が存在するものとして、上記式（７）を用いて対応するパラメータの値ｔを求める（ステップＳＴ４−３）。上記式（７）を解くことによってパラメータｔの値は１〜２個定まるが、曲線上の点となるためには０≦ｔ≦１であることが必要である。そこで、演算部２は、ステップＳＴ４−４において、上記式（７）の各解が０≦ｔ≦１であるか否かを判定する。
【００３３】
ステップＳＴ４−４において、判定結果が０≦ｔ≦１の範囲になくＮＯである場合、演算部２は、交点が曲線上の点ではないと判断し、交点座標算出を終了して、図２におけるステップＳＴ５に進み、ステップＳＴ５以降の処理を行う。また、判定結果が０≦ｔ≦１の範囲にありＹＥＳであると、上記式（１）を用いて交点Ｘ座標を算出する（ステップＳＴ４−５）。
【００３４】
このように、演算部２は、ベクトル図形の輪郭線と走査線との交点Ｘ座標を算出するにあたり、輪郭線を構成する曲線を２次ベジェ曲線の方程式で定義し、その解から画面上に描画する際の座標を直接求める。これにより、少ないデータ量での高速なベクトル図形の描画処理を行うことが可能である。
【００３５】
続いて、演算部２は、Ｘ座標がフレームバッファ４のサイズ内に収まる値となるようにＸ座標クランプ処理を行う（ステップＳＴ４−６）。なお、Ｘ座標クランプ処理が必要となるのは、例えば図６に矩形で示す１フレーム分の画像サイズからベクトル図形がはみ出している場合である。
【００３６】
図６において、走査線（ｙ）はベクトル図形の輪郭線と交点Ｘ０及びＸ１で交差する。ここで、交点Ｘ０はＸ座標の負の方向にクリップアウトしているため、Ｘ０’＝０に補正する。また、交点Ｘ１はＸ座標の正の方向にクリップアウトしているため、画像のＸ軸方向のサイズに相当するＸＳＩＺＥ−１を考慮して、Ｘ１’＝ＸＳＩＺＥ−１に補正する。これにより、０≦Ｘ＜ＸＳＩＺＥ−１の範囲内をベクトル図形データで指定された描画色で塗り潰すことができる。なお、図６中の斜線で示した部分は、実際には塗り潰しが行われない領域を示している。
【００３７】
Ｘ座標クランプ処理により求められたＸ座標値は、演算部２から塗潰し処理部３に出力される。塗潰し処理部３では、演算部２から入力したＸ座標値を登録し、現在処理中の走査線の位置に基づいて塗り潰し処理を開始する（ステップＳＴ４−７）と共に、交点座標算出処理を終了して図２におけるステップＳＴ５に進み、ステップＳＴ５以降の処理を実行する。
【００３８】
なお、演算部２が複数の曲線について交点座標を並列して算出している場合、塗潰し処理部３は、演算部２から各曲線について並列に出力される交点座標を抽出し、上述のようにしてベクトル図形の内部に相当する領域を判定して塗潰し処理を行う。
【００３９】
また、ハードウェア規模の制限などにより、演算部２からの交点座標の出力を並列に行う構成をとれない場合がある。この場合、例えば塗潰し処理部３によって読み書きが可能な記憶手段（メモリ）を交点座標値を記憶するために設けておき、この記憶手段に演算部２からの出力を一時的に保存する。これにより、演算部２によって走査線と交差する全ての交点算出処理が終わった後で、塗潰し処理部３が、この記憶手段から交点座標値を逐次読み出して塗潰し処理を行う構成としてもよい。
【００４０】
図２の説明に戻る。演算部２による交点座標算出処理が終了すると、入力制御部１は、Ｙ座標カウンタｙの値が最終のＹ座標点ｙｅｎｄよりも大きいが否かを判定する（ステップＳＴ５）。このとき、判定結果がＮＯであると、Ｙ座標カウンタの値を刻み幅（ｄｙ）だけ増加させる（ステップＳＴ６）。なお、刻み幅（ｄｙ）の値は＋１でもよいが、１以下の値を用いてサブピクセル精度で交点座標の算出を行ってもよい。この後、ステップＳＴ４の処理に戻って上述の処理を繰り返す。
【００４１】
一方、判定結果がＹＥＳである場合、入力制御部１は、現在処理している曲線データの曲線状態判定フラグをＥＮＤ状態に設定する（ステップＳＴ７）。続いて、入力制御部１は、曲線状態判定フラグがＩＮＩＴ状態の曲線が残っていないか否かを判定する（ステップＳＴ８）。
【００４２】
ステップＳＴ８において、判定結果がＹＥＳとなり、ＩＮＩＴ状態の曲線がある場合、入力制御部１は、新たに選択した曲線の曲線状態判定フラグをＡＣＴＩＶＥ状態として、ステップＳＴ４の処理に戻って上述の処理を繰り返す。また、判定結果がＮＯであれば、現在処理している曲線データが処理の最終データとなるので描画を終了する。
【００４３】
以上のように、この実施の形態１によれば、輪郭線の構成点の座標（例えば、輪郭線を構成する曲線の始点、終点、制御点など）を含むベクトル図形データを入力し、当該入力データに基づいてベクトル図形の輪郭線を構成する曲線を順に選択して、入力データから輪郭線に関する輪郭線データを選定する入力制御部１と、入力制御部１により選定された輪郭線データに基づいて、画面上をＹ軸方向に走査する走査線とベクトル図形の輪郭線との交点Ｘ座標を算出する演算部２と、演算部２により算出された交点Ｘ座標に基づいて、ベクトル図形の輪郭線を境界とする内部領域を特定し、当該内部領域に塗り潰し処理を実行する塗潰し処理部３を備えたので、描画対象のベクトル図形の輪郭線をエッジ分割することなく、塗り潰し処理が可能である。従って、エッジ分割のように頂点数が増加することがないので、描画処理におけるデータ量を削減することができる上、塗り潰し処理の高速化を図ることができる。
【００４４】
また、上記実施の形態１では、走査線のＹ座標を変化させながら、ベクトル図形の輪郭線と走査線との交点Ｘ座標を直接算出するので、フレームバッファ４の解像度を大きくした場合でも、輪郭線のエッジ分割数に依存せず、確実に高品質な描画が可能である。
【００４５】
さらに、上記実施の形態１によれば、交点座標の算出を複数の輪郭線および輪郭線を構成する複数の曲線について並列処理するので、高速にベクトル図形を描画することができる。
【００４６】
上記実施の形態１では、ベクトル図形の輪郭線が２次のベジェ曲線である場合を説明したが、３次以上のベジェ曲線の場合でも同様の処理で輪郭線と走査線との交点座標を算出することが可能である。また、ベクトル図形の輪郭線が３次以上のベジェ曲線である場合、この３次以上のベジェ曲線を複数の２次ベジェ曲線によって近似した後、上述した図２及び図５に示す処理を行って描画することもできる。
【００４７】
なお、上記実施の形態１では、走査線をＹ軸方向にスキャンする場合を示したが、上記式（１）をパラメータｔについて整理し、走査線をＸ軸方向にスキャンして処理対象の曲線との交点Ｙ座標を求めるようにしてもよい。
【図面の簡単な説明】
【００４８】
【図１】この発明の実施の形態１による図形描画装置の構成を示すブロック図である。
【図２】実施の形態１によるベクトルグラフィック描画処理の流れを示すフローチャートである。
【図３】ベクトル図形の拡大描画方法と包含矩形を説明するための図である。
【図４】曲線状態判定フラグを説明するための図である。
【図５】実施の形態１による描画処理における交点算出処理の流れを示すフローチャートである。
【図６】Ｘ方向のクランプ処理を説明するための図である。
【図７】ベクトル図形描画におけるエッジ分割を説明するための図である。
【符号の説明】
【００４９】
１  入力制御部、２  演算部、３  塗潰し処理部、４  フレームバッファ、５  ベクトルグラフィック描画装置（図形描画装置）。
【図１】
2008097450.tif 000003
【図２】
2008097450.tif 000004
【図３】
2008097450.tif 000005
【図４】
2008097450.tif 000006
【図５】
2008097450.tif 000007
【図６】
2008097450.tif 000008
【図７】
2008097450.tif 000009