(57)【要約】【課題】  太線データを多角形塗りデータに変換し、さらに新たな頂点が付け加えられた多角形塗りデータに変換させることで、その後に行なわれるビットマップ展開にて量子化された結果、太線描画データの位置や傾きなどに影響せず安定した太さを実現する。【解決手段】  太線データを多角形塗りデータに変換する多角形頂点データ生成部、安定した太さを維持するために頂点を追加する追加頂点データ生成部、そしてあらたな多角形塗りデータを作成する新多角形データ生成部により構成される。【選択図】  図５
2008027350.tif 000002
【特許請求の範囲】
【請求項１】
始点と終点、および線幅で指定される太線に対し、始点と終点および線幅から多角形の頂点を計算し、その多角形の塗りつぶし処理によって太線を描画する処理において、
始点から導かれる２個の頂点の近傍に、水平座標あるいは垂直座標が同一で間隔が整数値であるような新たな２個の頂点を追加する第一の頂点追加手段と、
終点から導かれる２個の頂点の近傍に、水平座標あるいは垂直座標が同一で間隔が整数値であるような新たな２個の頂点を追加する第二の頂点追加手段と、
前記始点から導かれる２個の頂点と前記終点から導かれる２個の頂点と、前記第一の頂点追加手段により追加された２個の頂点と、前記第二の頂点追加手段により追加された２個の頂点を結び、新たな多角形を作成する多角形作成手段を有し、
前記多角形作成手段により作成された多角形を塗りつぶすことで太線描画を行うことを特徴とする太線描画処理装置。
【請求項２】
前記第一の頂点追加手段と第二の頂点追加手段により追加される新たな頂点は、始点と終点を結ぶ線の傾きが水平線より垂直線に近い場合は垂直座標を同一にし、垂直線より水平線に近ければ水平座標を同一にすることを特徴とする請求項１記載の太線描画処理装置。
【請求項３】
前記始点と終点、および線幅で指定される太線が複数の線分を持ち、それぞれの線分に対して始点と終点が存在する場合、それぞれの線分の始点、終点に対して前記第一の頂点追加手段、第二の頂点追加手段、多角形作成手段により多角形を作成し、多角形を塗りつぶすことで複数の線分を持つ太線描画を行えることを特徴とする請求項１記載の太線描画処理装置。
【請求項４】
4点の頂点より構成され、多角形の輪郭を示す辺が互いに平行な多角形の塗りつぶし処理において、前記第一の頂点追加手段と第二の頂点追加手段と前記多角形作成手段により作成された新たな多角形の塗りつぶし処理に置き換えることで、請求項１記載の太線描画と同様の効果が得られることを特徴とする多角形描画処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パーソナルコンピュータなどの情報処理システムにおいて、たとえばディスプレイやプリンタにおいて線幅のある線を描画する際に使用される太線描画処理に関するものである。
【背景技術】
【０００２】
従来、線幅のある線を描画する際の太線描画処理としては、図１(a)に示すようなブレゼンハム等のDDA(Digital Differential Analyzer)アルゴリズムに基づき、１画素分の線幅を有する直線を線幅に応じて複数本描画することにより実現していた。しかしながらこのDDAアルゴリズムは高速ではあるが、線の角度によって処理を変える必要があったり、線が曲線になるとその都度変位の計算を行ったり、折れ線の接続部に対して特別な処理を行ったりと、処理が煩雑になりやすい。
【０００３】
また、描画オブジェクトをビットマップに展開する際に、描画オブジェクトを順に重ねて展開するレンダリング方式であるペインターズアルゴリズムを使用するならば問題ないが、全描画オブジェクトのエッジを抽出し、y軸方向にソートし、スキャンライン単位で展開するレンダリング方式であるスキャンラインアルゴリズムに対しては、エッジの抽出が出来ずに適応出来なかった。
【０００４】
そのため、近年CPUの高速化等の要因を受け、図1(b)に示すように、まず入力された始点および終点と線幅から太線の頂点を計算し、その後、その頂点を塗りの頂点とみなして多角形の塗りつぶし処理を行うことで太線の描画を行うことが一般的である。
【０００５】
これにより、線の特別なレンダリング処理を用意する必要がなくなっている。
【０００６】
従来例としては、例えば特許文献１をあげることが出来る。
【特許文献１】特開平08-279038号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら多角形の塗りつぶし処理で斜線描画を行う場合、太線の太さが安定しないという課題がある。これにより図２に示すように、斜線が平行に並んだ場合等に意図しない模様が現れてきてしまう。
【０００８】
この現象を簡潔に説明する。
【０００９】
図３(a)に示すような線幅Wの斜線を描画する場合、横軸に平行な線に求められる長さは線分a-bとの角度をθとすると、線幅W / Cosinθ となる( 図３(b) )。量子化の際には各横軸方向にこの大きさの分だけのPixelが塗られることが期待されるが、Pixelは数という整数しか取れない。
【００１０】
そのため、横軸方向のPixel数としては、線幅W / Cosθの小数点以下を切り捨てた整数値と切り上げた整数値が混在させることが望ましいが、多角形の塗りつぶし処理ではその混在が均等にならず図3(c)で示すように偏りやすい。
【００１１】
そしてそのような線を平行に並べて模様を作成する場合、図２に示すような意図しない模様が現れてきてしまう。
【課題を解決するための手段】
【００１２】
本発明による太線描画処理方法および処理装置は上記課題を解決すべく発明されたものであり、始点と終点、および線幅で指定される太線に対し、始点と終点および線幅から多角形の頂点を計算し、その多角形の塗りつぶし処理によって太線を描画する処理において、
始点から導かれる２個の頂点の近傍に、水平座標あるいは垂直座標が同一で間隔が整数値であるような新たな２個の頂点を追加する第一の頂点追加手段と、
終点から導かれる２個の頂点の近傍に、水平座標あるいは垂直座標が同一で間隔が整数値であるような新たな２個の頂点を追加する第二の頂点追加手段と、
前記始点から導かれる２個の頂点と前記終点から導かれる２個の頂点と、前記第一の頂点追加手段により追加された２個の頂点と、前記第二の頂点追加手段により追加された２個の頂点を結び、新たな多角形を作成する多角形作成手段を有し、
前記多角形作成手段により作成された多角形を塗りつぶすことで太線描画を行うことを特徴とする。
【発明の効果】
【００１３】
この発明によれば、多角形の塗りつぶし処理によりなされるビットマップ展開で作成される太線の太さは始点や終点の座標に依存せず、また均一となるため、太線が平行に並んだ描画データであっても意図しない模様が生成されることなく、また安定した太さの太線描画を提供することが出来る。
【発明を実施するための最良の形態】
【００１４】
以下、添付図面に従って本発明に係わる実施例を詳細に説明する。
【００１５】
図４は本発明である太線描画処理方法および処理装置が適用される情報処理システムの構成の一例を示すブロック図である。
【００１６】
図４は入力装置１からホスト装置２に対する指示が行われ、それに応じて表示装置６での表示あるいは印刷装置８での印刷が行われるまでの概念図をあらわす。
【００１７】
入力装置１を使用して、ホスト装置２のＯＳ３上で動作するアプリケーション４で太線データが作成され、ディスプレイドライバ５により本発明による太線描画処理が行われ、その結果が表示装置６にて表示される。あるいはアプリケーション４で作成された太線データに対し、プリンタドライバ７により本発明による太線描画処理が行われ、その結果が印刷装置８にて印刷される。あるいはプリンタドライバ７により、太線データのPDLコマンドが作成され、印刷装置８により太線データのPDLコマンドに対して本発明による太線描画処理が行われ、その結果が印刷装置８により印刷される。
【００１８】
図５は、本発明の特徴を最もよくあらわす構成図であり、太線データに対し本発明である太線描画処理を行うディスプレイドライバ５あるいはプリンタドライバ７あるいは印刷装置８の中に構成される。
【００１９】
太線データが渡されると、その始点終点および線幅から多角形頂点データ生成部９により、公知技術である多角形の頂点抽出方法により多角形の頂点データが生成される。その詳細は図６の説明の際に行う。
【００２０】
そこで生成された多角形の頂点データから、追加頂点データ生成部１０により、それぞれの多角形の頂点データの近傍に追加頂点データが生成される。その詳細は図７（a）の説明の際に行う。
【００２１】
その後、多角形頂点データおよび、追加頂点データから新多角形データ生成部１１により新たな多角形が生成される。その詳細は図７(b)の説明の際に行う。
【００２２】
ここで作成された新たな多角形を多角形塗りデータとしておくと、その後レンダリングによりBitmap展開が行われる際に、太線データの位置座標により太さの変わることのない、さらに線の太さが一定の結果を得ることが出来る。
【００２３】
図６は、多角形頂点データ生成部９において太線データの始点、終点および線幅から如何に多角形の頂点データが導き出せるかを示したものであり、これは公知技術である。まず、始点終点を結ぶ線分のベクトルを求め、それと直交するベクトルを求める。図６の頂点Aと頂点Bは始点から求められ、始点から直交するベクトル方向に線幅/2 だけ進めたところを頂点A、ベクトルの逆方向に線幅/2だけ進めたところが頂点Bとなる。図６の頂点Cと頂点Dも終点から同様に求めることが出来る。
【００２４】
ここで求められた頂点A,頂点B、頂点C、頂点Dを順に結ぶことで多角形が完成する。
【００２５】
もちろん太線データが1本の線分でなく複数の線分から構成され、1本目の線分の終点が2本目の線分の始点とみなし、2本目の始点と終点から多角形の頂点をそれぞれ求める作業を全線分に対して行い、そこで抽出された頂点をすべて結んでも同様であり、多角形が作成される。
【００２６】
ここで、線分の始点終点の形状（円あるいは四角など）あるいは線分同士の接続部の形状（円やマイター）等は後から付け加えることも可能であり、容易に多角形の頂点に加えることが出来る。本実施形態では、この形状に対してまったく影響を受けないため、あえてその説明は割愛する。
【００２７】
図７は本実施例による最も特徴的な処理に対する具体例を示したものである。
【００２８】
図7(a)は追加頂点データ生成部での処理を説明している。多角形頂点データ生成部９により始点から導かれた頂点を頂点A、頂点Bとすると、追加頂点データ作成部１０により頂点Aの近傍に追加頂点aが作成され、頂点Bの近傍に追加頂点bが作成される。この時の追加頂点aと追加頂点bは垂直座標が一致しており、2つの追加頂点の間隔が整数値という二つの特徴を持つ。
【００２９】
上記2つの特徴を持つ座標の求め方は多様であり、求め方自体は重要ではないが、本実施例では以下のようにして2つの特徴を持つ追加頂点の座標を求めている。
【００３０】
１：太線の始点から終点までのベクトル dx/dyを求める
２：頂点Aからベクトル方向で最初の整数の垂直座標、およびそれに対応する水平座標を求め,これを仮の追加頂点aとする。
【００３１】
３：頂点bからベクトル方向で、仮の追加頂点aの垂直b座標と同一の座標および対応する水平座標を求め、これを仮の追加頂点ｂとする。
【００３２】
４：仮の追加頂点aと仮の追加頂点ｂの距離を計算し、整数値でない場合は四捨五入にて整数値を求め誤差を算出し、その誤差に対して均等に仮の追加頂点a、仮の追加頂点bを水平移動させ、それにより追加頂点a、追加頂点bを決める。
【００３３】
これらは、多角形頂点データ生成部９により終点から導かれた頂点C、頂点Dの近傍に作成される追加頂点C、追加頂点Dに対しても同様の処理となる。
【００３４】
図７(b)は新多角形データ生成部１２での処理を説明している。多角形頂点データ生成部９と追加頂点データ生成部１０により生成された頂点ABCD、追加頂点abcdを結ぶ順番を決める処理であり、決め方は、各頂点と近傍に位置する各追加頂点を結ぶ線が交差しないようにしたものである。
【００３５】
１つの線分では交差しないような点順で多角形の座標データを決めていくが、複数の線分により太線が構成されている場合は、必ずしも交差しないわけではない。この場合は前の線分の終点から導かされた頂点と次の線分の始点から導かれた頂点を結ぶという、公知の複数線分をもつときの処理と同様である。
【００３６】
図７（ｃ）は、新多角形データ生成部１１により生成された多角形塗りつぶしデータを塗りつぶしたときに、具体的にどのようなPixelに落ちるかをしめす。図７(c)で表現されているように、追加頂点a,b,c,dで挟まれたエリアは水平スキャン方向に同数のpixelが置かれ、この数は追加頂点データ生成部１０で求めた整数値と同じ値となる。また、太線の位置の影響を受けて太さが変わることもない。
【００３７】
また、2つの頂点とその近傍に作成された２つの追加頂点で囲まれた領域にて発生するpixel数は不定であるが、ここの領域は太線の幅を示す訳ではなくPixel数も少ないため太線描画の品質に影響を与えるものではない。
【００３８】
また、頂点の近傍に作成される追加頂点と元の頂点との距離が近ければ近いほど、不定なpixelを減らすことが出来る。
【００３９】
図６、図７においては追加頂点の垂直座標を一致させる場合の実施例を記載してきたが、太線の始点と終点を結ぶベクトルの角度に応じて、場合によっては追加頂点の水平座標を一致させる場合も存在する。
【００４０】
図８は、その例を表したものであり、45度の角度を境にベクトルの向きが水平方向に寝ていれば、水平座標を一致させる、つまり図６、図７にて実施例の説明したことを90度置き換えて処理を行えばよい。
【００４１】
45度の角度を境にベクトルの向きが垂直方向に立っていれば、実施例の説明どおりに処理を行えばよい。
【００４２】
この処理は、太線が水平線、垂直線の場合でも同様に成立し、太線の線幅が位置座標に影響されて変わることの無いように処理を行うことが出来る。
【００４３】
太線描画処理方法は図９に示される太線描画処理のフローチャートに基づいてプログラム化されたものである。以下、図９のフローチャートを参照しながら本発明に係る太線描画処理方法について説明する。
【００４４】
一つの線分が始点終点で表され、複数の線分が存在し、さらに線幅が指定されるような太線データに対し、９−１にて線分を取り出し、その線分に対し始点、終点座標を抽出する。次に９−２において、多角形頂点データ生成部９により多角形の頂点を計算し、９−３にて線分の始点、終点座標から変異（ベクトルの向き）を計算する。
【００４５】
この傾きが45度を境にして水平線より垂直線に近い場合は（９−４）、図７(a)で説明したとおり、９−５にて頂点からベクトル方向で最初の整数となる垂直座標、対応する水平座標で仮の追加頂点を求め、９−６にて同一垂直座標上にもう一方の頂点からの仮の追加頂点を求め、９−７にて2点の仮の追加頂点の間隔が整数になるように水平座標を更新する。この９−５、９−６、９−７のステップは追加頂点データ生成部１０で行なわれ、線分の始点から導かれる頂点、終点から導かれる頂点に対し行なわれる。
【００４６】
９−４にてベクトルの傾きが４５度を境にして垂直線より水平に近い場合は、図８で説明したとおり、ステップ９−５、９−６、９−７の水平座標と垂直座標を置き換えた処理を９−８、９−９、９−１０にて行う。
【００４７】
任意の線分に対して、９−７あるいは９−１０で追加頂点が求められると、９−１１において、太線データ内の全ての線分に対して処理を行ったかを判断し、まだ処理を行っていない線分が存在している場合は９−１へ戻り、処理を繰り返す。
【００４８】
このとき、線分毎に９−５、９−６、９−７にて処理が行われるか９−８、９−９、９−１０にて処理が行われるかが切り替わる。
【００４９】
９−１１において太線データ内の全ての線分に対して処理が行われると、太線と幅から求められる頂点座標、および頂点座標から求められる追加頂点座標が存在し、９−１２において、元の頂点と追加頂点から新たな多角形図形が作成され、本太線描画処理は完了する。
【００５０】
〔他の実施例〕
本実施例では、太線データに対して本太線描画処理を適応しているが、多角形塗りつぶしデータに対しても適応することが出来る。その場合、図５における多角形頂点データ生成部９は必要なく、その代わり、多角形の頂点から求められる輪郭線が平行かどうかを判断する判断部が必要となり、平行と判断された場合は追加頂点データ生成部１０、新多角形データ生成部１１を経由して新たな多角形塗りつぶしデータを作成することになる。この場合の効果は本実施例と同じであり、位置座標に影響されない、安定した幅の塗りつぶし結果を提供することが出来る。
【図面の簡単な説明】
【００５１】
【図１】公知の技術である、太線を描画する際の２つの処理方法を説明したものである。
【図２】公知の多角形塗りつぶしによる太線描画処理方法を使用した際に、その太線が平行に並ぶと意図しない模様がでるという課題の実例を示したものである。
【図３】図２において意図しない模様が出る理由を、説明したものである。
【図４】本実施例の太線描画処理方法が適用される情報処理システムの構成の一例を示すブロック図である。
【図５】本発明の実施例の太線描画全体構成を示すブロック図である。
【図６】公知の多角形塗りつぶしによる太線描画処理方法において、どのように太線データが多角形塗りつぶしデータに変換できるかを説明したものである。
【図７】本発明の実施例の太線描画全体構成を示すブロック図において、追加頂点データ生成部１０、新多角形データ生成部１１の具体的な処理内容、および本発明である太線描画処理方法を使用することでBitmap化された時にどのようなPixelに太線データが展開されるかを説明したものである。
【図８】太線のベクトル方向に応じて図６、図７の説明の水平、垂直が入れ替わる場合があり、入れ替える場合の考え方を示したものである。
【図９】本発明に係る画像処理装置の画像処理方法の一実施例をあらわすフローチャートである。
【符号の説明】
【００５２】
１  入力装置
２  ホスト装置
３  ＯＳ
４  アプリケーション
５  ディスプレイドライバ
６  表示装置
７  プリンタドライバ
８  印刷装置
９  多角形頂点データ生成部
１０  追加頂点データ生成部
１１  新多角形データ生成部
【図１】
2008027350.tif 000003
【図２】
2008027350.tif 000004
【図３】
2008027350.tif 000005
【図４】
2008027350.tif 000006
【図５】
2008027350.tif 000007
【図６】
2008027350.tif 000008
【図７】
2008027350.tif 000009
【図８】
2008027350.tif 000010
【図９】
2008027350.tif 000011