印刷装置、印刷装置の制御方法、画像処理装置及びプログラム
【課題】 プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するRIPのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮する。
【解決手段】 入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する。そして、検出したオブジェクトについてオブジェクトリストへの追加または削除を行わないことを特徴とする。
【解決手段】 入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する。そして、検出したオブジェクトについてオブジェクトリストへの追加または削除を行わないことを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理する印刷装置、印刷装置の制御方法及びプログラムに関するものである。
【背景技術】
【0002】
従来、プリントシステムにおいて、プリンタで画像の出力を行なうために、ホストPC(Personal Computer)からPDL(Page Description Language)で記述されたプリントデータをプリンタに送信している。
ここで、プリンタでは、PDLで記述されたプリントデータを解釈してRIPが受け取れる中間データへの変換を行い、RIP処理で中間データを元に画像を生成し、出力を行なっている。RIPのレベル処理では、プリントデータに含まれるオブジェクトが紙面に対してオブジェクトが正しい順番で重なるように、オブジェクトの重なり順番をソートしている。そのためレベル処理では、オブジェクトの増加に伴い指数関数大に処理時間が増加してしまうという課題があった。
【0003】
この課題に対して下記特許文献1では、中間データに含まれるオブジェクトの重なりを検出し、下位にあるオブジェクトの重なる領域を除去することでレベル処理の負荷を軽減させることで、RIPの高速化を行った。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2002−334341号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
年々、ホストPCやホストPC上で使用するアプリケーションの性能の発達している。その中で建築や機械の設計図面データでは、一つの図面データの中に緻密で小さい図形オブジェクトが大量に含まれることが増えている。
これらのオブジェクトの多くは、ユーザがディスプレイ上で拡大表示して閲覧することを意図したオブジェクトで、必ずしもプリントすることを意図して作成されたオブジェクトでは無いことがある。そのためこのようなオブジェクトは、プリンタの解像度では表現できず、紙面の出力結果には現れてこないことがある。これら紙面の出力結果に現れないオブジェクトは、プリントデータの内部では、オブジェクト幅がゼロのオブジェクトとしてRIP処理が行われてしまう。
【0006】
このようなオブジェクトに対して、特許文献1の方法を適用させた場合、幅がゼロのため重なりを検出することができず、重なる領域が上手く除去できないことがある。更にこのようなオブジェクトが大量に有る場合、重なる領域の検出処理が逆に負担となりプリント処理に余計に時間が掛ってしまうことがある。
本発明は、上記の課題を解決するためになされたもので、本発明の目的は、プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するRIPのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮できる仕組みを提供することである。
【課題を解決するための手段】
【0007】
上記目的を達成する本発明の印刷装置は以下に示す構成を備える。
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、を備えることを特徴とする。
【発明の効果】
【0008】
本発明によれば、プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するRIPのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮できる。
【図面の簡単な説明】
【0009】
【図1】印刷装置を適用するプリントシステムの構成を示すブロック図である。
【図2】プリントコントローラ部の内部構造の一例を示すブロック図である。
【図3】図2に示したRIP処理部の内部構造の一例を示す図である。
【図4】図3に示したエッジ処理部が処理すべき命令の一例を示す図である。
【図5】図3に示したレベル処理部のエッジ処理を示す図である。
【図6A】エッジ処理部によるエッジ処理の一例を示す図である。
【図6B】エッジ処理部によるエッジ処理の一例を示す図である。
【図7】図3に示したレベル処理部の処理例を示す図である。
【図8】印刷装置の制御方法を説明するフローチャートである。
【図9】印刷装置の制御方法を説明するフローチャートである。
【図10】印刷装置の制御方法を説明するフローチャートである。
【図11】印刷装置の制御方法を説明するフローチャートである。
【図12】印刷装置の制御方法を説明するフローチャートである。
【図13】印刷装置の制御方法を説明するフローチャートである。
【図14】印刷装置の制御方法を説明するフローチャートである。
【図15】印刷装置の制御方法を説明するフローチャートである。
【図16】印刷装置の制御方法を説明するフローチャートである。
【発明を実施するための形態】
【0010】
次に本発明を実施するための最良の形態について図面を参照して説明する。
<システム構成の説明>
〔第1実施形態〕
図1は、本実施形態を示す印刷装置を適用するプリントシステムの構成を説明するブロック図である。本例は、入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置を示す。なお、以下の実施形態においては、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理する印刷装置を例とするが、記録媒体に画像を形成する処理を含まない、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理を行う画像処理装置にも適用可能であることはいうまでもない。
図1において、プリントシステムは、ホストPC(Personal Computer)101、LAN(Local Area Network)102、プリンタ103で構成されている。ユーザは、ホストPC101からLAN102経由して印刷指示をプリンタ103に通知する。
【0011】
プリンタ103は、ネットワークI/F(InterFace)部104とプリントコントローラ部105及びプリントエンジン部106で構成されている。LAN102経由でホストPC101から通知された印刷指示は、ネットワークI/F部104で受け付けられ、プリントコントローラ部105に渡される。プリントコントローラ部105では、印刷指示に従って画像データを形成し、その画像データをプリントエンジン部106に渡す。プリントエンジン部106は、画像データを元に紙媒体(記録媒体)に印字出力を行なう。プリントエンジン部106は、入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理して得られる画像データに基づいて記録媒体に画像を印刷する。
【0012】
図2は、図1に示したプリントコントローラ部105の内部構造の一例を示すブロック図である。
図2において、201はシステムバスで、104、106、203、208の間でのデータ伝送を行っている。202はCPU(Central Processor Unit)で、システムバス201に接続されるデバイスを総括的に制御する。また、CPU202は、S/W(Soft Ware)展開部206に格納されたS/Wを実行する役割をもつ。203はRAM(Random Access Memory)で、中間データ格納部204、画像データ格納部205、S/W展開部206及びS/W展開部206に展開され実行されたS/Wが使用する一時作業領域(非記載)に分かれている。
【0013】
208はROM(Read Only Memory)で、ネットワーク制御処理部209、PDL処理部210、RIP処理部211、プリントエンジン制御処理部212が格納されている。
ROM208に格納されているネットワーク制御処理部209、PDL処理部210、RIP処理部211、プリントエンジン制御処理部212はモジュールとして構成されている。ネットワーク制御処理部209、PDL処理部210、RIP処理部211、プリントエンジン制御処理部212は、S/W展開部206に展開されCPU202で実行される。
PDL処理部210は、ネットワークI/F104で経由してネットワーク制御処理部209からプリントデータを受け取る。PDL処理部210では、プリントデータに従って中間データの生成を行ない、中間データ格納部204に格納する。
【0014】
PDL処理部210が1ページ分のプリントデータを中間データに変換し、中間データ格納部204に格納すると、RIP処理部211は、中間データ格納部204に格納された中間データに基づいて画像生成処理を行なう。RIP処理部211が生成した画像データは、画像データ格納部205に格納される。
RIP処理部211が画像生成処理を終了させると、プリントエンジン制御処理部212は、画像データ格納部205に格納された画像データをプリントエンジン部106に送信する。プリントエンジン部106は、送信された画像に対して印字処理を行なう。
【0015】
図3は、図2に示したRIP処理部211の内部構造の一例を示す図である。
図3において、RIP処理部211は、エッジ処理部301、レベル処理部302、フィル処理部303、コンポジット処理部304で構成されている。
ここで、エッジ処理部301は、中間データを読み込み各Y座標におけるオブジェクトのエッジ(輪郭)のX座標を計算し、エッジで区切られる区間であるスパンをレベル処理部302へ送信する。
【0016】
レベル処理部302では、エッジ処理部301から受信したスパン同士が紙面に対して正しい順番(レベル番号の降順)で重なるように整列処理を行なう。レベル処理部302は、整列処理後が済むとスパン単位で最前面に位置するレベル番号をフィル処理部303に送信する。フィル処理部303は、レベル処理部302から受信した各スパンに対してレベルと紐付けされている色情報の割り当て(フィル)処理を行なう。
【0017】
フィル処理部303にてフィル処理済みのスパンは、コンポジット処理部304に送信される。コンポジット処理部304ではフィル処理部303から受信したスパンを構成する一つ一つのピクセルに対してコンポジット(合成)処理を行なう。コンポジット処理の具体的な方法としては、ROP(Raster OPerator)及びαブレンドの2種類がある。
ROPとは、重なり合うスパンのピクセル同士の各色値に対して論理演算を行なうことで、出力するピクセルを計算する方法である。また、αブレンドとは、重なり合うスパンのピクセル同士の色値を中間データから指定された一定の比率(αチャネル)に従って配合する方法である。コンポジット処理部にて計算された出力ピクセルは、画像データ格納部205に送信され格納される。
【0018】
図4は、図3に示したエッジ処理部301が読み込む中間データ記載の命令及びエッジ処理部301からレベル処理部302へ送信される命令の一例を示す図である。
図4において、エッジ処理部301が読み込む命令は描画命令と描画終了命令がある。
401は描画命令であって、描画命令401は、命令内容が描画処理であることをエッジ処理部301に示す情報である。パラメータ402は、描画命令401の描画命令で描画するスキャンライン数を示している。描画命令401は、新規にオブジェクトが追加されるスキャンライン毎に発行され、パラメータ402で示される区間中に新規にオブジェクトが追加されることは無い。
【0019】
パラメータ403は、描画命令401で中間データから展開するエッジの総データサイズを示している。エッジデータ404は、エッジ処理部301がエッジを形成するためのエッジデータでその詳細は、エッジデータ405〜409で構成されている。
エッジデータ405はエッジデータのデータサイズである。エッジデータ406は、紙面に対する垂直方向(高さ方向)におけるオブジェクトの位置を示すレベル番号である。エッジデータ407はエッジの向きで、上方向のエッジだと+1、下方向のエッジだと−1を値としてもつ。1つのオブジェクトにつき。上向きと下向きエッジがペアになっている。
エッジデータ408は、エッジの開始X座標で中間データから展開されたときのエッジのX座標を示している。エッジデータ409は、各Y座標におけるエッジのX座標の変化分が格納されている。エッジデータ409以降、エッジデータ405で記載されたエッジデータのデータサイズ分だけ、エッジデータ409が格納されている。なお描画終了命令の説明については、割愛する。
【0020】
図3に示したレベル処理部302が受信する命令は、描画命令、初期化命令及び描画終了命令がある。レベル処理部302が受信する描画命令の詳細は、描画命令410とそのパラメータ411〜413で構成される。描画命令410は、命令内容が描画処理であることをレベル処理部302に示す情報である。パラメータ411はレベル番号である。パラメータ412はエッジ間の幅の長さである。
【0021】
パラメータ413はエッジの方向が上向き、下向きのどちらであるかを示す情報である。なお、描画命令410とパラメータ411〜413をまとめてレベルデータと呼ぶことにする。
レベル処理部302が受信する初期化命令414の詳細は、パラメータ415〜417である。初期化命令414は、命令内容が初期化処理であることをレベル処理部302に示す情報である。なお、初期化処理の命令は、レベル処理部302にて各Y座標での最初に送信される命令である。そのため、その内容も各スキャンライン単位での処理の制御に関するものとなっている。
【0022】
パラメータ415は、レベル処理部302がこれから処理を行うスキャンラインとその1つ前のスキャンラインとの間でエッジの並びに変更が発生したかの有無を示すフラグ情報である。パラメータ416は、レベル処理部302がこれから処理を行うスキャンラインにてエッジの数(エッジ数)がある閾値以上(Thr以上)あるか、否かを示すフラグ情報である。パラメータ417は、レベル処理部302がこれから処理を行うスキャンラインの次のスキャンラインで新規エッジの追加が有るか、否かを示すフラグ情報である。
【0023】
図5は、本実施形態を示す印刷装置が作成して管理するオブジェクトリストの一例を示す図である。本例は、図3に示したレベル処理部302で処理するエッジリストとエッジノード及びレベルリストとレベルノードをリストで管理する例である。
また、本例は、所定のライン方向(X軸方向リスト)に整列されたオブジェクトについてエッジの幅、エッジのレベル、エッジの向きを調べて後述するように重なり状態を調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する。なお、オブジェクト処理の詳細については、図6A、図6B、図7、図8以降のフローチャートに従い説明する。
図5において、501はエッジリストへのポインタである。ポインタ501は、エッジリストにリンクされているエッジノードのうち、最も小さいX座標をもつエッジノード(エッジリストの先頭エッジノード)のアドレスが格納されている。502は、エッジリストで、エッジノード同士をX座標の昇順に管理しているリストである。
503は、エッジノードのデータ構造である。504は、エッジリスト502にて自分自身の次にX座標が大きいエッジノードのアドレスを格納したポインタである。505は、自分自身の次にX座標が小さいエッジノードのアドレスを格納したポインタである。
エッジノード間でX座標の大小関係に変化が発生した場合、ポインタ504,ポインタ504に格納するアドレスを変えることでエッジリストにおけるエッジノードの順番を更新する。
506は、現在処理しているスキャンラインでのエッジノードが位置するX座標である。エッジリストにおけるエッジノードのリンク位置の入れ替えは、X座標506の値を元に行う。
【0024】
507は、エッジの開始X座標で、エッジデータ408と同様である。508は、エッジデータのデータサイズで、エッジデータ405と同様である。509は、エッジデータのうち、エッジ処理部301が読み進めた分のデータサイズをカウントするカウンタである。510は、エッジデータが格納されている特定するポインタである。511はレベル番号で、エッジデータ406と同様である。512は、エッジの向きで、エッジデータ407と同様である。
【0025】
513は、レベルリスト514へのポインタである。ポインタ513は、レベルリスト514にリンクされているレベルノードのうち、最も大きいレベル番号をもつレベルノード(レベルノードの先頭レベルノード)へのアドレスが格納されている。
514はレベルリストで、レベルノード同士をレベル番号の降順に管理しているリストである。515は、レベルノードのデータ構造である。516は、レベルリスト514にて自分自身の次にレベル番号が小さいレベルノードのアドレスを格納したポインタである。517は、自分自身の次にレベル番号が大きいレベルノードのアドレスを格納したポインタである。
【0026】
レベルリスト514からのレベルノードの追加・削除によるレベルノード間でレベル番号の大小関係に変化が発生した場合、ポインタ516,517に格納するアドレスを変えることでレベルリストにおけるレベルノードの順番をソートして更新する。
518は、レベルノード自身のレベル番号である。レベルノードの並び替えは、レベル番号518の値を元に行う。519は、同一区間上に存在する同一のレベル番号のオブジェクト数を管理するカウンタ(LvCnt)である。
【0027】
520は、レベルノードがレベルリスト514上にリンクされているか否かを示すフラグ情報である。なお、レベルノードは、レベル番号から特定できるように予め定められた連続する領域を確保し、その領域でレベル番号をインデックス値とする配列として管理することが望ましい。
【0028】
また、レベル処理部302は、レベルリストにリンクされている先頭のレベルノードのレベル番号とエッジ処理部301から受信するエッジとエッジで挟まれた区間の長さをフィル処理部303に送信している。フィル処理部303は、レベル処理部302から送信されたレベル番号に紐付いた色情報をエッジとエッジで挟まれた区間の長さ分の画素に割り当てる処理を行う。
【0029】
図6Aは、図3に示したエッジ処理部301によるエッジ処理の一例を示す図である。
図6Aにおいて、601〜603は紙面に描画されるオブジェクトである。これらの輪郭を形成するエッジは、それぞれエッジ601'とエッジ601",エッジ602'とエッジ602"及びエッジ603'とエッジ603"のエッジでペアになっている。
604は、Y=Nにおけるエッジリストで、601'、602'、602"、603'、603"、601"の順番にエッジノードがリンクされている。
【0030】
一方で本図中Y=Mにおけるエッジリスト606では、601'、602'、603'、602"、603"、601"の順番にエッジノードがリンクされている。Y=NからY=Mにかけてエッジ602"とエッジ603'のX座標の大小関係が変わるため、エッジリストにリンクされているエッジノードの順番がソートされ正しい順番に入れ替わる。Y=MからY=M+1にかけて、エッジノード間のX座標の大小関係が変わらないため、エッジリストはエッジリスト606のままになる。
【0031】
図6Bは、図3に示したエッジ処理部301によるエッジ処理の一例を示す図である。本例は、エッジ処理部301にて、幅「0(ゼロ)」のオブジェクトが含まれている場合の一例を示している。
図6Bにおいて、607〜609は、紙面に描画されるオブジェクトである。
これらのうち、608が幅「0」のオブジェクトとなっている。これらの輪郭を形成するエッジは、それぞれエッジ607'とエッジ607",エッジ608'とエッジ608"及びエッジ609'とエッジ609"のエッジでペアになっている。
【0032】
Y=Nにおいて、エッジ608'、エッジ608"、エッジ609'が同じX座標に位置している。Y=Nにおけるエッジリスト610には、エッジ607'、エッジ608'、エッジ608"、エッジ609'、エッジ609"、エッジ607"の順番でリンクされている。同一X座標であるエッジ608'、エッジ608"、エッジ609'の間の順番については、この順番でなくても描画結果には影響は無い。ただし、同一X座標のエッジが複数ある場合は、レベル番号の順番に並ぶように整列されている方が、より本発明の効果は得られ易い。611はエッジリストへのポインタである。
【0033】
図7は、図3に示したレベル処理部302の処理例を示す図である。本例、図6A、図6Bと関連したレベル処理の一例を示している。
【0034】
図7において、701(レベル番号0)、702(レベル番号10)、703(レベル番号20)は紙面に描画されるオブジェクトである。ここで、レベル番号は紙面に近い順番から小さい番号が割り当てらえるため、オブジェクトは、紙面に近い順番からオブジェクト701、702、703の順番になっている。なお、本実施形態では、現在処理している区間に対応づけられた図7では流用バッファ715にオブジェクトの高さが保持される構成を採用している。
【0035】
704、705、706、707、708は、Y=Nおける各スパンを示しており、オブジェクト並び順番は、各Y座標にこれらスパン毎に更新される。714は、Y=Nにおける各スパンにおけるオブジェクトの重なりの推移を示している。推移714よりY=Nのとき、フィル処理部303には送られるX座標の小さい順番からレベル番号0、10、0、20、0が流用バッファ715に一時的に格納された上で送信される。
709、710、711、712、713はY=Mにおける各スパンを示している。716は、Y=Mにおける各スパンにおけるオブジェクトの重なりの推移を示している。
オブジェクトの重なりの推移716よりY=Mのとき、フィル処理部303には送られるX座標の小さい順番からレベル番号0、10、20、10、0が流用バッファ(CopyBuf)715に一時格納された上で送信される。Y=MからY=M+1にかけては、図6A、図6Bで述べ通りエッジノードのX座標の大小関係が変わらないため、エッジリストに変更が発生しない。
【0036】
エッジリストに変更が発生しない場合、Y=M+1におけるスパン毎のレベルリストの推移はY=Mと同様になる。そのため、Y=M+1では、レベルリストの更新を行うことなく、流用バッファ717に一時格納したレベル番号を流用するだけで済む。レベル処理部302では、このようにエッジ処理部301でエッジリストに変更が発生しない場合、流用バッファに一時格納した結果を流用し、レベルリストの更新を行わないことで処理の高速化を実施している。
【0037】
図8は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図3に示したエッジ処理部301の全体の処理概要例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
【0038】
S801で、エッジ処理部301は、描画終了か否かを示すフラグEndFlagに「0」を書き込む。S802で、エッジ処理部301は、1スキャンライン中に存在するエッジ総数をカウントするカウンタTotalEdgeNumに「0」を書き込む。S803は、ループ制御でEndFlag=1となるまで、エッジ処理部301は、S804からS818までの処理を繰り返す。S804で、エッジ処理部301は、中間データ格納部204から読み出す中間データの読み込み命令の内容を解釈する。
S805で、エッジ処理部301は、S804で解釈した命令内容が描画終了であると判断した場合、処理をS806に進め、命令内容が描画処理であると判断した場合、処理をS808に進める。
【0039】
S806でエッジ処理部301は、レベル処理部302に描画終了を送信する。S807で、エッジ処理部301は、フラグEndFlagに「1」を書き込み、S821へ進む。
一方、S808ではエッジ処理部301が、1スキャンライン当たりで中間データから展開するエッジデータの総データサイズをカウントするカウンタTotalEdgesCntに「0」を書き込み初期化する。次に、S809で、エッジ処理部301は、パラメータ402に格納された値Y_lenをカウンタCntYに書き込む。
【0040】
次に、S810で、ループ制御を開始してカウンタTotalEdgesCntが、S813でパラメータ403に格納されたカウンタTotalEdgesSizeが示す値となるまで、エッジ処理部301は、S811〜S812を繰り返す。S811でエッジ処理部301は、エッジを中間データからエッジリストへの展開処理(後述)を行う。S812でエッジ処理部301は、カウンタTotalEdgesCntにエッジデータ405に格納されている値EdgeSizeを加算する。
【0041】
S814で、エッジ処理部301は、エッジリストにリンクされているエッジノードのリンクに変化の発生有無を示すフラグEdgeListChangeFlagに「1」を書き込む。S815は、ループ制御を開始し、S820で、カウンタCntYが「0」となるまで、エッジ処理部301は、S815からS819を繰り返す。
【0042】
S816では、エッジ処理部301は、エッジリスト更新処理(後述)を行う。次に、S817でエッジ処理部301は、レベル処理部302への送信処理(後述)を行う。次に、S818でエッジ処理部301は、カウンタCntYをデクリメントする。次に、S819でエッジ処理部301は、フラグEdgeListChangeFlagに「0」を書き込む。
そして、S821で、フラグEndFlagが「1」であるとエッジ処理部301が判断したら、本処理を終了する。
【0043】
図9は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図8に示したS811におけるエッジ処理部301によるエッジ展開処理の詳細手順である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。
S901で、エッジ処理部301は、RAM203上でメモリを確保し新規エッジノードに割り当てる。S902でエッジ処理部301は、エッジデータ404をエッジノードにコピーする。
具体的には、図4に示したエッジデータ405、406、407、408に格納された値及びエッジデータ409のアドレスを、図5に示したエッジデータ508、レベル番号511、エッジ向き512、エッジの開始X座標507、及びポインタ510へコピーする。
【0044】
S903で、エッジ処理部301は、エッジノードをエッジリストへ追加する。これにより、エッジリストにエッジノードが登録される。S904で、エッジ処理部301は、データサイズCntSizeに「0」を書き込み初期化する。そして、S905で、エッジ処理部301は、TotalEdgeNumをインクリメントして、本処理を終了する。
【0045】
図10は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図8に示したエッジ処理部301のエッジリスト更新処理の詳細手順である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
S1001で、エッジ処理部301は、図5に示したエッジリストへのポインタ501からエッジリスト502にリンクされている先頭のエッジノードにアクセスする。S1002は、ループ制御を開始し、エッジ処理部301は、S1015で、S1003からS1014までの処理をエッジリストにリンクされているエッジノードをすべて参照するまで繰り返す。
【0046】
S1003で、エッジ処理部301は、データサイズCntSizeがデータサイズEdgeSizeと等しくなったか、否かを判断する。ここで、等しくないとエッジ処理部301が判断した場合、処理をS1004に進め、等しいとエッジ処理部301が判断した場合処理をS1011に進める。
S1004では、エッジ処理部301は、エッジノードが保持している現在のX座標CurXをOldXにコピーする。S1005で、エッジ処理部301は、現在のX座標CurXにエッジデータ409に対応付けられたStepXを加算し、エッジノードのX座標を更新する。
【0047】
そして、S1006で、エッジ処理部301は、現在のX座標CurXがOldXと等しいか否かを判断する。ここで、等しいとエッジ処理部301が判断した場合、S1009の処理、等しくないとエッジ処理部301が判断した場合S1007の処理を実行する。
【0048】
次に、S1007で、エッジ処理部1003は、エッジリストでエッジノードの正しい位置を検索し、エッジノード間のリンクをつなぎ換える。検索するエッジノードの位置は、エッジノードのX座標をキー値として、エッジリストが先頭のエッジノードからX座標の昇順になる位置である。
【0049】
次に、S1008で、エッジ処理部301は、フラグEdgeListChangeFlagに「1」を書き込む。そして、S1009で、エッジ処理部301は、データサイズCntSizeにStepSizeを加算する。次に、S1010で、エッジ処理部301は、次のエッジを参照する。そして、S1015で、エッジ処理部301がエッジノードのすべてを参照したと判断した場合は、本処理を終了する。
【0050】
一方、S1011で、エッジ処理部301は、エッジノードをエッジリストから外すために、ポインタNextEdgeとポインタPrevEdgeにリンクされているエッジノードをリンクさせる。
【0051】
そして、S1012で、エッジ処理部301は、エッジノードで使用していた領域を解放する。次に、S1013で、エッジ処理部301は、エッジリストにリンクされているエッジノード数が1つ減ったため、TotalEdgeNumをデクリメントする。そして、S1014で、エッジ処理部301は、フラグEdgeListChangeFlagに「1」を書き込んで、S1010へ進む。
【0052】
図11は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、エッジ処理部301がレベル処理部302へデータを送る処理の詳細手順である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。
S1101で、エッジ処理部301は、フラグEdgeListChangeFlagに「1」が格納されているか否かを判断する。ここで、フラグEdgeListChangeFlagに「1」が格納されているとエッジ処理部301が判断した場合は、S1102へ進み、「0」が格納されているとエッジ処理部301が判断した場合、S1103へ処理を進める。
【0053】
そして、S1102では、エッジ処理部301は、フラグListChangeFlagに「1」を書き込む。また、S1103では、エッジ処理部301は、フラグListCahngeFlagに「0」を書き込み、S1104へ進む。そして、S1104で、エッジ処理部301は、TotalEdgeNumが予め定めた閾値以上(Thr以上)か、否かを判断する。ここで、Thr以上であるとエッジ処理部301が判断した場合は、S1105へ処理を進め、Thr未満とであるとエッジ処理部301が判断した場合は、S1106へ処理を進める。
【0054】
そして、S1105では、エッジ処理部301は、フラグEdgeNumFlagに「1」を書き込む。また、S1106では、エッジ処理部301は、フラグEdgeNumFlagに「0」を書き込む。そして、S1107で、エッジ処理部301は、カウンタCntYが1以下か否かを判断する。ここで、カウンタCntYが「1」以下であるとエッジ処理部301が判断した場合は、S1108へ処理を進め、カウンタCntYが「1」より上であると判断した場合は、S1109へと処理を進める。そして、S1108ではエッジ処理部301は、フラグNextLineFlagに「1」を書き込む。
また、S1109で、エッジ処理部301は、フラグNextLineFlagに「0」を書き込み、S1110へ進む。そして、S1110で、エッジ処理部301は、レベル処理部302に初期化命令を通知する。なお、エッジ処理部301が初期化を通知するデータフォーマットは、図4に示した初期化命令414のパラメータ415〜417の通りである。
【0055】
次に、S1111で、エッジ処理部301は、エッジリストへのポインタからエッジリストにリンクされている先頭のエッジノードにアクセスする。そして、S1112は、ループ制御を開始し、エッジ処理部301は、S1116でエッジリストにリンクされているエッジノードをすべて参照したと判断されるまで、S1113からS1115までの処理を繰り返す。
S1113で、エッジ処理部301は、現在処理しているエッジノードのX座標CurXと次に参照するエッジノードのX座標CurXの差からエッジとエッジの区間幅spanを計算する。
【0056】
そして、S1114で、エッジ処理部301は、レベル処理部302へ描画命令を通知する。なお、描画命令410のデータフォーマットは、パラメータ411から413の通りである。次に、S1115で、エッジ処理部301は、次のエッジノードを参照して、S1116で、エッジ処理部301がエッジリストにリンクされているエッジノードをすべて参照したと判断したら、本処理を終了する。
する。
【0057】
図12は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302の全体の処理概要例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
S1201で、レベル処理部302は、レベルノード用に用意された領域に「0」を書き込み初期化する。次に、S1202で、レベル処理部302は、各種変数の初期化としてフラグEndFlag、OverFlowFlag、LevelListChangeFlag、LevelSkipFlag、NextLineChangeFlagに「0」を書き込む。
次に、S1203は、ループ制御を開始して、S1225で、フラグEndFlag=1と判断されるまで、レベル処理部302は、S1204からS1223までの処理を繰り返す。
まず、S1204で、レベル処理部302は、エッジ処理部301から受信した命令を解釈する。次に、S1205で、レベル処理部302は、S1204でエッジ処理部301から受信した命令の内容が描画終了であると判断した場合は、処理をS1206へ進め、描画命令であると判断した場合は、処理をS1208へ進め、初期化命令であると判断した場合は、処理をS1214へ進める。
【0058】
そして、S1206では、レベル処理部302は、フィル処理部303に描画終了を送信する。次に、S1207で、レベル処理部302は、フラグEndFlagに「1」を書き込む。また、S1208では、レベル処理部302は、フラグLevelListChangeFlag=1であるか否かを判断する。ここで、フラグLevelListChangeFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1209へ進め、「0」であると判断した場合は、処理をS1211へ進める。
【0059】
そして、S1209では、レベル処理部302は、フラグOverFlowFlag=1であるか否かを判断する。ここで、フラグOverFlowFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1210へ進め、「0」であると判断した場合は、処理をS1211へ進める。
【0060】
そして、S1210では、レベル処理部302は、図7において説明した手順に従うレベル流用処理(後述)を行う。また、S1211で、レベル処理部302は、フラグLevelSkipFlag=1か否かを判断する。ここで、フラグLevelSkipFlagが「1」であるとレベル処理部302がと判断した場合は、処理をS1212へ進め、フラグLevelSkipFlagが「0」であると判断した場合、処理をS1213へ処理を進める。
そして、S1212では、レベル処理部302は、レベルリスト省略処理(後述)を行う。また、S1213では、レベル処理部302は、現在処理しているレベル番号を元に、レベルリストの更新処理(後述)を行う。
【0061】
一方、S1214では、レベル処理部302は、フラグListChangeFlag=1か否かを判断する。ここで、フラグListChangeFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1215へ進め、フラグListChangeFlagが「0」であると判断した場合は、S1216へ処理を進める。
そして、S1215では、レベル処理部302は、フラグLevelListChangeFlagに「1」を書き込む。また、S1216では、レベル処理部302は、フラグLevelListChangeFlagに「0」を書き込み、S1217へ進む。
そして、S1217で、レベル処理部302は、フラグEdgeNumFlag=1か否かを判断する。ここで、フラグEdgeNumFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1218へ進め、フラグEdgeNumFlagが「0」であると判断した場合は、処理をS1219へ進める。
【0062】
そして、S1218では、レベル処理部302は、フラグLevelSkipFlagに「1」を書き込む。また、S1219では、レベル処理部302は、フラグLevelSkipFlagに「0」を書き込み、S1223へ進む。そして、S1220で、レベル処理部302は、フラグNextLineFlag=1か否かを判断する。
【0063】
ここで、フラグNextLineFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1221へ進め、フラグNextLineFlagが「0」であると判断した場合は、処理をS1222へ進める。
S1221では、レベル処理部302は、フラグNextLineChangeFlagに「1」を書き込む。S1222では、レベル処理部302は、フラグNextLineChangeFlagに「0」を書き込む。そして、S1223で、レベル処理部302は、CntCacheに「0」を書き込み初期化する。S1224で、レベル処理部302は、OverFlowFlagに「0」を書き込み初期化する。そして、S1225で、フラグEndFlagが「1」であるとレベル処理部302が判断した場合は、本処理を終了する。
図13は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベルリスト更新処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
S1301で、レベル処理部302は、レベルデータから取得したレベル番号からレベルノードを特定する。S1302で、レベル処理部302は、レベルノードのCntLevelにレベルノードのUpdownの値を加算する。次に、S1303で、レベル処理部302は、CntLevel=0で、かつフラグListFlag=1か否かを判断する。ここで、レベル処理部302がCntLevel=0で、かつフラグListFlag=1であると判断した場合は処理をS1304へ進め、CntLevel=0かつListFlag=1ではないと判断した場合は、処理をS1306へ進める。
S1304では、レベル処理部302は、レベルデータから特定したレベル番号のレベルノードをレベルリストから外すために、ポインタNextLevel、PrevLevelでリンクされたレベルノード同士をリンクする。
【0064】
次に、S1305で、レベル処理部302は、ListFlagに「0」を書き込み、S1309へ進む。また、S1306では、レベル処理部302は、CntLeve=0で、かつフラグListFlag=0か否かを判断する。
【0065】
ここで、レベル処理部302がCntLevel=0で、かつListFlag=0であると判断した場合は処理をS1307へ進め、CntLevel=0で、かつListFlag=0ではないと判断した場合、処理をS1309へ進める。そして、S1307では、レベル処理部302はレベルリストにレベルノードをリンク(追加)する。具体的には、レベル処理部302は、先頭のレベルノードからレベル番号の大小比較を行い適切な位置を探索して、レベルリストへのレベルノードのリンクを行う。
【0066】
次に、S1308で、レベル処理部302は、フラグListFlagに「1」を書き込む。そして、S1309で、レベル処理部302は、フィル処理部303に描画命令をレベルリストの先頭にあるレベルノードのレベル番号とspanと共に送信する。そして、S1310で、レベル処理部302は、CntCacheが流用バッファCopyBufの最大サイズMaxCacheSizeを未満か否かを判断する。
【0067】
ここで、CntCacheが流用バッファCopyBufの最大サイズMaxCacheSizeを未満であるとレベル処理部302が判断した場合は処理をS1311へ進め、以上であると判断した場合は処理をS1313へ進める。
そして、S1311で、レベル処理部302は、CopyBufのCntCache番目の領域にレベルリストにリンクされている先頭レベルノードのレベル番号(LvNum)を格納する。そして、S1312でレベル処理部302は、CntCacheをインクリメントして、本処理を終了する。
一方、S1313では、レベル処理部302は、フラグOverFlowFlagに「1」を書き込み、処理を終了する。
【0068】
図14は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベル流用処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
まず、S1401で、レベル処理部302は、フィル処理部303に描画命令とともにCopyBufのCntCache番目に格納されたレベル番号とレベルデータに格納されたSpanを送信する。そして、S1402で、レベル処理部302はCntCacheの値をインクリメントして、本処理を終了する。
【0069】
図15は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベルリスト更新処理を省略するレベル省略処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
まず、S1501で、レベル処理部302は、フラグNextLevel_ChangeFlagの値が「1」であるか否かを判断する。ここで、フラグNextLevel_ChangeFlagの値が「1」であるとレベル処理部302がと判断した場合は、処理をS1503に進め、フラグNextLevel_ChangeFlagの値が「0」であると判断した場合は処理をS1502へ進める。
そして、S1502ではレベル処理部302が、現在処理しているレベルデータに対してレベルリスト更新処理を行い、本処理を終了する。
一方、S1503では、レベル処理部302がレベルデータのSpanが「0」であるか否かを判断する。この判断は、S1503に基づくエッジ間の幅が「0」であるかを判断する幅判断処理に対応する。ここで、レベルデータのSpanが「0」であるとレベル処理部302が判断した場合処理をS1508へ進め、「0」以外であると判断した場合処理をS1504へ進める。
【0070】
そして、S1504では、レベル処理部302がフラグSpoolFlagは「1」であるのか否かを判断する。ここで、フラグSpoolFlagが「1」であるとレベル処理部302が判断した場合はS1505へ処理を進め、「0」であると判断した場合は処理をS1507へ進める。
【0071】
そして、S1505で、レベル処理部302は、フラグSpoolFlagに「0」を書き込む。そして、S1506で、レベル処理部302は、一時スプールしていたレベルデータに対してレベルリスト更新処理を進める。次に、S1507で、レベル処理部302は、現在処理しているレベルデータのレベルリスト更新処理を進めて、処理を終了する。
【0072】
一方、S1508では、レベル処理部302は、フラグSpoolFlagが「1」であるか否かを判断する。ここで、フラグSpoolFlagが「1」であるとレベル処理部302が判断した場合処理をS1511へ進め、フラグSpoolFlagが「0」であると判断した場合処理をS1509へ進める。
そして、S1509では、レベル処理部302は、フラグSpoolFlagに「1」を書き込む。そして、S1510で、レベル処理部302が、現在処理しているレベルデータを一時スプールして、本処理を終了する。
【0073】
一方、S1511では、レベル処理部302は、一時スプールしているレベルデータと現在処理しているレベルデータ間でレベル番号が等しいか否かを判断する。この判断は、S1511に基づく隣接するエッジのレベル(高さ)が等しいかどうかを判断する高さ判断処理に対応する。
ここで、レベル処理部302が一時的にスプールしているレベルデータと現在処理しているレベルデータ間でレベル番号が等しいと判断した場合処理をS1514へ進め、等しくないと判断した場合処理をS1512へ進める。そして、S1512では、レベル処理部302が一時的にスプールしたレベルデータに対してレベルリスト更新処理を行う。
【0074】
一方、S1513では、レベル処理部302は、現在処理しているレベルデータを一時スプールして、本処理を終了する。
一方、S1514では、レベル処理部302が一時スプールしているレベルデータと現在処理しているレベルデータ間でエッジの向きが等しいか否かを判断する。この判断は、S1514に基づくレベルデータ間でエッジの向き(エッジ方向)が等しいか否かを判断する方向判断処理に対応する。ここで、一時スプールしているレベルデータと現在処理しているレベルデータ間でエッジの向きが等しいとレベル処理部302が判断した場合処理をS1512へ進め、等しくないと判断した場合、処理をS1515へ進める。そして、S1515では、レベル処理部302がフラグSpoolFlagに「0」を書き込み、本処理を終了する。
本実施形態では、このようにレベル処理部302がフラグSpoolFlagに「0」を書き込むことで、エッジとエッジで挟まれた区間毎に、紙面から高さ方向に整列されたオブジェクトリストを更新しないように制御する。これにより、描画処理すべきオブジェクトの数が大幅に削減され、細切れ大領のグラフィックデータ等の描画処理が高速化され、結果として印刷処理時間が短縮される。
なお、本実施形態では、隣接するエッジであって、所定の条件、オブジェクトの幅が「0」であること、レベル番号が等しいこと、オブジェクトのエッジ方向が上向き/下向きのペアを満たすレベルデータを検出する場合を示している。
【0075】
〔第2実施形態〕
図16は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベルリスト更新処理を省略するレベル省略処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
まず、S1601からS1613までは、S1503からS1515と同様のため説明を省略する。
S1614で、レベル処理部302は、フラグOverFlowFlag=1であるか否かを判断する。ここで、フラグOverFlowFlagが「1」であるとレベル処理部302が判断した場合処理をS1615へ進め、フラグOverFlowFlagが「0」であると判断した場合は、本処理を終了する。
【0076】
次に、S1615で、レベル処理部302は、レベルデータのレベル番号からレベルノードを特定する。S1616で、レベル処理部302は、現在処理しているレベルノードのレベル番号がレベルリストの先頭のレベルノードのレベル番号と比較して、現在処理しているレベルノードがレベルリストの先頭に来るか否かを判断する。
【0077】
ここで、レベルリストの先頭に来ないとレベル処理部302が判断した場合処理をS1617へ進め、レベルリストの先頭に来ると判断した場合処理をS1624へ進める。
そして、S1617では、レベル処理部302は、カウンタCntに「0」を書き込む。そして、S1618は、レベル処理部302は、ループ制御を開始して、S1634でカウンタCntが「2」以上あるいは、フラグOverFlowFlag=1となるまで、S1619からS1623までの処理を繰り返す。
【0078】
そして、S1619で、レベル処理部302は、CntCacheがMaxCacheSize以上か否かを判断する。ここで、CntCacheがMaxCacheSize以上であるとレベル処理部302が判断した場合処理をS1620へ進め、未満であると判断した場合は処理をS1621へ進める。
そして、S1620では、レベル処理部302がフラグOverFlowFlagに「1」を書き込み、S1634へ進む。
一方、S1621では、レベル処理部302が流用バッファのCntCache番目に(CntCache−1)番目の値をコピーする。そして、S1622で、レベル処理部302は、CntCacheをインクリメントする。次に、S1623で、レベル処理部302は、カウンタCntをインクリメントして、S1634で、カウンタCntが「2」以上あるいは、フラグOverFlowFlag=1であるとレベル処理部302が判断した場合、本処理を終了する。
【0079】
そして、S1624では、レベル処理部302は、CntCacheがMaxCacheSize以上か否かを判断する。ここで、CntCacheがMaxCacheSize以上であるとレベル処理部302が判断した場合は処理をS1625へ進め、CntCacheがMaxCacheSize未満である判断した場合処理をS1626へ進める。
そして、S1625では、レベル処理部302は、フラグOverFlowFlagに「1」を書き込み、本処理を終了する。
【0080】
一方、S1626では、レベル処理部302はフラグListFlag=1か否かを判断する。ここで、フラグListFlagが「1」であるとレベル処理部302が判断した場合処理をS1628へ進め、フラグListFlagが「0」であると判断した場合処理をS1627へ進める。
そして、S1627では、レベル処理部302は、流用バッファのCntCache番目にレベルリストの先頭から2番目のレベルノードのレベル番号(LvNum)をコピーして、S1629へ進む。
【0081】
一方、S1628では、レベル処理部302は、流用バッファのCntCache番目に現在処理しているレベルノードのレベル番号(LvNum)をコピーする。次に、S1629でレベル処理部302は、CntCacheをインクリメントする。次に、S1630で、レベル処理部302は、CntCacheがMaxCacheSize以上か否かを判断する。ここで、CntCacheがMaxCacheSize以上であるとレベル処理部302が判断した場合処理をS1631へ進め、CntCacheがMaxCacheSize未満であると判断した場合処理をS1632へ進める。
【0082】
そして、S1631では、レベル処理部302は、フラグOverFlowFlagに「1」を書き込み、本処理を終了する。
一方、S1632では、レベル処理部302は、CntCache番目に(CntCache−2)番目の値をコピーして、本処理を終了する。
一方、S1633では、レベル処理部302は、CntCacheをインクリメントして、本処理を終了する。
【0083】
本発明の各工程は、ネットワーク又は各種記憶媒体を介して取得したソフトウエア(プログラム)をパソコン(コンピュータ)等の処理装置(CPU、プロセッサ)にて実行することでも実現できる。
【0084】
本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形(各実施形態の有機的な組合せを含む)が可能であり、それらを本発明の範囲から除外するものではない。
【符号の説明】
【0085】
101 ホストPC
103 プリンタ
【技術分野】
【0001】
本発明は、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理する印刷装置、印刷装置の制御方法及びプログラムに関するものである。
【背景技術】
【0002】
従来、プリントシステムにおいて、プリンタで画像の出力を行なうために、ホストPC(Personal Computer)からPDL(Page Description Language)で記述されたプリントデータをプリンタに送信している。
ここで、プリンタでは、PDLで記述されたプリントデータを解釈してRIPが受け取れる中間データへの変換を行い、RIP処理で中間データを元に画像を生成し、出力を行なっている。RIPのレベル処理では、プリントデータに含まれるオブジェクトが紙面に対してオブジェクトが正しい順番で重なるように、オブジェクトの重なり順番をソートしている。そのためレベル処理では、オブジェクトの増加に伴い指数関数大に処理時間が増加してしまうという課題があった。
【0003】
この課題に対して下記特許文献1では、中間データに含まれるオブジェクトの重なりを検出し、下位にあるオブジェクトの重なる領域を除去することでレベル処理の負荷を軽減させることで、RIPの高速化を行った。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2002−334341号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
年々、ホストPCやホストPC上で使用するアプリケーションの性能の発達している。その中で建築や機械の設計図面データでは、一つの図面データの中に緻密で小さい図形オブジェクトが大量に含まれることが増えている。
これらのオブジェクトの多くは、ユーザがディスプレイ上で拡大表示して閲覧することを意図したオブジェクトで、必ずしもプリントすることを意図して作成されたオブジェクトでは無いことがある。そのためこのようなオブジェクトは、プリンタの解像度では表現できず、紙面の出力結果には現れてこないことがある。これら紙面の出力結果に現れないオブジェクトは、プリントデータの内部では、オブジェクト幅がゼロのオブジェクトとしてRIP処理が行われてしまう。
【0006】
このようなオブジェクトに対して、特許文献1の方法を適用させた場合、幅がゼロのため重なりを検出することができず、重なる領域が上手く除去できないことがある。更にこのようなオブジェクトが大量に有る場合、重なる領域の検出処理が逆に負担となりプリント処理に余計に時間が掛ってしまうことがある。
本発明は、上記の課題を解決するためになされたもので、本発明の目的は、プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するRIPのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮できる仕組みを提供することである。
【課題を解決するための手段】
【0007】
上記目的を達成する本発明の印刷装置は以下に示す構成を備える。
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、を備えることを特徴とする。
【発明の効果】
【0008】
本発明によれば、プリント解像度以上に細かいオブジェクトを大量に含む印刷情報から生成される中間データに対するRIPのレベル処理におけるデータ処理負担を軽減して、印刷処理に要する時間を短縮できる。
【図面の簡単な説明】
【0009】
【図1】印刷装置を適用するプリントシステムの構成を示すブロック図である。
【図2】プリントコントローラ部の内部構造の一例を示すブロック図である。
【図3】図2に示したRIP処理部の内部構造の一例を示す図である。
【図4】図3に示したエッジ処理部が処理すべき命令の一例を示す図である。
【図5】図3に示したレベル処理部のエッジ処理を示す図である。
【図6A】エッジ処理部によるエッジ処理の一例を示す図である。
【図6B】エッジ処理部によるエッジ処理の一例を示す図である。
【図7】図3に示したレベル処理部の処理例を示す図である。
【図8】印刷装置の制御方法を説明するフローチャートである。
【図9】印刷装置の制御方法を説明するフローチャートである。
【図10】印刷装置の制御方法を説明するフローチャートである。
【図11】印刷装置の制御方法を説明するフローチャートである。
【図12】印刷装置の制御方法を説明するフローチャートである。
【図13】印刷装置の制御方法を説明するフローチャートである。
【図14】印刷装置の制御方法を説明するフローチャートである。
【図15】印刷装置の制御方法を説明するフローチャートである。
【図16】印刷装置の制御方法を説明するフローチャートである。
【発明を実施するための形態】
【0010】
次に本発明を実施するための最良の形態について図面を参照して説明する。
<システム構成の説明>
〔第1実施形態〕
図1は、本実施形態を示す印刷装置を適用するプリントシステムの構成を説明するブロック図である。本例は、入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置を示す。なお、以下の実施形態においては、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理する印刷装置を例とするが、記録媒体に画像を形成する処理を含まない、プリントデータに基づいた画像データを形成するRIP(Raster Image Processor)処理を行う画像処理装置にも適用可能であることはいうまでもない。
図1において、プリントシステムは、ホストPC(Personal Computer)101、LAN(Local Area Network)102、プリンタ103で構成されている。ユーザは、ホストPC101からLAN102経由して印刷指示をプリンタ103に通知する。
【0011】
プリンタ103は、ネットワークI/F(InterFace)部104とプリントコントローラ部105及びプリントエンジン部106で構成されている。LAN102経由でホストPC101から通知された印刷指示は、ネットワークI/F部104で受け付けられ、プリントコントローラ部105に渡される。プリントコントローラ部105では、印刷指示に従って画像データを形成し、その画像データをプリントエンジン部106に渡す。プリントエンジン部106は、画像データを元に紙媒体(記録媒体)に印字出力を行なう。プリントエンジン部106は、入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理して得られる画像データに基づいて記録媒体に画像を印刷する。
【0012】
図2は、図1に示したプリントコントローラ部105の内部構造の一例を示すブロック図である。
図2において、201はシステムバスで、104、106、203、208の間でのデータ伝送を行っている。202はCPU(Central Processor Unit)で、システムバス201に接続されるデバイスを総括的に制御する。また、CPU202は、S/W(Soft Ware)展開部206に格納されたS/Wを実行する役割をもつ。203はRAM(Random Access Memory)で、中間データ格納部204、画像データ格納部205、S/W展開部206及びS/W展開部206に展開され実行されたS/Wが使用する一時作業領域(非記載)に分かれている。
【0013】
208はROM(Read Only Memory)で、ネットワーク制御処理部209、PDL処理部210、RIP処理部211、プリントエンジン制御処理部212が格納されている。
ROM208に格納されているネットワーク制御処理部209、PDL処理部210、RIP処理部211、プリントエンジン制御処理部212はモジュールとして構成されている。ネットワーク制御処理部209、PDL処理部210、RIP処理部211、プリントエンジン制御処理部212は、S/W展開部206に展開されCPU202で実行される。
PDL処理部210は、ネットワークI/F104で経由してネットワーク制御処理部209からプリントデータを受け取る。PDL処理部210では、プリントデータに従って中間データの生成を行ない、中間データ格納部204に格納する。
【0014】
PDL処理部210が1ページ分のプリントデータを中間データに変換し、中間データ格納部204に格納すると、RIP処理部211は、中間データ格納部204に格納された中間データに基づいて画像生成処理を行なう。RIP処理部211が生成した画像データは、画像データ格納部205に格納される。
RIP処理部211が画像生成処理を終了させると、プリントエンジン制御処理部212は、画像データ格納部205に格納された画像データをプリントエンジン部106に送信する。プリントエンジン部106は、送信された画像に対して印字処理を行なう。
【0015】
図3は、図2に示したRIP処理部211の内部構造の一例を示す図である。
図3において、RIP処理部211は、エッジ処理部301、レベル処理部302、フィル処理部303、コンポジット処理部304で構成されている。
ここで、エッジ処理部301は、中間データを読み込み各Y座標におけるオブジェクトのエッジ(輪郭)のX座標を計算し、エッジで区切られる区間であるスパンをレベル処理部302へ送信する。
【0016】
レベル処理部302では、エッジ処理部301から受信したスパン同士が紙面に対して正しい順番(レベル番号の降順)で重なるように整列処理を行なう。レベル処理部302は、整列処理後が済むとスパン単位で最前面に位置するレベル番号をフィル処理部303に送信する。フィル処理部303は、レベル処理部302から受信した各スパンに対してレベルと紐付けされている色情報の割り当て(フィル)処理を行なう。
【0017】
フィル処理部303にてフィル処理済みのスパンは、コンポジット処理部304に送信される。コンポジット処理部304ではフィル処理部303から受信したスパンを構成する一つ一つのピクセルに対してコンポジット(合成)処理を行なう。コンポジット処理の具体的な方法としては、ROP(Raster OPerator)及びαブレンドの2種類がある。
ROPとは、重なり合うスパンのピクセル同士の各色値に対して論理演算を行なうことで、出力するピクセルを計算する方法である。また、αブレンドとは、重なり合うスパンのピクセル同士の色値を中間データから指定された一定の比率(αチャネル)に従って配合する方法である。コンポジット処理部にて計算された出力ピクセルは、画像データ格納部205に送信され格納される。
【0018】
図4は、図3に示したエッジ処理部301が読み込む中間データ記載の命令及びエッジ処理部301からレベル処理部302へ送信される命令の一例を示す図である。
図4において、エッジ処理部301が読み込む命令は描画命令と描画終了命令がある。
401は描画命令であって、描画命令401は、命令内容が描画処理であることをエッジ処理部301に示す情報である。パラメータ402は、描画命令401の描画命令で描画するスキャンライン数を示している。描画命令401は、新規にオブジェクトが追加されるスキャンライン毎に発行され、パラメータ402で示される区間中に新規にオブジェクトが追加されることは無い。
【0019】
パラメータ403は、描画命令401で中間データから展開するエッジの総データサイズを示している。エッジデータ404は、エッジ処理部301がエッジを形成するためのエッジデータでその詳細は、エッジデータ405〜409で構成されている。
エッジデータ405はエッジデータのデータサイズである。エッジデータ406は、紙面に対する垂直方向(高さ方向)におけるオブジェクトの位置を示すレベル番号である。エッジデータ407はエッジの向きで、上方向のエッジだと+1、下方向のエッジだと−1を値としてもつ。1つのオブジェクトにつき。上向きと下向きエッジがペアになっている。
エッジデータ408は、エッジの開始X座標で中間データから展開されたときのエッジのX座標を示している。エッジデータ409は、各Y座標におけるエッジのX座標の変化分が格納されている。エッジデータ409以降、エッジデータ405で記載されたエッジデータのデータサイズ分だけ、エッジデータ409が格納されている。なお描画終了命令の説明については、割愛する。
【0020】
図3に示したレベル処理部302が受信する命令は、描画命令、初期化命令及び描画終了命令がある。レベル処理部302が受信する描画命令の詳細は、描画命令410とそのパラメータ411〜413で構成される。描画命令410は、命令内容が描画処理であることをレベル処理部302に示す情報である。パラメータ411はレベル番号である。パラメータ412はエッジ間の幅の長さである。
【0021】
パラメータ413はエッジの方向が上向き、下向きのどちらであるかを示す情報である。なお、描画命令410とパラメータ411〜413をまとめてレベルデータと呼ぶことにする。
レベル処理部302が受信する初期化命令414の詳細は、パラメータ415〜417である。初期化命令414は、命令内容が初期化処理であることをレベル処理部302に示す情報である。なお、初期化処理の命令は、レベル処理部302にて各Y座標での最初に送信される命令である。そのため、その内容も各スキャンライン単位での処理の制御に関するものとなっている。
【0022】
パラメータ415は、レベル処理部302がこれから処理を行うスキャンラインとその1つ前のスキャンラインとの間でエッジの並びに変更が発生したかの有無を示すフラグ情報である。パラメータ416は、レベル処理部302がこれから処理を行うスキャンラインにてエッジの数(エッジ数)がある閾値以上(Thr以上)あるか、否かを示すフラグ情報である。パラメータ417は、レベル処理部302がこれから処理を行うスキャンラインの次のスキャンラインで新規エッジの追加が有るか、否かを示すフラグ情報である。
【0023】
図5は、本実施形態を示す印刷装置が作成して管理するオブジェクトリストの一例を示す図である。本例は、図3に示したレベル処理部302で処理するエッジリストとエッジノード及びレベルリストとレベルノードをリストで管理する例である。
また、本例は、所定のライン方向(X軸方向リスト)に整列されたオブジェクトについてエッジの幅、エッジのレベル、エッジの向きを調べて後述するように重なり状態を調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する。なお、オブジェクト処理の詳細については、図6A、図6B、図7、図8以降のフローチャートに従い説明する。
図5において、501はエッジリストへのポインタである。ポインタ501は、エッジリストにリンクされているエッジノードのうち、最も小さいX座標をもつエッジノード(エッジリストの先頭エッジノード)のアドレスが格納されている。502は、エッジリストで、エッジノード同士をX座標の昇順に管理しているリストである。
503は、エッジノードのデータ構造である。504は、エッジリスト502にて自分自身の次にX座標が大きいエッジノードのアドレスを格納したポインタである。505は、自分自身の次にX座標が小さいエッジノードのアドレスを格納したポインタである。
エッジノード間でX座標の大小関係に変化が発生した場合、ポインタ504,ポインタ504に格納するアドレスを変えることでエッジリストにおけるエッジノードの順番を更新する。
506は、現在処理しているスキャンラインでのエッジノードが位置するX座標である。エッジリストにおけるエッジノードのリンク位置の入れ替えは、X座標506の値を元に行う。
【0024】
507は、エッジの開始X座標で、エッジデータ408と同様である。508は、エッジデータのデータサイズで、エッジデータ405と同様である。509は、エッジデータのうち、エッジ処理部301が読み進めた分のデータサイズをカウントするカウンタである。510は、エッジデータが格納されている特定するポインタである。511はレベル番号で、エッジデータ406と同様である。512は、エッジの向きで、エッジデータ407と同様である。
【0025】
513は、レベルリスト514へのポインタである。ポインタ513は、レベルリスト514にリンクされているレベルノードのうち、最も大きいレベル番号をもつレベルノード(レベルノードの先頭レベルノード)へのアドレスが格納されている。
514はレベルリストで、レベルノード同士をレベル番号の降順に管理しているリストである。515は、レベルノードのデータ構造である。516は、レベルリスト514にて自分自身の次にレベル番号が小さいレベルノードのアドレスを格納したポインタである。517は、自分自身の次にレベル番号が大きいレベルノードのアドレスを格納したポインタである。
【0026】
レベルリスト514からのレベルノードの追加・削除によるレベルノード間でレベル番号の大小関係に変化が発生した場合、ポインタ516,517に格納するアドレスを変えることでレベルリストにおけるレベルノードの順番をソートして更新する。
518は、レベルノード自身のレベル番号である。レベルノードの並び替えは、レベル番号518の値を元に行う。519は、同一区間上に存在する同一のレベル番号のオブジェクト数を管理するカウンタ(LvCnt)である。
【0027】
520は、レベルノードがレベルリスト514上にリンクされているか否かを示すフラグ情報である。なお、レベルノードは、レベル番号から特定できるように予め定められた連続する領域を確保し、その領域でレベル番号をインデックス値とする配列として管理することが望ましい。
【0028】
また、レベル処理部302は、レベルリストにリンクされている先頭のレベルノードのレベル番号とエッジ処理部301から受信するエッジとエッジで挟まれた区間の長さをフィル処理部303に送信している。フィル処理部303は、レベル処理部302から送信されたレベル番号に紐付いた色情報をエッジとエッジで挟まれた区間の長さ分の画素に割り当てる処理を行う。
【0029】
図6Aは、図3に示したエッジ処理部301によるエッジ処理の一例を示す図である。
図6Aにおいて、601〜603は紙面に描画されるオブジェクトである。これらの輪郭を形成するエッジは、それぞれエッジ601'とエッジ601",エッジ602'とエッジ602"及びエッジ603'とエッジ603"のエッジでペアになっている。
604は、Y=Nにおけるエッジリストで、601'、602'、602"、603'、603"、601"の順番にエッジノードがリンクされている。
【0030】
一方で本図中Y=Mにおけるエッジリスト606では、601'、602'、603'、602"、603"、601"の順番にエッジノードがリンクされている。Y=NからY=Mにかけてエッジ602"とエッジ603'のX座標の大小関係が変わるため、エッジリストにリンクされているエッジノードの順番がソートされ正しい順番に入れ替わる。Y=MからY=M+1にかけて、エッジノード間のX座標の大小関係が変わらないため、エッジリストはエッジリスト606のままになる。
【0031】
図6Bは、図3に示したエッジ処理部301によるエッジ処理の一例を示す図である。本例は、エッジ処理部301にて、幅「0(ゼロ)」のオブジェクトが含まれている場合の一例を示している。
図6Bにおいて、607〜609は、紙面に描画されるオブジェクトである。
これらのうち、608が幅「0」のオブジェクトとなっている。これらの輪郭を形成するエッジは、それぞれエッジ607'とエッジ607",エッジ608'とエッジ608"及びエッジ609'とエッジ609"のエッジでペアになっている。
【0032】
Y=Nにおいて、エッジ608'、エッジ608"、エッジ609'が同じX座標に位置している。Y=Nにおけるエッジリスト610には、エッジ607'、エッジ608'、エッジ608"、エッジ609'、エッジ609"、エッジ607"の順番でリンクされている。同一X座標であるエッジ608'、エッジ608"、エッジ609'の間の順番については、この順番でなくても描画結果には影響は無い。ただし、同一X座標のエッジが複数ある場合は、レベル番号の順番に並ぶように整列されている方が、より本発明の効果は得られ易い。611はエッジリストへのポインタである。
【0033】
図7は、図3に示したレベル処理部302の処理例を示す図である。本例、図6A、図6Bと関連したレベル処理の一例を示している。
【0034】
図7において、701(レベル番号0)、702(レベル番号10)、703(レベル番号20)は紙面に描画されるオブジェクトである。ここで、レベル番号は紙面に近い順番から小さい番号が割り当てらえるため、オブジェクトは、紙面に近い順番からオブジェクト701、702、703の順番になっている。なお、本実施形態では、現在処理している区間に対応づけられた図7では流用バッファ715にオブジェクトの高さが保持される構成を採用している。
【0035】
704、705、706、707、708は、Y=Nおける各スパンを示しており、オブジェクト並び順番は、各Y座標にこれらスパン毎に更新される。714は、Y=Nにおける各スパンにおけるオブジェクトの重なりの推移を示している。推移714よりY=Nのとき、フィル処理部303には送られるX座標の小さい順番からレベル番号0、10、0、20、0が流用バッファ715に一時的に格納された上で送信される。
709、710、711、712、713はY=Mにおける各スパンを示している。716は、Y=Mにおける各スパンにおけるオブジェクトの重なりの推移を示している。
オブジェクトの重なりの推移716よりY=Mのとき、フィル処理部303には送られるX座標の小さい順番からレベル番号0、10、20、10、0が流用バッファ(CopyBuf)715に一時格納された上で送信される。Y=MからY=M+1にかけては、図6A、図6Bで述べ通りエッジノードのX座標の大小関係が変わらないため、エッジリストに変更が発生しない。
【0036】
エッジリストに変更が発生しない場合、Y=M+1におけるスパン毎のレベルリストの推移はY=Mと同様になる。そのため、Y=M+1では、レベルリストの更新を行うことなく、流用バッファ717に一時格納したレベル番号を流用するだけで済む。レベル処理部302では、このようにエッジ処理部301でエッジリストに変更が発生しない場合、流用バッファに一時格納した結果を流用し、レベルリストの更新を行わないことで処理の高速化を実施している。
【0037】
図8は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図3に示したエッジ処理部301の全体の処理概要例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
【0038】
S801で、エッジ処理部301は、描画終了か否かを示すフラグEndFlagに「0」を書き込む。S802で、エッジ処理部301は、1スキャンライン中に存在するエッジ総数をカウントするカウンタTotalEdgeNumに「0」を書き込む。S803は、ループ制御でEndFlag=1となるまで、エッジ処理部301は、S804からS818までの処理を繰り返す。S804で、エッジ処理部301は、中間データ格納部204から読み出す中間データの読み込み命令の内容を解釈する。
S805で、エッジ処理部301は、S804で解釈した命令内容が描画終了であると判断した場合、処理をS806に進め、命令内容が描画処理であると判断した場合、処理をS808に進める。
【0039】
S806でエッジ処理部301は、レベル処理部302に描画終了を送信する。S807で、エッジ処理部301は、フラグEndFlagに「1」を書き込み、S821へ進む。
一方、S808ではエッジ処理部301が、1スキャンライン当たりで中間データから展開するエッジデータの総データサイズをカウントするカウンタTotalEdgesCntに「0」を書き込み初期化する。次に、S809で、エッジ処理部301は、パラメータ402に格納された値Y_lenをカウンタCntYに書き込む。
【0040】
次に、S810で、ループ制御を開始してカウンタTotalEdgesCntが、S813でパラメータ403に格納されたカウンタTotalEdgesSizeが示す値となるまで、エッジ処理部301は、S811〜S812を繰り返す。S811でエッジ処理部301は、エッジを中間データからエッジリストへの展開処理(後述)を行う。S812でエッジ処理部301は、カウンタTotalEdgesCntにエッジデータ405に格納されている値EdgeSizeを加算する。
【0041】
S814で、エッジ処理部301は、エッジリストにリンクされているエッジノードのリンクに変化の発生有無を示すフラグEdgeListChangeFlagに「1」を書き込む。S815は、ループ制御を開始し、S820で、カウンタCntYが「0」となるまで、エッジ処理部301は、S815からS819を繰り返す。
【0042】
S816では、エッジ処理部301は、エッジリスト更新処理(後述)を行う。次に、S817でエッジ処理部301は、レベル処理部302への送信処理(後述)を行う。次に、S818でエッジ処理部301は、カウンタCntYをデクリメントする。次に、S819でエッジ処理部301は、フラグEdgeListChangeFlagに「0」を書き込む。
そして、S821で、フラグEndFlagが「1」であるとエッジ処理部301が判断したら、本処理を終了する。
【0043】
図9は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図8に示したS811におけるエッジ処理部301によるエッジ展開処理の詳細手順である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。
S901で、エッジ処理部301は、RAM203上でメモリを確保し新規エッジノードに割り当てる。S902でエッジ処理部301は、エッジデータ404をエッジノードにコピーする。
具体的には、図4に示したエッジデータ405、406、407、408に格納された値及びエッジデータ409のアドレスを、図5に示したエッジデータ508、レベル番号511、エッジ向き512、エッジの開始X座標507、及びポインタ510へコピーする。
【0044】
S903で、エッジ処理部301は、エッジノードをエッジリストへ追加する。これにより、エッジリストにエッジノードが登録される。S904で、エッジ処理部301は、データサイズCntSizeに「0」を書き込み初期化する。そして、S905で、エッジ処理部301は、TotalEdgeNumをインクリメントして、本処理を終了する。
【0045】
図10は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、図8に示したエッジ処理部301のエッジリスト更新処理の詳細手順である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
S1001で、エッジ処理部301は、図5に示したエッジリストへのポインタ501からエッジリスト502にリンクされている先頭のエッジノードにアクセスする。S1002は、ループ制御を開始し、エッジ処理部301は、S1015で、S1003からS1014までの処理をエッジリストにリンクされているエッジノードをすべて参照するまで繰り返す。
【0046】
S1003で、エッジ処理部301は、データサイズCntSizeがデータサイズEdgeSizeと等しくなったか、否かを判断する。ここで、等しくないとエッジ処理部301が判断した場合、処理をS1004に進め、等しいとエッジ処理部301が判断した場合処理をS1011に進める。
S1004では、エッジ処理部301は、エッジノードが保持している現在のX座標CurXをOldXにコピーする。S1005で、エッジ処理部301は、現在のX座標CurXにエッジデータ409に対応付けられたStepXを加算し、エッジノードのX座標を更新する。
【0047】
そして、S1006で、エッジ処理部301は、現在のX座標CurXがOldXと等しいか否かを判断する。ここで、等しいとエッジ処理部301が判断した場合、S1009の処理、等しくないとエッジ処理部301が判断した場合S1007の処理を実行する。
【0048】
次に、S1007で、エッジ処理部1003は、エッジリストでエッジノードの正しい位置を検索し、エッジノード間のリンクをつなぎ換える。検索するエッジノードの位置は、エッジノードのX座標をキー値として、エッジリストが先頭のエッジノードからX座標の昇順になる位置である。
【0049】
次に、S1008で、エッジ処理部301は、フラグEdgeListChangeFlagに「1」を書き込む。そして、S1009で、エッジ処理部301は、データサイズCntSizeにStepSizeを加算する。次に、S1010で、エッジ処理部301は、次のエッジを参照する。そして、S1015で、エッジ処理部301がエッジノードのすべてを参照したと判断した場合は、本処理を終了する。
【0050】
一方、S1011で、エッジ処理部301は、エッジノードをエッジリストから外すために、ポインタNextEdgeとポインタPrevEdgeにリンクされているエッジノードをリンクさせる。
【0051】
そして、S1012で、エッジ処理部301は、エッジノードで使用していた領域を解放する。次に、S1013で、エッジ処理部301は、エッジリストにリンクされているエッジノード数が1つ減ったため、TotalEdgeNumをデクリメントする。そして、S1014で、エッジ処理部301は、フラグEdgeListChangeFlagに「1」を書き込んで、S1010へ進む。
【0052】
図11は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、エッジ処理部301がレベル処理部302へデータを送る処理の詳細手順である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。
S1101で、エッジ処理部301は、フラグEdgeListChangeFlagに「1」が格納されているか否かを判断する。ここで、フラグEdgeListChangeFlagに「1」が格納されているとエッジ処理部301が判断した場合は、S1102へ進み、「0」が格納されているとエッジ処理部301が判断した場合、S1103へ処理を進める。
【0053】
そして、S1102では、エッジ処理部301は、フラグListChangeFlagに「1」を書き込む。また、S1103では、エッジ処理部301は、フラグListCahngeFlagに「0」を書き込み、S1104へ進む。そして、S1104で、エッジ処理部301は、TotalEdgeNumが予め定めた閾値以上(Thr以上)か、否かを判断する。ここで、Thr以上であるとエッジ処理部301が判断した場合は、S1105へ処理を進め、Thr未満とであるとエッジ処理部301が判断した場合は、S1106へ処理を進める。
【0054】
そして、S1105では、エッジ処理部301は、フラグEdgeNumFlagに「1」を書き込む。また、S1106では、エッジ処理部301は、フラグEdgeNumFlagに「0」を書き込む。そして、S1107で、エッジ処理部301は、カウンタCntYが1以下か否かを判断する。ここで、カウンタCntYが「1」以下であるとエッジ処理部301が判断した場合は、S1108へ処理を進め、カウンタCntYが「1」より上であると判断した場合は、S1109へと処理を進める。そして、S1108ではエッジ処理部301は、フラグNextLineFlagに「1」を書き込む。
また、S1109で、エッジ処理部301は、フラグNextLineFlagに「0」を書き込み、S1110へ進む。そして、S1110で、エッジ処理部301は、レベル処理部302に初期化命令を通知する。なお、エッジ処理部301が初期化を通知するデータフォーマットは、図4に示した初期化命令414のパラメータ415〜417の通りである。
【0055】
次に、S1111で、エッジ処理部301は、エッジリストへのポインタからエッジリストにリンクされている先頭のエッジノードにアクセスする。そして、S1112は、ループ制御を開始し、エッジ処理部301は、S1116でエッジリストにリンクされているエッジノードをすべて参照したと判断されるまで、S1113からS1115までの処理を繰り返す。
S1113で、エッジ処理部301は、現在処理しているエッジノードのX座標CurXと次に参照するエッジノードのX座標CurXの差からエッジとエッジの区間幅spanを計算する。
【0056】
そして、S1114で、エッジ処理部301は、レベル処理部302へ描画命令を通知する。なお、描画命令410のデータフォーマットは、パラメータ411から413の通りである。次に、S1115で、エッジ処理部301は、次のエッジノードを参照して、S1116で、エッジ処理部301がエッジリストにリンクされているエッジノードをすべて参照したと判断したら、本処理を終了する。
する。
【0057】
図12は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302の全体の処理概要例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
S1201で、レベル処理部302は、レベルノード用に用意された領域に「0」を書き込み初期化する。次に、S1202で、レベル処理部302は、各種変数の初期化としてフラグEndFlag、OverFlowFlag、LevelListChangeFlag、LevelSkipFlag、NextLineChangeFlagに「0」を書き込む。
次に、S1203は、ループ制御を開始して、S1225で、フラグEndFlag=1と判断されるまで、レベル処理部302は、S1204からS1223までの処理を繰り返す。
まず、S1204で、レベル処理部302は、エッジ処理部301から受信した命令を解釈する。次に、S1205で、レベル処理部302は、S1204でエッジ処理部301から受信した命令の内容が描画終了であると判断した場合は、処理をS1206へ進め、描画命令であると判断した場合は、処理をS1208へ進め、初期化命令であると判断した場合は、処理をS1214へ進める。
【0058】
そして、S1206では、レベル処理部302は、フィル処理部303に描画終了を送信する。次に、S1207で、レベル処理部302は、フラグEndFlagに「1」を書き込む。また、S1208では、レベル処理部302は、フラグLevelListChangeFlag=1であるか否かを判断する。ここで、フラグLevelListChangeFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1209へ進め、「0」であると判断した場合は、処理をS1211へ進める。
【0059】
そして、S1209では、レベル処理部302は、フラグOverFlowFlag=1であるか否かを判断する。ここで、フラグOverFlowFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1210へ進め、「0」であると判断した場合は、処理をS1211へ進める。
【0060】
そして、S1210では、レベル処理部302は、図7において説明した手順に従うレベル流用処理(後述)を行う。また、S1211で、レベル処理部302は、フラグLevelSkipFlag=1か否かを判断する。ここで、フラグLevelSkipFlagが「1」であるとレベル処理部302がと判断した場合は、処理をS1212へ進め、フラグLevelSkipFlagが「0」であると判断した場合、処理をS1213へ処理を進める。
そして、S1212では、レベル処理部302は、レベルリスト省略処理(後述)を行う。また、S1213では、レベル処理部302は、現在処理しているレベル番号を元に、レベルリストの更新処理(後述)を行う。
【0061】
一方、S1214では、レベル処理部302は、フラグListChangeFlag=1か否かを判断する。ここで、フラグListChangeFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1215へ進め、フラグListChangeFlagが「0」であると判断した場合は、S1216へ処理を進める。
そして、S1215では、レベル処理部302は、フラグLevelListChangeFlagに「1」を書き込む。また、S1216では、レベル処理部302は、フラグLevelListChangeFlagに「0」を書き込み、S1217へ進む。
そして、S1217で、レベル処理部302は、フラグEdgeNumFlag=1か否かを判断する。ここで、フラグEdgeNumFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1218へ進め、フラグEdgeNumFlagが「0」であると判断した場合は、処理をS1219へ進める。
【0062】
そして、S1218では、レベル処理部302は、フラグLevelSkipFlagに「1」を書き込む。また、S1219では、レベル処理部302は、フラグLevelSkipFlagに「0」を書き込み、S1223へ進む。そして、S1220で、レベル処理部302は、フラグNextLineFlag=1か否かを判断する。
【0063】
ここで、フラグNextLineFlagが「1」であるとレベル処理部302が判断した場合は、処理をS1221へ進め、フラグNextLineFlagが「0」であると判断した場合は、処理をS1222へ進める。
S1221では、レベル処理部302は、フラグNextLineChangeFlagに「1」を書き込む。S1222では、レベル処理部302は、フラグNextLineChangeFlagに「0」を書き込む。そして、S1223で、レベル処理部302は、CntCacheに「0」を書き込み初期化する。S1224で、レベル処理部302は、OverFlowFlagに「0」を書き込み初期化する。そして、S1225で、フラグEndFlagが「1」であるとレベル処理部302が判断した場合は、本処理を終了する。
図13は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベルリスト更新処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
S1301で、レベル処理部302は、レベルデータから取得したレベル番号からレベルノードを特定する。S1302で、レベル処理部302は、レベルノードのCntLevelにレベルノードのUpdownの値を加算する。次に、S1303で、レベル処理部302は、CntLevel=0で、かつフラグListFlag=1か否かを判断する。ここで、レベル処理部302がCntLevel=0で、かつフラグListFlag=1であると判断した場合は処理をS1304へ進め、CntLevel=0かつListFlag=1ではないと判断した場合は、処理をS1306へ進める。
S1304では、レベル処理部302は、レベルデータから特定したレベル番号のレベルノードをレベルリストから外すために、ポインタNextLevel、PrevLevelでリンクされたレベルノード同士をリンクする。
【0064】
次に、S1305で、レベル処理部302は、ListFlagに「0」を書き込み、S1309へ進む。また、S1306では、レベル処理部302は、CntLeve=0で、かつフラグListFlag=0か否かを判断する。
【0065】
ここで、レベル処理部302がCntLevel=0で、かつListFlag=0であると判断した場合は処理をS1307へ進め、CntLevel=0で、かつListFlag=0ではないと判断した場合、処理をS1309へ進める。そして、S1307では、レベル処理部302はレベルリストにレベルノードをリンク(追加)する。具体的には、レベル処理部302は、先頭のレベルノードからレベル番号の大小比較を行い適切な位置を探索して、レベルリストへのレベルノードのリンクを行う。
【0066】
次に、S1308で、レベル処理部302は、フラグListFlagに「1」を書き込む。そして、S1309で、レベル処理部302は、フィル処理部303に描画命令をレベルリストの先頭にあるレベルノードのレベル番号とspanと共に送信する。そして、S1310で、レベル処理部302は、CntCacheが流用バッファCopyBufの最大サイズMaxCacheSizeを未満か否かを判断する。
【0067】
ここで、CntCacheが流用バッファCopyBufの最大サイズMaxCacheSizeを未満であるとレベル処理部302が判断した場合は処理をS1311へ進め、以上であると判断した場合は処理をS1313へ進める。
そして、S1311で、レベル処理部302は、CopyBufのCntCache番目の領域にレベルリストにリンクされている先頭レベルノードのレベル番号(LvNum)を格納する。そして、S1312でレベル処理部302は、CntCacheをインクリメントして、本処理を終了する。
一方、S1313では、レベル処理部302は、フラグOverFlowFlagに「1」を書き込み、処理を終了する。
【0068】
図14は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベル流用処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
まず、S1401で、レベル処理部302は、フィル処理部303に描画命令とともにCopyBufのCntCache番目に格納されたレベル番号とレベルデータに格納されたSpanを送信する。そして、S1402で、レベル処理部302はCntCacheの値をインクリメントして、本処理を終了する。
【0069】
図15は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベルリスト更新処理を省略するレベル省略処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
まず、S1501で、レベル処理部302は、フラグNextLevel_ChangeFlagの値が「1」であるか否かを判断する。ここで、フラグNextLevel_ChangeFlagの値が「1」であるとレベル処理部302がと判断した場合は、処理をS1503に進め、フラグNextLevel_ChangeFlagの値が「0」であると判断した場合は処理をS1502へ進める。
そして、S1502ではレベル処理部302が、現在処理しているレベルデータに対してレベルリスト更新処理を行い、本処理を終了する。
一方、S1503では、レベル処理部302がレベルデータのSpanが「0」であるか否かを判断する。この判断は、S1503に基づくエッジ間の幅が「0」であるかを判断する幅判断処理に対応する。ここで、レベルデータのSpanが「0」であるとレベル処理部302が判断した場合処理をS1508へ進め、「0」以外であると判断した場合処理をS1504へ進める。
【0070】
そして、S1504では、レベル処理部302がフラグSpoolFlagは「1」であるのか否かを判断する。ここで、フラグSpoolFlagが「1」であるとレベル処理部302が判断した場合はS1505へ処理を進め、「0」であると判断した場合は処理をS1507へ進める。
【0071】
そして、S1505で、レベル処理部302は、フラグSpoolFlagに「0」を書き込む。そして、S1506で、レベル処理部302は、一時スプールしていたレベルデータに対してレベルリスト更新処理を進める。次に、S1507で、レベル処理部302は、現在処理しているレベルデータのレベルリスト更新処理を進めて、処理を終了する。
【0072】
一方、S1508では、レベル処理部302は、フラグSpoolFlagが「1」であるか否かを判断する。ここで、フラグSpoolFlagが「1」であるとレベル処理部302が判断した場合処理をS1511へ進め、フラグSpoolFlagが「0」であると判断した場合処理をS1509へ進める。
そして、S1509では、レベル処理部302は、フラグSpoolFlagに「1」を書き込む。そして、S1510で、レベル処理部302が、現在処理しているレベルデータを一時スプールして、本処理を終了する。
【0073】
一方、S1511では、レベル処理部302は、一時スプールしているレベルデータと現在処理しているレベルデータ間でレベル番号が等しいか否かを判断する。この判断は、S1511に基づく隣接するエッジのレベル(高さ)が等しいかどうかを判断する高さ判断処理に対応する。
ここで、レベル処理部302が一時的にスプールしているレベルデータと現在処理しているレベルデータ間でレベル番号が等しいと判断した場合処理をS1514へ進め、等しくないと判断した場合処理をS1512へ進める。そして、S1512では、レベル処理部302が一時的にスプールしたレベルデータに対してレベルリスト更新処理を行う。
【0074】
一方、S1513では、レベル処理部302は、現在処理しているレベルデータを一時スプールして、本処理を終了する。
一方、S1514では、レベル処理部302が一時スプールしているレベルデータと現在処理しているレベルデータ間でエッジの向きが等しいか否かを判断する。この判断は、S1514に基づくレベルデータ間でエッジの向き(エッジ方向)が等しいか否かを判断する方向判断処理に対応する。ここで、一時スプールしているレベルデータと現在処理しているレベルデータ間でエッジの向きが等しいとレベル処理部302が判断した場合処理をS1512へ進め、等しくないと判断した場合、処理をS1515へ進める。そして、S1515では、レベル処理部302がフラグSpoolFlagに「0」を書き込み、本処理を終了する。
本実施形態では、このようにレベル処理部302がフラグSpoolFlagに「0」を書き込むことで、エッジとエッジで挟まれた区間毎に、紙面から高さ方向に整列されたオブジェクトリストを更新しないように制御する。これにより、描画処理すべきオブジェクトの数が大幅に削減され、細切れ大領のグラフィックデータ等の描画処理が高速化され、結果として印刷処理時間が短縮される。
なお、本実施形態では、隣接するエッジであって、所定の条件、オブジェクトの幅が「0」であること、レベル番号が等しいこと、オブジェクトのエッジ方向が上向き/下向きのペアを満たすレベルデータを検出する場合を示している。
【0075】
〔第2実施形態〕
図16は、本実施形態を示す印刷装置の制御方法を説明するフローチャートである。本例は、レベル処理部302のレベルリスト更新処理を省略するレベル省略処理の詳細手順例である。なお、各ステップは、CPU202がROM208に記憶されたRIP処理部211をRAM203にロードして実行することで実現される。以下、図2に示したROM208に格納されるRIP処理部211の各モジュールを主体として説明する。なお、後述フラグ、カウンタ等はRAM203で管理されている。
まず、S1601からS1613までは、S1503からS1515と同様のため説明を省略する。
S1614で、レベル処理部302は、フラグOverFlowFlag=1であるか否かを判断する。ここで、フラグOverFlowFlagが「1」であるとレベル処理部302が判断した場合処理をS1615へ進め、フラグOverFlowFlagが「0」であると判断した場合は、本処理を終了する。
【0076】
次に、S1615で、レベル処理部302は、レベルデータのレベル番号からレベルノードを特定する。S1616で、レベル処理部302は、現在処理しているレベルノードのレベル番号がレベルリストの先頭のレベルノードのレベル番号と比較して、現在処理しているレベルノードがレベルリストの先頭に来るか否かを判断する。
【0077】
ここで、レベルリストの先頭に来ないとレベル処理部302が判断した場合処理をS1617へ進め、レベルリストの先頭に来ると判断した場合処理をS1624へ進める。
そして、S1617では、レベル処理部302は、カウンタCntに「0」を書き込む。そして、S1618は、レベル処理部302は、ループ制御を開始して、S1634でカウンタCntが「2」以上あるいは、フラグOverFlowFlag=1となるまで、S1619からS1623までの処理を繰り返す。
【0078】
そして、S1619で、レベル処理部302は、CntCacheがMaxCacheSize以上か否かを判断する。ここで、CntCacheがMaxCacheSize以上であるとレベル処理部302が判断した場合処理をS1620へ進め、未満であると判断した場合は処理をS1621へ進める。
そして、S1620では、レベル処理部302がフラグOverFlowFlagに「1」を書き込み、S1634へ進む。
一方、S1621では、レベル処理部302が流用バッファのCntCache番目に(CntCache−1)番目の値をコピーする。そして、S1622で、レベル処理部302は、CntCacheをインクリメントする。次に、S1623で、レベル処理部302は、カウンタCntをインクリメントして、S1634で、カウンタCntが「2」以上あるいは、フラグOverFlowFlag=1であるとレベル処理部302が判断した場合、本処理を終了する。
【0079】
そして、S1624では、レベル処理部302は、CntCacheがMaxCacheSize以上か否かを判断する。ここで、CntCacheがMaxCacheSize以上であるとレベル処理部302が判断した場合は処理をS1625へ進め、CntCacheがMaxCacheSize未満である判断した場合処理をS1626へ進める。
そして、S1625では、レベル処理部302は、フラグOverFlowFlagに「1」を書き込み、本処理を終了する。
【0080】
一方、S1626では、レベル処理部302はフラグListFlag=1か否かを判断する。ここで、フラグListFlagが「1」であるとレベル処理部302が判断した場合処理をS1628へ進め、フラグListFlagが「0」であると判断した場合処理をS1627へ進める。
そして、S1627では、レベル処理部302は、流用バッファのCntCache番目にレベルリストの先頭から2番目のレベルノードのレベル番号(LvNum)をコピーして、S1629へ進む。
【0081】
一方、S1628では、レベル処理部302は、流用バッファのCntCache番目に現在処理しているレベルノードのレベル番号(LvNum)をコピーする。次に、S1629でレベル処理部302は、CntCacheをインクリメントする。次に、S1630で、レベル処理部302は、CntCacheがMaxCacheSize以上か否かを判断する。ここで、CntCacheがMaxCacheSize以上であるとレベル処理部302が判断した場合処理をS1631へ進め、CntCacheがMaxCacheSize未満であると判断した場合処理をS1632へ進める。
【0082】
そして、S1631では、レベル処理部302は、フラグOverFlowFlagに「1」を書き込み、本処理を終了する。
一方、S1632では、レベル処理部302は、CntCache番目に(CntCache−2)番目の値をコピーして、本処理を終了する。
一方、S1633では、レベル処理部302は、CntCacheをインクリメントして、本処理を終了する。
【0083】
本発明の各工程は、ネットワーク又は各種記憶媒体を介して取得したソフトウエア(プログラム)をパソコン(コンピュータ)等の処理装置(CPU、プロセッサ)にて実行することでも実現できる。
【0084】
本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形(各実施形態の有機的な組合せを含む)が可能であり、それらを本発明の範囲から除外するものではない。
【符号の説明】
【0085】
101 ホストPC
103 プリンタ
【特許請求の範囲】
【請求項1】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする印刷装置。
【請求項2】
前記検出手段は、
X軸方向リストから隣接するオブジェクトのエッジ間の幅がゼロか否かを判断する幅判断手段と、
前記幅判断手段によりエッジ間の幅がゼロと判断された場合、さらに、紙面から垂直方向のオブジェクトの位置が等しいか否かを判断する高さ判断手段と、
前記高さ判断手段により紙面から垂直方向のオブジェクトの位置が等しいと判断された場合、エッジの方向が揃っているか否かを判断する方向判断手段と、
前記オブジェクト処理手段は、前記方向判断手段によりエッジ方向が揃っていないと判断した場合、該エッジのリストを元に、エッジとエッジで挟まれた区間毎に、紙面から高さ方向に整列されたオブジェクトリストを更新しないことを特徴とする請求項1記載の印刷装置。
【請求項3】
前記幅判断手段は、前記X軸方向に整列されたオブジェクトのエッジリストにリンクされているエッジ数が予め定めた閾値以上であると判断した場合に幅判断処理を行うことを特徴とする請求項2に記載の印刷装置。
【請求項4】
前記幅判断手段は、現在処理しているY座標の1つ次のY座標で、中間データからオブジェクトのエッジ展開処理が有る場合、現在処理しているY座標にて幅判断処理を行うことを特徴とする請求項2に記載の印刷装置。
【請求項5】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、追加あるいは削除すべきオブジェクトが紙面の最前面にない場合は、前記保持手段に1つ前の区間で最前面となるオブジェクトの高さ値をコピーすることを特徴とする請求項1記載の印刷装置。
【請求項6】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、追加あるいは削除すべきオブジェクトが紙面の最前面にくる場合は、現在処理している区間の保持手段に追加すべきオブジェクトの高さ値をコピーし、その次の区間の保持手段に一つ前の前記区間の最前面のオブジェクトの高さをコピーすることを特徴とする請求項1に記載の印刷装置。
【請求項7】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、削除すべきオブジェクトが紙面の最前面に来る場合は、現在処理している区間の保持手段に紙面から高さ方向に整列されたオブジェクトのリストの中で2番目に高い高さ値をコピーし、その次の区間の保持手段に1つ前の前記区間の最前面のオブジェクトの高さ値をコピーすることを特徴とする請求項1に記載の印刷装置。
【請求項8】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理して得られる画像データを印刷するプリントエンジンを備える請求項1乃至7のいずれか1項に記載の印刷装置。
【請求項9】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置の制御方法であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする印刷装置の制御方法。
【請求項10】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う画像処理装置であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする画像処理装置。
【請求項11】
請求項9に記載の印刷装置の制御方法をコンピュータに実行させることを特徴とするプログラム。
【請求項1】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする印刷装置。
【請求項2】
前記検出手段は、
X軸方向リストから隣接するオブジェクトのエッジ間の幅がゼロか否かを判断する幅判断手段と、
前記幅判断手段によりエッジ間の幅がゼロと判断された場合、さらに、紙面から垂直方向のオブジェクトの位置が等しいか否かを判断する高さ判断手段と、
前記高さ判断手段により紙面から垂直方向のオブジェクトの位置が等しいと判断された場合、エッジの方向が揃っているか否かを判断する方向判断手段と、
前記オブジェクト処理手段は、前記方向判断手段によりエッジ方向が揃っていないと判断した場合、該エッジのリストを元に、エッジとエッジで挟まれた区間毎に、紙面から高さ方向に整列されたオブジェクトリストを更新しないことを特徴とする請求項1記載の印刷装置。
【請求項3】
前記幅判断手段は、前記X軸方向に整列されたオブジェクトのエッジリストにリンクされているエッジ数が予め定めた閾値以上であると判断した場合に幅判断処理を行うことを特徴とする請求項2に記載の印刷装置。
【請求項4】
前記幅判断手段は、現在処理しているY座標の1つ次のY座標で、中間データからオブジェクトのエッジ展開処理が有る場合、現在処理しているY座標にて幅判断処理を行うことを特徴とする請求項2に記載の印刷装置。
【請求項5】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、追加あるいは削除すべきオブジェクトが紙面の最前面にない場合は、前記保持手段に1つ前の区間で最前面となるオブジェクトの高さ値をコピーすることを特徴とする請求項1記載の印刷装置。
【請求項6】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、追加あるいは削除すべきオブジェクトが紙面の最前面にくる場合は、現在処理している区間の保持手段に追加すべきオブジェクトの高さ値をコピーし、その次の区間の保持手段に一つ前の前記区間の最前面のオブジェクトの高さをコピーすることを特徴とする請求項1に記載の印刷装置。
【請求項7】
エッジとエッジで挟まれた現在処理している区間と次の区間で最前面に来るオブジェクトの高さ値を一時的に保持する保持手段を各区間毎に備え、
前記オブジェクト処理手段は、削除すべきオブジェクトが紙面の最前面に来る場合は、現在処理している区間の保持手段に紙面から高さ方向に整列されたオブジェクトのリストの中で2番目に高い高さ値をコピーし、その次の区間の保持手段に1つ前の前記区間の最前面のオブジェクトの高さ値をコピーすることを特徴とする請求項1に記載の印刷装置。
【請求項8】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理して得られる画像データを印刷するプリントエンジンを備える請求項1乃至7のいずれか1項に記載の印刷装置。
【請求項9】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う印刷装置の制御方法であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする印刷装置の制御方法。
【請求項10】
入力される印刷情報から生成される中間データを解析して得られるオブジェクトに描画処理を行う画像処理装置であって、
オブジェクトの重なり状態を管理するためのオブジェクトリストを作成する作成手段と、
所定のライン方向に整列された前記オブジェクトについてエッジの幅と、エッジのレベルと、エッジの向きを調べて重なり合うオブジェクトのうち、描画処理を省略できるオブジェクトを検出する検出手段と、
前記検出手段が検出したオブジェクトについて前記オブジェクトリストへの追加または削除を行わないオブジェクト処理手段と、
を備えることを特徴とする画像処理装置。
【請求項11】
請求項9に記載の印刷装置の制御方法をコンピュータに実行させることを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6A】
【図6B】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6A】
【図6B】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2013−69186(P2013−69186A)
【公開日】平成25年4月18日(2013.4.18)
【国際特許分類】
【出願番号】特願2011−208455(P2011−208455)
【出願日】平成23年9月26日(2011.9.26)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年4月18日(2013.4.18)
【国際特許分類】
【出願日】平成23年9月26日(2011.9.26)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]