図形描画装置、アンチエイリアス処理方法およびプログラム

【課題】用いるメモリ容量を抑制しつつアンチエイリアスの品質を向上する。
【解決手段】分割輪郭設定部6は、輪郭線の始点および終点の座標から、画素分割部5で生成した分割画素配列について、輪郭データを設定する。補正部7は、分割画素配列について走査線の方向に並んだ分割画素行ごとに走査線の方向に、所定の画素数移動する。縮約部8は、分割画素行ごとに移動前の分割画素配列の範囲にある分割画素について、輪郭データの和を計算し、走査線方向に1分割画素の幅の縮約画素の列に格納する。隣接画素加算部9は、移動前の分割画素配列の範囲からはみ出した分割画素の値を、はみ出した方向に隣接する画素の縮約画素の列に加算する。マスク生成部11は、縮約画素の配列に従って、塗りつぶしを示すマスクデータを生成する。占有率計算部12は、重み付け係数行列を移動しながら、マスクデータと縮約画素ごとの積和をとって、塗りつぶし占有率を計算する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、図形データに基づいて画像を表示装置に描画する図形描画装置、アンチエイリアス処理方法およびプログラムに関する。
【背景技術】
【0002】
図形データに基づいて画像を描画する場合、輪郭線で囲まれた範囲の画素を塗りつぶす場合に、図形の輪郭のアンチエイリアス処理を行う。画素は表示を行なう際の最小単位であるので、文字や図形の輪郭部において画素の一部に文字や図形が重なったとしても、その画素全体を1つの色で表示しなければならない。しかし、輪郭部の画素を図形の内部の画素と同一色や同一輝度にすると、ジャギによるギザギザが目立ってしまう。そこで、図形の輪郭線が通過する画素について、その画素に重なる図形の面積比率を算出し、輪郭部分のドットの表示色を、その面積比率に応じた色で階調表示する(特許文献1参照)。これがアンチエイリアス処理である。
【0003】
この輪郭部の画素の図形が重なる比率を算出するために、1画素を例えば4×4のサブピクセルに分割して、サブピクセル毎の塗りつぶし領域の算出を行うことが行われている(特許文献2参照)。特許文献2の技術では、濃度決定処理(アンチエイリアシング処理)において、その走査線の最初の画素から順番に、所定のアンチエイリアシング手法のフィルター(例えば均一平均化法のフィルター)をかけ、各画素の面積率を計算して階調値(即ち、濃度)を算出する。
【0004】
特許文献3には、サブピクセル分割及び塗り潰し個数のカウントを行うことなく、面積率を求める技術が記載されている。特許文献3の技術は、図形のアウトラインを形成するベクトルデータとベクトルデータとの連続性を示す連続情報を生成し、ベクトル情報に付加する連続情報付加手段と、ベクトルデータの連続情報に基づいて、スキャンラインを挟む上下の走査線とベクトルデータとの交点情報から疑似ベクトルを生成する疑似ベクトル生成手段と、疑似ベクトルがエッジ部画素を通過する際に形成する2つの交点の何れかのX座標値或いはY座標値の小数部を用いて、エッジ部画素の近似面積率を演算する近似面積率演算手段とを備えている。
【0005】
また、特許文献4には、背景の画像データが展開されたフレームバッファ上に図形を描画するとき、図形の輪郭に接する背景の部分の第1のピクセルの色と、この第1のピクセルに接する図形の輪郭部分の第2のピクセルの色との中間色を計算して中間色保持領域に保持する。そして、図形の輪郭に沿って連続する、第1のピクセルを含む背景の部分のN個のピクセルの色を、中間色保持領域に保持された中間色でそれぞれ置き換える。Nは任意に決められた2以上の整数である。
【0006】
【特許文献1】特開平03−211591号公報
【特許文献2】特開平04−139589号公報
【特許文献3】特開平05−143742号公報
【特許文献4】特開2004−227338号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
例えば、図12(a)のような輪郭データを持った図形を描画する場合、走査線の方向(X方向)およびそれに垂直な方向(Y方向)にそれぞれ2分割し(図12(b))、アウトラインを検出する(図12(c))。アウトライン検出後、各走査線の行(Y)に対して左から右へアウトラインデータを走査しマスクデータを作成する(図12(d))。その後、2×2のサブピクセルから占有率を計算する。図12の例では、占有率は3/4である。
【0008】
上述のような描画のアンチエイリアスにおいて、占有率を輪郭と画素との関係に合わせてより細かく設定するために、関連する技術では、図12(b)で2×2に分割倍している処理を、図13のように例えば4×4に分割して、サブピクセル数を多くすることでアンチエイリアスの階調を細かくして品質を上げていた。このため、アウトラインデータの容量は拡大率の平方倍(図13の例では図12の4倍)となり、アウトラインの走査にも拡大率の平方倍の処理時間がかかる。
【0009】
このようにサブピクセル数を分割数の平方倍の数にするアンチエイリアス処理には、次のような問題がある。アンチエイリアスの品質を上げるためには、図形を分割数に拡大したサイズのアウトラインバッファ領域を確保しなければならない。また、アウトラインバッファへの書き込み、読み込み量が増えるためメモリのアクセス回数が増え性能低下の原因となる。
【0010】
特許文献3のように、サブピクセルに分割しない方法では、1つの輪郭線のデータだけでは、塗りつぶしを判断できないので、交点の座標をマスクデータの生成まで保持する必要がある。そして、マスクデータを生成するときに、面積比率を決定する必要があり、マスクデータ生成処理が複雑になる。また、特許文献4の技術では、面積比率に合わせた階調ではない。
【0011】
本発明は上述の事情に鑑みてなされたもので、図形の描画にアンチエイリアス処理を行う場合、用いるメモリ容量を抑制しつつアンチエイリアスの品質を向上することを目的とする。
【課題を解決するための手段】
【0012】
本発明の第1の観点に係る図形描画装置は、
図形の輪郭線が通る画素について、前記輪郭線のその画素を通る部分の始点と終点の座標を取得する輪郭始終点取得手段と、
前記輪郭線が通る画素を水平および垂直方向に所定の数で分割した分割画素配列を生成する分割手段と、
前記輪郭線の部分の始点および終点の座標から、前記分割画素配列において、描画領域の走査線に沿って塗りつぶしを開始する分割画素または塗りつぶしを終了する分割画素を表す輪郭データを設定する分割輪郭設定手段と、
前記分割輪郭設定手段で前記輪郭データを設定した分割画素配列を、前記走査線の方向に並んだ分割画素行ごとに前記走査線の方向に、前記分割画素行ごとに決められた所定の分割画素数移動する補正手段と、
前記補正手段で移動した分割画素の集合の、移動前の前記分割画素配列の範囲にある分割画素について、前記分割画素行ごとに前記輪郭データの和を計算して、前記走査線の方向に1画素の幅で前記走査線に垂直な方向に分割した数の、前記輪郭データの和を格納する縮約画素の列を生成する縮約手段と、
前記補正手段で前記走査線の方向に移動した結果、移動前の分割画素配列の範囲からはみ出した分割画素の値を、前記分割画素行がはみ出した方向に隣接する画素について前記縮約手段で生成した縮約画素の列に、加算する拡散手段と、
前記縮約手段および前記拡散手段で生成した前記縮約画素の列を、分割前の画素の配列に従って並べた縮約画素の配列から、塗りつぶす縮約画素を示すマスク画素配列を生成するマスク生成手段と、
前記マスク画素配列の縮約画素の列ごとに、その縮約画素の列と隣接する縮約画素の列に、縮約画素ごとの所定の重み付け係数を乗じた積の和から、その縮約画素の列に対応する前記輪郭線が通る画素の塗りつぶし占有率を計算する占有率計算手段と、
を備えることを特徴とする。
【0013】
本発明の第2の観点に係るアンチエイリアス処理方法は、
図形の輪郭線が通る画素について、前記輪郭線のその画素を通る部分の始点と終点の座標を取得する輪郭始終点取得ステップと、
前記輪郭線が通る画素を水平および垂直方向に所定の数で分割した分割画素配列を生成する分割ステップと、
前記輪郭線の部分の始点および終点の座標から、前記分割画素配列について、描画領域の走査線に沿って塗りつぶしを開始する分割画素または塗りつぶしを終了する分割画素を表す輪郭データを設定する分割輪郭設定ステップと、
前記分割輪郭設定ステップで前記輪郭データを設定した分割画素配列を、前記走査線の方向に並んだ分割画素行ごとに前記走査線の方向に、前記分割画素行ごとに決められた所定の分割画素数移動する補正ステップと、
前記補正ステップで移動した分割画素の集合の、移動前の前記分割画素配列の範囲にある分割画素について、前記分割画素行ごとに前記輪郭データの和を計算して、前記走査線の方向に1画素の幅で前記走査線に垂直な方向に分割した数の、前記輪郭データの和を格納する縮約画素の列を生成する縮約ステップと、
前記補正ステップで前記走査線の方向に移動した結果、移動前の分割画素配列の範囲からはみ出した分割画素の値を、前記分割画素行がはみ出した方向に隣接する画素について前記縮約ステップで生成した縮約画素の列に、加算する拡散ステップと、
前記縮約ステップおよび前記拡散ステップで生成した前記縮約画素の列を、分割前の画素の配列に従って並べた縮約画素の配列から、塗りつぶす縮約画素を示すマスク画素配列を生成するマスク生成ステップと、
前記マスク画素配列の縮約画素の列ごとに、その縮約画素の列と隣接する縮約画素の列に、縮約画素ごとの所定の重み付け係数を乗じた積の和から、その縮約画素の列に対応する前記輪郭線が通る画素の塗りつぶし占有率を計算する占有率計算ステップと、
を備えることを特徴とする。
【0014】
本発明の第3の観点に係るプログラムは、コンピュータに、
図形の輪郭線が通る画素について、前記輪郭線のその画素を通る部分の始点と終点の座標を取得する輪郭始終点取得ステップと、
前記輪郭線が通る画素を水平および垂直方向に所定の数で分割した分割画素配列を生成する分割ステップと、
前記輪郭線の部分の始点および終点の座標から、前記分割画素配列について、描画領域の走査線に沿って塗りつぶしを開始する分割画素または塗りつぶしを終了する分割画素を表す輪郭データを設定する分割輪郭設定ステップと、
前記分割輪郭設定ステップで前記輪郭データを設定した分割画素配列を、前記走査線の方向に並んだ分割画素行ごとに前記走査線の方向に、前記分割画素行ごとに決められた所定の分割画素数移動する補正ステップと、
前記補正ステップで移動した分割画素の集合の、移動前の前記分割画素配列の範囲にある分割画素について、前記分割画素行ごとに前記輪郭データの和を計算して、前記走査線の方向に1画素の幅で前記走査線に垂直な方向に分割した数の、前記輪郭データの和を格納する縮約画素の列を生成する縮約ステップと、
前記補正ステップで前記走査線の方向に移動した結果、移動前の分割画素配列の範囲からはみ出した分割画素の値を、前記分割画素行がはみ出した方向に隣接する画素について前記縮約ステップで生成した縮約画素の列に、加算する拡散ステップと、
前記縮約ステップおよび前記拡散ステップで生成した前記縮約画素の列を、分割前の画素の配列に従って並べた縮約画素の配列から、塗りつぶす縮約画素を示すマスク画素配列を生成するマスク生成ステップと、
前記マスク画素配列の縮約画素の列ごとに、その縮約画素の列と隣接する縮約画素の列に、縮約画素ごとの所定の重み付け係数を乗じた積の和から、その縮約画素の列に対応する前記輪郭線が通る画素の塗りつぶし占有率を計算する占有率計算ステップと、
を実行させることを特徴とする。
【発明の効果】
【0015】
本発明によれば、図形の描画にアンチエイリアス処理を行う場合、用いるメモリ容量を抑制しつつアンチエイリアスの品質を向上することができる。
【発明を実施するための最良の形態】
【0016】
図1は、本発明の実施の形態に係るアンチエイリアス回路の構成例を示すブロック図である。アンチエイリアス回路1は、輪郭生成回路104、アウトラインバッファ106および表示回路120に接続する。アンチエイリアス回路1は、輪郭生成回路104から輪郭線の情報を入力して、輪郭部の画素の塗りつぶし占有率を計算し、占有率データ16を表示回路120に出力する。アンチエイリアス回路1は、占有率を計算する途中の輪郭データを、アウトラインバッファ106に格納する。
【0017】
図2は、アンチエイリアスを含む描画装置の構成例を示すブロック図である。描画装置100は、制御点入力部101、ベジェ曲線分割部102、座標変換103、輪郭生成回路104、アンチエイリアス回路1、アウトラインバッファ106、マスク生成107、塗りつぶし108、合成部109、ディザー110、イメージバッファ111、フィルタ112および色変換113から構成される。アンチエイリアス回路1は描画装置100のうち、輪郭線の情報から輪郭部の画素の塗りつぶし占有率を演算する部分である。図1の表示回路120は、図2のマスク生成107以降に相当する。
【0018】
描画装置100の処理の概要を説明する。制御点入力部101でベジェ曲線の制御点の座標を入力して、ベジェ曲線分割部102が、ベジェ曲線を折れ線近似する分割点の座標を出力すると、座標変換103は分割点の座標を、表示する画面全体の中の座標に変換する。輪郭生成回路104は、分割点の座標から各線分が通る画素を示す輪郭データをアウトラインバッファ106に設定する。アンチエイリアス回路1は、輪郭線を構成する各線分の情報から、アンチエイリアス処理を行う。マスク生成107は、輪郭データからマスクデータを生成する。そして、マスクデータに従って、塗りつぶし処理を行う。
【0019】
一方、ビットマップなどの画素ごとの色および輝度のデータで表された画像データと重ね合わせる場合に、その画像データはイメージバッファ111に設定される。画像データはフィルタ112でエッジ強調、特異点除去などの処理が施されて、表示装置に合わせて色変換したのち、輪郭データから生成された画像と合成される。最後に、画面で見やすいようにディザー効果をかけて、描画データを生成する。
【0020】
図1に戻って、アンチエイリアス回路1は、輪郭補正回路2と重み付け処理回路3から構成される。輪郭補正回路2は、輪郭線座標入力部4、画素分割部5、分割輪郭設定部6、補正部7、縮約部8および隣接画素加算部9を備える。重み付け処理回路3は、マスク生成部11と占有率計算部12を備える。輪郭補正回路2は、分割画素に輪郭データを設定し、輪郭データを補正した上で分割画素を縮約し、分割画素のデータを圧縮してアウトラインバッファ106に格納する。重み付け処理回路3は、アウトラインバッファ106から1つの走査線の縮約された分割画素の輪郭データを読み込んで、画素ごとの占有率を計算する。重み付け処理回路3は、画素ごとの占有率データ16を表示回路120に出力する。
【0021】
輪郭補正回路2の輪郭線座標入力部4は、輪郭生成回路104から輪郭線を構成する部分ごとの始点と終点の座標(始終点座標13)を入力する。画素分割部5は、少なくとも輪郭線が通る画素について、所定の分割数に分割した分割画素配列を生成する。分割輪郭設定部6は、分割画素配列に対して、輪郭線が通る位置の分割画素に輪郭データ、すなわち走査線に沿って塗りつぶしを開始または終了することを示すデータを設定する。
【0022】
補正部7は、輪郭デーが設定された分割画素配列について、走査線の方向に並んだ分割画素行ごとに走査線の方向に、分割画素行ごとに決められた所定の画素数移動する。これによって、分割画素行のうち、元の分割画素配列の範囲に残る分割画素と、分割画素配列の範囲からはみ出る分割画素に分けられる。元の分割画素配列の範囲に残る部分とはみ出る部分は、分割画素行ごとに異なる。
【0023】
縮約部8は、補正部7で移動された分割画素行ごとに、元の分割画素配列の範囲内に残る分割画素についてその輪郭データを加算する。そして、分割画素行ごとに加算された値を走査線の方向に垂直な方向に並べた列を生成する。この分割画素行ごとに加算された値を保持する記憶領域を縮約画素といい、縮約画素を分割画素配列に合わせて走査線に垂直な方向に並べた列を縮約画素の列という。
【0024】
隣接画素加算部9は、補正部7で分割画素行ごとに移動した結果、元の分割画素配列の範囲からはみ出た分割画素の輪郭データを、はみ出た方向に隣接する画素の縮約画素の列のデータに加算する。走査線に沿って、1つ前の画素の縮約画素の列を読み出して、その方向にはみ出た分散画素行の部分の輪郭データを加算して、もとのアウトラインバッファ106の記憶領域(1つ前の画素の縮約画素の列)に書き込む。また、走査線に沿って1つ後の画素の縮約画素の列の記憶領域に、その方向にはみ出た分散画素行の部分の輪郭データを書き込む。補正部7で分割画素行ごとに移動することによって、移動前の分割画素配列の範囲からはみ出した分割画素は、隣接画素に拡散されたことになる。
【0025】
隣接画素加算部9は、また、縮約部8で生成された縮約画素の列(アウトラインデータ14)をアウトラインバッファ106に格納する。そのとき、1つ前の画素で後の画素の方向にはみ出た分散画素行の部分の輪郭データが書き込まれているので、それに今回の縮約画素の列のデータを加算する。
【0026】
図3は、本実施の形態に係るアンチエイリアス処理を説明する図である。図3の(a)は輪郭線が通る画素の例である。輪郭線座標入力部4は、この画素を通る輪郭線の始点と終点の座標を入力する。図3(b)は、画素を分割した状態を表す。図3の例では、水平(走査線の方向)および垂直にそれぞれ4分割している。分割した1つの四角が分割画素1つを表す。画素分割部5は、分割画素の配列を生成する。
【0027】
図3(c)は、分割画素に輪郭データを設定した状態を示す。図3では、見やすくするために、分割画素の値が0の場合を空白にしている。図3の例では、輪郭線は画素の左上角から右下角に向かう対角線に通っているので、その輪郭線が通る対角線上の分割画素に輪郭データが設定される。図3の例では、輪郭データは+1であり、この分割画素で塗りつぶしが開始(または終了)することを表す。
【0028】
図4は、分割画素配列に設定された輪郭データの例を示す。画素に通る輪郭線の位置によって輪郭データが設定される分割画素の位置が変化する。図4(a)は、輪郭線が画素の左上角から右辺中央に向かって通る場合である。図4(b)は、輪郭線が画素の左上角から下辺中央に向かって通る場合である。図4(c)は、2本の輪郭線が通っている例を示す。
【0029】
図3(d)は、図1の補正部7が分割画素行ごとに移動した結果の例を示す。移動する前の分割画素配列の範囲を二点鎖線で示す。図3の例では、分割画素行ごとに上から順に、走査線の負の方向に1分割画素分、走査線の正の方向に1分割画素分、走査線の負の方向に1分割画素分、走査線の正の方向に1分割画素分、交互に移動している。移動前の分割画素配列の範囲からはみ出した分割画素は、隣接画素に拡散されたことになる。
【0030】
図3(e)は、分割画素行ごとに縮約した状態の例を示す。縮約部8は、移動された分割画素行ごとに、元の分割画素配列の範囲内に残る分割画素についてその輪郭データを加算する。すなわち、図3(d)の二点鎖線の範囲の輪郭データを、分割画素行ごとに水平(走査線)方向に加算する。図3(e)の二点鎖線の範囲が縮約画素の列を示す。図3の例では、分割画素行の第1行と第4行の輪郭データは、元の分割画素配列の範囲からはみ出ているので、縮約画素の列の第1行と第4行の値は0である。
【0031】
図5は、実施の形態に係る縮約画素の配列を説明する図である。図5はアウトラインバッファ106の配列を示す。一点鎖線で囲んだ部分が、今回処理した画素の縮約画素の列である。その左隣の列が1つ前の画素の縮約画素の列であり、右隣の列が1つ後の画素の縮約画素の列である。隣接画素加算部9は、左隣の縮約画素の列を読み出して、その方向にはみ出た分散画素行の部分の輪郭データを加算して、もとの記憶領域に書き込む。また、右隣の縮約画素の列の記憶領域に、その方向にはみ出た分散画素行の部分の輪郭データを書き込む。
【0032】
図5の例では、左隣の縮約画素の列のデータが0だったので、図3(e)の左列の値がそのまま書き込まれている。また、今回処理した画素の縮約画素の列の右隣に、図3(e)の右列の値が書き込まれる。分割画素行ごとに移動することによって、移動前の分割画素配列の範囲からはみ出した分割画素は、隣接画素に拡散されている。
【0033】
隣接画素加算部9は、縮約部8で生成された縮約画素の列をアウトラインバッファ106の該当記憶領域に加算して格納する。図5の例では、1つ前の画素から走査線の正の方向にはみ出た部分に輪郭データがなかった(0だった)ので、図3(e)の中央の列の値がそのまま書き込まれている。
【0034】
以上のようにして、走査線の1ライン分の縮約画素の列が生成されると、重み付け処理回路3に対して描画開始命令を発行する。1ライン分の縮約画素の列は、元の画素の行を走査線に垂直な方向にn倍したデータ構造である。縮約画素の列の値は、描画領域の走査線に沿って塗りつぶしの開始画素を正の値、塗りつぶしを終了する画素を負の値で表したものである。
【0035】
図1に示す重み付け処理回路3のマスク生成部11は、アウトラインバッファ106から1ライン分の縮約画素の列(アウトラインデータ15)を読み込み、走査線に垂直な方向にn倍されたアウトラインデータ15から、縮約画素単位のマスクデータを作成する。
【0036】
占有率計算部12はマスクデータから、描画する画素の縮約画素の列とその前後の縮約画素の列の各縮約画素に重み付け係数を乗じて加算して、描画する画素の占有率を求める。そして、画素ごとに計算した占有率データ16を表示回路120に出力する。
【0037】
図6は、縮約画素の配列におけるマスクデータの例を説明する図である。図6は、図5の縮約画素の配列に対応している。図5の一点鎖線で囲まれた縮約画素に、図6の一点鎖線に囲まれたマスクデータが対応する。図6は、図5の輪郭データが+1の縮約画素から塗りつぶしが開始される場合を示す。ハッチングを付けた塗りつぶす縮約画素のマスクデータを1、塗りつぶさない縮約画素のマスクデータを0とする。
【0038】
図7は、本実施の形態に係る重み付け係数の例を示す。図7の二点鎖線で囲んだ中央の列の値が、着目する画素の縮約画素の列に乗じる係数である。左の列の値は、着目する画素の1つ前の画素の縮約画素の列に乗じる係数であり、右の列の値は、1つ後の画素の縮約画素の列に乗じる係数である。
【0039】
占有率計算部12は、図7に示すような重み付け係数の行列を、着目する画素の縮約画素の列がその中央(二点鎖線で示す)に位置するように移動させながら、各係数を対応する縮約画素の列のマスクデータに乗じて、その合計を計算する。そして、合計値を係数の総和で除した値を、その画素の占有率とする。図7の例では、係数の総和は7である。
【0040】
図8は、占有率の例を示す。図8は、図6のマスクデータに対応して、図7の重み付け行列で計算した値である。一点鎖線で囲んだデータは、図5および図6の一点鎖線で囲んだ縮約画素の列の画素の占有率を示す。
【0041】
図6の一点鎖線で囲んだ縮約画素の列に対する画素では、図7の重み付け係数を乗じて占有率は次のように計算される。
((1.0+0.5)+(1.5)+(1.5+0.5))
/((1.0+0.5)+(0.5+1.5)+(1.5+0.5)+(0.5+1.0))=5/7
【0042】
一点鎖線で囲んだ画素の1つ前(左隣)の画素では、マスクデータが1の縮約画素が4つであり、占有率は2/7となる。2つ前の画素では、マスクデータが1の縮約画素は重み付け係数行列の右上の1つだけであり、占有率は0.5/7である。それより前の画素では、マスクデータがすべて0なので、占有率は0である。
【0043】
一点鎖線で囲んだ画素の1つ後(右隣)の画素では、マスクデータが0の縮約画素は左下の1つだけであり、占有率は6.5/7となる。また、2つ後の画素では、占有率は7/7=1である。
【0044】
図7の重み付け係数は、分割画素行を移動する方向の縮約画素に対する係数は0であり、反対側の係数は0.5である。マスクデータは走査線に沿って輪郭データで開始または終了するように生成されるので、重み付け係数の各行は上から順に、隣接画素に拡散した輪郭データを取り込む分と排除する分が交互に現れる。図7の重み付け係数は、図3(d)の輪郭データの隣接画素への拡散と合わせて、適度に占有率を設定するように作用する。
【0045】
図3および図5の例では、縮約画素の列は元の画素を走査線に垂直な方向に4倍しているので、アウトラインバッファ106のデータは元の画素の4倍である。これは、図12の場合のアウトラインバッファのデータ量と同じである。図12の例では、占有率の階調が4であるのに対して、図3および図5の例では、階調が7に拡大している。本実施の形態によれば、アウトラインデータを増やさずに画素の諧調を増やしアンチエイリアスの品質を向上できる。
【0046】
図9は、本実施の形態に係る輪郭補正処理の動作の一例を示すフローチャートである。輪郭補正処理は、輪郭生成回路104で輪郭線のデータが生成されるごとに起動される。輪郭線座標入力部4は、輪郭生成回路104から輪郭線を構成する部分ごとの始点と終点の座標(始終点座標13)を入力する(ステップS1)。画素分割部5は、輪郭線が通る画素を所定の数で分割した分割画素配列を生成する(ステップS2)。分割輪郭設定部6は、分割画素配列に対して、輪郭線が通る位置の分割画素に輪郭データを設定する(ステップS3)。
【0047】
補正部7は、輪郭デーが設定された分割画素配列について、走査線の方向に並んだ分割画素行ごとに走査線の方向に、分割画素行ごとに決められた所定の画素数移動する補正処理を行う(ステップS4)。縮約部8は、補正部7で移動された分割画素行ごとに、元の分割画素配列の範囲内に残る分割画素についてその輪郭データを加算して、分割画素行ごとに加算された値を走査線の方向に垂直な方向に並べた列を生成する(ステップS5)。
【0048】
隣接画素加算部9は、補正部7で分割画素行ごとに移動した結果、元の分割画素配列の範囲からはみ出た分割画素の輪郭データを、はみ出た方向に隣接する画素の縮約画素の列のデータに加算する(ステップS6)。また、隣接画素加算部9は、縮約部8で生成された縮約画素の列をアウトラインバッファ106の該当記憶領域に加算して格納する。
【0049】
描画する画像の輪郭線ごとに輪郭補正処理が行われ、その輪郭線が通る画素について、縮約画素の列のデータが生成されて、アウトラインバッファ106に加算されていく。1つの走査線上のすべての輪郭線について輪郭補正処理が行われると、その走査線のアウトラインデータの重み付け処理を行う。
【0050】
図10は、本実施の形態に係る重み付け処理の動作の一例を示すフローチャートである。重み付け処理回路3のマスク生成部11は、アウトラインバッファ106から1ライン分の縮約画素の配列(アウトラインデータ15)を入力する(ステップS11)。マスク生成部11は、入力した走査線に垂直な方向にn倍されたアウトラインデータ15から、縮約画素単位のマスクデータを作成する(ステップS12)。
【0051】
占有率計算部12はマスクデータから、描画する画素の縮約画素の列とその前後の縮約画素の列の各縮約画素に重み付け係数を乗じて加算して、描画する画素の占有率を求める(ステップS13))。そして、画素ごとに計算した占有率データ16を表示回路120に出力する。
【0052】
表示回路120は、図2のマスク生成107以降に相当する。マスク生成107は、アンチエイリアス処理で生成された占有率を用いて、輪郭データからマスクデータを生成する。そして、マスクデータに従って、塗りつぶし処理を行う。
【0053】
なお、画素分割部5における画素の分割数、および、補正部7における分割画素行ごとに移動する分割画素数は、実施の形態で説明した数に限らず、任意に設定できる。例えば分割数を水平垂直方向それぞれn倍とすることができる。その場合、アウトラインバッファ106はnの平方倍にはならず、n倍で収まる。また、移動する分割数を2以上としてもよい。その場合でも、移動前の分割画素配列の範囲からはみ出た分割画素のデータは、それぞれはみ出た方向の隣接画素の縮約画素の列に加算する。分割数と移動する分割画素数に応じて重み付け係数を設定することにより、適切な表示のアンチエイリアス処理を行うことができる。
【0054】
図11は、描画装置をコンピュータに実装する場合の、物理的な構成の一例を示すブロック図である。本実施の形態に係る描画装置100は、一般的なコンピュータ装置と同様のハードウェア構成によって実現することができる。アンチエイリアス回路1は、図2で説明したように描画装置100の一部を構成する。描画装置100は、図11に示すように、制御部21、主記憶部22、外部記憶部23、操作部24、表示部25および入出力部26を備える。主記憶部22、外部記憶部23、操作部24、表示部25および入出力部26はいずれも内部バス20を介して制御部21に接続されている。
【0055】
制御部21はCPU(Central Processing Unit)等から構成され、外部記憶部23に記憶されているプログラム30に従って、アンチエイリアス処理を含む描画するための処理を実行する。
【0056】
主記憶部22はRAM(Random-Access Memory)等から構成され、外部記憶部23に記憶されているプログラム30をロードし、制御部21の作業領域として用いられる。上述のアウトラインバッファ106は、主記憶部22の中に構成される。
【0057】
外部記憶部23は、フラッシュメモリ、ハードディスク、DVD−RAM(Digital Versatile Disc Random-Access Memory)、DVD−RW(Digital Versatile Disc ReWritable)等の不揮発性メモリから構成され、前記の処理を制御部21に行わせるためのプログラム30を予め記憶し、また、制御部21の指示に従って、このプログラム30が記憶するデータを制御部21に供給し、制御部21から供給されたデータを記憶する。
【0058】
操作部24はキーボードおよびマウスなどのポインティングデバイス等と、キーボードおよびポインティングデバイス等を内部バス20に接続するインターフェース装置から構成されている。操作部24を介して、ベジェ曲線を含む画像データの作成、入力、送受信などの指示、表示する画像の指定、描画領域の範囲、拡大率、描画領域の表示装置における位置などが入力され、制御部21に供給される。
【0059】
表示部25は、CRT(Cathode Ray Tube)またはLCD(Liquid Crystal Display)などから構成され、描画された画像を表示する。
【0060】
入出力部26は、無線送受信機、無線モデムまたは網終端装置、およびそれらと接続するシリアルインタフェースまたはLAN(Local Area Network)インタフェース等から構成されている。入出力部26を介して、ベジェ曲線を含む画像データを受信し、また送信できる。
【0061】
本発明によるアンチエイリアス回路1を含む描画装置100は、上記のアンチエイリアス処理を実現する回路を組み込んだLSI(Large Scale Integration)等のハードウェア部品から構成される回路を実装して、電子回路として構成することができる。また、上記の各機能を行うプログラム30を、コンピュータ処理装置上の制御部21で実行することにより、描画装置100を実現することができる。その場合、制御部21のCPUは、外部記憶部23に格納されているプログラム30を、主記憶部22にロードして実行し、各部の動作を制御して上記の各機能を行わせることによって、アンチエイリアス回路1の処理を実行する。
【0062】
以上に説明したように、本実施の形態のアンチエイリアス回路1によれば、以下に記載するような効果を奏する。
第1の効果は、輪郭データ生成後の座標補正、および重み付けによる占有率の計算によりアウトラインバッファの容量を増やさずにアンチエイリアスの品質を向上することができる。
第2の効果は、アウトラインバッファの容量を増やしていないので、品質を上げる前とメモリのアクセス回数が変わらないため、描画速度の低下を起こさずにアンチエイリアスの品質を向上できる。
【0063】
その他、本発明の好適な変形として、以下の構成が含まれる。
【0064】
本発明の第1の観点に係る図形描画装置について、
好ましくは、前記分割手段は、前記輪郭線が通る画素を水平および垂直方向にそれぞれ4分割し、
前記補正手段は、前記分割画素行を1行ごとに前記走査線の方向の負の方向と正の方向に1分割画素ずつ移動する、
ことを特徴とする。
【0065】
さらに好ましくは、前記占有率計算手段は、
前記縮約画素の列の走査線の負の方向の縮約画素の列の縮約画素のそれぞれと、0、0.5、0、0.5との積和と、
前記縮約画素の列の縮約画素のそれぞれと、1.0、1.5、1.5、1.0との積和と、
前記縮約画素の列の走査線の正の方向の縮約画素の列の縮約画素のそれぞれと、0.5、0、0.5、0との積和と、
の合計を7で除した値を、その画素の塗りつぶし占有率として計算する、
ことを特徴とする。
【0066】
本発明の第2の観点に係るアンチエイリアス処理方法について、
好ましくは、前記分割ステップは、前記輪郭線が通る画素を水平および垂直方向にそれぞれ4分割し、
前記補正ステップは、前記分割画素行を1行ごとに前記走査線の方向の負の方向と正の方向に1分割画素ずつ移動する、
ことを特徴とする。
【0067】
さらに好ましくは、前記占有率計算ステップは、
前記縮約画素の列の走査線の負の方向の縮約画素の列の縮約画素のそれぞれと、0、0.5、0、0.5との積和と、
前記縮約画素の列の縮約画素のそれぞれと、1.0、1.5、1.5、1.0との積和と、
前記縮約画素の列の走査線の正の方向の縮約画素の列の縮約画素のそれぞれと、0.5、0、0.5、0との積和と、
の合計を7で除した値を、その画素の塗りつぶし占有率として計算する、
ことを特徴とする。
【0068】
その他、前記のハードウエェア構成やフローチャートは一例であり、任意に変更および修正が可能である。
【0069】
制御部21、主記憶部22、外部記憶部23、操作部24、入出力部26および内部バス20などから構成される描画装置100の処理を行う中心となる部分は、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。たとえば、前記の動作を実行するためのコンピュータプログラムを、コンピュータが読み取り可能な記録媒体(フレキシブルディスク、CD−ROM、DVD−ROM等)に格納して配布し、当該コンピュータプログラムをコンピュータにインストールすることにより、前記の処理を実行する描画装置100を構成してもよい。また、インターネット等の通信ネットワーク上のサーバ装置が有する記憶装置に当該コンピュータプログラムを格納しておき、通常のコンピュータシステムがダウンロード等することで描画装置100を構成してもよい。
【0070】
また、描画装置100の機能を、OS(オペレーティングシステム)とアプリケーションプログラムの分担、またはOSとアプリケーションプログラムとの協働により実現する場合などには、アプリケーションプログラム部分のみを記録媒体や記憶装置に格納してもよい。
【0071】
また、搬送波にコンピュータプログラムを重畳し、通信ネットワークを介して配信することも可能である。たとえば、通信ネットワーク上の掲示板(BBS, Bulletin Board System)に前記コンピュータプログラムを掲示し、ネットワークを介して前記コンピュータプログラムを配信してもよい。そして、このコンピュータプログラムを起動し、OSの制御下で、他のアプリケーションプログラムと同様に実行することにより、前記の処理を実行できるように構成してもよい。
【図面の簡単な説明】
【0072】
【図1】本発明の実施の形態に係るアンチエイリアス回路の構成例を示すブロック図である。
【図2】描画装置の構成例を示すブロック図である。
【図3】本発明の実施の形態に係るアンチエイリアス処理を説明する図である。
【図4】分割画素配列における輪郭データの例を説明する図である。
【図5】実施の形態に係る縮約画素の配列を説明する図である。
【図6】縮約画素の配列におけるマスクデータの例を説明する図である。
【図7】本実施の形態に係る重み付け係数の例を示す図である。
【図8】占有率の例を示す図である。
【図9】本実施の形態に係る輪郭補正処理の動作の一例を示すフローチャートである。
【図10】本実施の形態に係る重み付け処理の動作の一例を示すフローチャートである。
【図11】描画装置をコンピュータに実装する場合の、物理的な構成の一例を示すブロック図である。
【図12】アンチエイリアス処理を説明する図である。
【図13】アンチエイリアス処理の占有率を細かく設定する方法を説明する図である。
【符号の説明】
【0073】
1 アンチエイリアス回路
2 輪郭補正回路
3 重み付け処理回路
4 輪郭線座標入力部
5 画素分割部
6 分割輪郭設定部
7 補正部
8 縮約部
9 隣接画素加算部
11 マスク生成部
12 占有率計算部
13 輪郭線始終点座標
14 アウトラインデータ
15 アウトラインデータ
16 占有率データ
21 制御部
22 主記憶部
23 外部記憶部
24 操作部
25 表示部
26 入出力部
30 プログラム
100 描画装置
104 輪郭生成回路
106 アウトラインバッファ
120 表示回路

