(57)【要約】【課題】  複数の連続したパスから構成されるストロークを描画する際に、接続点、端点を修飾したストロークを高速に描画する。【解決手段】  パス形状取得部201は、パスの形状を示す形状情報を取得する。端点情報取得部203は、ストロークの端点の修飾方法を示す端点情報を取得する。接続点情報取得部204は、ストロークの接続点の修飾方法を示す接続点情報を取得する。ストロークステンシル生成部206は、形状情報、接続点情報および端点情報に基づきストロークのステンシルデータを生成する。【選択図】  図2
2015064858.tif 000002
【特許請求の範囲】
【請求項１】
複数の連続したパスから構成されるストロークを描画する画像処理装置であって、
パスの形状を示す形状情報を取得する第一の取得手段と、
ストロークの端点の修飾方法を示す端点情報を取得する第二の取得手段と、
ストロークの接続点の修飾方法を示す接続点情報を取得する第三の取得手段と、
前記形状情報、前記接続点情報および前記端点情報に基づきストロークのステンシルデータを生成する生成手段とを有する画像処理装置。
【請求項２】
さらに、ストロークの線幅を示す線幅情報を取得する第四の取得手段を有し、
前記生成手段は、前記線幅情報、前記形状情報、前記接続点情報および前記端点情報に基づきストロークのステンシルデータを生成する請求項1に記載された画像処理装置。
【請求項３】
前記線幅情報が零を示す場合、前記生成手段は、前記ステンシルデータを生成しない請求項2に記載された画像処理装置。
【請求項４】
前記生成手段は、
前記線幅情報に基づき前記形状情報が示すパスを太らせた基本ステンシルデータを生成する第一の生成手段と、
前記接続点情報に基づき接続点ステンシルデータを生成する第二の生成手段と、
前記端点情報に基づき端点ステンシルデータを生成する第三の生成手段とを有し、
前記基本ステンシルデータ、前記接続点ステンシルデータおよび前記端点ステンシルデータをマージして、前記ステンシルデータを生成する請求項2または請求項3に記載された画像処理装置。
【請求項５】
前記接続点情報は、前記接続点の修飾方法としてベベル、マイタ、ラウンドの何れかを示す請求項1から請求項4の何れか一項に記載された画像処理装置。
【請求項６】
前記端点情報は、前記端点の修飾方法としてバット、スクエア、ラウンドの何れかを示す請求項1から請求項5の何れか一項に記載された画像処理装置。
【請求項７】
前記第一の生成手段は、前記形状情報と前記線幅情報に基づき四頂点を有する図形を作成し、前記図形の内部を塗り潰して接続点の修飾方法が前記ベベル、端点の修飾方法が前記バットの基本ステンシルデータを生成し、
前記接続点情報が前記ベベル以外の修飾方法を示す場合、前記第二の生成手段は、前記接続点情報に基づき接続点ステンシルデータを生成して、前記接続点ステンシルデータを前記基本ステンシルデータにマージし、
前記端点情報が前記バット以外の修飾方法を示す場合、前記第三の生成手段は、前記端点情報に基づき端点ステンシルデータを生成して、前記端点ステンシルデータを前記基本ステンシルデータにマージする請求項6に記載された画像処理装置。
【請求項８】
前記第二の生成手段は、接続点を共有する二つのストロークがなす角度が180度の場合、当該接続点の接続点ステンシルデータを生成しない請求項4または請求項7に記載された画像処理装置。
【請求項９】
前記第二の生成手段は、ストロークの開始点と終了点が一致する閉図形の場合、前記開始点と前記終了点を接続点として前記接続点ステンシルデータを生成する請求項4または請求項7に記載された画像処理装置。
【請求項１０】
さらに、ストロークに施す二次元アフィン変換の変換情報を取得する第五の取得手段を有し、
前記変換情報に基づき、前記第一の生成手段は前記基本ステンシルデータに前記二次元アフィン変換を施し、前記第二の生成手段は前記接続点ステンシルデータに前記二次元アフィン変換を施し、前記第三の生成手段は前記端点ステンシルデータに前記二次元アフィン変換を施す請求項4、請求項7から請求項9の何れか一項に記載された画像処理装置。
【請求項１１】
さらに、ストロークの色を示す色情報を取得する第六の取得手段と、
前記ステンシルデータと前記色情報に基づきカラーバッファの画素の色を変更する変更手段とを有する請求項1から請求項10の何れか一項に記載された画像処理装置。
【請求項１２】
前記色情報は、単一色、グラデーション、パターンおよびテクスチャの何れかを示し、並びに、透明度を示す請求項11に記載された画像処理装置。
【請求項１３】
複数の連続したパスから構成されるストロークを描画する画像処理方法であって、
パスの形状を示す形状情報を取得し、
ストロークの端点の修飾方法を示す端点情報を取得し、
ストロークの接続点の修飾方法を示す接続点情報を取得し、
前記形状情報、前記接続点情報および前記端点情報に基づきストロークのステンシルデータを生成する画像処理方法。
【請求項１４】
コンピュータを請求項1から請求項12の何れか一項に記載された画像処理装置の各手段として機能させるためのプログラム。
【請求項１５】
請求項14に記載されたプログラムが記録されたコンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の連続したパスから構成されるストロークを描画する画像処理に関する。
【背景技術】
【０００２】
一般に、線幅をもつストロークを描画する際、接続点の隙間を埋める修飾方法としてラウンド型（丸型）、ベベル(bevel)型、マイタ(miter)型（尖型）が用いられる。また、ストロークの端点である開始点、終了点の修飾方法としてラウンド型、スクエア型（正方形型）、バット(butt)型（端型）が用いられる。
【０００３】
特許文献1は、接続点における隙間を埋めるために、隙間の図形を生成し、塗り潰し処理を行う方法を記載する。また、特許文献2は、接続点を共有する二本のストロークと、接続点の隙間を埋める図形の間に計算誤差による隙間が発生しないように、それらを僅かに重畳して描画する方法を開示する。
【０００４】
しかし、接続点によって隙間の形状が異なるため、上記の方法によれば、接続点ごとに隙間を埋める図形の生成が必要になり、接続点が多いパスを描画する場合、計算コストが増大する。また、小さい隙間の図形を多数生成して保持すれば、メモリ使用量が増大する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平06-168339号公報
【特許文献２】特開平11-015985号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、複数の連続したパスから構成されるストロークを描画する際に、接続点、端点を修飾したストロークを高速に描画することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、前記の目的を達成する一手段として、以下の構成を備える。
【０００８】
本発明にかかる画像処理は、複数の連続したパスから構成されるストロークを描画する際に、パスの形状を示す形状情報を取得し、ストロークの端点の修飾方法を示す端点情報を取得し、ストロークの接続点の修飾方法を示す接続点情報を取得し、前記形状情報、前記接続点情報および前記端点情報に基づきストロークのステンシルデータを生成する。
【発明の効果】
【０００９】
本発明によれば、複数の連続したパスから構成されるストロークを描画する際に、接続点、端点を修飾したストロークを高速に描画することができる。
【図面の簡単な説明】
【００１０】
【図１】実施例のベクトル図形の描画処理を実行するコンピュータ装置の構成例を説明するブロック図。
【図２】ベクトル図形の描画処理における画像処理装置の処理構成例を示すブロック図。
【図３】ベクトル図形の描画処理を説明するフローチャート。
【図４】パスコマンドと処理内容の一例を示す図。
【図５】修飾方法の種類を説明する図。
【図６】ステンシルデータの作成処理を説明するフローチャート。
【図７】ステンシルデータの生成を説明する図。
【図８】ステンシルデータの別の生成方法を説明するフローチャート。
【図９】ステンシルデータの生成を説明する図。
【図１０】ステンシルバッファとカラーバッファの関係を模式的に示す図。
【図１１】パスコマンド例とストロークの関係を説明する図。
【図１２】接続点ステンシル生成部の処理の詳細を説明するフローチャート。
【図１３】二次元アフィン変換を伴うストロークのステンシルデータを生成する処理を説明する図。
【発明を実施するための形態】
【００１１】
以下、本発明にかかる実施例の画像処理であるベクトル図形の描画を図面を参照して詳細に説明する。なお、実施例は特許請求の範囲にかかる本発明を限定するものではなく、また、実施例に説明する構成の組み合わせのすべてが本発明の解決手段に必須とは限らない。
【実施例１】
【００１２】
［装置の構成］
図1のブロック図により実施例のベクトル図形の描画処理を実行する画像処理装置を実現するコンピュータ装置101の構成例を説明する。
【００１３】
図1において、CPU102は、RAM103をワークメモリとして、ROM104や記憶部105に格納されたオペレーティングシステム(OS)や各種プログラムを実行し、システムバス112を介して後述する構成を制御する。
【００１４】
グラフィクスアクセラレータ108は、例えばHDMI（登録商標）やDisplayPort（商標）などのビデオインタフェイスを備え、接続されたモニタ109にグラフィクスやユーザインタフェイス(UI)を表示する。汎用I/F106は、例えばUSBインタフェイスであり、キーボードやマウスなどの入力デバイス107が接続される。ネットワークI/F110は、有線または無線ネットワーク111に接続する。
【００１５】
記憶部105は、例えばハードディスクドライブ(HDD)やソリッドステートドライブ(SSD)であり、実施例のベクトル図形の描画処理用のプログラムを含む各種プログラムや各種パラメータを格納する。また、記憶部105は、汎用I/F106に接続可能なUSBメモリや、汎用I/F106に接続されるカードリーダを介して読み書き可能なメモリカードのような記録媒体でもよい。また、記憶部105は、ネットワークI/F110とネットワーク111を介して接続されるネットワークデバイスでもよい。
【００１６】
また、コンピュータ装置101が例えばタブレットデバイスの場合、入力デバイス107に相当するタッチパネルを有するモニタ109がコンピュータ装置101に一体化される。
【００１７】
CPU102は、UIと入力デバイス107によってベクトル図形の描画が指示されると、ベクトル図形の描画処理用のプログラムを起動し、複数の連続したパスから構成され、所定の線幅を有するストロークを描画するベクトル図形の描画処理を実行する。
【００１８】
［ベクトル図形の描画処理］
図2のブロック図によりベクトル図形の描画処理における画像処理装置の処理構成例を示す。また、図3のフローチャートによりベクトル図形の描画処理を説明する。なお、図3は一つのパス分の処理を示す。
【００１９】
パス形状取得部201は、パスの形状を示す情報（以下、形状情報）をRAM103から取得する(S301)。パスの形状情報は、パスコマンドと座標値の対が指定順に複数に並んだ情報を含む。
【００２０】
図4によりパスコマンドと処理内容の一例を示す。図4に示すように、パスコマンドによって必要な座標値の数が異なる。一般的なパスコマンドには、図4に示すコマンドのほかに円弧、水平線、垂直線などの描画コマンドが含まれるが、それらの説明は省略する。
【００２１】
図11によりパス形状取得部201が取得するパスの形状情報に含まれるパスコマンド例とストロークの関係を説明する。例えば、図11(a)に示すパスコマンドを、線幅＞0としてXY直交座標系に描画すると図11(b)に示すストロークが得られる。
【００２２】
次に、線幅情報取得部202は、パスに対応するストロークの線幅を示す情報（以下、線幅情報）をRAM103から取得し(S302)、線幅が0か否かを判定する(S303)。線幅が0の場合はストロークの描画は不要であり、一つのパス分の処理が終了する。なお、RAM103に線幅情報が格納されていない場合、線幅情報取得部202は、記憶部105などから初期値の線幅情報を取得する。
【００２３】
線幅＞0の場合、色情報取得部205は、パスに対応するストロークの色を示す情報（以下、色情報）をRAM103から取得し(S304)、色情報に含まれる透明度が透明を示すか否かを判定する(S305)。透明度が透明を示す場合はストロークの描画は不要であり、一つのパス分の処理が終了する。なお、RAM103に色情報が格納されていない場合、色情報取得部205は、記憶部105などから初期値の色情報を取得する。
【００２４】
透明度が非透明を示す場合、端点情報取得部203は、パスの開始点と終了点におけるストロークの修飾方法を示す情報（以下、端点情報）をRAM103から取得する(S306)。なお、RAM103に端点情報が格納されていない場合、端点情報取得部203は、記憶部105などから初期値の端点情報を取得する。
【００２５】
図5により修飾方法の種類を説明する。図5(a)は端点の修飾方法を示す。端点をストロークの方向と直交する方向に平らに修飾する処理が「バット」である。線幅を直径とし、ストロークの端点を中心とする半円弧によって端点を修飾する処理が「ラウンド」である。線幅の半分の長さ分、ストロークの方向に端点を伸ばす処理が「スクエア」である。
【００２６】
端点の修飾方法は、パスの開始点と終了点に異なる修飾方法を指定可能な場合もあれば、開始点と終了点に同じ修飾方法を指定する必要がある場合もある。
【００２７】
次に、接続点情報取得部204は、ストロークの接続点における修飾方法を示す情報（以下、接続点情報）を取得する(S307)。
【００２８】
図5(b)はストロークの接続点の修飾方法を示し、図5(c)は接続点近傍の拡大図である。図5(c)に示すように、二本のストロークの中心線は点Pにおいて接続する。ストロークの中心線を当該中心線に直交する両方向に線幅の半分、移動すると、線分AB、A'B'、DC、D'C'が得られる。点Pに対してストロークの輪郭の外側の点、つまり点Bと点Cの間の接続方法が修飾方法によって異なる。
【００２９】
図5(b)に示す「ベベル」は点Bと点Cを線分で接続する修飾方法である。「ラウンド」は点Pを中心、点Bを開始点、点Cを終了点とする円弧のうち、弧が短い円弧で点Bと点Cを接続する修飾方法である。「マイタ」は線分ABを点B方向に延長した延長線と、線分DCを点C方向に延長した延長線の間の交点Qを計算し、線分BQと線分QCを接続する修飾方法である。
【００３０】
接続点の修飾方法は、接続点ごとに指定可能な場合もあれば、一つのパスに対して一つの修飾方法を指定する必要がある場合もある。また、マイタが指定され、かつ、接続点におけるストローク同士がなす角が小さい場合、ストロークの先端が非常に長くなる。このようなストロークの先端における延長を防ぐため、ストローク同士がなす角が小さい場合は修飾方法をベベルに変更する処理を行う場合がある。
【００３１】
次に、ストロークステンシル生成部206は、詳細は後述するが、形状情報、線幅情報、端点情報、接続点情報に基づき、ストロークのステンシルデータをステンシルバッファ上に生成する(S308)。なお、ステンシルバッファはRAM103の所定領域に割り当てられる。
【００３２】
次に、カラーバッファ変更部207は、詳細は後述するが、生成されたステンシルデータと、色情報取得部205が取得した色情報に基づき、カラーバッファを変更し(S309)、一つのパス分の処理が終了する。なお、カラーバッファはRAM103の所定領域に割り当てられる。
【００３３】
なお、上記では、例えば記憶部105に格納されたデータファイルがRAM103にロードされ、RAM103から各種情報が取得される例を説明したが、UIと入力デバイス107を介して各種情報が取得されてもよい。
【００３４】
［ステンシル作成処理］
図6のフローチャートによりステンシルデータの作成処理(S308)を説明する。また、図7によりステンシルデータの生成を説明する。
【００３５】
基本ストロークステンシル生成部2061は、各ストロークを、ストロークの中心線に直交する方向（以下、直交方向）に太らせた結果を基本ステンシルデータ（図7(a)）とする(S601-S603)。つまり、各ストロークにおいて、当該ストロークの中心線上に中点が存在し、直交方向に延伸する、線幅分の線分の軌跡を求める。図11(a)に示すパスコマンドは二本の線分で構成され、基本ステンシルデータはそれら線分を中心とする線幅の太さをもつ長方形内部の和集合になる。
【００３６】
次に、接続点ステンシル生成部2063は、全接続点について、接続点においてストロークがなす角が180度か否かを判定する。そして、180度以外の場合は接続点ステンシルデータを生成し、基本ステンシルデータにマージする(S604-S607)。接続点を共有するストロークの一方あるいは両方が曲線コマンドの場合、角度の算出には曲線コマンドの端点における接線を用いる。図11(c)に示すパスコマンドの例では、接続点(50, 100)において線分と三次ベジェ曲線が接続するが、線分と三次ベジェ曲線の接線がなす角は180度と判定される。180度と判定された接続点におけるストロークは連続するので、接続点ステンシルデータの生成処理は行われない。
【００３７】
次に、端点ステンシル生成部2062は、パスが開図形か閉図形かを判定する(S608)。例えば図4(e)に示すパスコマンドは、CLOSE()コマンドによってパスの開始点と終了点が接続されるため端点が存在しない閉図形である。端点が存在しない閉図形の場合、端点ステンシル生成部2062は、端点ステンシルデータを生成せずにステンシルデータ生成処理を終了する。
【００３８】
パスが開図形であると判定した場合、端点ステンシル生成部2062は、端点の修飾方法がバットか否かを判定する(S609)。端点の修飾方法としてバットが指定されている場合、端点ステンシルデータの生成は不要であり、端点ステンシル生成部2062は、ステンシルデータ生成処理を終了する。また、端点の修飾方法としてバット以外が指定されている場合、端点ステンシル生成部2062は、パスの開始点、終了点について端点ステンシルデータを生成し、端点ステンシルデータを基本ステンシルデータにマージする(S610-S612)。
【００３９】
●接続点ステンシル生成部
図12のフローチャートにより接続点ステンシル生成部2063の処理の詳細を説明する。なお、図12は接続点ごとの処理を示している。
【００４０】
接続点ステンシル生成部2063は、注目接続点の修飾方法を判定する(S901)。修飾方法がラウンドの場合、既に、ラウンドの接続点ステンシル形状が生成され、RAM103に保存されているか否かを判定する(S902)。当該接続点ステンシル形状が生成済みの場合、接続点ステンシル生成部2063は、RAM103から接続点ステンシル形状を取得し(S903)、処理をステップS911に進める。
【００４１】
また、当該接続点ステンシル形状が未生成の場合、接続点ステンシル生成部2063は、ラウンドの接続点ステンシル形状を生成し(S904)、生成したステンシル形状をRAM103の所定領域に保存し(S905)、処理をステップS911に進める。保存の際、当該接続点ステンシル形状の生成パラメータとして、修飾方法およびストロークの線幅が当該接続点ステンシル形状に関連付けられる。つまり、ステップS902において、修飾方法およびストロークの線幅に基づき所望の接続点ステンシル形状が保存されているか否かが判定される。
【００４２】
図11(a)に示すパスコマンドにおいて、接続点の座標は(100, 200)の一点である。接続点の修飾方法がラウンドの場合、接続点を中心として、線幅の半分の長さを半径とする円を生成し、円の内部を接続点ステンシル形状（図7(b)）とする。なお、図7(b)において、斜線部が基本ステンシルデータ、黒く塗り潰した部分が接続点ステンシル形状である。
【００４３】
接続点の修飾方法にラウンドが指定されている場合、一つのパスの全接続点において同じ大きさの円内が接続点ステンシル形状になる。つまり、一度、接続点ステンシル形状として円を生成すれば、当該円を他の接続点に複写すればよい。
【００４４】
他方、修飾方法がマイタの場合も同様に、接続点ステンシル生成部2063は、既に、マイタの接続点ステンシル形状が生成され、RAM103に保存されているか否かを判定する(S906)。当該接続点ステンシル形状が生成済みの場合、接続点ステンシル生成部2063は、RAM103から接続点ステンシル形状を取得する(S906)。また、当該接続点ステンシル形状が未生成の場合、接続点ステンシル生成部2063は、マイタの接続点ステンシル形状を生成し(S907)、生成したステンシル形状を生成パラメータに関連付けてRAM103の所定領域に保存する(S908)。
【００４５】
接続点ステンシル生成部2063は、マイタの接続点ステンシル形状として、一辺の長さが線幅の正方形を生成する。正方形の辺はXY軸に平行、正方形の中心はXY軸の原点とする（図7(c)）。なお、この正方形は全接続点において使用可能である。
【００４６】
次に、接続点ステンシル生成部2063は、接続点に合わせて接続点ステンシル形状（正方形）を変形する(S909)。接続点においてストロークがなす角をφとすると、正方形をX軸方向に(1/sinφ)倍に拡大し、水平方向に角度φのシアー処理を行う（図7(c)の菱形）。さらに、線分AB（図5(c)参照）がX軸となす角度θを求め、菱形を角度θ回転する。このようにして得た菱形の中心を接続点に合わせ、菱形内部を接続点ステンシル形状とする（図7(d)）。
【００４７】
接続点ステンシル形状の取得または生成（および変形）が終了した後、接続点ステンシル生成部2063は、接続点ステンシル形状のデータと基本ステンシルデータとの和集合をステンシルデータとしてステンシルバッファに格納する(S910)。言い替えれば、接続点ステンシルデータを基本ステンシルデータにマージしたステンシルデータを生成する。
【００４８】
●端点ステンシル生成部
図11(a)に示すパスコマンドにおいて、パスの開始点の座標は(50, 50)、パスの終了点の座標は(150, 50)である。端点の修飾方法がラウンドの場合、接続点における修飾処理とほぼ同様である。端点ステンシル生成部2062は、開始点を中心として、線幅の半分の長さを半径とする円を生成し、円の内部を端点ステンシルデータとする。同様に、終了点を中心として、線幅の半分の長さを半径とする円を生成し、円の内部を端点ステンシルデータとする。勿論、接続点の修飾にラウンドが含まれていた場合、ステップS904で生成され、ステップS905でRAM103に保存された接続点ステンシル形状を取得して、端点ステンシルデータとして使用しても構わない。
【００４９】
図7(e)は端点をラウンドで修飾した場合の端点ステンシルデータを表す。生成した端点ステンシルデータを基本ステンシルデータにマージすると、図7(f)に示すステンシルデータが得られる。
【００５０】
また、パスが複数のサブパスから構成される複合パスの場合は、各サブパスの開始点と終了点において同様の処理を行う。
【００５１】
端点の修飾方法にスクエアが指定されている場合も同様に処理が可能である。端点ステンシル生成部2062は、一辺の長さが線幅の正方形を生成する。正方形の辺はXY軸に平行、正方形の中心がXY軸の原点とする。次に、正方形を、端点におけるストロークの傾きに合わせて回転し、さらに正方形の中心が端点に一致するように、正方形を平行移動する。図7(g)は端点をスクエアで修飾した場合の端点ステンシルデータを表す。
【００５２】
●別のステンシル作成処理
上記では、基本ステンシルデータの生成に、各ストロークを太らせた長方形を計算する方法を用いる例を説明したが、描画命令を処理するハードウェアによっては別の方法を用いる方が高速な場合がある。当該ハードウェアとして、グラフィクス処理ユニット(GPU)を備えるグラフィクスアクセラレータ108が利用可能である。
【００５３】
図8のフローチャートによりOpenGL（登録商標）ハードウェアを使用する場合のステンシルデータの生成方法を説明する。また、図9によりステンシルデータの生成を説明する。なお、一つのパスに対して接続点の修飾として一方法および端点の修飾として一方法が指定可能であるとする。
【００５４】
まず、ストロークごとにストロークを太らせた場合の長方形の四頂点を求め、それら頂点A'、A"、B'、B"、C'、C"、D'、D"を順に並べた頂点リストを作成する（図9(a)参照）(S701)。
【００５５】
次に、描画モードとしてGL_TRIANGLE_STRIPを指定する(S702)。この描画モードは、頂点V0、V1、V2、V3、V4、…、Vnが与えられた場合、三角形V0V1V2、V1V2V3、V2V3V4、…、Vn-2Vn-1Vnの内部を塗り潰すモードである。これにより、接続点の修飾処理がベベル、端点の修飾処理がバットの基本ステンシルデータが作成される（図9(b)参照）。なお、ハードウェアのアクセラレーション効果により、高速な描画処理が可能である。
【００５６】
次に、接続点の修飾方法にベベルか指定されているか否かを判定する(S703)。ベベルが指定されている場合、既に基本ステンシルデータにおいて接続点の修飾データが生成されているので、接続点の修飾処理をスキップして、処理はステップS704に進む。一方、接続点の修飾方法にベベル以外が指定されている場合、詳細説明は省略するが、図6と同様の接続点の修飾処理(S604-S607)が行われる。
【００５７】
次に、図6の処理と同様に、パスが開図形か閉図形かが判定され(S608)、端点の修飾方法にバットが指定されているか否かが判定される(S609)。パスが端点が存在しない閉図形の場合、端点の修飾処理がスキップされてステンシル生成処理が終了する。また、パスが開図形でありバットが指定されている場合、既に基本ステンシルデータにおいて端点の修飾データが生成されているので、端点の修飾処理がスキップされてステンシル生成処理が終了する。一方、端点の修飾方法にバット以外が指定されている場合、詳細説明は省略するが、図6と同様の端点の修飾処理(S610-S612)が行われる。
【００５８】
OpenGL（商標登録）ハードウェアを用いる場合、GPUのビデオRAM(VRAM)に頂点情報を格納して、頂点バッファオブジェクト(vertex buffer object)機能が利用可能である。この機能を端点および接続点へのステンシル形状の配置に利用すると、CPUからGPUへの頂点座標の送信を防いで、より高速の処理が期待される。
【００５９】
［ステンシルバッファとカラーバッファ］
図10によりステンシルバッファとカラーバッファの関係を模式的に示す。ステンシルバッファ801とカラーバッファ802は画素ごとに一対一の対応関係を有する。
【００６０】
図10(a)に示すように、ステンシルバッファ801にはステンシル領域803が設定されているとする。図形804を生成して描画すると、図形804の形状がステンシル領域803によって切り抜かれ、カラーバッファ802の、切り抜き形状に対応する画素の色が変更される。なお、カラーバッファ802の色の変更アルゴリズムは、その時点で指定されているブレンドモードに従う。ステンシル領域803を包含する図形804を生成すると、カラーバッファ802に反映されるステンシル適用後図形805の形状はステンシル領域803の形状に一致する。
【００６１】
図10(b)に示すように、ストロークステンシル領域806が設定された場合、ストロークステンシル領域806を包含する包含図形807を算出して描画することで、端点、接続点の修飾を行った線幅を有するストロークを取得することができる。取得された色情報が単一色を示す場合、包含図形807を当該色で描画すれば当該色を有するストロークをカラーバッファ802に描画することができる。
【００６２】
また、取得された色情報がグラデーションを示す場合は、グラデーションを有する包含図形807を算出し描画すればグラデーションを有するストロークをカラーバッファ802に描画することができる。さらに、包含図形807の領域内に一つの画像を描画するか、複数の画像を並べて描画すれば、色情報が示すパターンやテクスチャを有するストロークをカラーバッファ802に描画することができる。なお、包含図形807の領域の全部または一部が、色情報が示す透明度を有しても構わない。
【００６３】
●アフィン変換
また、二次元アフィン変換を伴うストロークの描画においても同様の処理が可能である。二次元アフィン変換でシアー（剪断）処理などが適用されると、太らせたストロークの形状は長方形ではなく平行四辺形になり、太さも一様ではなくなる場合がある。接続点や端点での修飾処理において接続点ステンシルデータや端点ステンシルデータを生成する際に使用する図形である接続点ステンシル形状や端点ステンシル形状に同じ二次元アフィン変換を適用すれば、上記と同様の処理が可能になる。
【００６４】
この場合、図2に示す変換情報取得部208は、二次元アフィン変換を示す情報（以下、変換情報）をRAM103から取得する。基本ストロークステンシル生成部2061は、変換情報に基づく二次元アフィン変換を基本ステンシルデータに適用する。接続点ステンシル生成部2063は、当該二次元アフィン変換を接続点ステンシル形状に適用する。端点ステンシル生成部2062は、当該二次元アフィン変換を端点ステンシル形状に適用する。これにより、上記の説明と同様に二次元アフィン変換を伴うストロークのステンシルデータを作成することができる。
【００６５】
とくに、接続点や端点の修飾方法にラウンドが指定されている場合、線幅の半分の長さを半径とする円を二次元アフィン変換して楕円を生成し、当該楕円を端点や接続点に配置することで接続点や端点のステンシルデータを生成することができる。
【００６６】
図13により二次元アフィン変換を伴うストロークのステンシルデータを生成する処理を説明する。
【００６７】
図13(a)は線分と三次ベジェ曲線から構成されるパス1001を示し、図13(b)はパス1001に対応するパスコマンドを示す。このパスコマンドにより図13(c)に示す基本ステンシルデータ1002が生成される。基本ステンシルデータ1002において、接続点の修飾方法はベベル、端点の修飾方法はバットである。
【００６８】
図13(c)に示す基本ステンシルデータ1002に、X軸方向-20度のシアー変形を適用すると、基本ステンシルデータ1002から図10(d)に示す変形ステンシルデータ1003が生成される。変形ステンシルデータ1003においては、シアー変形の結果、線幅が不均一になる。
【００６９】
接続点の修飾方法および端点の修飾方法がラウンドの場合、線幅の半分の長さを半径とする円を生成し、円の内部をステンシル形状としてRAM103に保存する。そして、図13(e)に示すように、当該ステンシル形状を接続点と端点に配置し、ステンシル形状と変形ステンシルデータ1003の和集合を計算することで、アフィン変形を伴う場合も最終的なステンシルデータを生成することができる。なお、図13(e)において、黒く塗り潰した部分がステンシル形状である。
【００７０】
［変形例］
上記では、パスコマンドとして線分のコマンドについて説明したが、曲線コマンドを含んだパスについても上記処理を適用可能である。
【００７１】
図11(c)に示すパスコマンドには、図11(d)に示すように線分のコマンドと曲線のコマンドが混在する。曲線の場合、図6のステップS602において、曲線の接線に垂直な方向に、線幅の太さになるように曲線を太らせることで、基本ステンシルデータを生成することが可能である。あるいは、曲線を太らせた場合の四頂点を有する図形を作成することで、基本ステンシルデータを生成することが可能である。なお、当該図形において、パスを挟む二頂点の間は辺（線分）であり、パスに沿う方向の二頂点の間は辺、弧、二次以上の曲線になる。
【００７２】
また、図3のステップS302、S303において線幅を取得し線幅が零か否かを判定する処理はなくても構わない。線幅が零であれば、ステップS308で生成されるストロークのステンシルデータは空になり、その結果、当該ストロークは描画されない。
【００７３】
また、図3のステップS305において色が透明か否かを判定する処理もなくても構わない。カラーバッファを変更(S309)する際、透明であれば、合成前のカラーバッファが変更されることなく、処理が終了する。
【００７４】
このように、接続点、端点を修飾したストロークを高速に描画することができる。
【００７５】
［その他の実施例］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記録媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ（又はCPUやMPU等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００７６】
201 … パス形状取得部、203 … 端点情報取得部、204 … 接続点情報取得部、206 … ストロークステンシル生成部
【図１】
2015064858.tif 000003
【図２】
2015064858.tif 000004
【図３】
2015064858.tif 000005
【図４】
2015064858.tif 000006
【図５】
2015064858.tif 000007
【図６】
2015064858.tif 000008
【図７】
2015064858.tif 000009
【図８】
2015064858.tif 000010
【図９】
2015064858.tif 000011
【図１０】
2015064858.tif 000012
【図１１】
2015064858.tif 000013
【図１２】
2015064858.tif 000014
【図１３】
2015064858.tif 000015