(57)【要約】【課題】  プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するＲＩＰのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮する。【解決手段】  入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する。そして、検出したオブジェクトについてオブジェクトリストへの追加または削除を行わないことを特徴とする。【選択図】  図１５
2013069186.tif 000002
【特許請求の範囲】
【請求項１】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする印刷装置。
【請求項２】
前記検出手段は、
Ｘ軸方向リストから隣接するオブジェクトのエッジ間の幅がゼロか否かを判断する幅判断手段と、
前記幅判断手段によりエッジ間の幅がゼロと判断された場合、さらに、紙面から垂直方向のオブジェクトの位置が等しいか否かを判断する高さ判断手段と、
前記高さ判断手段により紙面から垂直方向のオブジェクトの位置が等しいと判断された場合、エッジの方向が揃っているか否かを判断する方向判断手段と、
前記オブジェクト処理手段は、前記方向判断手段によりエッジ方向が揃っていないと判断した場合、該エッジのリストを元に、エッジとエッジで挟まれた区間毎に、紙面から高さ方向に整列されたオブジェクトリストを更新しないことを特徴とする請求項１記載の印刷装置。
【請求項３】
前記幅判断手段は、前記Ｘ軸方向に整列されたオブジェクトのエッジリストにリンクされているエッジ数が予め定めた閾値以上であると判断した場合に幅判断処理を行うことを特徴とする請求項２に記載の印刷装置。
【請求項４】
前記幅判断手段は、現在処理しているＹ座標の１つ次のＹ座標で、中間データからオブジェクトのエッジ展開処理が有る場合、現在処理しているＹ座標にて幅判断処理を行うことを特徴とする請求項２に記載の印刷装置。
【請求項５】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、追加あるいは削除すべきオブジェクトが紙面の最前面にない場合は、前記保持手段に１つ前の区間で最前面となるオブジェクトの高さ値をコピーすることを特徴とする請求項１記載の印刷装置。
【請求項６】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、追加あるいは削除すべきオブジェクトが紙面の最前面にくる場合は、現在処理している区間の保持手段に追加すべきオブジェクトの高さ値をコピーし、その次の区間の保持手段に一つ前の前記区間の最前面のオブジェクトの高さをコピーすることを特徴とする請求項１に記載の印刷装置。
【請求項７】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、削除すべきオブジェクトが紙面の最前面に来る場合は、現在処理している区間の保持手段に紙面から高さ方向に整列されたオブジェクトのリストの中で２番目に高い高さ値をコピーし、その次の区間の保持手段に１つ前の前記区間の最前面のオブジェクトの高さ値をコピーすることを特徴とする請求項１に記載の印刷装置。
【請求項８】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理して得られる画像データを印刷するプリントエンジンを備える請求項１乃至７のいずれか１項に記載の印刷装置。
【請求項９】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置の制御方法であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする印刷装置の制御方法。
【請求項１０】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う画像処理装置であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする画像処理装置。
【請求項１１】
請求項９に記載の印刷装置の制御方法をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理する印刷装置、印刷装置の制御方法及びプログラムに関するものである。
【背景技術】
【０００２】
従来、プリントシステムにおいて、プリンタで画像の出力を行なうために、ホストPC(Personal Computer)からPDL(Page Description Language)で記述されたプリントデータをプリンタに送信している。
ここで、プリンタでは、PDLで記述されたプリントデータを解釈してRIPが受け取れる中間データへの変換を行い、RIP処理で中間データを元に画像を生成し、出力を行なっている。RIPのレベル処理では、プリントデータに含まれるオブジェクトが紙面に対してオブジェクトが正しい順番で重なるように、オブジェクトの重なり順番をソートしている。そのためレベル処理では、オブジェクトの増加に伴い指数関数大に処理時間が増加してしまうという課題があった。
【０００３】
この課題に対して下記特許文献１では、中間データに含まれるオブジェクトの重なりを検出し、下位にあるオブジェクトの重なる領域を除去することでレベル処理の負荷を軽減させることで、RIPの高速化を行った。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−３３４３４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
年々、ホストPCやホストPC上で使用するアプリケーションの性能の発達している。その中で建築や機械の設計図面データでは、一つの図面データの中に緻密で小さい図形オブジェクトが大量に含まれることが増えている。
これらのオブジェクトの多くは、ユーザがディスプレイ上で拡大表示して閲覧することを意図したオブジェクトで、必ずしもプリントすることを意図して作成されたオブジェクトでは無いことがある。そのためこのようなオブジェクトは、プリンタの解像度では表現できず、紙面の出力結果には現れてこないことがある。これら紙面の出力結果に現れないオブジェクトは、プリントデータの内部では、オブジェクト幅がゼロのオブジェクトとしてRIP処理が行われてしまう。
【０００６】
このようなオブジェクトに対して、特許文献１の方法を適用させた場合、幅がゼロのため重なりを検出することができず、重なる領域が上手く除去できないことがある。更にこのようなオブジェクトが大量に有る場合、重なる領域の検出処理が逆に負担となりプリント処理に余計に時間が掛ってしまうことがある。
本発明は、上記の課題を解決するためになされたもので、本発明の目的は、プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するＲＩＰのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮できる仕組みを提供することである。
【課題を解決するための手段】
【０００７】
上記目的を達成する本発明の印刷装置は以下に示す構成を備える。
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、を備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するＲＩＰのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮できる。
【図面の簡単な説明】
【０００９】
【図１】印刷装置を適用するプリントシステムの構成を示すブロック図である。
【図２】プリントコントローラ部の内部構造の一例を示すブロック図である。
【図３】図２に示したＲＩＰ処理部の内部構造の一例を示す図である。
【図４】図３に示したエッジ処理部が処理すべき命令の一例を示す図である。
【図５】図３に示したレベル処理部のエッジ処理を示す図である。
【図６Ａ】エッジ処理部によるエッジ処理の一例を示す図である。
【図６Ｂ】エッジ処理部によるエッジ処理の一例を示す図である。
【図７】図３に示したレベル処理部の処理例を示す図である。
【図８】印刷装置の制御方法を説明するフローチャートである。
【図９】印刷装置の制御方法を説明するフローチャートである。
【図１０】印刷装置の制御方法を説明するフローチャートである。
【図１１】印刷装置の制御方法を説明するフローチャートである。
【図１２】印刷装置の制御方法を説明するフローチャートである。
【図１３】印刷装置の制御方法を説明するフローチャートである。
【図１４】印刷装置の制御方法を説明するフローチャートである。
【図１５】印刷装置の制御方法を説明するフローチャートである。
【図１６】印刷装置の制御方法を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
次に本発明を実施するための最良の形態について図面を参照して説明する。
＜システム構成の説明＞
〔第１実施形態〕
図１は、本実施形態を示す印刷装置を適用するプリントシステムの構成を説明するブロック図である。本例は、入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置を示す。なお、以下の実施形態においては、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理する印刷装置を例とするが、記録媒体に画像を形成する処理を含まない、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理を行う画像処理装置にも適用可能であることはいうまでもない。
図１において、プリントシステムは、ホストＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）１０１、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１０２、プリンタ１０３で構成されている。ユーザは、ホストＰＣ１０１からＬＡＮ１０２経由して印刷指示をプリンタ１０３に通知する。
【００１１】
プリンタ１０３は、ネットワークＩ／Ｆ（ＩｎｔｅｒＦａｃｅ）部１０４とプリントコントローラ部１０５及びプリントエンジン部１０６で構成されている。ＬＡＮ１０２経由でホストＰＣ１０１から通知された印刷指示は、ネットワークＩ／Ｆ部１０４で受け付けられ、プリントコントローラ部１０５に渡される。プリントコントローラ部１０５では、印刷指示に従って画像データを形成し、その画像データをプリントエンジン部１０６に渡す。プリントエンジン部１０６は、画像データを元に紙媒体（記録媒体）に印字出力を行なう。プリントエンジン部１０６は、入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理して得られる画像データに基づいて記録媒体に画像を印刷する。
【００１２】
図２は、図１に示したプリントコントローラ部１０５の内部構造の一例を示すブロック図である。
図２において、２０１はシステムバスで、１０４、１０６、２０３、２０８の間でのデータ伝送を行っている。２０２はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）で、システムバス２０１に接続されるデバイスを総括的に制御する。また、ＣＰＵ２０２は、Ｓ／Ｗ（Ｓｏｆｔ  Ｗａｒｅ）展開部２０６に格納されたＳ／Ｗを実行する役割をもつ。２０３はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で、中間データ格納部２０４、画像データ格納部２０５、Ｓ／Ｗ展開部２０６及びＳ／Ｗ展開部２０６に展開され実行されたＳ／Ｗが使用する一時作業領域（非記載）に分かれている。
【００１３】
２０８はＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）で、ネットワーク制御処理部２０９、ＰＤＬ処理部２１０、ＲＩＰ処理部２１１、プリントエンジン制御処理部２１２が格納されている。
ＲＯＭ２０８に格納されているネットワーク制御処理部２０９、ＰＤＬ処理部２１０、ＲＩＰ処理部２１１、プリントエンジン制御処理部２１２はモジュールとして構成されている。ネットワーク制御処理部２０９、ＰＤＬ処理部２１０、ＲＩＰ処理部２１１、プリントエンジン制御処理部２１２は、Ｓ／Ｗ展開部２０６に展開されＣＰＵ２０２で実行される。
ＰＤＬ処理部２１０は、ネットワークＩ／Ｆ１０４で経由してネットワーク制御処理部２０９からプリントデータを受け取る。ＰＤＬ処理部２１０では、プリントデータに従って中間データの生成を行ない、中間データ格納部２０４に格納する。
【００１４】
ＰＤＬ処理部２１０が１ページ分のプリントデータを中間データに変換し、中間データ格納部２０４に格納すると、ＲＩＰ処理部２１１は、中間データ格納部２０４に格納された中間データに基づいて画像生成処理を行なう。ＲＩＰ処理部２１１が生成した画像データは、画像データ格納部２０５に格納される。
ＲＩＰ処理部２１１が画像生成処理を終了させると、プリントエンジン制御処理部２１２は、画像データ格納部２０５に格納された画像データをプリントエンジン部１０６に送信する。プリントエンジン部１０６は、送信された画像に対して印字処理を行なう。
【００１５】
図３は、図２に示したＲＩＰ処理部２１１の内部構造の一例を示す図である。
図３において、ＲＩＰ処理部２１１は、エッジ処理部３０１、レベル処理部３０２、フィル処理部３０３、コンポジット処理部３０４で構成されている。
ここで、エッジ処理部３０１は、中間データを読み込み各Ｙ座標におけるオブジェクトのエッジ（輪郭）のＸ座標を計算し、エッジで区切られる区間であるスパンをレベル処理部３０２へ送信する。
【００１６】
レベル処理部３０２では、エッジ処理部３０１から受信したスパン同士が紙面に対して正しい順番（レベル番号の降順）で重なるように整列処理を行なう。レベル処理部３０２は、整列処理後が済むとスパン単位で最前面に位置するレベル番号をフィル処理部３０３に送信する。フィル処理部３０３は、レベル処理部３０２から受信した各スパンに対してレベルと紐付けされている色情報の割り当て（フィル）処理を行なう。
【００１７】
フィル処理部３０３にてフィル処理済みのスパンは、コンポジット処理部３０４に送信される。コンポジット処理部３０４ではフィル処理部３０３から受信したスパンを構成する一つ一つのピクセルに対してコンポジット（合成）処理を行なう。コンポジット処理の具体的な方法としては、ＲＯＰ（Ｒａｓｔｅｒ  ＯＰｅｒａｔｏｒ）及びαブレンドの２種類がある。
ＲＯＰとは、重なり合うスパンのピクセル同士の各色値に対して論理演算を行なうことで、出力するピクセルを計算する方法である。また、αブレンドとは、重なり合うスパンのピクセル同士の色値を中間データから指定された一定の比率（αチャネル）に従って配合する方法である。コンポジット処理部にて計算された出力ピクセルは、画像データ格納部２０５に送信され格納される。
【００１８】
図４は、図３に示したエッジ処理部３０１が読み込む中間データ記載の命令及びエッジ処理部３０１からレベル処理部３０２へ送信される命令の一例を示す図である。
図４において、エッジ処理部３０１が読み込む命令は描画命令と描画終了命令がある。
４０１は描画命令であって、描画命令４０１は、命令内容が描画処理であることをエッジ処理部３０１に示す情報である。パラメータ４０２は、描画命令４０１の描画命令で描画するスキャンライン数を示している。描画命令４０１は、新規にオブジェクトが追加されるスキャンライン毎に発行され、パラメータ４０２で示される区間中に新規にオブジェクトが追加されることは無い。
【００１９】
パラメータ４０３は、描画命令４０１で中間データから展開するエッジの総データサイズを示している。エッジデータ４０４は、エッジ処理部３０１がエッジを形成するためのエッジデータでその詳細は、エッジデータ４０５〜４０９で構成されている。
エッジデータ４０５はエッジデータのデータサイズである。エッジデータ４０６は、紙面に対する垂直方向（高さ方向）におけるオブジェクトの位置を示すレベル番号である。エッジデータ４０７はエッジの向きで、上方向のエッジだと＋１、下方向のエッジだと−１を値としてもつ。１つのオブジェクトにつき。上向きと下向きエッジがペアになっている。
エッジデータ４０８は、エッジの開始Ｘ座標で中間データから展開されたときのエッジのＸ座標を示している。エッジデータ４０９は、各Ｙ座標におけるエッジのＸ座標の変化分が格納されている。エッジデータ４０９以降、エッジデータ４０５で記載されたエッジデータのデータサイズ分だけ、エッジデータ４０９が格納されている。なお描画終了命令の説明については、割愛する。
【００２０】
図３に示したレベル処理部３０２が受信する命令は、描画命令、初期化命令及び描画終了命令がある。レベル処理部３０２が受信する描画命令の詳細は、描画命令４１０とそのパラメータ４１１〜４１３で構成される。描画命令４１０は、命令内容が描画処理であることをレベル処理部３０２に示す情報である。パラメータ４１１はレベル番号である。パラメータ４１２はエッジ間の幅の長さである。
【００２１】
パラメータ４１３はエッジの方向が上向き、下向きのどちらであるかを示す情報である。なお、描画命令４１０とパラメータ４１１〜４１３をまとめてレベルデータと呼ぶことにする。
レベル処理部３０２が受信する初期化命令４１４の詳細は、パラメータ４１５〜４１７である。初期化命令４１４は、命令内容が初期化処理であることをレベル処理部３０２に示す情報である。なお、初期化処理の命令は、レベル処理部３０２にて各Ｙ座標での最初に送信される命令である。そのため、その内容も各スキャンライン単位での処理の制御に関するものとなっている。
【００２２】
パラメータ４１５は、レベル処理部３０２がこれから処理を行うスキャンラインとその１つ前のスキャンラインとの間でエッジの並びに変更が発生したかの有無を示すフラグ情報である。パラメータ４１６は、レベル処理部３０２がこれから処理を行うスキャンラインにてエッジの数（エッジ数）がある閾値以上（Ｔｈｒ以上）あるか、否かを示すフラグ情報である。パラメータ４１７は、レベル処理部３０２がこれから処理を行うスキャンラインの次のスキャンラインで新規エッジの追加が有るか、否かを示すフラグ情報である。
【００２３】
図５は、本実施形態を示す印刷装置が作成して管理するオブジェクトリストの一例を示す図である。本例は、図３に示したレベル処理部３０２で処理するエッジリストとエッジノード及びレベルリストとレベルノードをリストで管理する例である。
また、本例は、所定のライン方向（Ｘ軸方向リスト）に整列されたオブジェクトについてエッジの幅、エッジのレベル、エッジの向きを調べて後述するように重なり状態を調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する。なお、オブジェクト処理の詳細については、図６Ａ、図６Ｂ、図７、図８以降のフローチャートに従い説明する。
図５において、５０１はエッジリストへのポインタである。ポインタ５０１は、エッジリストにリンクされているエッジノードのうち、最も小さいＸ座標をもつエッジノード（エッジリストの先頭エッジノード）のアドレスが格納されている。５０２は、エッジリストで、エッジノード同士をＸ座標の昇順に管理しているリストである。
５０３は、エッジノードのデータ構造である。５０４は、エッジリスト５０２にて自分自身の次にＸ座標が大きいエッジノードのアドレスを格納したポインタである。５０５は、自分自身の次にＸ座標が小さいエッジノードのアドレスを格納したポインタである。
エッジノード間でＸ座標の大小関係に変化が発生した場合、ポインタ５０４，ポインタ５０４に格納するアドレスを変えることでエッジリストにおけるエッジノードの順番を更新する。
５０６は、現在処理しているスキャンラインでのエッジノードが位置するＸ座標である。エッジリストにおけるエッジノードのリンク位置の入れ替えは、Ｘ座標５０６の値を元に行う。
【００２４】
５０７は、エッジの開始Ｘ座標で、エッジデータ４０８と同様である。５０８は、エッジデータのデータサイズで、エッジデータ４０５と同様である。５０９は、エッジデータのうち、エッジ処理部３０１が読み進めた分のデータサイズをカウントするカウンタである。５１０は、エッジデータが格納されている特定するポインタである。５１１はレベル番号で、エッジデータ４０６と同様である。５１２は、エッジの向きで、エッジデータ４０７と同様である。
【００２５】
５１３は、レベルリスト５１４へのポインタである。ポインタ５１３は、レベルリスト５１４にリンクされているレベルノードのうち、最も大きいレベル番号をもつレベルノード（レベルノードの先頭レベルノード）へのアドレスが格納されている。
５１４はレベルリストで、レベルノード同士をレベル番号の降順に管理しているリストである。５１５は、レベルノードのデータ構造である。５１６は、レベルリスト５１４にて自分自身の次にレベル番号が小さいレベルノードのアドレスを格納したポインタである。５１７は、自分自身の次にレベル番号が大きいレベルノードのアドレスを格納したポインタである。
【００２６】
レベルリスト５１４からのレベルノードの追加・削除によるレベルノード間でレベル番号の大小関係に変化が発生した場合、ポインタ５１６，５１７に格納するアドレスを変えることでレベルリストにおけるレベルノードの順番をソートして更新する。
５１８は、レベルノード自身のレベル番号である。レベルノードの並び替えは、レベル番号５１８の値を元に行う。５１９は、同一区間上に存在する同一のレベル番号のオブジェクト数を管理するカウンタ（ＬｖＣｎｔ）である。
【００２７】
５２０は、レベルノードがレベルリスト５１４上にリンクされているか否かを示すフラグ情報である。なお、レベルノードは、レベル番号から特定できるように予め定められた連続する領域を確保し、その領域でレベル番号をインデックス値とする配列として管理することが望ましい。
【００２８】
また、レベル処理部３０２は、レベルリストにリンクされている先頭のレベルノードのレベル番号とエッジ処理部３０１から受信するエッジとエッジで挟まれた区間の長さをフィル処理部３０３に送信している。フィル処理部３０３は、レベル処理部３０２から送信されたレベル番号に紐付いた色情報をエッジとエッジで挟まれた区間の長さ分の画素に割り当てる処理を行う。
【００２９】
図６Ａは、図３に示したエッジ処理部３０１によるエッジ処理の一例を示す図である。
図６Ａにおいて、６０１〜６０３は紙面に描画されるオブジェクトである。これらの輪郭を形成するエッジは、それぞれエッジ６０１'とエッジ６０１"，エッジ６０２'とエッジ６０２"及びエッジ６０３'とエッジ６０３"のエッジでペアになっている。
６０４は、Ｙ＝Ｎにおけるエッジリストで、６０１'、６０２'、６０２"、６０３'、６０３"、６０１"の順番にエッジノードがリンクされている。
【００３０】
一方で本図中Ｙ＝Ｍにおけるエッジリスト６０６では、６０１'、６０２'、６０３'、６０２"、６０３"、６０１"の順番にエッジノードがリンクされている。Ｙ＝ＮからＹ＝Ｍにかけてエッジ６０２"とエッジ６０３'のＸ座標の大小関係が変わるため、エッジリストにリンクされているエッジノードの順番がソートされ正しい順番に入れ替わる。Ｙ＝ＭからＹ＝Ｍ＋１にかけて、エッジノード間のＸ座標の大小関係が変わらないため、エッジリストはエッジリスト６０６のままになる。
【００３１】
図６Ｂは、図３に示したエッジ処理部３０１によるエッジ処理の一例を示す図である。本例は、エッジ処理部３０１にて、幅「０（ゼロ）」のオブジェクトが含まれている場合の一例を示している。
図６Ｂにおいて、６０７〜６０９は、紙面に描画されるオブジェクトである。
これらのうち、６０８が幅「０」のオブジェクトとなっている。これらの輪郭を形成するエッジは、それぞれエッジ６０７'とエッジ６０７"，エッジ６０８'とエッジ６０８"及びエッジ６０９'とエッジ６０９"のエッジでペアになっている。
【００３２】
Ｙ＝Ｎにおいて、エッジ６０８'、エッジ６０８"、エッジ６０９'が同じＸ座標に位置している。Ｙ＝Ｎにおけるエッジリスト６１０には、エッジ６０７'、エッジ６０８'、エッジ６０８"、エッジ６０９'、エッジ６０９"、エッジ６０７"の順番でリンクされている。同一Ｘ座標であるエッジ６０８'、エッジ６０８"、エッジ６０９'の間の順番については、この順番でなくても描画結果には影響は無い。ただし、同一Ｘ座標のエッジが複数ある場合は、レベル番号の順番に並ぶように整列されている方が、より本発明の効果は得られ易い。６１１はエッジリストへのポインタである。
【００３３】
図７は、図３に示したレベル処理部３０２の処理例を示す図である。本例、図６Ａ、図６Ｂと関連したレベル処理の一例を示している。
【００３４】
図７において、７０１（レベル番号０）、７０２（レベル番号１０）、７０３（レベル番号２０）は紙面に描画されるオブジェクトである。ここで、レベル番号は紙面に近い順番から小さい番号が割り当てらえるため、オブジェクトは、紙面に近い順番からオブジェクト７０１、７０２、７０３の順番になっている。なお、本実施形態では、現在処理している区間に対応づけられた図７では流用バッファ７１５にオブジェクトの高さが保持される構成を採用している。
【００３５】
７０４、７０５、７０６、７０７、７０８は、Ｙ＝Ｎおける各スパンを示しており、オブジェクト並び順番は、各Ｙ座標にこれらスパン毎に更新される。７１４は、Ｙ＝Ｎにおける各スパンにおけるオブジェクトの重なりの推移を示している。推移７１４よりＹ＝Ｎのとき、フィル処理部３０３には送られるＸ座標の小さい順番からレベル番号０、１０、０、２０、０が流用バッファ７１５に一時的に格納された上で送信される。
７０９、７１０、７１１、７１２、７１３はＹ＝Ｍにおける各スパンを示している。７１６は、Ｙ＝Ｍにおける各スパンにおけるオブジェクトの重なりの推移を示している。
オブジェクトの重なりの推移７１６よりＹ＝Ｍのとき、フィル処理部３０３には送られるＸ座標の小さい順番からレベル番号０、１０、２０、１０、０が流用バッファ（ＣｏｐｙＢｕｆ）７１５に一時格納された上で送信される。Ｙ＝ＭからＹ＝Ｍ＋１にかけては、図６Ａ、図６Ｂで述べ通りエッジノードのＸ座標の大小関係が変わらないため、エッジリストに変更が発生しない。
【００３６】
エッジリストに変更が発生しない場合、Ｙ＝Ｍ＋１におけるスパン毎のレベルリストの推移はＹ＝Ｍと同様になる。そのため、Ｙ＝Ｍ＋１では、レベルリストの更新を行うことなく、流用バッファ７１７に一時格納したレベル番号を流用するだけで済む。レベル処理部３０２では、このようにエッジ処理部３０１でエッジリストに変更が発生しない場合、流用バッファに一時格納した結果を流用し、レベルリストの更新を行わないことで処理の高速化を実施している。
【００３７】
図８は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図３に示したエッジ処理部３０１の全体の処理概要例である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
【００３８】
Ｓ８０１で、エッジ処理部３０１は、描画終了か否かを示すフラグＥｎｄＦｌａｇに「０」を書き込む。Ｓ８０２で、エッジ処理部３０１は、１スキャンライン中に存在するエッジ総数をカウントするカウンタＴｏｔａｌＥｄｇｅＮｕｍに「０」を書き込む。Ｓ８０３は、ループ制御でＥｎｄＦｌａｇ＝１となるまで、エッジ処理部３０１は、Ｓ８０４からＳ８１８までの処理を繰り返す。Ｓ８０４で、エッジ処理部３０１は、中間データ格納部２０４から読み出す中間データの読み込み命令の内容を解釈する。
Ｓ８０５で、エッジ処理部３０１は、Ｓ８０４で解釈した命令内容が描画終了であると判断した場合、処理をＳ８０６に進め、命令内容が描画処理であると判断した場合、処理をＳ８０８に進める。
【００３９】
Ｓ８０６でエッジ処理部３０１は、レベル処理部３０２に描画終了を送信する。Ｓ８０７で、エッジ処理部３０１は、フラグＥｎｄＦｌａｇに「１」を書き込み、Ｓ８２１へ進む。
一方、Ｓ８０８ではエッジ処理部３０１が、１スキャンライン当たりで中間データから展開するエッジデータの総データサイズをカウントするカウンタＴｏｔａｌＥｄｇｅｓＣｎｔに「０」を書き込み初期化する。次に、Ｓ８０９で、エッジ処理部３０１は、パラメータ４０２に格納された値Ｙ＿ｌｅｎをカウンタＣｎｔＹに書き込む。
【００４０】
次に、Ｓ８１０で、ループ制御を開始してカウンタＴｏｔａｌＥｄｇｅｓＣｎｔが、Ｓ８１３でパラメータ４０３に格納されたカウンタＴｏｔａｌＥｄｇｅｓＳｉｚｅが示す値となるまで、エッジ処理部３０１は、Ｓ８１１〜Ｓ８１２を繰り返す。Ｓ８１１でエッジ処理部３０１は、エッジを中間データからエッジリストへの展開処理（後述）を行う。Ｓ８１２でエッジ処理部３０１は、カウンタＴｏｔａｌＥｄｇｅｓＣｎｔにエッジデータ４０５に格納されている値ＥｄｇｅＳｉｚｅを加算する。
【００４１】
Ｓ８１４で、エッジ処理部３０１は、エッジリストにリンクされているエッジノードのリンクに変化の発生有無を示すフラグＥｄｇｅＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」を書き込む。Ｓ８１５は、ループ制御を開始し、Ｓ８２０で、カウンタＣｎｔＹが「０」となるまで、エッジ処理部３０１は、Ｓ８１５からＳ８１９を繰り返す。
【００４２】
Ｓ８１６では、エッジ処理部３０１は、エッジリスト更新処理（後述）を行う。次に、Ｓ８１７でエッジ処理部３０１は、レベル処理部３０２への送信処理（後述）を行う。次に、Ｓ８１８でエッジ処理部３０１は、カウンタＣｎｔＹをデクリメントする。次に、Ｓ８１９でエッジ処理部３０１は、フラグＥｄｇｅＬｉｓｔＣｈａｎｇｅＦｌａｇに「０」を書き込む。
そして、Ｓ８２１で、フラグＥｎｄＦｌａｇが「１」であるとエッジ処理部３０１が判断したら、本処理を終了する。
【００４３】
図９は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図８に示したＳ８１１におけるエッジ処理部３０１によるエッジ展開処理の詳細手順である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。
Ｓ９０１で、エッジ処理部３０１は、ＲＡＭ２０３上でメモリを確保し新規エッジノードに割り当てる。Ｓ９０２でエッジ処理部３０１は、エッジデータ４０４をエッジノードにコピーする。
具体的には、図４に示したエッジデータ４０５、４０６、４０７、４０８に格納された値及びエッジデータ４０９のアドレスを、図５に示したエッジデータ５０８、レベル番号５１１、エッジ向き５１２、エッジの開始Ｘ座標５０７、及びポインタ５１０へコピーする。
【００４４】
Ｓ９０３で、エッジ処理部３０１は、エッジノードをエッジリストへ追加する。これにより、エッジリストにエッジノードが登録される。Ｓ９０４で、エッジ処理部３０１は、データサイズＣｎｔＳｉｚｅに「０」を書き込み初期化する。そして、Ｓ９０５で、エッジ処理部３０１は、ＴｏｔａｌＥｄｇｅＮｕｍをインクリメントして、本処理を終了する。
【００４５】
図１０は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図８に示したエッジ処理部３０１のエッジリスト更新処理の詳細手順である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
Ｓ１００１で、エッジ処理部３０１は、図５に示したエッジリストへのポインタ５０１からエッジリスト５０２にリンクされている先頭のエッジノードにアクセスする。Ｓ１００２は、ループ制御を開始し、エッジ処理部３０１は、Ｓ１０１５で、Ｓ１００３からＳ１０１４までの処理をエッジリストにリンクされているエッジノードをすべて参照するまで繰り返す。
【００４６】
Ｓ１００３で、エッジ処理部３０１は、データサイズＣｎｔＳｉｚｅがデータサイズＥｄｇｅＳｉｚｅと等しくなったか、否かを判断する。ここで、等しくないとエッジ処理部３０１が判断した場合、処理をＳ１００４に進め、等しいとエッジ処理部３０１が判断した場合処理をＳ１０１１に進める。
Ｓ１００４では、エッジ処理部３０１は、エッジノードが保持している現在のＸ座標ＣｕｒＸをＯｌｄＸにコピーする。Ｓ１００５で、エッジ処理部３０１は、現在のＸ座標ＣｕｒＸにエッジデータ４０９に対応付けられたＳｔｅｐＸを加算し、エッジノードのＸ座標を更新する。
【００４７】
そして、Ｓ１００６で、エッジ処理部３０１は、現在のＸ座標ＣｕｒＸがＯｌｄＸと等しいか否かを判断する。ここで、等しいとエッジ処理部３０１が判断した場合、Ｓ１００９の処理、等しくないとエッジ処理部３０１が判断した場合Ｓ１００７の処理を実行する。
【００４８】
次に、Ｓ１００７で、エッジ処理部１００３は、エッジリストでエッジノードの正しい位置を検索し、エッジノード間のリンクをつなぎ換える。検索するエッジノードの位置は、エッジノードのＸ座標をキー値として、エッジリストが先頭のエッジノードからＸ座標の昇順になる位置である。
【００４９】
次に、Ｓ１００８で、エッジ処理部３０１は、フラグＥｄｇｅＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」を書き込む。そして、Ｓ１００９で、エッジ処理部３０１は、データサイズＣｎｔＳｉｚｅにＳｔｅｐＳｉｚｅを加算する。次に、Ｓ１０１０で、エッジ処理部３０１は、次のエッジを参照する。そして、Ｓ１０１５で、エッジ処理部３０１がエッジノードのすべてを参照したと判断した場合は、本処理を終了する。
【００５０】
一方、Ｓ１０１１で、エッジ処理部３０１は、エッジノードをエッジリストから外すために、ポインタＮｅｘｔＥｄｇｅとポインタＰｒｅｖＥｄｇｅにリンクされているエッジノードをリンクさせる。
【００５１】
そして、Ｓ１０１２で、エッジ処理部３０１は、エッジノードで使用していた領域を解放する。次に、Ｓ１０１３で、エッジ処理部３０１は、エッジリストにリンクされているエッジノード数が１つ減ったため、ＴｏｔａｌＥｄｇｅＮｕｍをデクリメントする。そして、Ｓ１０１４で、エッジ処理部３０１は、フラグＥｄｇｅＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」を書き込んで、Ｓ１０１０へ進む。
【００５２】
図１１は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、エッジ処理部３０１がレベル処理部３０２へデータを送る処理の詳細手順である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。
Ｓ１１０１で、エッジ処理部３０１は、フラグＥｄｇｅＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」が格納されているか否かを判断する。ここで、フラグＥｄｇｅＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」が格納されているとエッジ処理部３０１が判断した場合は、Ｓ１１０２へ進み、「０」が格納されているとエッジ処理部３０１が判断した場合、Ｓ１１０３へ処理を進める。
【００５３】
そして、Ｓ１１０２では、エッジ処理部３０１は、フラグＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」を書き込む。また、Ｓ１１０３では、エッジ処理部３０１は、フラグＬｉｓｔＣａｈｎｇｅＦｌａｇに「０」を書き込み、Ｓ１１０４へ進む。そして、Ｓ１１０４で、エッジ処理部３０１は、ＴｏｔａｌＥｄｇｅＮｕｍが予め定めた閾値以上（Ｔｈｒ以上）か、否かを判断する。ここで、Ｔｈｒ以上であるとエッジ処理部３０１が判断した場合は、Ｓ１１０５へ処理を進め、Ｔｈｒ未満とであるとエッジ処理部３０１が判断した場合は、Ｓ１１０６へ処理を進める。
【００５４】
そして、Ｓ１１０５では、エッジ処理部３０１は、フラグＥｄｇｅＮｕｍＦｌａｇに「１」を書き込む。また、Ｓ１１０６では、エッジ処理部３０１は、フラグＥｄｇｅＮｕｍＦｌａｇに「０」を書き込む。そして、Ｓ１１０７で、エッジ処理部３０１は、カウンタＣｎｔＹが１以下か否かを判断する。ここで、カウンタＣｎｔＹが「１」以下であるとエッジ処理部３０１が判断した場合は、Ｓ１１０８へ処理を進め、カウンタＣｎｔＹが「１」より上であると判断した場合は、Ｓ１１０９へと処理を進める。そして、Ｓ１１０８ではエッジ処理部３０１は、フラグＮｅｘｔＬｉｎｅＦｌａｇに「１」を書き込む。
また、Ｓ１１０９で、エッジ処理部３０１は、フラグＮｅｘｔＬｉｎｅＦｌａｇに「０」を書き込み、Ｓ１１１０へ進む。そして、Ｓ１１１０で、エッジ処理部３０１は、レベル処理部３０２に初期化命令を通知する。なお、エッジ処理部３０１が初期化を通知するデータフォーマットは、図４に示した初期化命令４１４のパラメータ４１５〜４１７の通りである。
【００５５】
次に、Ｓ１１１１で、エッジ処理部３０１は、エッジリストへのポインタからエッジリストにリンクされている先頭のエッジノードにアクセスする。そして、Ｓ１１１２は、ループ制御を開始し、エッジ処理部３０１は、Ｓ１１１６でエッジリストにリンクされているエッジノードをすべて参照したと判断されるまで、Ｓ１１１３からＳ１１１５までの処理を繰り返す。
Ｓ１１１３で、エッジ処理部３０１は、現在処理しているエッジノードのＸ座標ＣｕｒＸと次に参照するエッジノードのＸ座標ＣｕｒＸの差からエッジとエッジの区間幅ｓｐａｎを計算する。
【００５６】
そして、Ｓ１１１４で、エッジ処理部３０１は、レベル処理部３０２へ描画命令を通知する。なお、描画命令４１０のデータフォーマットは、パラメータ４１１から４１３の通りである。次に、Ｓ１１１５で、エッジ処理部３０１は、次のエッジノードを参照して、Ｓ１１１６で、エッジ処理部３０１がエッジリストにリンクされているエッジノードをすべて参照したと判断したら、本処理を終了する。
する。
【００５７】
図１２は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部３０２の全体の処理概要例である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
Ｓ１２０１で、レベル処理部３０２は、レベルノード用に用意された領域に「０」を書き込み初期化する。次に、Ｓ１２０２で、レベル処理部３０２は、各種変数の初期化としてフラグＥｎｄＦｌａｇ、ＯｖｅｒＦｌｏｗＦｌａｇ、ＬｅｖｅｌＬｉｓｔＣｈａｎｇｅＦｌａｇ、ＬｅｖｅｌＳｋｉｐＦｌａｇ、ＮｅｘｔＬｉｎｅＣｈａｎｇｅＦｌａｇに「０」を書き込む。
次に、Ｓ１２０３は、ループ制御を開始して、Ｓ１２２５で、フラグＥｎｄＦｌａｇ＝１と判断されるまで、レベル処理部３０２は、Ｓ１２０４からＳ１２２３までの処理を繰り返す。
まず、Ｓ１２０４で、レベル処理部３０２は、エッジ処理部３０１から受信した命令を解釈する。次に、Ｓ１２０５で、レベル処理部３０２は、Ｓ１２０４でエッジ処理部３０１から受信した命令の内容が描画終了であると判断した場合は、処理をＳ１２０６へ進め、描画命令であると判断した場合は、処理をＳ１２０８へ進め、初期化命令であると判断した場合は、処理をＳ１２１４へ進める。
【００５８】
そして、Ｓ１２０６では、レベル処理部３０２は、フィル処理部３０３に描画終了を送信する。次に、Ｓ１２０７で、レベル処理部３０２は、フラグＥｎｄＦｌａｇに「１」を書き込む。また、Ｓ１２０８では、レベル処理部３０２は、フラグＬｅｖｅｌＬｉｓｔＣｈａｎｇｅＦｌａｇ＝１であるか否かを判断する。ここで、フラグＬｅｖｅｌＬｉｓｔＣｈａｎｇｅＦｌａｇが「１」であるとレベル処理部３０２が判断した場合は、処理をＳ１２０９へ進め、「０」であると判断した場合は、処理をＳ１２１１へ進める。
【００５９】
そして、Ｓ１２０９では、レベル処理部３０２は、フラグＯｖｅｒＦｌｏｗＦｌａｇ＝１であるか否かを判断する。ここで、フラグＯｖｅｒＦｌｏｗＦｌａｇが「１」であるとレベル処理部３０２が判断した場合は、処理をＳ１２１０へ進め、「０」であると判断した場合は、処理をＳ１２１１へ進める。
【００６０】
そして、Ｓ１２１０では、レベル処理部３０２は、図７において説明した手順に従うレベル流用処理（後述）を行う。また、Ｓ１２１１で、レベル処理部３０２は、フラグＬｅｖｅｌＳｋｉｐＦｌａｇ＝１か否かを判断する。ここで、フラグＬｅｖｅｌＳｋｉｐＦｌａｇが「１」であるとレベル処理部３０２がと判断した場合は、処理をＳ１２１２へ進め、フラグＬｅｖｅｌＳｋｉｐＦｌａｇが「０」であると判断した場合、処理をＳ１２１３へ処理を進める。
そして、Ｓ１２１２では、レベル処理部３０２は、レベルリスト省略処理（後述）を行う。また、Ｓ１２１３では、レベル処理部３０２は、現在処理しているレベル番号を元に、レベルリストの更新処理（後述）を行う。
【００６１】
一方、Ｓ１２１４では、レベル処理部３０２は、フラグＬｉｓｔＣｈａｎｇｅＦｌａｇ＝１か否かを判断する。ここで、フラグＬｉｓｔＣｈａｎｇｅＦｌａｇが「１」であるとレベル処理部３０２が判断した場合は、処理をＳ１２１５へ進め、フラグＬｉｓｔＣｈａｎｇｅＦｌａｇが「０」であると判断した場合は、Ｓ１２１６へ処理を進める。
そして、Ｓ１２１５では、レベル処理部３０２は、フラグＬｅｖｅｌＬｉｓｔＣｈａｎｇｅＦｌａｇに「１」を書き込む。また、Ｓ１２１６では、レベル処理部３０２は、フラグＬｅｖｅｌＬｉｓｔＣｈａｎｇｅＦｌａｇに「０」を書き込み、Ｓ１２１７へ進む。
そして、Ｓ１２１７で、レベル処理部３０２は、フラグＥｄｇｅＮｕｍＦｌａｇ＝１か否かを判断する。ここで、フラグＥｄｇｅＮｕｍＦｌａｇが「１」であるとレベル処理部３０２が判断した場合は、処理をＳ１２１８へ進め、フラグＥｄｇｅＮｕｍＦｌａｇが「０」であると判断した場合は、処理をＳ１２１９へ進める。
【００６２】
そして、Ｓ１２１８では、レベル処理部３０２は、フラグＬｅｖｅｌＳｋｉｐＦｌａｇに「１」を書き込む。また、Ｓ１２１９では、レベル処理部３０２は、フラグＬｅｖｅｌＳｋｉｐＦｌａｇに「０」を書き込み、Ｓ１２２３へ進む。そして、Ｓ１２２０で、レベル処理部３０２は、フラグＮｅｘｔＬｉｎｅＦｌａｇ＝１か否かを判断する。
【００６３】
ここで、フラグＮｅｘｔＬｉｎｅＦｌａｇが「１」であるとレベル処理部３０２が判断した場合は、処理をＳ１２２１へ進め、フラグＮｅｘｔＬｉｎｅＦｌａｇが「０」であると判断した場合は、処理をＳ１２２２へ進める。
Ｓ１２２１では、レベル処理部３０２は、フラグＮｅｘｔＬｉｎｅＣｈａｎｇｅＦｌａｇに「１」を書き込む。Ｓ１２２２では、レベル処理部３０２は、フラグＮｅｘｔＬｉｎｅＣｈａｎｇｅＦｌａｇに「０」を書き込む。そして、Ｓ１２２３で、レベル処理部３０２は、ＣｎｔＣａｃｈｅに「０」を書き込み初期化する。Ｓ１２２４で、レベル処理部３０２は、ＯｖｅｒＦｌｏｗＦｌａｇに「０」を書き込み初期化する。そして、Ｓ１２２５で、フラグＥｎｄＦｌａｇが「１」であるとレベル処理部３０２が判断した場合は、本処理を終了する。
図１３は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部３０２のレベルリスト更新処理の詳細手順例である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
Ｓ１３０１で、レベル処理部３０２は、レベルデータから取得したレベル番号からレベルノードを特定する。Ｓ１３０２で、レベル処理部３０２は、レベルノードのＣｎｔＬｅｖｅｌにレベルノードのＵｐｄｏｗｎの値を加算する。次に、Ｓ１３０３で、レベル処理部３０２は、ＣｎｔＬｅｖｅｌ＝０で、かつフラグＬｉｓｔＦｌａｇ＝１か否かを判断する。ここで、レベル処理部３０２がＣｎｔＬｅｖｅｌ＝０で、かつフラグＬｉｓｔＦｌａｇ＝１であると判断した場合は処理をＳ１３０４へ進め、ＣｎｔＬｅｖｅｌ＝０かつＬｉｓｔＦｌａｇ＝１ではないと判断した場合は、処理をＳ１３０６へ進める。
Ｓ１３０４では、レベル処理部３０２は、レベルデータから特定したレベル番号のレベルノードをレベルリストから外すために、ポインタＮｅｘｔＬｅｖｅｌ、ＰｒｅｖＬｅｖｅｌでリンクされたレベルノード同士をリンクする。
【００６４】
次に、Ｓ１３０５で、レベル処理部３０２は、ＬｉｓｔＦｌａｇに「０」を書き込み、Ｓ１３０９へ進む。また、Ｓ１３０６では、レベル処理部３０２は、ＣｎｔＬｅｖｅ＝０で、かつフラグＬｉｓｔＦｌａｇ＝０か否かを判断する。
【００６５】
ここで、レベル処理部３０２がＣｎｔＬｅｖｅｌ＝０で、かつＬｉｓｔＦｌａｇ＝０であると判断した場合は処理をＳ１３０７へ進め、ＣｎｔＬｅｖｅｌ＝０で、かつＬｉｓｔＦｌａｇ＝０ではないと判断した場合、処理をＳ１３０９へ進める。そして、Ｓ１３０７では、レベル処理部３０２はレベルリストにレベルノードをリンク（追加）する。具体的には、レベル処理部３０２は、先頭のレベルノードからレベル番号の大小比較を行い適切な位置を探索して、レベルリストへのレベルノードのリンクを行う。
【００６６】
次に、Ｓ１３０８で、レベル処理部３０２は、フラグＬｉｓｔＦｌａｇに「１」を書き込む。そして、Ｓ１３０９で、レベル処理部３０２は、フィル処理部３０３に描画命令をレベルリストの先頭にあるレベルノードのレベル番号とｓｐａｎと共に送信する。そして、Ｓ１３１０で、レベル処理部３０２は、ＣｎｔＣａｃｈｅが流用バッファＣｏｐｙＢｕｆの最大サイズＭａｘＣａｃｈｅＳｉｚｅを未満か否かを判断する。
【００６７】
ここで、ＣｎｔＣａｃｈｅが流用バッファＣｏｐｙＢｕｆの最大サイズＭａｘＣａｃｈｅＳｉｚｅを未満であるとレベル処理部３０２が判断した場合は処理をＳ１３１１へ進め、以上であると判断した場合は処理をＳ１３１３へ進める。
そして、Ｓ１３１１で、レベル処理部３０２は、ＣｏｐｙＢｕｆのＣｎｔＣａｃｈｅ番目の領域にレベルリストにリンクされている先頭レベルノードのレベル番号（ＬｖＮｕｍ）を格納する。そして、Ｓ１３１２でレベル処理部３０２は、ＣｎｔＣａｃｈｅをインクリメントして、本処理を終了する。
一方、Ｓ１３１３では、レベル処理部３０２は、フラグＯｖｅｒＦｌｏｗＦｌａｇに「１」を書き込み、処理を終了する。
【００６８】
図１４は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部３０２のレベル流用処理の詳細手順例である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
まず、Ｓ１４０１で、レベル処理部３０２は、フィル処理部３０３に描画命令とともにＣｏｐｙＢｕｆのＣｎｔＣａｃｈｅ番目に格納されたレベル番号とレベルデータに格納されたＳｐａｎを送信する。そして、Ｓ１４０２で、レベル処理部３０２はＣｎｔＣａｃｈｅの値をインクリメントして、本処理を終了する。
【００６９】
図１５は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部３０２のレベルリスト更新処理を省略するレベル省略処理の詳細手順例である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
まず、Ｓ１５０１で、レベル処理部３０２は、フラグＮｅｘｔＬｅｖｅｌ＿ＣｈａｎｇｅＦｌａｇの値が「１」であるか否かを判断する。ここで、フラグＮｅｘｔＬｅｖｅｌ＿ＣｈａｎｇｅＦｌａｇの値が「１」であるとレベル処理部３０２がと判断した場合は、処理をＳ１５０３に進め、フラグＮｅｘｔＬｅｖｅｌ＿ＣｈａｎｇｅＦｌａｇの値が「０」であると判断した場合は処理をＳ１５０２へ進める。
そして、Ｓ１５０２ではレベル処理部３０２が、現在処理しているレベルデータに対してレベルリスト更新処理を行い、本処理を終了する。
一方、Ｓ１５０３では、レベル処理部３０２がレベルデータのＳｐａｎが「０」であるか否かを判断する。この判断は、Ｓ１５０３に基づくエッジ間の幅が「０」であるかを判断する幅判断処理に対応する。ここで、レベルデータのＳｐａｎが「０」であるとレベル処理部３０２が判断した場合処理をＳ１５０８へ進め、「０」以外であると判断した場合処理をＳ１５０４へ進める。
【００７０】
そして、Ｓ１５０４では、レベル処理部３０２がフラグＳｐｏｏｌＦｌａｇは「１」であるのか否かを判断する。ここで、フラグＳｐｏｏｌＦｌａｇが「１」であるとレベル処理部３０２が判断した場合はＳ１５０５へ処理を進め、「０」であると判断した場合は処理をＳ１５０７へ進める。
【００７１】
そして、Ｓ１５０５で、レベル処理部３０２は、フラグＳｐｏｏｌＦｌａｇに「０」を書き込む。そして、Ｓ１５０６で、レベル処理部３０２は、一時スプールしていたレベルデータに対してレベルリスト更新処理を進める。次に、Ｓ１５０７で、レベル処理部３０２は、現在処理しているレベルデータのレベルリスト更新処理を進めて、処理を終了する。
【００７２】
一方、Ｓ１５０８では、レベル処理部３０２は、フラグＳｐｏｏｌＦｌａｇが「１」であるか否かを判断する。ここで、フラグＳｐｏｏｌＦｌａｇが「１」であるとレベル処理部３０２が判断した場合処理をＳ１５１１へ進め、フラグＳｐｏｏｌＦｌａｇが「０」であると判断した場合処理をＳ１５０９へ進める。
そして、Ｓ１５０９では、レベル処理部３０２は、フラグＳｐｏｏｌＦｌａｇに「１」を書き込む。そして、Ｓ１５１０で、レベル処理部３０２が、現在処理しているレベルデータを一時スプールして、本処理を終了する。
【００７３】
一方、Ｓ１５１１では、レベル処理部３０２は、一時スプールしているレベルデータと現在処理しているレベルデータ間でレベル番号が等しいか否かを判断する。この判断は、Ｓ１５１１に基づく隣接するエッジのレベル（高さ）が等しいかどうかを判断する高さ判断処理に対応する。
ここで、レベル処理部３０２が一時的にスプールしているレベルデータと現在処理しているレベルデータ間でレベル番号が等しいと判断した場合処理をＳ１５１４へ進め、等しくないと判断した場合処理をＳ１５１２へ進める。そして、Ｓ１５１２では、レベル処理部３０２が一時的にスプールしたレベルデータに対してレベルリスト更新処理を行う。
【００７４】
一方、Ｓ１５１３では、レベル処理部３０２は、現在処理しているレベルデータを一時スプールして、本処理を終了する。
一方、Ｓ１５１４では、レベル処理部３０２が一時スプールしているレベルデータと現在処理しているレベルデータ間でエッジの向きが等しいか否かを判断する。この判断は、Ｓ１５１４に基づくレベルデータ間でエッジの向き（エッジ方向）が等しいか否かを判断する方向判断処理に対応する。ここで、一時スプールしているレベルデータと現在処理しているレベルデータ間でエッジの向きが等しいとレベル処理部３０２が判断した場合処理をＳ１５１２へ進め、等しくないと判断した場合、処理をＳ１５１５へ進める。そして、Ｓ１５１５では、レベル処理部３０２がフラグＳｐｏｏｌＦｌａｇに「０」を書き込み、本処理を終了する。
本実施形態では、このようにレベル処理部３０２がフラグＳｐｏｏｌＦｌａｇに「０」を書き込むことで、エッジとエッジで挟まれた区間毎に、紙面から高さ方向に整列されたオブジェクトリストを更新しないように制御する。これにより、描画処理すべきオブジェクトの数が大幅に削減され、細切れ大領のグラフィックデータ等の描画処理が高速化され、結果として印刷処理時間が短縮される。
なお、本実施形態では、隣接するエッジであって、所定の条件、オブジェクトの幅が「０」であること、レベル番号が等しいこと、オブジェクトのエッジ方向が上向き／下向きのペアを満たすレベルデータを検出する場合を示している。
【００７５】
〔第２実施形態〕
図１６は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部３０２のレベルリスト更新処理を省略するレベル省略処理の詳細手順例である。なお、各ステップは、ＣＰＵ２０２がＲＯＭ２０８に記憶されたＲＩＰ処理部２１１をＲＡＭ２０３にロードして実行することで実現される。以下、図２に示したＲＯＭ２０８に格納されるＲＩＰ処理部２１１の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はＲＡＭ２０３で管理されている。
まず、Ｓ１６０１からＳ１６１３までは、Ｓ１５０３からＳ１５１５と同様のため説明を省略する。
Ｓ１６１４で、レベル処理部３０２は、フラグＯｖｅｒＦｌｏｗＦｌａｇ＝１であるか否かを判断する。ここで、フラグＯｖｅｒＦｌｏｗＦｌａｇが「１」であるとレベル処理部３０２が判断した場合処理をＳ１６１５へ進め、フラグＯｖｅｒＦｌｏｗＦｌａｇが「０」であると判断した場合は、本処理を終了する。
【００７６】
次に、Ｓ１６１５で、レベル処理部３０２は、レベルデータのレベル番号からレベルノードを特定する。Ｓ１６１６で、レベル処理部３０２は、現在処理しているレベルノードのレベル番号がレベルリストの先頭のレベルノードのレベル番号と比較して、現在処理しているレベルノードがレベルリストの先頭に来るか否かを判断する。
【００７７】
ここで、レベルリストの先頭に来ないとレベル処理部３０２が判断した場合処理をＳ１６１７へ進め、レベルリストの先頭に来ると判断した場合処理をＳ１６２４へ進める。
そして、Ｓ１６１７では、レベル処理部３０２は、カウンタＣｎｔに「０」を書き込む。そして、Ｓ１６１８は、レベル処理部３０２は、ループ制御を開始して、Ｓ１６３４でカウンタＣｎｔが「２」以上あるいは、フラグＯｖｅｒＦｌｏｗＦｌａｇ＝１となるまで、Ｓ１６１９からＳ１６２３までの処理を繰り返す。
【００７８】
そして、Ｓ１６１９で、レベル処理部３０２は、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ以上か否かを判断する。ここで、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ以上であるとレベル処理部３０２が判断した場合処理をＳ１６２０へ進め、未満であると判断した場合は処理をＳ１６２１へ進める。
そして、Ｓ１６２０では、レベル処理部３０２がフラグＯｖｅｒＦｌｏｗＦｌａｇに「１」を書き込み、Ｓ１６３４へ進む。
一方、Ｓ１６２１では、レベル処理部３０２が流用バッファのＣｎｔＣａｃｈｅ番目に（ＣｎｔＣａｃｈｅ−１）番目の値をコピーする。そして、Ｓ１６２２で、レベル処理部３０２は、ＣｎｔＣａｃｈｅをインクリメントする。次に、Ｓ１６２３で、レベル処理部３０２は、カウンタＣｎｔをインクリメントして、Ｓ１６３４で、カウンタＣｎｔが「２」以上あるいは、フラグＯｖｅｒＦｌｏｗＦｌａｇ＝１であるとレベル処理部３０２が判断した場合、本処理を終了する。
【００７９】
そして、Ｓ１６２４では、レベル処理部３０２は、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ以上か否かを判断する。ここで、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ以上であるとレベル処理部３０２が判断した場合は処理をＳ１６２５へ進め、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ未満である判断した場合処理をＳ１６２６へ進める。
そして、Ｓ１６２５では、レベル処理部３０２は、フラグＯｖｅｒＦｌｏｗＦｌａｇに「１」を書き込み、本処理を終了する。
【００８０】
一方、Ｓ１６２６では、レベル処理部３０２はフラグＬｉｓｔＦｌａｇ＝１か否かを判断する。ここで、フラグＬｉｓｔＦｌａｇが「１」であるとレベル処理部３０２が判断した場合処理をＳ１６２８へ進め、フラグＬｉｓｔＦｌａｇが「０」であると判断した場合処理をＳ１６２７へ進める。
そして、Ｓ１６２７では、レベル処理部３０２は、流用バッファのＣｎｔＣａｃｈｅ番目にレベルリストの先頭から２番目のレベルノードのレベル番号（ＬｖＮｕｍ）をコピーして、Ｓ１６２９へ進む。
【００８１】
一方、Ｓ１６２８では、レベル処理部３０２は、流用バッファのＣｎｔＣａｃｈｅ番目に現在処理しているレベルノードのレベル番号（ＬｖＮｕｍ）をコピーする。次に、Ｓ１６２９でレベル処理部３０２は、ＣｎｔＣａｃｈｅをインクリメントする。次に、Ｓ１６３０で、レベル処理部３０２は、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ以上か否かを判断する。ここで、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ以上であるとレベル処理部３０２が判断した場合処理をＳ１６３１へ進め、ＣｎｔＣａｃｈｅがＭａｘＣａｃｈｅＳｉｚｅ未満であると判断した場合処理をＳ１６３２へ進める。
【００８２】
そして、Ｓ１６３１では、レベル処理部３０２は、フラグＯｖｅｒＦｌｏｗＦｌａｇに「１」を書き込み、本処理を終了する。
一方、Ｓ１６３２では、レベル処理部３０２は、ＣｎｔＣａｃｈｅ番目に（ＣｎｔＣａｃｈｅ−２）番目の値をコピーして、本処理を終了する。
一方、Ｓ１６３３では、レベル処理部３０２は、ＣｎｔＣａｃｈｅをインクリメントして、本処理を終了する。
【００８３】
本発明の各工程は、ネットワーク又は各種記憶媒体を介して取得したソフトウエア（プログラム）をパソコン（コンピュータ）等の処理装置（ＣＰＵ、プロセッサ）にて実行することでも実現できる。
【００８４】
本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施形態の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。
【符号の説明】
【００８５】
１０１  ホストＰＣ
１０３  プリンタ
【図１】
2013069186.tif 000003
【図２】
2013069186.tif 000004
【図３】
2013069186.tif 000005
【図４】
2013069186.tif 000006
【図５】
2013069186.tif 000007
【図６Ａ】
2013069186.tif 000008
【図６Ｂ】
2013069186.tif 000009
【図７】
2013069186.tif 000010
【図８】
2013069186.tif 000011
【図９】
2013069186.tif 000012
【図１０】
2013069186.tif 000013
【図１１】
2013069186.tif 000014
【図１２】
2013069186.tif 000015
【図１３】
2013069186.tif 000016
【図１４】
2013069186.tif 000017
【図１５】
2013069186.tif 000018
【図１６】
2013069186.tif 000019