【特許請求の範囲】
【請求項1】
図形の輪郭線が通る画素について、前記輪郭線のその画素を通る部分の始点と終点の座標を取得する輪郭始終点取得手段と、
前記輪郭線が通る画素を水平および垂直方向に所定の数で分割した分割画素配列を生成する分割手段と、
前記輪郭線の部分の始点および終点の座標から、前記分割画素配列において、描画領域の走査線に沿って塗りつぶしを開始する分割画素または塗りつぶしを終了する分割画素を表す輪郭データを設定する分割輪郭設定手段と、
前記分割輪郭設定手段で前記輪郭データを設定した分割画素配列を、前記走査線の方向に並んだ分割画素行ごとに前記走査線の方向に、前記分割画素行ごとに決められた所定の分割画素数移動する補正手段と、
前記補正手段で移動した分割画素の集合の、移動前の前記分割画素配列の範囲にある分割画素について、前記分割画素行ごとに前記輪郭データの和を計算して、前記走査線の方向に1画素の幅で前記走査線に垂直な方向に分割した数の、前記輪郭データの和を格納する縮約画素の列を生成する縮約手段と、
前記補正手段で前記走査線の方向に移動した結果、移動前の分割画素配列の範囲からはみ出した分割画素の値を、前記分割画素行がはみ出した方向に隣接する画素について前記縮約手段で生成した縮約画素の列に、加算する拡散手段と、
前記縮約手段および前記拡散手段で生成した前記縮約画素の列を、分割前の画素の配列に従って並べた縮約画素の配列から、塗りつぶす縮約画素を示すマスク画素配列を生成するマスク生成手段と、
前記マスク画素配列の縮約画素の列ごとに、その縮約画素の列と隣接する縮約画素の列に、縮約画素ごとの所定の重み付け係数を乗じた積の和から、その縮約画素の列に対応する前記輪郭線が通る画素の塗りつぶし占有率を計算する占有率計算手段と、
を備えることを特徴とする図形描画装置。
【請求項2】
前記分割手段は、前記輪郭線が通る画素を水平および垂直方向にそれぞれ4分割し、
前記補正手段は、前記分割画素行を1行ごとに前記走査線の方向の負の方向と正の方向に1分割画素ずつ移動する、
ことを特徴とする請求項1に記載の図形描画装置。
【請求項3】
前記占有率計算手段は、
前記縮約画素の列の走査線の負の方向に隣接する縮約画素の列の縮約画素のそれぞれと、0、0.5、0、0.5との積和と、
前記縮約画素の列の縮約画素のそれぞれと、1.0、1.5、1.5、1.0との積和と、
前記縮約画素の列の走査線の正の方向の縮約画素の列の縮約画素のそれぞれと、0.5、0、0.5、0との積和と、
の合計を7で除した値を、その画素の塗りつぶし占有率として計算する、
ことを特徴とする請求項2に記載の図形描画装置。
【請求項4】
図形の輪郭線が通る画素について、前記輪郭線のその画素を通る部分の始点と終点の座標を取得する輪郭始終点取得ステップと、
前記輪郭線が通る画素を水平および垂直方向に所定の数で分割した分割画素配列を生成する分割ステップと、
前記輪郭線の部分の始点および終点の座標から、前記分割画素配列について、描画領域の走査線に沿って塗りつぶしを開始する分割画素または塗りつぶしを終了する分割画素を表す輪郭データを設定する分割輪郭設定ステップと、
前記分割輪郭設定ステップで前記輪郭データを設定した分割画素配列を、前記走査線の方向に並んだ分割画素行ごとに前記走査線の方向に、前記分割画素行ごとに決められた所定の分割画素数移動する補正ステップと、
前記補正ステップで移動した分割画素の集合の、移動前の前記分割画素配列の範囲にある分割画素について、前記分割画素行ごとに前記輪郭データの和を計算して、前記走査線の方向に1画素の幅で前記走査線に垂直な方向に分割した数の、前記輪郭データの和を格納する縮約画素の列を生成する縮約ステップと、
前記補正ステップで前記走査線の方向に移動した結果、移動前の分割画素配列の範囲からはみ出した分割画素の値を、前記分割画素行がはみ出した方向に隣接する画素について前記縮約ステップで生成した縮約画素の列に、加算する拡散ステップと、
前記縮約ステップおよび前記拡散ステップで生成した前記縮約画素の列を、分割前の画素の配列に従って並べた縮約画素の配列から、塗りつぶす縮約画素を示すマスク画素配列を生成するマスク生成ステップと、
前記マスク画素配列の縮約画素の列ごとに、その縮約画素の列と隣接する縮約画素の列に、縮約画素ごとの所定の重み付け係数を乗じた積の和から、その縮約画素の列に対応する前記輪郭線が通る画素の塗りつぶし占有率を計算する占有率計算ステップと、
を備えることを特徴とするアンチエイリアス処理方法。
【請求項5】
前記分割ステップは、前記輪郭線が通る画素を水平および垂直方向にそれぞれ4分割し、
前記補正ステップは、前記分割画素行を1行ごとに前記走査線の方向の負の方向と正の方向に1分割画素ずつ移動する、
ことを特徴とする請求項4に記載のアンチエイリアス処理方法。
【請求項6】
前記占有率計算ステップは、
前記縮約画素の列の走査線の負の方向の縮約画素の列の縮約画素のそれぞれと、0、0.5、0、0.5との積和と、
前記縮約画素の列の縮約画素のそれぞれと、1.0、1.5、1.5、1.0との積和と、
前記縮約画素の列の走査線の正の方向の縮約画素の列の縮約画素のそれぞれと、0.5、0、0.5、0との積和と、
の合計を7で除した値を、その画素の塗りつぶし占有率として計算する、
ことを特徴とする請求項5に記載のアンチエイリアス処理方法。
【請求項7】
コンピュータに、
図形の輪郭線が通る画素について、前記輪郭線のその画素を通る部分の始点と終点の座標を取得する輪郭始終点取得ステップと、
前記輪郭線が通る画素を水平および垂直方向に所定の数で分割した分割画素配列を生成する分割ステップと、
前記輪郭線の部分の始点および終点の座標から、前記分割画素配列について、描画領域の走査線に沿って塗りつぶしを開始する分割画素または塗りつぶしを終了する分割画素を表す輪郭データを設定する分割輪郭設定ステップと、
前記分割輪郭設定ステップで前記輪郭データを設定した分割画素配列を、前記走査線の方向に並んだ分割画素行ごとに前記走査線の方向に、前記分割画素行ごとに決められた所定の分割画素数移動する補正ステップと、
前記補正ステップで移動した分割画素の集合の、移動前の前記分割画素配列の範囲にある分割画素について、前記分割画素行ごとに前記輪郭データの和を計算して、前記走査線の方向に1画素の幅で前記走査線に垂直な方向に分割した数の、前記輪郭データの和を格納する縮約画素の列を生成する縮約ステップと、
前記補正ステップで前記走査線の方向に移動した結果、移動前の分割画素配列の範囲からはみ出した分割画素の値を、前記分割画素行がはみ出した方向に隣接する画素について前記縮約ステップで生成した縮約画素の列に、加算する拡散ステップと、
前記縮約ステップおよび前記拡散ステップで生成した前記縮約画素の列を、分割前の画素の配列に従って並べた縮約画素の配列から、塗りつぶす縮約画素を示すマスク画素配列を生成するマスク生成ステップと、
前記マスク画素配列の縮約画素の列ごとに、その縮約画素の列と隣接する縮約画素の列に、縮約画素ごとの所定の重み付け係数を乗じた積の和から、その縮約画素の列に対応する前記輪郭線が通る画素の塗りつぶし占有率を計算する占有率計算ステップと、
を実行させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2010−113625(P2010−113625A)
【公開日】平成22年5月20日(2010.5.20)
【国際特許分類】
【出願番号】特願2008−287184(P2008−287184)
【出願日】平成20年11月7日(2008.11.7)
【出願人】(390001395)NECシステムテクノロジー株式会社 (438)
【Fターム(参考)】