(57)【要約】【課題】描画命令が画素に部分的にかかるときに該描画命令が画素を塗りつぶすか否かを決定する描画ルールは描画命令によって異なる。アプリケーションによって分割された画像の描画命令を実行する際に、描画領域の境界部分に、背景オブジェクトと前景オブジェクトの画素を塗る描画ルールの違いにより、元のオブジェクト画像には存在しなかった背景色の線が現れてしまう場合がある。【解決手段】本発明の画像処理装置では、一連の描画命令の領域的な包含関係と順序から最前面に現れる描画命令を特定し、それらが領域的に隣接しているならば、それらの境界部分の画素が最前面の描画命令の色で塗られるように描画命令を補正する。具体的には、描画命令の実行の順番を変更して、最前面の描画命令を結合し新たな描画命令とすること、背景の描画命令を実行しないこと、または境界部分の画素を最前面の描画命令の境界色で塗りつぶすことにより、画像不正の発生を防止する。【選択図】図９
2014229111.tif 000002
【特許請求の範囲】
【請求項１】
前景画像を背景画像に重ねる処理を行う画像処理装置であって、
画像の描画ルールに基づいて、前記前景画像の輪郭の画素において前記前景画像を用いずに前記背景画像を用いた不正描画が行われる可能性があるかどうかを判定する判定手段と、
前記判定手段によって前記前景画像の輪郭の画素において前記不正描画が行われる可能性があると判定された場合、前記輪郭の画素において前記前景画像を用いた描画をするように制御する制御手段と、
を有することを特徴とする画像処理装置。
【請求項２】
前記前景画像および背景画像は、元の前景画像および背景画像が複数のバンドに分割されたことで得られるバンド単位の画像であることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記前景画像は複数の前景画像を含み、前記複数の前景画像のうち、互いに隣接する前景画像を検出する検出手段をさらに有し、
前記判定手段は、前記検出手段によって検出された互いに隣接する前景画像の共通輪郭の画素において前記不正描画が行われる可能性があるかどうかを判定することを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記判定手段は、前記互いに隣接する前景画像の描画ルールが、描画領域にわずかでも交差する画素を塗りつぶすルールでない場合に、前記共通輪郭の画素において前記不正描画が行われる可能性があると判定することを特徴とする請求項３に記載の画像処理装置。
【請求項５】
前記制御手段は、前記背景画像の描画を先に行った後に、前記前景画像の描画を行うように描画の順序を変更することにより、前記制御を行うことを特徴とする請求項１から４のいずれかに記載の画像処理装置。
【請求項６】
前記制御手段は、前記前景画像の描画を行う前に前記前景画像を結合することを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記制御手段は、前記前景画像と前記背景画像を分離してスプールし、スプールした前記背景画像の描画を先に行って、スプールした前記前景画像の描画を行うことにより、描画の順序を変更することを特徴とする請求項５または６に記載の画像処理装置。
【請求項８】
前記制御手段は、前記背景画像の描画をスキップすることにより、前記制御を行うことを特徴とする請求項１から４のいずれかに記載の画像処理装置。
【請求項９】
前記制御手段は、前記前景画像のみをスプールし、スプールした前記前景画像の描画を行うことにより、前記背景画像の描画をスキップすることを特徴とする請求項８に記載の画像処理装置。
【請求項１０】
前記制御手段は、前記前景画像の描画および前記背景画像の描画を行った後に、前記前景画像の前記輪郭の画素において、前記前景画像を用いて塗りつぶす補間処理を行うことにより、前記制御を行うことを特徴とする請求項１から４のいずれかに記載の画像処理装置。
【請求項１１】
描画領域が重なる画像のうち、描画が最後に行われる画像を前記前景画像と特定する特定手段をさらに有することを特徴とする請求項１から８のいずれかに記載の画像処理装置。
【請求項１２】
前景画像を背景画像に重ねる処理を行う画像処理方法であって、
描画ルールに基づいて、前記前景画像の輪郭の画素において前記前景画像を用いずに前記背景画像を用いた不正描画が行われる可能性があるかどうかを判定する判定ステップと、
前記判定ステップによって前記前景画像の輪郭の画素において前記不正描画が行われる可能性があると判定された場合、前記輪郭の画素において前記前景画像を用いた描画をするように制御する制御ステップと、
を有することを特徴とする画像処理方法。
【請求項１３】
コンピュータに請求項１から１１のいずれかに記載の画像処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法およびプログラムに関し、より詳細には、前景画像を背景画像に重ねる処理を行う画像処理装置、画像処理方法およびプログラムに関する。
【背景技術】
【０００２】
従来、画像形成システムでは入力情報に基づき画像形成システムに適した印刷情報を作成して画像出力を行うことができる。具体的には、入力された描画命令に含まれる属性情報に基づき、画像処理パラメーターを変更して画像を生成する。ここで属性情報とは描画命令の種類を示す情報で、例えばテキスト、ライン、グラフィック、イメージなどがある。
【０００３】
描画命令としては同一の領域を塗る命令であっても、属性情報がグラフィックとイメージのように異なる場合、画素の色をその描画命令に従って決める際に用いられるルール（描画命令の描画ルール）が異なる場合がある。例えば、ＰｏｓｔＳｃｒｉｐｔ（登録商標）の描画処理においては、属性情報に応じて異なる描画ルールが規定されている（非特許文献１参照）。ラインやテキスト、グラフィックの属性を持つオブジェクトの描画は、そのオブジェクトの描画領域にわずかでも交差する画素を塗りつぶす（以下、交差ルールと呼ぶ）。イメージの属性を持つオブジェクトの描画は、画素の中心がそのオブジェクトの描画領域内にある画素のみを塗りつぶす（以下、中心ルールと呼ぶ）。属性情報によって画素単位の描画ルールが異なるのはＰｏｓｔＳｃｒｉｐｔ（登録商標）に限定されるものではなく、他のページ記述言語でも同様の場合がある。
【０００４】
一方、近年のアプリケーションやＯＳの多様化により、描画命令が複雑化し、描画処理、画像処理の負荷が増大してきている。複雑な描画命令を高速に処理するために、コンピュータの処理の都合上、アプリケーションが一つのオブジェクトの画像（オブジェクト画像と呼ぶ）を複数の描画命令に分割することがある。その理由としては例えば、オブジェクト画像が大きくなるにつれてデータ量も極めて大きくなり、そのオブジェクトを一体として処理するには処理資源の負担が大きくなるからである。一般にアプリケーションのオブジェクト画像の分割処理では、オブジェクト画像が、互いに隣接する複数の描画領域に分割される。言い換えれば、元々は一つのオブジェクト画像が、複数の描画命令に分割される。それぞれの描画領域について背景オブジェクトを描画するための一つまたは複数の背面の描画命令と前景オブジェクトを描画するための一つの最前面の描画命令が発行される。なお、処理される描画領域の順は、描画の方向（例えば、ページの下から上）によって決める。各描画領域について、背面の描画命令が先に発行され、最前面の描画命令が最後に発行される。
【０００５】
分割後の複数の描画命令の描画結果が、元々一つのオブジェクト画像であったか否かをここでは描画命令の一体性と呼ぶ。分割された描画命令の一体性を描画時に判定する技術として、描画命令の領域配置の情報と、拡大率、解像度、デフォルト設定色などからなる内容情報とを用いて、描画命令の一体性を判定する技術がある（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第３７０７５２３号公報
【非特許文献】
【０００７】
【非特許文献１】ＰｏｓｔＳｃｒｉｐｔリファレンスマニュアル第３版（アドビシステムズ著、株式会社アスキー発行）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１の技術では、描画命令の描画ルールに特別の考慮を行っていない。アプリケーションによって分割された描画命令を実行する際に、描画領域の境界部分に、背景オブジェクトと前景オブジェクトの画素を塗る描画ルールの違いにより、元のオブジェクト画像には存在しなかった背景色の線が現れてしまう場合がある。特許文献１の技術では、このような画像不正を検出することができない。以下、このような画像不正の発生について、図４から図７を用いて具体的に説明する。
【０００９】
図４は、アプリケーション上のオブジェクト画像の例である。図４のオブジェクト画像４００は、アプリケーションによって処理される元のオブジェクト画像である。
【００１０】
図５は、アプリケーションが生成する描画命令の例である。アプリケーションは、複雑な描画命令を高速に処理するため、オブジェクト画像を複数の描画命令に分割して生成する場合がある。この例では、描画領域をグラフィック（例えば白色の背景色）で描画する４つのグラフィック描画命令と、そのグラフィックの前面にオブジェクト画像を描画する４つのイメージ描画命令と、最後にページを出力するページ出力命令５０９とに分割されている。グラフィック描画命令５０１、５０３、５０５、５０７の属性情報はグラフィックであり、イメージ描画命令５０２、５０４、５０６、５０８の属性情報はイメージである。グラフィック描画命令およびイメージ描画命令の第１引数から第４引数は、描画領域の左下のＸ座標、Ｙ座標、右上のＸ座標、Ｙ座標を表している。座標の単位はｐｔ（ポイント；１／７２ｉｎｃｈ）である。グラフィック描画命令の第５引数は、描画の色を表し、この例では白である。イメージ描画命令の第５引数は、イメージデータを格納した変数を表す。イメージデータの内容はこの例では省略している。
【００１１】
描画命令は、５０１、５０２、５０３、・・・の順に発行されており、描画領域が重なる場合に最後に発行された描画命令に従って描画が行われる。一般にアプリケーションのオブジェクト画像の分割処理では、背面の一つまたは複数の描画命令とそれらを領域的に包含する最前面の描画命令を一つの単位として、それらが領域的に隣接する一連の描画命令として生成されることが多い。この例では、グラフィック描画命令５０１、５０３、５０５、５０７は、背面の描画命令であり、イメージ描画命令５０２、５０４、５０６、５０８は、それぞれグラフィック描画命令５０１、５０３、５０５、５０７を領域的に包含する最前面の描画命令である。
【００１２】
図６（ａ）は、図５の描画命令によって描画されるオブジェクトの位置関係を模式的に表した図である。グラフィック６０１、６０３、６０５、６０７は、グラフィック描画命令５０１、５０３、５０５、５０７（背面の描画命令）でそれぞれ描画される背景オブジェクトである。イメージ６０２、６０４、６０６、６０８は、イメージ描画命令５０２、５０４、５０６、５０８（最前面の描画命令）でそれぞれ描画される前景オブジェクトである。グラフィック６０１、６０３、６０５、６０７は隣り合う輪郭の座標の間に差分があり、隣接していない。ここではグラフィック６０１、６０３、６０５、６０７が隣接していない例を示したが、隣接していても処理の説明としては同様である。イメージ６０２、６０４、６０６、６０８は隣り合う輪郭の座標が完全に一致しており、隣接している。このように、イメージ６０２、６０４、６０６、６０８の領域はそれぞれ、グラフィック６０１、６０３、６０５、６０７の領域を完全に包含し、かつ、前面に位置している。
【００１３】
図６（ｂ）は、イメージ６０２とイメージ６０４との境界上の部分領域６０９を拡大した図である。図６（ｂ）には画素６１０およびその中心６１１が示されており、画素６１０の大きさは画像処理システムの解像度に依存する。ここでは、簡単のため画素の大きさを１．０ｐｔとしている。この例では、グラフィック６０１の輪郭６１２と、グラフィック６０３の輪郭６１４と、イメージ６０２とイメージ６０４の境界６１３が全て画素６１０を通過している。ここで、「輪郭」は領域の内部と外部を分ける線を意味する語として用い、「境界」は二つの隣接する領域が互いに接している線を意味する語として用いている。
【００１４】
ＰｏｓｔＳｃｒｉｐｔ（登録商標）の描画ルールによって、グラフィック６０１、６０３は、交差ルールで描画されるため、描画領域にかかる画素６１０を塗りつぶす。一方、イメージ６０２、６０４は中心ルールで描画されるため、画素６１０の中心６１１が描画領域内にあるイメージ６０２のみが画素６１０を塗りつぶし、イメージ６０４は画素６１０を塗りつぶさない。すなわち、描画ルールによっては、背景オブジェクトであるグラフィック６０１、前景オブジェクトであるイメージ６０２、および背景オブジェクトであるグラフィック６０３は画素６１０を塗りつぶす。前景オブジェクトであるイメージ６０４は画素６１０を塗りつぶさない。さらに、描画領域が重なる場合に最後に発行された描画命令に従って描画が行われるため、画素６１０は背景オブジェクトであるグラフィック６０３の色で塗りつぶされる。
【００１５】
図７は、図５の描画命令の描画結果を模式的に表した図である。前景オブジェクトであるイメージ６０２、６０４、６０６、６０８の境界上に位置する画素は、背景オブジェクトであるグラフィック６０３、６０５、６０７の色で塗りつぶされ、１画素幅の白線７０１として現れる。これは元のオブジェクト画像４００には存在しなかった線であり、画像不正としてユーザに認識される。なお、図７において、白線７０１の輪郭は説明のために付加したもので、実際には描画されない。
【００１６】
上述したように、特許文献１の技術では、描画命令の描画ルールに特別の考慮は行っていない。そのため、背景オブジェクトと前景オブジェクトの画素を塗る描画ルールの違いにより発生する、分割された描画命令によって描画されるオブジェクト同士の境界部分の画像不正を検出することができない。
【課題を解決するための手段】
【００１７】
このような課題を解決するために、本発明の画像処理装置は、前景画像を背景画像に重ねる処理を行う画像処理装置であって、描画ルールに基づいて、前記前景画像の輪郭の画素において前記前景画像を用いずに前記背景画像を用いた不正描画が行われる可能性があるかどうかを判定する判定手段と、前記判定手段によって前記前景画像の輪郭の画素において前記不正描画が行われる可能性があると判定された場合、前記輪郭の画素において前記前景画像を用いた描画をするように制御する制御手段とを有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、描画命令の描画ルールを考慮した上で、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、画像不正の発生を防止し、ユーザが所望する画像を生成することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態における、画像形成システムの構成を示すブロック図。
【図２】本発明の実施形態における、制御装置１１０において動作するソフトウェアモジュール図。
【図３】実施形態における、制御装置１１０において動作する描画補正処理ソフトウェアモジュール図。
【図４】アプリケーションにおけるオブジェクト画像の例。
【図５】アプリケーションが生成する描画命令の例。
【図６】描画命令によって描画されるオブジェクトの位置関係を模式的に表した図。
【図７】描画命令の描画結果を模式的に表した図。
【図８】本発明の実施形態における画像形成装置１００の描画ルールを説明するための図。
【図９】本発明の実施例１における画像形成装置１００の描画処理を示すフローチャート。
【図１０】本発明の実施例２における画像形成装置１００の描画処理を示すフローチャート。
【図１１】本発明の実施例３における画像形成装置１００の描画処理を示すフローチャート。
【発明を実施するための形態】
【００２０】
以下、本発明を実施するための形態について図面を用いて説明する。  
＜画像形成システムの構成＞
図１は、本実施形態における画像形成システムの構成を示す図である。図１に示すように、本実施形態における画像形成システムは、画像形成装置１００と、イーサネット（登録商標）等のＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１６０を介して画像形成装置１００と接続されているホストコンピュータ（ＰＣ）１７０および１７５を備える。
【００２１】
画像形成装置１００は、リーダー装置１２０、プリンタ装置１３０、操作表示部１４０および画像記憶部１５０、ならびにこれら各構成要素を制御する制御装置（コントローラ部）１１０を含む。
【００２２】
制御装置１１０は、ＣＰＵ１１２、ＲＯＭ１１４、ＲＡＭ１１６等を有し、ＣＰＵ１１２がＲＯＭ１１４、ＲＡＭ１１６、または他の記憶媒体に格納されたプログラムに基づいて、画像形成装置１００全体を統括制御する。例えば、制御装置１１０は、ＣＰＵ１１２に、それぞれＰＤＬ解釈処理、ディスプレイリスト生成処理、及びレンダリング処理等を行うためのあらかじめ決められたプログラムをロードする構成をとる。またレンダリング処理に関しては、ここでは記述しないが専用のハードウェアを利用しても構わない。
【００２３】
プリンタ装置１３０は、画像データの出力を行う。操作表示部１４０は、画像出力処理を行うための各種印刷設定の操作を行うキーボード、及び画像出力設定を行う操作ボタン等の表示を行う液晶パネルを備える。画像記憶部１５０は、画像データやドキュメントデータ、印刷装置制御言語（例えば、ＥＳＣコード、ＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ））などの印刷データを格納することができる。例えば、画像記憶部１５０は、ＬＡＮ１６０を介してホストコンピュータ（ＰＣ）１７０より受信した画像データ、ドキュメントデータおよびＰＤＬ、ならびにリーダー装置１２０を制御して読み込む画像データ等を格納することができる。本実施形態では、画像形成装置１００を説明するのにＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｒｉｎｔｅｒ）を例として用いた。もちろん、ＳＦＰ（Ｓｉｎｇｌｅ  Ｆｕｎｃｔｉｏｎ  Ｐｒｉｎｔｅｒ）やＬＢＰ（Ｌａｓｅｒ  Ｂｅａｍ  Ｐｒｉｎｔｅｒ）、その他のプリント方式のプリンタでもよいことは言うまでもない。
【００２４】
＜画像形成装置１００において動作するソフトウェアモジュールの構成＞
図２は、本実施形態における画像形成装置１００の制御装置１１０において動作するソフトウェアモジュールの構成を示す図である。これらソフトウェアは、画像形成装置１００におけるＲＯＭ１１４にて保存され、起動時に、ＲＡＭ１１６へ展開され、ＣＰＵ１１２によって実行されることで動作する。
【００２５】
ジョブ制御部２００は、印刷ジョブの入力から出力を関数コールやメッセージ通信などの手段によって制御する。
【００２６】
ＰＤＬ解析部２０１、２０２、２０３は、画像形成装置１００に搭載されるＰＤＬの種類（例えば、ＰｏｓｔＳｃｒｉｐｔ、ＰＣＬ、ＸＰＳなど）だけの数が存在する。ＰＤＬ解析部２０１、２０２、２０３は、ジョブ制御部２００からの制御に従い、ＰＤＬ受信バッファ（図示せず）に格納されたＰＤＬデータを読み込み、解釈処理を実行する。
【００２７】
ディスプレイリスト（Ｄｉｓｐｌａｙ  Ｌｉｓｔ）生成部２１０は、ジョブ制御部２００からの制御とＰＤＬ解析部２０１、２０２、２０３から渡された描画情報により処理を実行し、生成したディスプレイリストをメモリに格納する。
【００２８】
レンダリング処理部２２０は、ＲＡＭ１１６からディスプレイリストをロードし、レンダリング処理を実行することでディスプレイリストをイメージデータに変換し、画像記憶部１５０へ出力する処理を行う。
【００２９】
画像処理部２３０は、画像記憶部１５０から描画ビットマップイメージおよび属性ビットマップイメージをロードし、属性に応じた最適な画像処理パラメーターで画像処理を実行する。画像処理と合わせてコントーンイメージデータをハーフトーンイメージデータに変換し、画像記憶部１５０へ出力する処理を行う。
【００３０】
＜画像形成装置１００において動作する描画補正処理ソフトウェアモジュールの構成＞
図３は本実施形態におけるＰＤＬ解析部２０１、２０２、２０３に含まれる描画補正処理ソフトウェアモジュールの構成を示す図である。
【００３１】
描画命令受付部３１０は、ＰＤＬに含まれる描画命令を受付ける。
【００３２】
補正対象決定部３２０は、描画領域特定部３２１、最前面描画命令特定部３２２、隣接性判定部３２３、連続性判定部３２４、描画ルール判定部３２５を含み、描画命令受付部３１０が受付けた描画命令から補正対象となる描画処理を決定する。
【００３３】
描画領域特定部３２１は、描画命令の領域配置の情報から、描画命令の描画領域を特定する。なお描画命令の描画領域は、描画命令によって描画されるオブジェクトの描画されるべき領域のことである。
【００３４】
最前面描画命令特定部３２２は、描画命令の描画領域の情報を用いて、最前面の描画命令を特定する。隣接性判定部３２３は、描画命令の領域的な隣接性を判定する。連続性判定部３２４は、連続する描画命令から、最前面の描画命令が全て隣接する最大の単位を特定する。描画ルール判定部３２５は、描画命令の描画ルールを判定する。なお、描画命令の描画ルールは、その描画命令に従って描画される画像の描画ルールであるため、画像の描画ルールと呼ぶこともある。
【００３５】
描画命令補正部３３０は、描画命令実行順序変更部３３１、描画命令結合部３３２、描画命令スキップ部３３３、描画命令補間部３３４を含み、補正対象決定部３２０が補正対象として特定した描画命令に補正処理を行う。描画命令実行順序変更部３３１は、背面の描画命令を先に実行した後に、最前面の描画命令を実行するように描画命令の実行順序を変更することにより補正する。描画命令結合部３３２は、最前面の描画命令を結合することにより補正する。描画命令スキップ部３３３は、背面の描画処理をスキップすることにより補正する。描画命令補間部３３４は、描画命令の境界部分の画素を最前面の描画命令のいずれかで塗りつぶすことにより補正する。
【００３６】
描画命令実行部３４０は、描画命令補正部が補正した描画処理を実行する。
【００３７】
なお、これらの描画補正処理ソフトウェアは、ＰＤＬ解析部２０１、２０２、２０３ではなく、ディスプレイリスト生成部２１０、レンダリング処理部２２０、画像処理部２３０にて実装してもよい。また、複数のモジュールに分散して実装してもよいし、専用のハードウェアを利用しても構わない。これらの描画補正処理ソフトウェアの処理の詳細は、図９から図１１を参照して後述する。
【００３８】
＜画像形成装置１００の描画ルール＞
図８は、本実施例における画像形成装置１００の描画ルールを説明するための図である。描画ルールの例としては、図８に挙げた交差ルール、中心ルール、左上ルール、左辺ルールなどがあるが、この他のルールでも構わない。図８に示す画素８０１から８１２の大きさは画像形成装置１００の解像度に依存する。通常は、画像形成装置１００の解像度が６００ｄｐｉであるの場合に、画素の大きさは１／６００＝０．００１６７ｉｎｃｈとなる。また、画像形成装置１００の解像度が１２００ｄｐｉである場合、画素の大きさは１／１２００＝０．０００８３ｉｎｃｈとなる。図８に示すオブジェクト８２０は描画命令によって描画されるオブジェクトを表し、画素８０１から８１２に部分的にかかっている。
【００３９】
交差ルールでは、オブジェクト８２０は、オブジェクト８２０の領域にわずかでも交差する画素を塗りつぶす。よって、オブジェクト８２０は画素８０１、８０２、８０３を塗りつぶす。
【００４０】
中心ルールでは、オブジェクト８２０は、画素の中心がオブジェクト８２０の領域内にある画素のみを塗りつぶす。よって、オブジェクト８２０は画素８０５、８０６を塗りつぶすが、画素８０４は塗りつぶさない。
【００４１】
左上ルールでは、オブジェクト８２０は、画素の左上の頂点がオブジェクト８２０の領域内にある画素のみを塗りつぶす。よって、オブジェクト８２０は画素８０７を塗りつぶすが、画素８０８、８０９は塗りつぶさない。
【００４２】
左辺ルールでは、オブジェクト８２０は、画素の左辺がオブジェクト８２０の領域に包含される画素、および画素の左辺がオブジェクト８２０の領域とわずかでも交差する画素を塗りつぶす。よって、オブジェクト８２０は画素８１０、８１１を塗りつぶすが、画素８１２は塗りつぶさない。
【００４３】
本実施例では、ラインやテキスト、グラフィックのオブジェクトは交差ルールで描画し、イメージのオブジェクトは中心ルールで描画する。これにより、描画命令の属性情報によって描画ルールを判定することができる。しかし、本発明の対象は、ページ内に複数の描画ルールが混在するものであればこれに限定されるものではなく、例えば描画命令ごとに描画ルールを指定してもよいし、その他の条件で描画ルールを切り替えるようにしてもよい。また、上記で説明した描画ルールに限定されるものでもない。
【００４４】
（実施例１）
以下、発明を実施するための形態のうち、実施例１に特有の処理について説明する。なお、実施例１は、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、描画命令の実行順序を変更するか、もしくは最前面の描画命令を結合することにより、画像不正のないオブジェクト画像を生成する。
【００４５】
＜画像形成装置１００の描画処理＞
図９は、本実施例における画像形成装置１００の描画処理を示すフローチャートである。
【００４６】
図９の描画処理では、変数として、現在処理対象としている最新の描画命令を格納する処理対象描画命令ｃｕｒ＿ｉｎｓｔ、および直前に処理した描画命令を格納する直前描画命令ｐｒｅｖ＿ｉｎｓｔを使用する。また、キューとして、一時キューｔｍｐ＿ｑｕｅ、前景キューｆｇ＿ｑｕｅ、背景キューｂｇ＿ｑｕｅを使用する。一時キューｔｍｐ＿ｑｕｅは描画命令を一時的にスプールするキューであり、最前面の描画命令が見つかるまでの間、描画命令の実行を保留するために使用される。最前面の描画命令が見つかると、一時キューｔｍｐ＿ｑｕｅの描画命令は背面の描画命令として背景キューｂｇ＿ｑｕｅに移動され、最前面の描画命令は前景キューｆｇ＿ｑｕｅに追加される。前景キューｆｇ＿ｑｕｅは、最前面の描画命令をスプールするキューであり、最前面の描画命令が継続して隣接している間に限り、最前面の描画命令の実行を保留するために使用される。背景キューｂｇ＿ｑｕｅは、背面の描画命令をスプールするキューであり、前景キューｆｇ＿ｑｕｅと同じ期間だけ背面の描画命令の実行を保留するために使用される。このように背面の描画命令と最前面の描画命令の実行を保留し、分離してスプールすることにより、描画命令の実行順序を変更したり、最前面の描画命令のみを選択的に結合したりすることが可能となる。
【００４７】
図９のフローチャートに示す描画処理は、ＲＡＭ１１６に格納されたプログラムを実行したＣＰＵ１１２によって実行される。なお、描画処理はページごとに実行される。以下、描画処理の各ステップの処理について説明する。
【００４８】
ステップＳ９０１では、ＣＰＵ１１２が、以降の処理で使用する変数およびキュー等を初期化する。すなわち、直前描画命令ｐｒｅｖ＿ｉｎｓｔをＮＵＬLで初期化し、一時キューｔｍｐ＿ｑｕｅ、背景キューｂｇ＿ｑｕｅ、前景キューｆｇ＿ｑｕｅをクリアして空にする。
【００４９】
ステップＳ９０２では、ＣＰＵ１１２が、次の描画命令があるか否か判定する。次の描画命令がある（ＹＥＳ）と判定した場合は、次の描画命令を読み込んで、ステップＳ９０３に進む。次の描画命令がない（ＮＯ）と判定した場合はステップＳ９１６に進む。
【００５０】
ステップＳ９０３では、ＣＰＵ１１２が、処理対象描画命令ｃｕｒ＿ｉｎｓｔの値を、ステップＳ９０２で読み込んだ描画命令に設定する。
【００５１】
ステップＳ９０４では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔがＮＵＬLであるか否かを判定する。ＮＵＬＬである（ＹＥＳ）と判定した場合は、ステップＳ９０７に進む。ＮＵＬＬでない（ＮＯ）と判定した場合はステップＳ９０５に進む。
【００５２】
ステップＳ９０５では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域が、処理対象描画命令ｃｕｒ＿ｉｎｓｔの描画領域に含まれるか否かを判定する。描画領域が同一である場合も、含まれるものとして判定する。含まれる（ＹＥＳ）と判定した場合はステップＳ９０６に進む。含まれない（ＮＯ）と判定した場合はステップＳ９０８に進む。本ステップの処理により、描画命令の描画領域が直後の描画命令の描画領域に含まれるか否かを判定することができ、含まれる場合は背面の描画命令として、含まれない場合は最前面の描画命令として、判定することができる。
【００５３】
ステップＳ９０６では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（ステップＳ９０５で特定した背面の描画命令）を一時キューｔｍｐ＿ｑｕｅに追加する。
【００５４】
ステップＳ９０７では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値を、処理対象描画命令ｃｕｒ＿ｉｎｓｔに格納した描画命令に設定する。
【００５５】
ステップＳ９０２からステップＳ９０７までの処理により、背面の描画命令がｔｍｐ＿ｑｕｅに格納される。一方、ステップＳ９０５でＮＯとなった時点で、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値は、最前面の描画命令と判定され、処理はステップＳ９０８に進む。
【００５６】
ステップＳ９０８では、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画ルール（ステップＳ９０５で特定した最前面の描画命令の描画ルール）が交差ルールであるか否かを判定する。本実施例では、描画ルールは描画命令の属性情報と対応するため、本ステップの判定は、直前描画命令ｐｒｅｖ＿ｉｎｓｔの属性情報が、ライン、テキスト、グラフィックのいずれかである場合は交差ルールであると判定することにより行われる。最前面の描画命令の描画ルールが交差ルールである場合に、当該最前面の描画命令と直前の最前面の描画命令との境界部分（共通輪郭）における画素は、必ず当該最前面の描画命令で塗りつぶされることになるため、画像不正は生じない。そのため、当該最前面の描画命令およびその描画領域に含まれる背面の描画命令と、その前の描画命令との間の実行順序の変更は行わなくてもよい。一方、最前面の描画命令の描画ルールが交差ルールでない場合に、オブジェクト画像の分割処理に起因する画像不正が発生しうる（前景画像の輪郭の画素において前景画像を用いず背景画像を用いた不正描画が行われる可能性がある）と判定する。本ステップでは、交差ルールである（ＹＥＳ）と判定した場合にステップＳ９１１に進み、交差ルールでない（ＮＯ）と判定した場合にステップＳ９０９に進む。
【００５７】
なお、本ステップの判定処理をスキップしてステップＳ９０９に進んでもよい。また、ここで、交差ルールと中心ルールが混在する場合に最前面の描画命令の描画ルールが交差ルールであれば画像不正を生じないと判定することを説明したが、本ステップで、画像不正を生じない他の判定方法を用いてもよい。例えば、左上ルールと中心ルールが混在し、かつ、描画命令がページの下から上に向かって描画された場合は、最前面の描画命令の描画ルールが左上ルールであれば画像不正は生じないため、そのような場合にはステップＳ９１１に進むように制御してもよい。
【００５８】
ステップＳ９０９では、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅが空であるか否かを判定する。空である（ＹＥＳ）と判定した場合、ステップＳ９１３に進む。空でない（ＮＯ）と判定した場合、ステップＳ９１０に進む。
【００５９】
ステップＳ９１０では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域（ステップＳ９０５で特定した最前面の描画命令の描画領域）が、前景キューｆｇ＿ｑｕｅに格納された描画命令の描画領域に隣接するか否かを判定する。ここで、描画領域が隣接するとは、空間的に隣り合う描画命令で描画されるオブジェクトの輪郭の一部の区間が完全に同じ座標である状態を意味し、例えば、隣り合う２つの矩形（バンド単位の画像）の一辺の座標が一致している場合などが該当する。例えば、イメージ描画命令５０２、５０４は、その描画命令で描画されるイメージ６０２、６０４の輪郭の一部の区間が（Ｘ＝１００．９，Ｙ＝２００．６）と（Ｘ＝３００．６，Ｙ＝２００．６）とを結ぶ線分で一致しているため、隣接している。一方、グラフィック描画命令５０１、５０３は、その描画命令で描画されるグラフィック６０１、６０３の輪郭に同じ座標である区間を持たないため、隣接していない。輪郭の一部の区間が同じ座標であればよく、それ以外の領域が重なっていたりしてもよい。
【００６０】
ステップＳ９１０の処理により、ステップＳ９０５で特定した最前面の描画命令が互いに隣接するか否かを判定すること（隣接する前景画像を検出すること）ができる。最前面の描画命令が隣接していない場合に、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、当該最前面の描画命令およびその描画領域に含まれる背面の描画命令と、その前の描画命令との間の実行順序の変更は行わなくてもよい。ステップＳ９１０では、隣接する（ＹＥＳ）と判定した場合に、ステップＳ９１３に進み、隣接していない（ＮＯ）と判定した場合に、ステップＳ９１１に進む。具体的には、最前面の描画命令が互いに隣接していないと判定した場合に、ステップＳ９１１以降の処理で、スプールした描画命令を実行およびクリアする処理を行い、その後で、描画命令のスプールを新たに開始する。最前面の描画命令が互いに隣接すると判定した場合に、ステップＳ９１３以降の処理で、描画命令のスプールを継続する。このような構成により、最前面の描画命令が全て隣接する一連の描画命令の最大の単位に処理を適用することができ、描画命令の一体性の判定の精度を向上することができる。また、最前面の描画命令が隣接していない場合に、描画命令のスプールを新たに開始するため、描画命令をページ全体にわたってスプールする手法に比べて、高速かつ省メモリで処理することができる。
【００６１】
ステップＳ９１１では、ＣＰＵ１１２が、背景キューｂｇ＿ｑｕｅの描画命令を実行してクリアする。ここで、ＣＰＵ１１２は、背景キューｂｇ＿ｑｕｅに格納した順に描画命令を実行する。
【００６２】
ステップＳ９１２では、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅの描画命令を実行してクリアする。ここで、ＣＰＵ１１２は、前景キューｆｇ＿ｑｕｅに格納した順に描画命令を実行する。他の実施例としては、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅの描画命令を結合し、新たな描画命令を生成して実行するようにしてもよい。
【００６３】
ステップＳ９１１、ステップＳ９１２の処理により、スプールした描画命令について、背面の描画命令をまとめて実行し、その後で、最前面の描画命令をまとめて実行することができる。本ステップの処理により、最前面の描画命令が背面の描画命令より後に実行されるようになり、画像不正のないオブジェクト画像を生成することができる。
【００６４】
ステップＳ９１３では、ＣＰＵ１１２が、背景キューｂｇ＿ｑｕｅに一時キューｔｍｐ＿ｑｕｅを結合する。この処理は、背景キューｂｇ＿ｑｕｅの最後に一時キューｔｍｐ＿ｑｕｅに格納された描画命令を追加することによって行われる。
【００６５】
ステップＳ９１４では、ＣＰＵ１１２が、一時キューｔｍｐ＿ｑｕｅをクリアして空にする。
【００６６】
ステップＳ９１５では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令を前景キューｆｇ＿ｑｕｅに追加する。
【００６７】
ステップＳ９０８からステップＳ９１５までの処理により、背面の描画命令を背景キューｂｇ＿ｑｕｅに、最前面の描画命令を前景キューに格納することができる。そして、最前面の描画命令の隣接性を判定し、最前面の描画命令が隣接していないと判定した時点で、背面の描画命令をまとめて実行した後に、最前面の描画命令をまとめて実行するよう、描画命令の実行順序を変更して実行することができる。
【００６８】
ステップＳ９１６では、ＣＰＵ１１２が、背景キューｂｇ＿ｑｕｅの描画命令を実行してクリアする。ここで、ＣＰＵ１１２は、背景キューｂｇ＿ｑｕｅに格納した順に描画命令を実行する。
【００６９】
ステップＳ９１７では、ＣＰＵ１１２が、一時キューｔｍｐ＿ｑｕｅの描画命令を実行してクリアする。ここで、ＣＰＵ１１２は、一時キューｔｍｐ＿ｑｕｅに格納した順に描画命令を実行する。
【００７０】
ステップＳ９１８では、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅの描画命令を実行してクリアする。ここで、ＣＰＵ１１２は、前景キューｆｇ＿ｑｕｅに格納した順に描画命令を実行する。他の実施例としては、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅの描画命令を結合し、新たな描画命令を生成して実行するようにしてもよい。
【００７１】
ステップＳ９１９では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令を実行する。本ステップが終了すると、ＣＰＵ１１２は、描画処理を終了する。
【００７２】
本実施例の描画処理フローで図５のグラフィック描画命令を処理することにより、画像不正のないオブジェクト画像を生成することができる。
【００７３】
グラフィック描画命令５０１についての処理においては、ステップＳ９０２でグラフィック描画命令５０１が次の描画命令であると判定し、ステップＳ９０３で処理対象描画命令ｃｕｒ＿ｉｎｓｔの値をグラフィック描画命令５０１に設定する。そして、ステップＳ９０４で直前描画命令ｐｒｅｖ＿ｉｎｓｔがＮＵＬＬであると判定し、ステップＳ９０７に進む。ステップＳ９０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値を、処理対象描画命令ｃｕｒ＿ｉｎｓｔに格納したグラフィック描画命令５０１に設定する。グラフィック描画命令５０１についての処理が終了すると、フローはステップＳ９０２に戻る。
【００７４】
イメージ描画命令５０２についての処理においては、ステップＳ９０２でイメージ描画命令５０２が次の描画命令であると判定し、ステップＳ９０３で処理対象命令ｃｕｒ＿ｉｎｓｔの値をイメージ描画命令５０２に設定する。この時点で、処理対象命令ｃｕｒ＿ｉｎｓｔの値がイメージ描画命令５０２となり、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がグラフィック描画命令５０１となる。そして、ステップＳ９０４で直前描画命令ｐｒｅｖ＿ｉｎｓｔがＮＵＬＬではないと判定し、ステップＳ９０５に進む。ステップＳ９０５で直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域が処理対象命令ｃｕｒ＿ｉｎｓｔの描画領域に含まれることから、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納したグラフィック描画命令５０１を背面の描画命令と特定し、ステップＳ９０６に進む。ステップＳ９０６では、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納したグラフィック描画命令５０１を一時キューｔｍｐ＿ｑｕｅに追加する。そして、ステップＳ９０７では、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値を、処理対象描画命令ｃｕｒ＿ｉｎｓｔに格納したイメージ描画命令５０２に設定する。イメージ描画命令５０２についての処理が終了すると、フローはステップＳ９０２に戻る。
【００７５】
グラフィック描画命令５０３についての処理においては、ステップＳ９０２でグラフィック描画命令５０３が次の描画命令であると判定し、ステップＳ９０３で処理対象命令ｃｕｒ＿ｉｎｓｔの値をグラフィック描画命令５０３に設定する。この時点で、処理対象命令ｃｕｒ＿ｉｎｓｔの値がグラフィック描画命令５０３となり、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がイメージ描画命令５０２となる。そして、ステップＳ９０４で直前描画命令ｐｒｅｖ＿ｉｎｓｔがＮＵＬＬではないと判定し、ステップＳ９０５に進む。ステップＳ９０５で直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域が処理対象命令ｃｕｒ＿ｉｎｓｔの描画領域に含まれないことから、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納したイメージ描画命令５０２を最前面の描画命令と特定し、ステップＳ９０８に進む。ステップＳ９０８で直前描画命令ｐｒｅｖ＿ｉｎｓｔ（イメージ描画命令５０２）の描画ルールが交差ルールではなく中心ルールであると判定する。そして、ステップＳ９０９で前景キューｆｇ＿ｑｕｅが空であると判定し、ステップＳ９１３に進む。ステップＳ９１３では、イメージ描画命令５０２についての処理において一時キューｔｍｐ＿ｑｕｅに追加されたグラフィック描画命令５０１を背景キューｂｇ＿ｑｕｅの最後に追加する。ステップＳ９１４で一時キューｔｍｐ＿ｑｕｅをクリアし、ステップＳ９１５で直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納したイメージ描画命令５０２を前景キューｆｇ＿ｑｕｅに追加する。さらに、ステップＳ９０７では、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値を、処理対象命令ｃｕｒ＿ｉｎｓｔに格納したグラフィック描画命令５０３に設定する。グラフィック描画命令５０３についての処理が終了すると、フローはステップＳ９０２に戻る。
【００７６】
次に、イメージ描画命令５０４についての処理により、グラフィック描画命令５０３が一時キューｔｍｐ＿ｑｕｅに追加され、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がイメージ描画命令５０４となる。
【００７７】
グラフィック描画命令５０５についての処理により、グラフィック描画命令５０３が背景キューｂｇ＿ｑｕｅに追加され、グラフィック描画命令５０５が前景キューｆｇ＿ｑｕｅに追加され、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がイメージ描画命令５０４となる。
【００７８】
イメージ描画命令５０６についての処理により、グラフィック描画命令５０５が一時キューｔｍｐ＿ｑｕｅに追加され、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がイメージ描画命令５０６となる。
【００７９】
グラフィック描画命令５０７についての処理により、グラフィック描画命令５０５が背景キューｂｇ＿ｑｕｅ追加され、イメージ描画命令５０６が前景キューｆｇ＿ｑｕｅに追加され、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がグラフィック描画命令５０７となる。
【００８０】
イメージ描画命令５０８についての処理により、グラフィック描画命令５０７が一時キューｔｍｐ＿ｑｕｅに追加され、直前描画命令ｐｒｅｖ＿ｉｎｓｔの値がイメージ描画命令５０８となる。なお、この時点で、背景キューｂｇ＿ｑｕｅにはグラフィック描画命令５０１、５０３、５０５が格納されており、前景キューｆｇ＿ｑｕｅにはイメージ描画命令５０２、５０４、５０６が格納されている。
【００８１】
イメージ描画命令５０８についての処理が終了すると、フローはステップＳ９０２に戻る。ステップＳ９０２では、次の描画命令がないと判定し、ステップＳ９１６からステップＳ９１９までの処理に進む。ステップＳ９１６では、背景キューｂｇ＿ｑｕｅに格納したグラフィック描画命令５０１、５０３、５０５が順に実行され、ステップＳ９１７では、ｔｍｐ＿ｑｕｅに格納したグラフィック描画命令５０７が実行される。そして、ステップＳ９１８では、前景キューｆｇ＿ｑｕｅに格納したイメージ描画命令５０２、５０４、５０６が順に実行され、ステップＳ９１９では、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納したイメージ描画命令５０８が実行される。
【００８２】
以上の処理により、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定する。境界部分に画像不正が発生しうる描画領域について、描画命令の実行順序を、背面の描画命令をまとめて実行した後に、最前面の描画命令をまとめて実行するように変更する。それによって、描画領域の境界部分の画素において最前面の描画命令を用いて描画を行うことを確保することができ、ユーザが所望する画像を生成することができる。また、一連の連続する描画命令の中で、隣接する最前面の描画命令をまとめて実行することにより、最前面の描画命令が全て隣接する一連の描画命令の最大の単位に処理を適用することができ、描画命令の一体性の判定の精度を向上することができる。
【００８３】
（実施例２）
以下、発明を実施するための形態のうち、実施例２に特有の処理について説明する。なお、実施例２は、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、背景の描画命令の実行をスキップすることにより、ユーザが所望する画像を生成する。特に言及しない限り、実施例１と同様の処理については説明を省略する。
【００８４】
＜画像形成装置１００の描画処理＞
図１０は、本実施例における画像形成装置１００の描画処理を示すフローチャートである。
【００８５】
図１０の描画処理では、変数として、処理対象描画命令ｃｕｒ＿ｉｎｓｔ、直前描画命令ｐｒｅｖ＿ｉｎｓｔ、および終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓを使用する。また、キューとして、一時キューｔｍｐ＿ｑｕｅ、前景キューｆｇ＿ｑｕｅを使用する。フラグとして、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓを使用する。処理対象描画命令ｃｕｒ＿ｉｎｓｔは現在処理対象としている最新の描画命令を格納し、直前描画命令ｐｒｅｖ＿ｉｎｓｔは直前に処理した描画命令を格納する。終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓは、描画処理を終了するか否かの状態を管理するためのフラグであり、ページ内に次の描画命令がない場合にＴＲＵＥに設定される。一時キューｔｍｐ＿ｑｕｅは描画命令を一時的にスプールするキューであり、最前面の描画命令が見つかるまでの間、描画命令をスプールするように使用される。前景キューｆｇ＿ｑｕｅは、最前面の描画命令をスプールするキューであり、最前面の描画命令が継続して隣接している間に限り、最前面の描画命令をスプールするように使用される。
【００８６】
図１０のフローチャートの処理は、ＲＡＭ１１６に格納されたプログラムを実行したＣＰＵ１１２によって実行される。描画処理はページごとに実行される。
【００８７】
以下、描画処理の各ステップの処理について説明する。
【００８８】
ステップＳ１００１では、ＣＰＵ１１２が、以降の処理で使用する変数およびキュー等を初期化する。すなわち、直前描画命令ｐｒｅｖ＿ｉｎｓｔをＮＵＬLで初期化し、一時キューｔｍｐ＿ｑｕｅ、前景キューｆｇ＿ｑｕｅをクリアして空にし、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓをＦＡＬＳＥに設定する。
【００８９】
ステップＳ１００２では、ＣＰＵ１１２が、次の描画命令があるか否か判定する。次の描画命令がある（ＹＥＳ）と判定した場合は、次の描画命令を読み込んで、ステップＳ１００３に進む。次の描画命令がない（ＮＯ）と判定した場合はステップＳ１０１７に進む。
【００９０】
ステップＳ１００３、Ｓ１００４、Ｓ１００５、Ｓ１００６、Ｓ１００７の処理は、それぞれステップＳ９０３、Ｓ９０４、Ｓ９０５、Ｓ９０６、Ｓ９０７の処理と同様であるため説明を省略する。
【００９１】
ステップＳ１００８では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画ルールが交差ルールであるか否かを判定する。本ステップの詳細は、ステップＳ９０８と同様であるため省略する。最前面の描画命令の描画ルールが交差ルールである場合には、当該最前面の描画命令と直前の最前面の描画命令との境界部分における画素は、必ず当該最前面の描画命令で塗りつぶされることになるため、画像不正は生じない。そのため、当該最前面の描画領域に含まれる背面の描画命令の実行をスキップしなくてもよい。本ステップでは、交差ルールである（ＹＥＳ）と判定した場合にステップＳ１０１１に進み、交差ルールでない（ＮＯ）と判定した場合にステップＳ１００９に進む。
【００９２】
ステップＳ１００９では、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅが空であるか否かを判定する。空である（ＹＥＳ）と判定した場合、ステップＳ１０１１に進む。空でない（ＮＯ）と判定した場合、ステップＳ１０１０に進む。
【００９３】
ステップＳ１０１０では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域が、前景キューｆｇ＿ｑｕｅに格納された描画命令の描画領域に隣接するか否かを判定する。本ステップの詳細は、ステップＳ９１０と同様であるため省略する。本ステップの処理により、ステップＳ１００５で特定した最前面の描画命令が互いに隣接するか否かを判定することができる。最前面の描画命令が隣接していない場合に、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、当該最前面の描画領域に含まれる背面の描画命令の実行をスキップしなくてもよい。本ステップでは、隣接する（ＹＥＳ）と判定した場合にステップＳ１０１３に進み、隣接していない（ＮＯ）と判定した場合にステップＳ１０１１に進む。具体的には、最前面の描画命令が互いに隣接していないと判定した場合に、ステップＳ１０１１の処理で、スプールした背面の描画命令（当該最前面の描画命令の描画領域に含まれる背面の描画命令）を実行する。また、ステップＳ１０１２の処理で、スプールした隣接する最前面の描画命令をクリアする。最前面の描画命令が互いに隣接すると判定した場合に、ステップＳ１０１３以降の処理で、スプールした背面の描画命令を実行せずにクリアする。
【００９４】
ステップＳ１０１１では、ＣＰＵ１１２が、一時キューｔｍｐ＿ｑｕｅの描画命令を実行する。ここで、ＣＰＵ１１２は、一時キューｔｍｐ＿ｑｕｅに格納した順に描画命令を実行する。
【００９５】
ステップＳ１０１２では、ＣＰＵ１１２が、前景キューｆｇ＿ｑｕｅの描画命令をクリアして空にする。
【００９６】
ステップＳ１０１３では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令を実行する。
【００９７】
ステップＳ１０１４では、ＣＰＵ１１２が、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓがＴＲＵＥであるか否かを判定する。ＴＲＵＥである（ＹＥＳ）と判定した場合、描画処理を終了する。ＦＡＬＳＥである（ＮＯ）と判定した場合、ステップＳ１０１５に進む。
【００９８】
ステップＳ１０１５では、ＣＰＵ１１２が、一時キューｔｍｐ＿ｑｕｅの描画命令をクリアして空にする。
【００９９】
ステップＳ１０１６では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令を前景キューｆｇ＿ｑｕｅに追加する。
【０１００】
ステップＳ１００８からステップＳ１０１６までの処理により、背面の描画命令を即座に実行せず、一時キューｔｍｐ＿ｑｕｅに格納することができる。そして、最前面の描画命令の隣接性を判定し、最前面の描画命令が隣接している場合には、オブジェクト画像の分割処理に起因する画像不正が発生しうると判定し、一時キューｔｍｐ＿ｑｕｅに格納された背面の描画命令を実行することなくクリアすることができる。最前面の描画命令が隣接していない場合には、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、通常通り一時キューｔｍｐ＿ｑｕｅに格納された背面の描画命令を実行することができる。
【０１０１】
ステップＳ１００２で次の描画命令がないと判定した場合に、処理はステップＳ１０１７に進む。ステップＳ１０１７では、ＣＰＵ１１２が、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓをＴＲＵＥに設定する。本ステップの処理が終了するとステップＳ１００８に進む。そして、ステップＳ１００８からステップＳ１０１３の処理を実行してから、ステップＳ１０１４で終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓがＴＲＵＥと判定し、描画処理を終了する。
【０１０２】
本実施例の描画処理フローで図５のグラフィック描画命令を処理することにより、画像不正のないオブジェクト画像を生成することができる。
【０１０３】
グラフィック描画命令５０１についての処理において、ステップＳ１００７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をグラフィック描画命令５０１に設定する。
【０１０４】
イメージ描画命令５０２についての処理において、ステップＳ１００５で特定した背面の描画命令（グラフィック描画命令５０１）を一時キューｔｍｐ＿ｑｕｅに格納する。また、ステップＳ１００７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０２に設定する。
【０１０５】
グラフィック描画命令５０３についての処理において、ステップＳ１００５でイメージ描画命令５０２を最前面の描画命令と特定し、ステップＳ１００８からステップＳ１０１０の判定処理に進む。前景キューｆｇ＿ｑｕｅが空であるため、処理はステップＳ１０１１に進む。ステップＳ１０１０で、通常通り一時キューｔｍｐ＿ｑｕｅに格納された背面の描画命令（グラフィック描画命令５０１）を実行する。そして、ステップＳ１０１３では、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した最前面の描画命令（イメージ描画命令５０２）を実行する。さらに、ステップＳ１０１５では、実行された背面の描画命令（グラフィック描画命令５０１）を格納した一時キューｔｍｐ＿ｑｕｅをクリアする。ステップＳ１０１６では、イメージ描画命令５０２を前景キューｆｇ＿ｑｕｅに追加し、当該前景キューｆｇ＿ｑｕｅは最前面の描画命令の隣接性を判定するために用いられる。
【０１０６】
イメージ描画命令５０４についての処理は、イメージ描画命令５０２についての処理と類似である。イメージ描画命令５０４についての処理において、ステップＳ１００５で特定した背面の描画命令（グラフィック描画命令５０３）を一時キューｔｍｐ＿ｑｕｅに格納する。また、ステップＳ１００７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０４に設定する。
【０１０７】
グラフィック描画命令５０５についての処理において、ステップＳ１００５でイメージ描画命令５０４を最前面の描画命令と特定し、ステップＳ１００８からステップＳ１０１０の判定処理に進む。最前面の描画命令が隣接していると判定され、一時キューｔｍｐ＿ｑｕｅに格納された背面の描画命令（グラフィック描画命令５０５）の実行をスキップし、ステップＳ１０１３以降の処理に進む。ステップＳ１０１３では、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した最前面の描画命令（イメージ描画命令５０４）を実行する。ステップＳ１０１５では、背面の描画命令を格納した一時キューｔｍｐ＿ｑｕｅをクリアする。ステップＳ１０１６では、イメージ描画命令５０４を前景キューｆｇ＿ｑｕｅに追加する。
【０１０８】
イメージ描画命令５０６についての処理は、イメージ描画命令５０２、５０４についての処理と類似である。イメージ描画命令５０６についての処理において、ステップＳ１００５で特定した背面の描画命令（グラフィック描画命令５０５）を一時キューｔｍｐ＿ｑｕｅに格納する。また、ステップＳ１００７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０６に設定する。
【０１０９】
グラフィック描画命令５０７についての処理は、グラフィック描画命令５０５についての処理と類似である。グラフィック描画命令５０７についての処理では、一時キューｔｍｐ＿ｑｕｅに格納された背面の描画命令（グラフィック描画命令５０５）の実行をスキップする。また、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した最前面の描画命令（イメージ描画命令５０６）を実行し、背面の描画命令を格納した一時キューｔｍｐ＿ｑｕｅをクリアし、イメージ描画命令５０６を前景キューｆｇ＿ｑｕｅに追加する。
【０１１０】
イメージ描画命令５０８についての処理は、イメージ描画命令５０２、５０４、５０６についての処理と類似である。イメージ描画命令５０８についての処理において、ステップＳ１００５で特定した背面の描画命令（グラフィック描画命令５０７）を一時キューｔｍｐ＿ｑｕｅに格納する。また、ステップＳ１００７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０８に設定する。
【０１１１】
イメージ描画命令５０８についての処理が終了すると、フローはステップＳ１００２に戻る。そして、ステップＳ１００２で次の描画命令がないと判定し、ステップＳ１０１７に進む。ステップＳ１０１７で終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓをＴＲＵＥに設定し、ステップＳ１００８以降の処理に進む。ステップＳ１０１３では、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した最前面の描画命令（イメージ描画命令５０８）を実行する。そして、ステップＳ１０１４で終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓがＴＲＵＥであると判定し、描画処理を終了する。
【０１１２】
以上の処理により、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、境界部分に画像不正が発生しうる描画領域について、背景の描画命令の実行をスキップする。それによって、描画領域の境界部分の画素において最前面の描画命令を用いて描画を行うことを確保することができ、ユーザが所望する画像を生成することができる。
【０１１３】
（実施例３）
以下、発明を実施するための形態のうち、実施例３に特有の処理について説明する。なお、実施例３は、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、画像不正が発生した可能性のある画素を最前面の描画命令の色で補間することにより、ユーザが所望する画像を生成する。特に言及しない限り、実施例１、２と同様の処理については説明を省略する。
【０１１４】
＜画像形成装置１００の描画処理＞
図１１は、本実施例における画像形成装置１００の描画処理を示すフローチャートである。
【０１１５】
図１１の描画処理では、変数として、処理対象描画命令ｃｕｒ＿ｉｎｓｔ、直前描画命令ｐｒｅｖ＿ｉｎｓｔ、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓ、および終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓを使用する。処理対象描画命令ｃｕｒ＿ｉｎｓｔ、直前描画命令ｐｒｅｖ＿ｉｎｓｔ、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓについては、実施例２と同様であるため説明を省略する。描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓは、最前面の描画命令の輪郭の座標を記憶するためのバッファであり、最前面の描画命令が継続して隣接している間、最前面の描画命令の描画領域を記憶するために使用される。
【０１１６】
図１０のフローチャートの処理は、ＲＡＭ１１６に格納されたプログラムを実行したＣＰＵ１１２によって実行される。描画処理はページごとに実行される。
【０１１７】
以下、描画処理の各ステップの処理について説明する。
【０１１８】
ステップＳ１１０１では、ＣＰＵ１１２が、以降の処理で使用する変数等を初期化する。すなわち、直前描画命令ｐｒｅｖ＿ｉｎｓｔをＮＵＬLで初期化し、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓをクリアして空にし、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓをＦＡＬＳＥに設定する。
【０１１９】
ステップＳ１１０２では、ＣＰＵ１１２が、次の描画命令があるか否か判定する。次の描画命令がある（ＹＥＳ）と判定した場合は、次の描画命令を読み込んで、ステップＳ１１０３に進む。次の描画命令がない（ＮＯ）と判定した場合はステップＳ１１１５に進む。
【０１２０】
ステップＳ１１０３、Ｓ１１０４の処理は、ステップＳ９０３、Ｓ９０４の処理と同様であるため説明を省略する。
【０１２１】
ステップＳ１１０５では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令を実行する。
【０１２２】
ステップＳ１１０６では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域が、処理対象描画命令ｃｕｒ＿ｉｎｓｔの描画領域に含まれるか否かを判定する。本ステップの処理の詳細はステップＳ９０５、Ｓ１００５と同様であるため省略する。含まれる（ＹＥＳ）と判定した場合は、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令が最前面の描画命令と特定することができ、ステップＳ１１０７に進む。含まれない（ＮＯ）と判定した場合は、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令が背面の描画命令と特定することができ、ステップＳ１１０８に進む。
【０１２３】
ステップＳ１１０７の処理は、ステップＳ９０７の処理と同様であるため説明を省略する。
【０１２４】
ステップＳ１１０８では、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画ルールが交差ルールであるか否かを判定する。本ステップの詳細は、ステップＳ９０８と同様であるため省略する。最前面の描画命令の描画ルールが交差ルールである場合には、当該最前面の描画命令と直前の最前面の描画命令との境界部分における画素は、必ず当該最前面の描画命令で塗りつぶされることになるため、画像不正は生じない。そのため、後述のステップＳ１１１１における補間処理は行わなくてもよい。本ステップでは、交差ルールである（ＹＥＳ）と判定した場合にステップＳ１１１２に進み、交差ルールでない（ＮＯ）と判定した場合にステップＳ１１０９に進む。
【０１２５】
ステップＳ１１０９では、ＣＰＵ１１２が、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓが空であるか否かを判定する。空である（ＹＥＳ）と判定した場合、ステップＳ１１１３に進む。空でない（ＮＯ）と判定した場合、ステップＳ１１１０に進む。
【０１２６】
ステップＳ１１１０では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域の輪郭の一部が、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓの一部と一致するか否かを判定する。本ステップの処理で一致すると判定された場合、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画領域は、過去に描画された最前面の描画命令と隣接しているとみなすことができる。本ステップの処理により、ステップＳ１１０６で特定した最前面の描画命令が互いに隣接するか否かを判定することができる。最前面の描画命令が隣接していない場合に、オブジェクト画像の分割処理に起因する画像不正が発生することはないため、後述のステップＳ１１１１における補間処理は行わなくてもよい。本ステップでは、一致する（ＹＥＳ）と判定した場合に、ステップＳ１１１１に進み、一致しない（ＮＯ）と判定した場合に、ステップＳ１１１２に進む。具体的には、最前面の描画命令が互いに隣接すると判定した場合に、ステップＳ１１１１で、隣接する境界線上の画素について、直前描画命令ｐｒｅｖ＿ｉｎｓｔの該当する座標の輪郭色で塗りつぶす処理（補間処理）を行う。最前面の描画命令が互いに隣接しないと判定した場合に、補間処理を行わず、ステップＳ１１１２で、最前面の描画命令の輪郭の座標を記憶するバッファである描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓをクリアする処理を行う。
【０１２７】
ステップＳ１１１１では、ＣＰＵ１１２が、一致した描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓ上の画素を、直前描画命令ｐｒｅｖ＿ｉｎｓｔの該当する座標の輪郭色で塗りつぶす。この処理は、隣接する境界線上の画素について、直前描画命令ｐｒｅｖ＿ｉｎｓｔの描画ルールを変更して塗りつぶす処理とみなすことができる。本ステップの処理により、画像不正が発生した可能性のある画素を最前面の描画命令の色で補間し、画像不正のないオブジェクト画像を生成することができる。本ステップの処理が終了するとステップＳ１１１３に進む。
【０１２８】
ステップＳ１１１２では、ＣＰＵ１１２が、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓをクリアして空にする。本ステップの処理が終了するとステップＳ１１１３に進む。
【０１２９】
ステップＳ１１１３では、ＣＰＵ１１２が、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓがＴＲＵＥであるか否かを判定する。ＴＲＵＥである（ＹＥＳ）と判定した場合、描画処理を終了する。ＦＡＬＳＥである（ＮＯ）と判定した場合、ステップＳ１１１４に進む。
【０１３０】
ステップＳ１１１４では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔの輪郭の座標を描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓに追加する。ここで、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓに追加される情報は、輪郭の画素の座標でもよいし、輪郭の端点の座標でもよい。また、実施例１、２と同様に、前景の描画命令を格納するようにして、ステップＳ１１１０の処理では描画領域の輪郭から隣接性を判定するようにしてもよい。
【０１３１】
ステップＳ１１０８からステップＳ１１１４までの処理により、最前面の描画命令の隣接性を判定し、最前面の描画命令が隣接している場合には、画像不正が発生した可能性のある画素を最前面の描画命令で塗りつぶすことができる。
【０１３２】
ステップＳ１００２で次の描画命令がないと判定した場合に、処理はステップＳ１１１５に進む。ステップＳ１１１５では、ＣＰＵ１１２が、終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓをＴＲＵＥに設定し、ステップＳ１１１６に進む。
【０１３３】
ステップＳ１１１６では、ＣＰＵ１１２が、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令を実行する。本ステップの処理が終了するとステップＳ１１０８以降の処理に進む。ステップＳ１１１３で終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓがＴＲＵＥと判定し、描画処理を終了する。
【０１３４】
本実施例の描画処理フローで図５のグラフィック描画命令を処理することにより、画像不正のないオブジェクト画像を生成することができる。
【０１３５】
グラフィック描画命令５０１についての処理において、ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をグラフィック描画命令５０１に設定する。
【０１３６】
イメージ描画命令５０２についての処理において、まず、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（グラフィック描画命令５０１）を実行する。そして、ステップＳ１１０６で当該描画命令（グラフィック描画命令５０１）を背面の描画命令と特定し、ステップＳ１１０７に進む。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０２に設定する。
【０１３７】
グラフィック描画命令５０３についての処理において、まず、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（イメージ描画命令５０２）を実行する。そして、ステップＳ１１０６で当該描画命令（イメージ描画命令５０２）が最前面の描画命令と特定し、ステップＳ１１０８、Ｓ１１０９、Ｓ１１１０の判定処理に進む。描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓが空であるため、補間処理を行わず、ステップＳ１１１３以降の処理に進む。ステップＳ１１１４で最前面の描画命令（イメージ描画命令５０２）の輪郭の座標を描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓに追加する。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をグラフィック描画命令５０３に設定する。
【０１３８】
イメージ描画命令５０４についての処理は、イメージ描画命令５０２についての処理と類似である。イメージ描画命令５０４についての処理において、まず、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（グラフィック描画命令５０３）を実行する。そして、ステップＳ１１０６で当該描画命令（グラフィック描画命令５０３）を背面の描画命令と特定し、ステップＳ１１０７に進む。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０４に設定する。
【０１３９】
グラフィック描画命令５０５についての処理において、まず、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（イメージ描画命令５０４）を実行する。そして、ステップＳ１１０６で当該描画命令（イメージ描画命令５０４）を最前面の描画命令と特定し、ステップＳ１１０８、Ｓ１１０９、Ｓ１１１０の判定処理に進む。イメージ描画命令５０４の輪郭の一部が、描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓに記憶されているイメージ描画命令５０２）の輪郭の一部と一致するため、最前面の描画命令が隣接していると判定され、ステップＳ１１１１に進む。ステップＳ１１１１では、隣接する境界線上の画素について、最前面の描画命令（イメージ描画命令５０４）の該当する座標の輪郭色で塗りつぶす処理（補間処理）を行う。そして、ステップＳ１１１４で最前面の描画命令（イメージ描画命令５０４）の輪郭の座標を描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓに追加する。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をグラフィック描画命令５０５に設定する。
【０１４０】
イメージ描画命令５０６についての処理は、イメージ描画命令５０２、５０４についての処理と類似である。イメージ描画命令５０６についての処理において、まず、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（グラフィック描画命令５０５）を実行する。そして、ステップＳ１１０６で当該描画命令（グラフィック描画命令５０５）を背面の描画命令と特定し、ステップＳ１１０７に進む。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０６に設定する。
【０１４１】
グラフィック描画命令５０７についての処理は、グラフィック描画命令５０５についての処理と類似である。グラフィック描画命令５０７についての処理において、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（イメージ描画命令５０６）を実行する。ステップＳ１１１１では、隣接する境界線上の画素について、最前面の描画命令（イメージ描画命令５０６）の該当する座標の輪郭色で塗りつぶす処理（補間処理）を行う。ステップＳ１１１４で最前面の描画命令（イメージ描画命令５０６）の輪郭の座標を描画済前景輪郭ｆｇ＿ｂｏｒｄｅｒｓに追加する。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をグラフィック描画命令５０７に設定する。
【０１４２】
イメージ描画命令５０８についての処理は、イメージ描画命令５０２、５０４、５０６についての処理と類似である。イメージ描画命令５０４についての処理において、まず、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（グラフィック描画命令５０７）を実行する。そして、ステップＳ１１０６で当該描画命令（グラフィック描画命令５０７）を背面の描画命令と特定し、ステップＳ１１０７に進む。ステップＳ１１０７で直前描画命令ｐｒｅｖ＿ｉｎｓｔの値をイメージ描画命令５０８に設定する。
【０１４３】
イメージ描画命令５０８についての処理が終了すると、フローはステップＳ１１０２に戻る。そして、ステップＳ１１０２で次の描画命令がないと判定し、ステップＳ１１１５に進む。ステップＳ１１１５で終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓをＴＲＵＥに設定し、ステップＳ１１１６に進む。ステップＳ１１１６では、直前描画命令ｐｒｅｖ＿ｉｎｓｔに格納した描画命令（イメージ描画命令５０８）を実行し、ステップＳ１１０８以降の処理に進む。ステップＳ１１１１では、隣接する境界線上の画素について、最前面の描画命令（イメージ描画命令５０８）の該当する座標の輪郭色で塗りつぶす処理（補間処理）を行う。そして、ステップＳ１１１３で終了フラグｄｏＴｅｒｍｉｎａｔｅＰｒｏｃｅｓｓがＴＲＵＥであると判定し、描画処理を終了する。
【０１４４】
以上の処理により、オブジェクト画像の分割処理に起因する画像不正が発生しうる条件を判定し、画像不正が発生した可能性のある画素を最前面の描画命令の色で補間する。それによって、描画領域の境界部分の画素において最前面の描画命令を用いて描画を行うことを確保することができ、ユーザが所望する画像を生成することができる。
【０１４５】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2014229111.tif 000003
【図２】
2014229111.tif 000004
【図３】
2014229111.tif 000005
【図４】
2014229111.tif 000006
【図５】
2014229111.tif 000007
【図６】
2014229111.tif 000008
【図７】
2014229111.tif 000009
【図８】
2014229111.tif 000010
【図９】
2014229111.tif 000011
【図１０】
2014229111.tif 000012
【図１１】
2014229111.tif 000013