(57)【特許請求の範囲】
【請求項１】
画像を構成する描画命令を受け取って画像の描画を行う画像処理装置において、入力された前記描画命令に図形の連続があるか否かを検出する連続図形検出手段と、描画命令に従って図形のドロップアウトを補完せずに描画するドロップアウト補正無し描画手段と、描画命令に従って図形のドロップアウトを補完して描画するドロップアウト補正付き描画手段と、前記連続図形検出手段の検出結果に応じて前記ドロップアウト補正付き描画手段あるいは前記ドロップアウト補正無し描画手段を選択する選択手段を有していることを特徴とする画像処理装置。
【請求項２】
前記連続図形検出手段は、画像を構成する画素間の論理演算処理を指示する描画論理演算指示が前記描画命令中に存在するか否かにより図形の連続の有無を検出することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記連続図形検出手段は、前記描画命令により描画する図形の形状が矩形か否かにより図形の連続の有無を検出することを特徴とする請求項１または請求項２に記載の画像処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、描画命令、特に画像を構成する図形の描画命令を受け取って処理を行う画像処理装置に関するものである。
【０００２】
【従来の技術】
画像形成システムにおいては、外部から入力される様々な描画命令を処理し、印刷装置で印刷可能な画素の並びで表現された画像データに展開し、印刷装置や表示装置などに出力する。描画命令は、例えばパーソナルコンピュータ等のホストコンピュータ上の画像作成装置などのアプリケーションから、ホストコンピュータ上のＯＳを介して、フォントやグラフィックスを表すページ記述言語（ＰＤＬ）等によって与えられる。
【０００３】
ＰＤＬ等の描画命令が与えられると、その描画命令に従って描画処理を行う。描画処理の手順としては、まず、図形の外郭とスキャンラインとの交点から、スキャンラインに沿って図形を展開したときの開始点と終了点を算出する。この開始点及び終了点がエッジとなる。算出した開始点と終了点とに従って、スキャンラインに沿った水平線分を描画する。以下、このスキャンラインと図形の外郭との交点（開始点及び終了点）を元にした描画を、スキャンコンバージョン処理と呼ぶ。特に、スキャンラインが描画ピクセルの中間を通る場合をハーフスキャンラインスキャンコンバージョンと呼ぶ。スキャンライン上には１ないし複数の図形により複数の開始点及び終了点が存在する場合があるが、所定の手法によってすべての開始点及び終了点について描画処理を行う。
【０００４】
このようなスキャンコンバージョン処理あるいはハーフスキャンラインスキャンコンバージョン処理を、各スキャンラインあるいはハーフスキャンラインについて行うことによって、２次元的な画像の描画を行うことができる。
【０００５】
しかしながら、このような描画手法を用いて描画を行う場合、例えばスキャンラインと交差する角度が小さい、細い線を描画しようとすると、線が途切れ途切れになってしまうという問題がある。図１６は、一般的なスキャンコンバージョン処理を用いた場合の描画画像の説明図である。例えば図１６（Ａ）に示すように細い線を描画する場合、破線で示すスキャンラインとの交点において画素が描画されるため、図１６（Ｂ）に円で示した画素のみが描画される。そのため、描画した画素間に抜けが生じてしまい、線が途切れ途切れになってしまう。この現象をドロップアウトと呼んでいる。
【０００６】
このようなドロップアウトを防止するため、例えば特許第２７８２７５２号公報に記載されているように、スキャンコンバージョンされたエッジを監視して、上下のエッジに隙間が検出された場合、その隙間を埋めるような補正処理を行っている。例えば図１６（Ｃ）においてハッチングを施した円で示す画素を描画することによって、ドロップアウトを防止することができる。
【０００７】
しかし、グラデーション等の連続した微小図形が描画される場合においては、補正により描画した画素が重ね書きされることによって、パフォーマンスが劣化する問題が生じていた。図１７は、連続した微小図形を描画する際の問題点の一例の説明図である。例えば図１７（Ａ）に示すように隣接した細い線ａ，ｂを描画する場合を考える。この場合、線ａについては補正処理も含めて図１７（Ｂ）に右上がりのハッチングを施した円で示す画素が描画される。同様に、線ｂについては補正処理も含めて図１７（Ｃ）に右下がりのハッチングを施した円で示す画素が描画される。このような２つの描画処理が行われるため、図１７（Ｄ）においてハッチングがクロスした画素については２回の描画が行われている。
【０００８】
このように、微小図形の描画時にドロップアウト防止のため処理を適用した際、描画する画素が重なることがある。そのため、パフォーマンスの劣化が発生するという問題があった。
【０００９】
【発明が解決しようとする課題】
本発明は、上述した事情に鑑みてなされたもので、ドロップアウトを防止するとともに、ドロップアウト防止処理によるパフォーマンスの劣化を防止した画像処理装置を提供することを目的とするものである。
【００１０】
【課題を解決するための手段】
本発明は、画像を構成する描画命令を受け取って画像の描画を行う画像処理装置において、入力された前記描画命令に図形の連続があるか否かを検出する連続図形検出手段と、描画命令に従って図形のドロップアウトを補完せずに描画するドロップアウト補正無し描画手段と、描画命令に従って図形のドロップアウトを補完して描画するドロップアウト補正付き描画手段と、前記連続図形検出手段の検出結果に応じて前記ドロップアウト補正付き描画手段あるいは前記ドロップアウト補正無し描画手段を選択する選択手段を有していることを特徴とするものである。このように、描画する図形が連続しているか否かによりドロップアウトの補正を行うか否かを切り替えることによって、例えば連続する図形についてはドロップアウトの補正を行わず、重ねて描画する処理を行わなくて済む。そのため、描画処理におけるパフォーマンスの劣化を防止することができる。
【００１１】
なお、描画する図形が連続しているか否かは、簡易には画像を構成する画素間の論理演算処理を指示する描画論理演算指示が前記描画命令中に存在するか否かにより検出したり、あるいは描画命令により描画する図形形状が矩形か否かにより検出することが可能である。例えば複数の図形を連続して描画してグラデーション描画を行う場合、論理演算処理によって行う場合が多く、論理演算処理を指示する描画命令があれば図形を連続して描画するものと見なして処理の簡略化を図ることができる。同様に、グラデーション描画を行う場合には多数の矩形を描画して実現する場合が多く、矩形を描画する描画命令があれば図形を連続して描画するものと見なして処理の簡略化を図ることができる。
【００１２】
【発明の実施の形態】
図１は、本発明の画像処理装置の実施の一形態を示すブロック図である。図中、１は連続図形検出部、２は図形描画処理選択部、３は図形描画部、４はドロップアウト補正無し描画部、５はドロップアウト補正付き描画部である。連続図形検出部１は、入力された図形データ（描画命令）を参照し、描画する図形が連続しているか否かを検出し、検出結果を図形描画処理選択部２へ通知する。
【００１３】
図形描画処理選択部２は、連続図形検出部１からの連続図形の検出結果を受け、ドロップアウト補正無し描画部４かドロップアウト補正付き描画部５のいずれかを選択して、入力された図形データを渡す。
【００１４】
図形描画部３は、図形データに従って描画処理を行う。図形描画部３には、ドロップアウト時の補正を行わないで描画するドロップアウト補正無し描画部４と、ドロップアウト時の補正を行うドロップアウト補正付き描画部５が設けられている。図形描画処理選択部２における選択に従い、ドロップアウト補正無し描画部４またはドロップアウト補正付き描画部５のいずれかにおいて、入力された図形データに従った描画処理を行う。
【００１５】
なお、入力される図形データ（描画命令）は、例えばＰＤＬによって記述された描画コマンド（直線、曲線、フォント、ラスタ画像、塗りつぶし等）そのものでもよいし、あるいは中間データなどに変換された中間コマンドなどであってもよい。
【００１６】
また、図１に示した例では、ドロップアウト補正無し描画部４またはドロップアウト補正付き描画部５のいずれかが描画処理を行うものとした。しかしこれに限らず、例えばドロップアウト補正無し描画部４、ドロップアウト補正付き描画部５とも描画処理を行うが、出力される描画結果（あるいは描画結果の反映）を選択するように構成してもよい。
【００１７】
図２は、本発明の画像処理装置の実施の一形態を実現するための一構成例を示すブロック図である。図中、１１は画像処理装置、１２はネットワーク、１３はプリンタエンジン、２１はＣＰＵ、２２はＲＡＭ、２３はＲＯＭ、２４は入力インタフェース、２５はプリンタエンジンインタフェース、２６は内部バス、３１は図形情報記憶部、３２はフレームバッファである。図２に示す例では、画像処理装置１１は、ネットワーク１２に接続されており、ホストコンピュータなどの外部機器で生成された描画命令に従い、プリンタエンジン１３で記録可能な画像を生成して出力する。描画命令は、例えばＰＤＬによって記述された描画コマンド（直線、曲線、フォント、ラスタ画像、塗りつぶし等）により構成されている。
【００１８】
画像処理装置１１は、ＣＰＵ２１，ＲＡＭ２２，ＲＯＭ２３，入力インタフェース２４，プリンタエンジンインタフェース２５などを有している。これらは内部バス２６により接続されている。もちろん、その他の各種の機器が内部バス２６に接続されていてよい。
【００１９】
入力インタフェース２４（図中、入力Ｉ／Ｆとして示す）は、ネットワーク１２を介して送られてくる描画命令を受け取る。描画命令は、例えばＰＤＬ等で記述されていてよい。描画命令中には図形を描画することを示す描画コマンドが含まれている。描画コマンドは、描画する図形の外郭データが含まれているものとする。
【００２０】
ＣＰＵ２１は、ＲＯＭ２３あるいはＲＡＭ２２に記憶されているプログラムに従って、画像処理装置１１全体を制御する。特に、入力インタフェース２４で受け取った描画命令に基づいて描画処理を行い、ＲＡＭ２２内のフレームバッファ３２に書き出す。このとき、ＣＰＵ２１は図１に示す連続図形検出部１，図形描画処理選択部２，図形描画部３（ドロップアウト補正無し描画部４，ドロップアウト補正付き描画部５）などの各部の機能を実現する。
【００２１】
ＲＡＭ２２は、描画処理の際に必要なワークメモリや、入力インタフェース２４を介して受け取った描画命令を一時記憶しておく図形情報記憶部３１，プリンタエンジン１３に出力するための画像（ラスターデータ）を記憶するフレームバッファ３２などの記憶手段として使用される。
【００２２】
ＲＯＭ２３は、例えばＣＰＵ２１で実行するプログラムや、予め設定されているデータなどを記憶している。
【００２３】
プリンタエンジンインタフェース２５（図中、プリンタエンジンＩ／Ｆとして示す）は、ＣＰＵ２１による制御の下、ＲＡＭ２２内のフレームバッファ３２に作成されたラスターデータをプリンタエンジン１３に出力する。
【００２４】
プリンタエンジン１３は、画像処理装置１１のプリンタエンジンインタフェース２５から出力されるラスターデータを受け取り、例えば紙などの被記録媒体に画像を形成する。プリンタエンジン１３における画像形成方式としては、電子写真方式、インクジェット方式など、種々の画像形成方式を採用することができる。このプリンタエンジン１３における画像形成方式に従って、プリンタエンジンインタフェース２５との間でラスターデータの受け渡しを行えばよい。
【００２５】
なお、図２に示した例ではプリンタエンジン１３に画像を出力する例を示したが、これに限らず、例えばＣＲＴ等の表示装置に対して画像を出力するように構成してもよい。
【００２６】
次に、本発明の画像処理装置の実施の一形態における動作の一例について説明する。ここでは、説明を簡略化するために、台形および矩形を描画する場合について説明する。その他の図形に関しては、台形と矩形の集合で近似できるので説明を省略する。また、台形については「２辺がｘ軸に対して平行である」として説明する。さらに矩形は、ｘ軸に平行な２辺とｙ軸に平行な２辺により構成されているものとする。
【００２７】
図３は、入力される台形と矩形の描画命令のデータ構造の一例の説明図である。図３（Ａ）に示すような矩形を描画する際には、描画する矩形の形状をその右下の頂点ｌｄと左上の頂点ｒｕによって示すこととする。このときの描画命令は、図３（Ｂ）に示すように、頂点ｒｕのｘ座標値及びｙ座標値と、頂点ｌｄのｘ座標値及びｙ座標値によって構成されている。
【００２８】
また、図３（Ｃ）に示すような台形を描画する際には、下底の両端点ｓｔａｒｔ，ｅｎｄと、台形の高さと、下底の両端点ｓｔａｒｔ，ｅｎｄにおけるそれぞれの２辺の傾きによって示すこととする。このときの描画命令は、図３（Ｄ）に示すように、下底の一端点ｓｔａｒｔのｘ座標値及びｙ座標値と、下底の一端点ｅｎｄのｘ座標値及びｙ座標値と、台形の高さｈｅｉｇｈｔと、端点ｓｔａｒｔにおける２辺の傾きＬ、端点ｅｎｄにおける２辺の傾きＲによって構成されている。傾きＬ及び傾きＲとして種々の値の与え方があるが、ここでは、ｙ座標が１だけ変化するときのｘ座標の変化量により与えることとする。もちろん、角度など他の諸値により与えてもよい。
【００２９】
本発明の画像処理装置の実施の一形態における全体的な動作の流れは、まず外部から例えばＰＤＬ等で記述された描画命令が入力されると、ＰＤＬを解釈して図３に示したような矩形や台形の図形データに分解され、図２における図形情報記憶部３１などに記憶される。
【００３０】
連続図形検出部１は、入力された図形データによって描画する図形が他の図形と連続しているか否かを検出し、その検出結果を図形描画処理選択部２へ通知する。この時、連続図形検出部は、必要であれば、複数の図形データを参照して連続した図形描画であるか否かを検出する。
【００３１】
図形描画処理選択部２は、入力された図形データに対する連続図形検出部１からの検出結果を受け、ドロップアウト補正無し描画部４かドロップアウト補正付き描画部５のどちらかを選択する。選択されたドロップアウト補正無し描画部４かドロップアウト補正付き描画部５のいずれかによって、入力された図形データに基づいて、例えば図２におけるＲＡＭ２２内のフレームバッファ３２へ描画する。
【００３２】
例えば１ページ分などの所定の単位の描画命令について描画処理を行った後、例えば図２における構成ではＲＡＭ２２内のフレームバッファ３２に描画されたラスターデータをプリンタエンジンインタフェース２５を介してプリンタエンジン１３に送り、紙などの被記録媒体上に画像を形成する。
【００３３】
続いて、描画処理部３における矩形と台形の描画処理について説明する。なお、上述のように描画処理部３は、ドロップアウト補正を行うドロップアウト補正付き描画部５における描画処理と、ドロップアウト補正を行わないドロップアウト補正無し描画部４における描画処理の２つがあるので、計４つの処理になる。
【００３４】
図４は、ドロップアウト補正処理を行う場合の矩形の描画処理の一例を示すフローチャートである。Ｓ４１において、入力された矩形の頂点データをｆｌｏｏｒ関数を用いて整数化する。ここで、ｆｌｏｏｒ関数は、引数値を整数化する関数であり、引数値よりも小さく、かつ、最大の整数を返す関数である。また、図中のｌｄ．ｘは図３（Ａ）における頂点ｌｄのｘ座標値、ｌｄ．ｙは同じく頂点ｌｄのｙ座標値、ｒｕ．ｘは同じく頂点ｒｕのｘ座標値、ｒｕ．ｙは同じく頂点ｒｕのｙ座標値である。Ｓ４１では、それぞれの値をｆｌｏｏｒ関数で整数化し、変数ｌｄｘ，ｌｄｙ，ｒｕｘ，ｒｕｙに格納している。
【００３５】
Ｓ４２〜Ｓ４５においては、Ｓ４１で整数化された値に基づき、変数ｌｄｙの値から変数ｒｕｙの値までのｙ座標について、変数ｌｄｘの値から変数ｒｕｘの値までの領域を描画することにより、矩形を描画する。すなわち、Ｓ４２においてスキャンラインを示す変数ｙを変数ｌｄｙの値に初期化した後、Ｓ４３において、変数ｙが示すｙ座標値のスキャンラインにおいて、変数ｌｄｘが示すｘ座標から変数ｒｕｘが示すｘ座標までの水平線を描画する。そしてＳ４４において、変数ｙの値を１だけ増加させて次のｙ座標値を変数ｙにセットし、Ｓ４５において、新たな変数ｙの値と変数ｒｕｙの値を比べて最後のｙ座標値までのスキャンラインについて描画を終了したか否かを判定する。新たな変数ｙの値が変数ｒｕｙの値以下であれば、Ｓ４３に戻って新たな変数ｙが示すｙ座標値のスキャンラインにおける描画処理を行う。新たな変数ｙの値が変数ｒｕｙの値を超えたら、矩形の描画処理を終了する。
【００３６】
この処理では、矩形の頂点の座標を、ｆｌｏｏｒ関数を用いて整数化することによってドロップアウトの補正を実現している。
【００３７】
図５は、ドロップアウト補正処理を行わない場合の矩形の描画処理の一例を示すフローチャートである。なお、各値の表現方法などについては図４と同様である。また、ｆｌｏｏｒ関数についても上述したとおりである。
【００３８】
Ｓ５１において、入力された矩形の頂点データを、次式により整数化する。
ｌｄｘ＝ｆｌｏｏｒ（ｌｄ．ｘ＋０．５）
ｌｄｙ＝ｆｌｏｏｒ（ｌｄ．ｙ＋０．５）
ｒｕｘ＝ｆｌｏｏｒ（ｒｕ．ｘ−０．５）
ｒｕｙ＝ｆｌｏｏｒ（ｒｕ．ｙ−０．５）
この整数化により、矩形のハーフスキャンラインスキャンコンバージョン処理のための、各頂点データを算出している。
【００３９】
Ｓ５２において、描画する矩形がスキャンラインと交差しない描画不可能な微小図形であるか否かを判定する。この判定には、
（ｒｕｘ＜ｌｄｘ）ｏｒ（ｒｕｙ＜ｌｄｙ）
の条件を判定すればよい。この条件を満足する場合には、描画しようとしている矩形はスキャンラインと交差せず、描画することができない。その場合は、この矩形描画処理を終了する。
【００４０】
Ｓ５３〜Ｓ５６までの処理では、Ｓ５１で整数化された値に基づいて、変数ｌｄｙの値から変数ｒｕｙの値までのｙ座標値について、ｘ座標値が変数ｌｄｘの値から変数ｒｕｘの値までの領域を描画することにより、矩形を描画する。すなわち、Ｓ５３においてスキャンラインを示す変数ｙを変数ｌｄｙの値に初期化した後、Ｓ５４において、変数ｙが示すｙ座標値のスキャンラインにおいて、変数ｌｄｘが示すｘ座標から変数ｒｕｘが示すｘ座標までの水平線を描画する。そしてＳ５５において、変数ｙの値を１だけ増加させて次のｙ座標値を変数ｙにセットし、Ｓ５６において、新たな変数ｙの値と変数ｒｕｙの値を比べて最後のｙ座標値までのスキャンラインについて描画を終了したか否かを判定する。新たな変数ｙの値が変数ｒｕｙの値以下であれば、Ｓ５４に戻って新たな変数ｙが示すｙ座標値のスキャンラインにおける描画処理を行う。新たな変数ｙの値が変数ｒｕｙの値を超えたら、矩形の描画処理を終了する。
【００４１】
図６は、ドロップアウト補正処理を行う場合の台形の描画処理の一例を示すフローチャートである。なお、図中のｓｔａｒｔ．ｘは図３（Ｃ）における下底の端点ｓｔａｒｔのｘ座標値、ｓｔａｒｔ．ｙは同じく下底の端点ｓｔａｒｔのｙ座標値、ｅｎｄ．ｘは同じく下底の端点ｅｎｄのｘ座標値、ｒｕ．ｙは同じく下底の端点ｅｎｄのｙ座標値である。
【００４２】
Ｓ６１において、台形の下底の座標値を、ｆｌｏｏｒ関数により整数化する。ここでは、台形の下底の端点ｓｔａｒｔについてはｘ座標とｙ座標について、また端点ｅｎｄについてはｙ座標が端点ｓｔａｒｔと同じであるのでｘ座標のみについて整数化し、それぞれ、変数ｘｓ，ｙ，ｘｅに格納する。なお、ｆｌｏｏｒ関数は上述の通りである。
【００４３】
Ｓ６２〜Ｓ６７までの処理によって、高さｈｅｉｇｈｔ分の台形を描画する。Ｓ６２において、変数ｙが示すｙ座標値のスキャンラインについて、変数ｘｓが示すｘ座標から変数ｘｅが示すｘ座標までの水平線を描画する。Ｓ６３において、ｙ座標値を示す変数ｙに１を加算して次のｙ座標値をセットするとともに、変数ｘｓ，変数ｘｅの値を別の変数ｘｓ＿１，変数ｘｅ＿１に待避させる。そしてＳ６４において、描画が終了したか否かを判定する。描画の終了は、変数ｙ、端点ｓｔａｒｔのｙ座標値ｓｔａｒｔ．ｙ、高さｈｅｉｇｈｔを用い、
ｙ≦ｓｔａｒｔ．ｙ＋ｈｅｉｇｈｔ
の条件を満たすか否かで判定すればよい。この条件を満たす場合には、描画しているｙ座標値がまだ台形の高さｈｅｉｇｈｔまで達していないことを示すので、Ｓ６５へ進む。
【００４４】
Ｓ６５では、変数ｘｓに端点ｓｔａｒｔ側の傾きＬを加算する。図３において説明したように、傾きＬ，Ｒは、ｙ座標が１だけ変化する際のｘ座標の変化量を示しており、変数ｘｓに傾きＬを加算することによって、次のスキャンラインにおけるエッジのｘ座標が得られる。同様に、変数ｘｅについても端点ｅｎｄ側の傾きＲを加算し、次のスキャンラインにおけるエッジのｘ座標を得る。
【００４５】
Ｓ６６において、Ｓ６５で得た新たな変数ｘｓの値と、既に描画した直前のスキャンラインにおけるエッジのｘ座標を示す変数ｘｅ＿１の値とを比較する。この判定によって、既に描画したスキャンラインとこれから描画するスキャンラインとの間にドロップアウトが発生するか否かを判定することができる。すなわち、既に描画したスキャンラインにおける描画領域は、変数ｘｓ＿１，ｘｅ＿１に格納されている。始点を変数ｘｓ＿１に格納されているｘ座標、終点を変数ｘｅ＿１に格納されているｘ座標とするとき、新たなスキャンラインにおける始点を示す変数ｘｓの値が前のスキャンラインの終点を超えていれば、２つのスキャンラインにおける描画領域は重なる部分が無いことを示している。これによって、ドロップアウトを検出することができる。
【００４６】
Ｓ６６で変数ｘｓの値が変数ｘｅ＿１の値を超えていると判定された場合には、Ｓ６７において、ドロップアウトを補正する処理を行う。ドロップアウトの補正処理としては、例えば変数ｙが示すｙ座標のスキャンラインにおいて、変数ｘｅ＿１から変数ｘｓまでの水平線を描画すればよい。ドロップアウトの補正処理後、Ｓ６２へ戻って、変数ｙが示すｙ座標のスキャンラインにおいて、台形部分の描画を行う。Ｓ６６においてドロップアウトが発生しないと判定した場合には、そのままＳ６２へ戻って、変数ｙが示すｙ座標のスキャンラインにおいて、台形部分の描画を行う。
【００４７】
このようにして各ｙ座標のスキャンラインごとに描画を行ってゆき、変数ｙの値がｓｔａｒｔ．ｙ＋ｈｅｉｇｈｔよりも大きくなったことがＳ６４で検出されると、台形の描画が終了したものとして、描画処理を終了する。
【００４８】
図７は、ドロップアウト補正処理を行わない場合の台形の描画処理の一例を示すフローチャートである。なお、各値の表現について、図６と同様のものについては同じ表記を用いる。また、ｆｌｏｏｒ関数についても上述したとおりである。
【００４９】
Ｓ７１において、台形の下底と上底の座標値を、次式により整数化する。
ｘｓ＝ｆｌｏｏｒ（ｓｔａｒｔ．ｘ＋０．５）
ｙｓ＝ｆｌｏｏｒ（ｓｔａｒｔ．ｙ＋０．５）
ｘｅ＝ｆｌｏｏｒ（ｅｎｄ．ｘ−０．５）
ｙｅ＝ｆｌｏｏｒ（ｓｔａｒｔ．ｙ＋ｈｅｉｇｈｔ−０．５）
この整数化により、台形のハーフスキャンラインスキャンコンバージョン処理のための、各頂点データを算出する。なお、変数ｘｓ，ｘｅ，ｙｓは台形の下底における端点のｘ座標値及びｙ座標値に対応する値である。また変数ｙｅは、上底のｙ座標値に対応する値である。
【００５０】
Ｓ７２において、描画する台形が、スキャンラインと交差しない描画不可能な微小図形であるか否かを判定する。この判定は、変数ｙｓの値が変数ｙｅの値よりも大きいか否かを判定すればよい。変数ｙｓの値が変数ｙｅの値よりも大きい場合には、描画しようとしている台形はスキャンラインと交差せず、描画することができない。その場合は、この台形描画処理を終了する。
【００５１】
Ｓ７３〜Ｓ７６までの処理では、Ｓ７１で整数化された値に基づいて、変数ｙｓの値から変数ｙｅの値までのｙ座標値について、それぞれのスキャンラインにおける描画処理を行う。まずＳ７３において、変数ｘｓの値と変数ｘｅの値を比較する。変数ｘｓの値が変数ｘｅの値以上であれば、ｘ座標方向に描画する領域が存在していないので、Ｓ７４における処理をスキップする。
【００５２】
変数ｘｓの値が変数ｘｅの値より小さければ、Ｓ７４において、スキャンラインを示す変数ｙｓが示すｙ座標値のスキャンラインにおいて、変数ｘｓが示すｘ座標から変数ｘｅが示すｘ座標までの水平線を描画する。
【００５３】
そしてＳ７５において、変数ｙｓの値を１だけ増加させて次のｙ座標値を変数ｙにセットするとともに、変数ｘｓに端点ｓｔａｒｔ側の傾きＬを加算し、また変数ｘｅに端点ｅｎｄ側の傾きＲを加算する。上述のように、傾きＬ，Ｒは、ｙ座標が１だけ変化する際のｘ座標の変化量を示しており、変数ｘｓ，ｘｅに傾きＬ，Ｒを加算することによって、次のスキャンラインにおける描画開始点のｘ座標及び描画終了点のｘ座標が得られる。
【００５４】
Ｓ７６において、新たな変数ｙｓの値と変数ｙｅの値を比較し、最後のｙ座標値である変数ｙｅの値までのスキャンラインについて描画を終了したか否かを判定する。新たな変数ｙｓの値が変数ｙｅの値以下であれば、Ｓ７３に戻って新たな変数ｙｓが示すｙ座標値のスキャンラインにおける描画処理を行う。新たな変数ｙｓの値が変数ｙｅの値を超えたら、台形の描画処理を終了する。
【００５５】
以上、矩形及び台形に対する描画処理を、それぞれドロップアウト補正を行う場合と行わない場合について説明した。これら４つの描画処理を、描画する図形形状（矩形か台形か）と、連続図形検出部１により検出される条件により切り替えることで、パフォーマンスを改善しかつドロップアウト補正を行う描画処理を実現する。
【００５６】
図８は、描画処理の切り替えを行うための処理の一例を示すフローチャートである。Ｓ８１において、描画される図形が連続しているか否かを連続図形検出部１で検出する。この処理の詳細は後述する。
【００５７】
Ｓ８２において、Ｓ８１の検出結果を受け、図形が連続であると判定された場合、Ｓ８４へ進み、ドロップアウト補正処理を行わないで図形を描画する。Ｓ８４において、描画する図形が矩形か否かを判定し、矩形であればＳ８８において、例えば図５に示したようなドロップアウト補正無しの矩形描画処理を行う。また、描画する図形が台形であれば、Ｓ８７において、例えば図７に示したようなドロップアウト補正なしの台形描画処理を行う。
【００５８】
Ｓ８２で図形が連続しないと判定された場合には、Ｓ８３へ進み、ドロップアウト補正処理を伴う図形の描画処理を行う。Ｓ８３において、描画する図形が矩形か否かを判定し、矩形であればＳ８６において、例えば図４に示したようなドロップアウト補正有りの矩形描画処理を行う。また、描画する図形が台形であれば、Ｓ８５において、例えば図６に示したようなドロップアウト補正有りの台形描画処理を行う。
【００５９】
図８のＳ８１において連続図形検出部１で行う連続図形の検出処理には、幾つかの処理が考えられる。その一つについて以下に説明する。図９は、連続図形検出処理の一例を示すフローチャート、図１０は、連続図形検出処理の一例において判定する図形の具体例の説明図である。図９に示した手法は、１つ前の図形と外郭の重なりを求め、重なっていたら連続した図形描画であると判定する手法である。前提として、これから重なりを判定する図形ａを図１０（Ａ）に示し、１つ前に重なりを判定した図形ｂを図１０（Ｂ）に示す。
【００６０】
図９に示す処理は、図形ａと図形ｂのうち重なる可能性の有る辺の重なりを順次判定してゆくものである。もし、重なっていれば、描画される図形は、１つ前の図形と連続した図形描画となるので、描画される図形であると判定する。
【００６１】
Ｓ９１において、まず図形ａの辺ａ１と図形ｂの辺ｂ３について重なりを判定する。なお、辺の重なりの判定処理については後述する。Ｓ９２において、Ｓ９１の判定結果で辺が重なっているか否かを判定し、重なっていると判定されれば、図形ｂの下底に図形ａの上底が接しているので、図形ａと図形ｂは連続であると判定する。重なっていなければ、Ｓ９３へ進む。
【００６２】
次にＳ９３において、図形ａの辺ａ３と図形ｂの辺ｂ１について重なりを判定する。Ｓ９４において、Ｓ９３の判定結果で辺が重なっているか否かを判定し、重なっていると判定されれば、図形ｂの上底に図形ａの下底が接しているので、図形ａと図形ｂは連続であると判定する。重なっていなければ、Ｓ９５へ進む。
【００６３】
次にＳ９５において、図形ａの辺ａ２と図形ｂの辺ｂ４について重なりを判定する。Ｓ９６において、Ｓ９５の判定結果で辺が重なっているか否かを判定し、重なっていると判定されれば、図形ｂの右側の辺と図形ａの左側の辺が接しているので、図形ａと図形ｂは連続であると判定する。重なっていなければ、Ｓ９７へ進む。
【００６４】
次にＳ９７において、図形ａの辺ａ４と図形ｂの辺ｂ２について重なりを判定する。Ｓ９８において、Ｓ９７の判定結果で辺が重なっているか否かを判定し、重なっていると判定されれば、図形ｂの左側の辺と図形ａの右側の辺が接しているので、図形ａと図形ｂは連続であると判定する。
【００６５】
Ｓ９７の判定結果で重なっていないと判定された場合には、すべての辺が重なっていないと判定されたことになる。Ｓ９８からＳ９９へ進み、次の図形との連続性を判定する図形として図形ｂを図形ａに更新し、連続図形検出処理を終了する。
【００６６】
図１１は、辺の重なり判定処理の一例を示すフローチャート、図１２は、辺の重なり判定処理の一例において判定する辺の具体例の説明図である。図９に示した連続図形検出処理における辺の重なり判定処理としては、幾つかの処理が考えられる。一例を図１１に示している。前提として、図１２（Ａ），（Ｂ）に示すように、判定される辺をそれぞれ辺ａ：（Ｘｓａ，Ｙｓａ）−（Ｘｅａ，Ｙｅｂ），辺ｂ：（Ｘｓｂ，Ｙｓｂ）−（Ｘｅｂ，Ｙｅｂ）とする。
【００６７】
Ｓ１０１において、それぞれの辺を包含する矩形を求める。図１２に示す例では、矩形を破線で示している。矩形を求めたら、その矩形の左下の頂点及び右上の頂点を求める。辺ａについて求めた矩形の左下の頂点を（Ｘｌｄａ，Ｙｌｄａ）、右上の頂点を（Ｘｒｕａ，Ｙｒｕａ）とする。また、辺ｂについて求めた矩形の左下の頂点を（Ｘｌｄｂ，Ｙｌｄｂ）、右上の頂点を（Ｘｒｕｂ，Ｙｒｕｂ）とする。
【００６８】
Ｓ１０２において、Ｓ１０１で求めたそれぞれの矩形が交差しているか否かを判定する。ここでは、次の条件
Ｘｌｄｂ≧Ｘｒｕａ
Ｘｒｕｂ≦Ｘｌｄａ
Ｙｌｄｂ≧Ｙｒｕａ
Ｙｒｕｂ≦Ｙｌｄａ
のいずれかを満たせば、２つの矩形は交差していないと判定することができる。２つの矩形が交差していない場合、２辺は重なっていないとして辺の重なり判定処理を終了する。
【００６９】
Ｓ１０２で２つの矩形が交差していると判定された場合には、Ｓ１０３において、それぞれの辺の傾きを算出する。辺ａの傾きＡａ、辺ｂの傾きＡｂは、
Ａａ＝（Ｙｅａ−Ｙｓａ）／（Ｘｅａ−Ｘｓａ）
Ａｂ＝（Ｙｅｂ−Ｙｓｂ）／（Ｘｅｂ−Ｘｓｂ）
により求めることができる。そしてＳ１０４において、Ｓ１０３で求めた辺の傾きが等しいか否かを判定する。傾きが等しくなければ、２辺は交差する可能性はあるが重ならないので、２辺は重なっていないとして辺の重なり判定処理を終了する。
【００７０】
Ｓ１０４で２辺の傾きが一致していると判定された場合には、Ｓ１０５において、どちらかの辺の１次方程式表現を求める。そしてＳ１０６において、他方の辺の端点でその方程式が成立するか否かを判定する。例えば辺ａについて１次方程式を算出すると、
Ｂａ＝Ｙｓａ−Ａａ×Ｘｓａ
ゆえに
ｙ＝Ａａ×ｘ＋Ｂａ
である。辺ｂの端点（Ｘｓｂ，Ｙｓｂ）、（Ｘｅｂ，Ｙｅｂ）を代入すると、
Ｙｓｂ＝Ａａ×Ｘｓｂ＋Ｂａ
Ｙｅｂ＝Ａａ×Ｘｅｂ＋Ｂａ
となる。この式のいずれかが成り立つか否かをＳ１０６において判定すればよい。成り立てば、その端点は他方の辺の直線上に存在することを示すので、２辺は重なるとして辺の重なり判定処理を終了する。成り立たなければ、２辺は重なっていないとして辺の重なり判定処理を終了する。
【００７１】
図１３は、本発明の画像処理装置の実施の一形態を用いた図形の描画例の説明図である。ここでは、図１３（Ａ）に示すように、複数の細い図形ａ〜ｅを連続して描画する例を示している。これらの図形を描画する描画命令は、図形ａ，ｂ，ｃ，ｄ，ｅの順で入力されるものとする。
【００７２】
まず図形ａを描画する描画命令が入力される。この時点ではまだ図形ｂ〜ｅは入力されていないので、図形ａと連続する図形はない。そのため、連続図形検出部１において、“連続図形ではない”と判定される。これにより、ドロップアウト補正付き描画部５が図形描画処理選択部２で選択され、図１３（Ｂ）に示すようにドロップアウトの無い図形が描画される。
【００７３】
続いて図形ｂを描画する描画命令が入力される。この時は、連続図形検出部１において、１つ前に描画された図形ａとの間で“連続図形である”と判定される。そのため、ドロップアウト補正無し描画部４が図形描画処理選択部２で選択され、ドロップアウトの処理を行わないで図形が描画される。これによって、図１３（Ｃ）に示すように、とびとびの画素が描画される。しかし描画した画素間には図形ａの描画画素が存在するので、ドロップアウトによる影響は少ない。また逆に、ドロップアウトの処理を行わないので高速な描画処理を行うことができ、パフォーマンスの劣化を防止することができる。
【００７４】
同様に、図形ｃ、図形ｄ、図形ｅを描画する描画命令についても、図形ｂと同様にしてドロップアウト補正無し描画処理部４によって描画が行われる。これによって、図１３（Ｄ）、（Ｅ）、（Ｆ）に示すように描画される。この場合も、ドロップアウトの処理を行わないので、パフォーマンスの劣化を防止することができる。
【００７５】
このようにして、図形ａ〜ｅの描画結果として、図１３（Ｆ）に示すような画像が得られる。図１３（Ａ）に示すような各微小図形の特徴が表現されているとともに、図形ａについてはドロップアウト処理を行っているので、全体として図形が切れることもなく、良好な画像が得られる。
【００７６】
図１４は、本発明の画像処理装置の実施の一形態における変形例を示すブロック図である。図中の符号は図１と同様である。上述の図９〜図１２で説明した連続図形の判定処理は基本的なものである。しかしながら、上述のように厳密に図形同士が連続しているか否かの判定を行うと、その判定に要するコストがドロップアウト補正処理において画素の重ね書きに起因するパフォーマンスの劣化を上回ってしまい、逆効果となってしまう場合がある。
【００７７】
そのため、例えば連続した図形の描画が要求されることが多い条件を検出し、それを連続した図形描画の条件とすることによって簡易に連続図形の判定を行うことによって、判定処理によるパフォーマンスの劣化を防止することが可能である。例えば、描画順に入力されるＰＤＬで記述された描画コマンドの特徴を利用し、描画図形が入力される前に必ず指定される描画属性をその判定基準とすることができる。特に図１４に示す例では、各種の描画属性指定のうち、描画論理演算指示を連続した図形描画の条件とする例を示している。
【００７８】
描画論理演算指示は、既に図形が描画された位置へ、新たに描画される図形を論理演算に従って描画するときに、その論理式を指定するものである。通常は、マスク描画等に用いられるが、グラデーション描画等の、複数の連続した図形を描画する際のマスク描画としても多用される。この例では、このような描画論理演算指示の使用方法に着目して、描画論理演算指示が存在した時は連続した図形を描画するものと判定するものである。
【００７９】
図１４に示すように、ＰＤＬで記述された描画命令が入力されると、ＰＤＬを解釈して図形データに分解される。また、ＰＤＬで記述された描画論理演算指示は描画論理演算式として解釈され、連続図形検出部１で参照可能に保持される。
【００８０】
この例では、連続図形検出部１は、描画論理演算式を参照して、現在の図形データにより描画される図形が連続しているか否かを検出し、その検出結果を図形描画処理選択部２へ通知する。この検出結果を基に、図形描画処理選択部２は、現在の図形データにより描画される図形について、ドロップアウト補正無し描画部４かドロップアウト補正付き描画部５のいずれかを選択する。選択されたドロップアウト補正無し描画部４またはドロップアウト補正付き描画部５のいずれかにより図形を描画する。
【００８１】
このような構成により、例えば描画論理演算指示がなされていない場合、既に図形が描画された位置へ新たに図形を描画すると、新たに描画された図形が上書きされる。この場合、連続図形描画である場合は少ないので、連続図形検出部１は連続図形の描画ではないと判断する。そのため、ドロップアウト補正付き描画部５が選択されてドロップアウト補正を行って描画することになる。
【００８２】
描画論理演算指示がされている場合、上述のように連続図形描画である場合が多い。そのため、連続図形検出部１は連続図形の描画であると判断する。これによってドロップアウト補正無し描画部４が選択されて描画する。この場合、ドロップアウト処理における画素の上書きによるパフォーマンスの劣化を防止することができる。
【００８３】
この例のように描画論理演算指示の有無により連続図形を検出する方法では、厳密な連続図形の判定は行えない。例えば連続した図形であっても描画論理演算指示を行っていなければ、連続図形ではないものとしてドロップアウト補正処理を行ってしまう。しかしながら、厳密な連続図形の判定を行うよりも簡易に連続図形の検出処理を行うことができるので、連続図形の判定によるパフォーマンスの劣化を抑えることができる。このように、図１４に示した例では、連続図形の判定によるパフォーマンス劣化を抑え、かつ、ドロップアウト補正処理に伴うパフォーマンスの劣化を避けた、図形の描画を行うことが可能となる。
【００８４】
本発明の画像処理装置の実施の一形態における別の変形例について説明する。上述の変形例と同様に、連続図形検出のためのコストを削減する別の例を示す。上述の変形例では、グラデーション描画等の、複数の連続した図形を描画する際のマスク描画として描画論理演算指示が使用されることに着目して、描画論理演算指示が存在した時は連続した図形を描画するものと判定した。以下に示す別の変形例においては、図形の形状に注目し、連続した図形である可能性が高い形状を持つ図形であることを、連続した図形描画の条件とする。特に、「グラデーション描画時には矩形描画が多用される」ことに注目し、描画する図形が矩形であるか否かによって連続図形を検出するものである。なお、構成は図１と同様であるので省略し、連続図形検出処理についてのみ示す。
【００８５】
図１５は、本発明の画像処理装置の実施の一形態における別の変形例で行う連続図形検出処理の一例を示すフローチャートである。Ｓ１１１において、これから描画する図形の形状について判定を行う。ここでは、描画する図形が矩形であるか否かを判定する。Ｓ１１２において、Ｓ１１１の判定結果を受け、これから描画する図形が矩形であれば、図形は連続であるとして連続図形検出処理を終了する。これから描画する図形が矩形でなければ、図形は連続しないとして連続図形検出処理を終了する。
【００８６】
通常、ＰＤＬを解釈するプリンタなどのシステムでは、矩形の描画命令が存在するため、矩形であるか否かの判定には特別な処理を必要としないで連続図形検出処理を行うことができる。また、このような簡単な判定処理によって連続図形検出処理を実現することにより、連続図形の判定によるパフォーマンスの劣化を抑えることができる。それとともに、ドロップアウト補正処理に伴うパフォーマンスの劣化を避けた、図形の描画を行うことが可能となる。
【００８７】
【発明の効果】
以上の説明から明らかなように、本発明によれば、連続して描画される図形を検出してドロップアウト処理の有無を切り替えるので、従来のドロップアウト処理のように連続した図形を描画する際に補正用の画素が重ね書きされてパフォーマンスが劣化することがなくなり、しかも良好な画像を描画することができるという効果がある。
【図面の簡単な説明】
【図１】本発明の画像処理装置の実施の一形態を示すブロック図である。
【図２】本発明の画像処理装置の実施の一形態を実現するための一構成例を示すブロック図である。
【図３】入力される台形と矩形の描画命令のデータ構造の一例の説明図である。
【図４】ドロップアウト補正処理を行う場合の矩形の描画処理の一例を示すフローチャートである。
【図５】ドロップアウト補正処理を行わない場合の矩形の描画処理の一例を示すフローチャートである。
【図６】ドロップアウト補正処理を行う場合の台形の描画処理の一例を示すフローチャートである。
【図７】ドロップアウト補正処理を行わない場合の台形の描画処理の一例を示すフローチャートである。
【図８】描画処理の切り替えを行うための処理の一例を示すフローチャートである。
【図９】連続図形検出処理の一例を示すフローチャートである。
【図１０】連続図形検出処理の一例において判定する図形の具体例の説明図である。
【図１１】辺の重なり判定処理の一例を示すフローチャートである。
【図１２】辺の重なり判定処理の一例において判定する辺の具体例の説明図である。
【図１３】本発明の画像処理装置の実施の一形態を用いた図形の描画例の説明図である。
【図１４】本発明の画像処理装置の実施の一形態における変形例を示すブロック図である。
【図１５】本発明の画像処理装置の実施の一形態における別の変形例で行う連続図形検出処理の一例を示すフローチャートである。
【図１６】一般的なスキャンコンバージョン処理を用いた場合の描画画像の説明図である。
【図１７】連続した微小図形を描画する際の問題点の一例の説明図である。
【符号の説明】
１…連続図形検出部、２…図形描画処理選択部、３…図形描画部、４…ドロップアウト補正無し描画部、５…ドロップアウト補正付き描画部、１１…画像処理装置、１２…ネットワーク、１３…プリンタエンジン、２１…ＣＰＵ、２２…ＲＡＭ、２３…ＲＯＭ、２４…入力インタフェース、２５…プリンタエンジンインタフェース、２６…内部バス、３１…図形情報記憶部、３２…フレームバッファ。
【図１】
0003608450.tif 000002
【図２】
0003608450.tif 000003
【図３】
0003608450.tif 000004
【図４】
0003608450.tif 000005
【図５】
0003608450.tif 000006
【図６】
0003608450.tif 000007
【図７】
0003608450.tif 000008
【図８】
0003608450.tif 000009
【図９】
0003608450.tif 000010
【図１０】
0003608450.tif 000011
【図１１】
0003608450.tif 000012
【図１２】
0003608450.tif 000013
【図１３】
0003608450.tif 000014
【図１４】
0003608450.tif 000015
【図１５】
0003608450.tif 000016
【図１６】
0003608450.tif 000017
【図１７】
0003608450.tif 000018