(57)【特許請求の範囲】
【請求項１】
並列に動作可能な複数の描画手段を有し、前記複数の描画手段それぞれにより、所定高さの部分領域の画像データを、該部分領域を分割した描画対象領域ごとに分担して生成する画像形成装置であって、
前記部分領域のうち、前記部分領域を分割した前記描画対象領域のいずれかについて画像データの生成が最初に完了した時点で生成されていない画像データの量を、前記複数の描画手段に割り振り、前記時点で各描画手段により生成が完了しているそれぞれの画像データの量に、前記割り振られた量を加えた画像データの量を、次の部分領域についての前記描画対象領域として設定することを特徴とする画像形成装置。
【請求項２】
前記複数の描画手段はそれぞれ、
前記部分領域において前記複数の描画手段が生成中の位置を保持する保持手段と、
前記部分領域において前記複数の描画手段のそれぞれが、他の描画手段が生成中の位置を検知する検知手段と
を有し、
前記描画対象領域の画像データの生成を最初に完了した描画手段が、他の描画手段の前記保持手段により保持された生成中の位置を前記検知手段により検知することで、前記部分領域を分割した前記描画対象領域のいずれかについて画像データの生成が最初に完了した時点で生成されていない前記画像データの量を決定することを特徴とする請求項１に記載の画像形成装置。
【請求項３】
前記複数の描画手段により生成された前記部分領域の画像データを記憶する記憶手段と、
前記記憶手段に記憶された画像データを読み出す読み出し手段とを更に有し、
前記読み出し手段は、前記複数の描画手段により前記部分領域の画像データが生成されたときに前記記憶手段により記憶された画像データを読み出すことを特徴とする請求項１又は２に記載の画像形成装置。
【請求項４】
前記記憶手段には、前記部分領域を記憶する少なくとも二つの領域が含まれ、
前記複数の描画手段により生成された部分領域の画像データは、前記少なくとも二つの領域に、交互に記憶されることを特徴とする請求項３に記載の画像形成装置。
【請求項５】
前記複数の描画手段は、オブジェクトにより記述された中間データから前記画像データを生成することを特徴とする請求項１乃至４のいずれか一項に記載の画像形成装置。
【請求項６】
前記画像データはラスタ形式の画像データであり、前記複数の描画手段は、ライン単位で画像データを生成することを特徴とする請求項１乃至５のいずれか一項に記載の画像形成装置。
【請求項７】
前記複数の描画手段による描画データを生成する処理の負荷予測値を前記ライン単位で求める手段を更に有し、
前記複数の描画手段は、前記描画対象領域の画像データの各ラインに前記負荷予測値により重み付けして重み付けした画像データの量を決定し、前記画像データの量として、前記負荷予測値により重み付けした画像データの量を用いることを特徴とする請求項６に記載の画像形成装置。
【請求項８】
前記部分領域は、ページを均等な高さに分割した領域であることを特徴とする請求項１乃至７のいずれか一項に記載の画像形成装置。
【請求項９】
前記部分領域は、ページを均等な高さ及び幅に分割した領域であることを特徴とする請求項１乃至８のいずれか一項に記載の画像形成装置。
【請求項１０】
前記複数の描画手段として、２つの描画手段を有し、
前記２つの描画手段のそれぞれにより、前記部分領域を高さ方向に更に分割した描画対象領域の画像データを生成することを特徴とする請求項８又は９に記載の画像形成装置。
【請求項１１】
前記部分領域の画像データを圧縮する圧縮手段を更に有することを特徴とする請求項１乃至１０のいずれか一項に記載の画像形成装置。
【請求項１２】
並列に動作可能な複数の描画手段を有し、前記複数の描画手段それぞれにより、所定高さの部分領域の画像データを、該部分領域を分割した描画対象領域ごとに分担して生成する画像形成装置の制御方法であって、
前記部分領域のうち、前記部分領域を分割した前記描画対象領域のいずれかについて画像データの生成が最初に完了した時点で生成されていない画像データの量を、前記複数の描画手段に割り振り、前記時点で各描画手段により生成が完了しているそれぞれの画像データの量に、前記割り振られた量を加えた画像データの量を、次の部分領域についての前記描画対象領域として設定することを特徴とする画像形成装置の制御方法。
【請求項１３】
コンピュータにより請求項１２に記載の画像形成装置の制御方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば複数の描画処理部で並列に描画処理等を実行する画像形成装置及びその制御方法に関する。
【背景技術】
【０００２】
画像形成装置において高速化が求められている画像処理の一つとして、ホストコンピュータ等で生成されるページ記述言語（ＰＤＬ）で記述されたベクタ形式の描画データを解釈してラスタ形式の画像データを形成する描画処理（ＲＩＰ）がある。描画処理は、描画データに含まれる文字、写真、図形等の描画オブジェクトの複雑さによるが、一般に多くの演算を必要とする。このような画像処理を高速化する有効な手法として、単一ページを所定の部分領域に分割した画像データに対して複数の画像処理部を並列に動作させる手法が知られている。しかしながら、ベクタ形式の描画データを扱う描画処理は、分割に伴うオーバーヘッドによって必ずしも描画処理部の個数分だけ倍速にはならないため、複数の描画処理部が持つ処理能力を最大限に引き出して並列処理効率を向上することが必要になる。例えば、ページを部分領域に分割する際の分割方向は、描画処理アルゴリズム（スキャンライン方式）の特性を踏まえて、主走査方向よりも分割に伴う描画処理のオーバーヘッドが少なくなる、副走査方向で分割した（すなわち分割ラインが主走査線に沿った）バンド単位の並列化が望ましい。これは、描画処理の並列化に伴って追加で必要となる処理（例えば、描画データの読み飛ばし処理やバッファリング）を最小限に抑えるためである。また、例えば、部分領域に分割する際の分割幅は、並列に動作する複数の描画処理部による処理時間の差ができる限り小さくなるバンド単位を割り当てた並列化が望ましい。これは、描画処理領域を分割して並列処理を行う複数の描画処理部の各々が一部の遅い描画処理部の描画処理完了待ちとならずに稼働している状態をできるだけ長く保つためである。例えば、特許文献１では、描画処理領域を分割して並列処理を行う際に、スキャンライン毎に負荷予測値を算出し、負荷予測値に基づく分割と固定幅分割とを組み合わせて描画処理領域を割り当てる技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−１３２３５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載の技術は、負荷予測に基づいて複数の描画処理部に対してバランス良くバンド単位の割り当てを行うことで並列処理効率を向上できる反面、バンド単位の割り当てを行う前に新たに負荷予測処理が必要になるという課題がある。一般に、この負荷予測処理は、中間データ（ＤＬ）に含まれる描画処理対象の描画オブジェクトが有する特徴量（例えば、エッジやレベル）の存在頻度を取得し、これに単位当たりの処理時間を掛け合わせた合計値を負荷予測値として算出するものである。従って、複雑な描画データほど負荷予測処理に要する時間も長くなってしまい、場合によっては、負荷予測処理の完了待ちによって本来の描画処理開始が遅れてしまう可能性もある。また、負荷予測処理には、精度と速度のトレードオフがあるため、精度を向上するために実際の描画処理に近づけ過ぎると予測時間が長引き、予測処理を簡略化し過ぎると精度が低下するという課題もある。
【０００５】
本発明は上記従来例に鑑みて成されたもので、並列に実行される複数の描画処理の処理時間差の拡大を防止し、待ち時間を短縮して稼働率を高めることで処理効率を向上させ、ひいては描画所要時間を短縮できる画像形成装置及びその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
前述した課題を解決するために、本発明の画像形成装置は、以下の構成を有する。
【０００７】
並列に動作可能な複数の描画手段を有し、前記複数の描画手段それぞれにより、所定高さの部分領域の画像データを、該部分領域を分割した描画対象領域ごとに分担して生成する画像形成装置であって、
前記部分領域のうち、前記部分領域を分割した前記描画対象領域のいずれかについて画像データの生成が最初に完了した時点で生成されていない画像データの量を、前記複数の描画手段に割り振り、前記時点で各描画手段により生成が完了しているそれぞれの画像データの量に、前記割り振られた量を加えた画像データの量を、次の部分領域についての前記描画対象領域として設定することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、描画処理前に予測した負荷予測値に頼らずに描画処理中に実測した描画位置に基づいて複数の描画処理部の処理時間の差が小さくなるように制御することで、複数の描画処理部の各々に発生する待ち時間を短縮し、並列処理効率を向上できる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施例の画像形成装置の構成を示す図である。
【図２】第１の実施例の画像形成装置のＰＤＬ印刷処理のデータフローを示す図である。
【図３】第１の実施例の描画処理に関わるブロック構成を示す図である。
【図４】第２の実施例の画像形成装置の構成を示す図である。
【図５】第２の実施例の描画処理に関わるブロック構成を示す図である。
【図６】第３の実施例の画像形成装置のＰＤＬ印刷処理のデータフローを示す図である。
【図７】ＰＤＬ印刷処理を示すフローチャートである。
【図８】並列描画処理設定を示すフローチャートである。
【図９】並列描画処理を示すフローチャートである。
【図１０】予測処理を伴う並列描画処理設定を示すフローチャートである。
【図１１】予測結果を用いた並列描画処理を示すフローチャートである。
【図１２】画像形成装置で扱うページ内での矩形領域の座標系の一例を示す図である。
【図１３】並列描画処理時のタイミングチャートである。
【発明を実施するための形態】
【００１０】
（第１の実施例）
＜画像形成装置の構成＞
以下、本発明を実施するための形態について図面を用いて説明する。図１は、本発明の第１の実施例における画像形成装置の構成例を示す図である。図１に示すように、画像形成装置１００は、コントローラ１０１、ネットワーク１０２、操作部１０３、読取部１０４、印刷部１０５を有する。ネットワーク１０２は、ＬＡＮやＷＡＮ（公衆回線）等で実現され、ホストコンピュータやサーバ等の外部装置と画像形成装置１００との間で画像データやデバイス情報を送受信する通信部である。操作部１０３は、ユーザによる操作を画像処理の制御情報として取得したり、ユーザに対して画像処理の制御情報を表示したりする処理部である。読取部（スキャナエンジン）１０４は、画像入力デバイスであって、光学センサ等を用いて画像形成装置１００の内部に画像データを取り込む処理部である。印刷部（プリンタエンジン）１０５は、画像出力デバイスであって、画像形成装置１００の内部の画像データを記録媒体に印字して出力する処理部である。
【００１１】
コントローラ１０１は、ネットワーク１０２、操作部１０３、読取部１０４、印刷部１０５と接続され、画像形成装置１００全体の制御を行う制御部である。コントローラ１０１は、システムバス１０６、通信部Ｉ／Ｆ１０７、ＣＰＵ１０８、ＲＡＭ１０９、ＲＯＭ１１０、ＨＤＤ１１１、操作部Ｉ／Ｆ１１２、読取部Ｉ／Ｆ１１３、画像処理部１１４〜１１７、印刷部Ｉ／Ｆ１１８を有する。システムバス１０６は、コントローラ１０１を構成する各処理部を接続し、各処理部の間で画像データや制御情報の送受信を行うための処理部である。通信部Ｉ／Ｆ１０７は、例えばＬＡＮカード等で実現され、ネットワーク１０２を介してホストコンピュータやサーバ等の外部装置と画像形成装置１００との間で画像データやデバイス情報を送受信するためのインタフェース部である。ＣＰＵ１０８は、画像形成装置１００全体を制御する処理部であって、特に、ＰＤＬ印刷処理においては、ネットワーク１０２を介して外部装置から受信したＰＤＬデータを解釈して、ＤＬ（ディスプレイリスト）と呼ばれる中間データに変換する。ＲＡＭ（揮発性メモリ）１０９は、ＣＰＵ１０８がシステム上で動作するためのワーク領域として使用されたり、画像データを一次記憶するためのバッファ領域として使用されたりする記憶部である。ＲＯＭ（不揮発性メモリ）１１０は、ＣＰＵ１０８がシステムを起動するためのプログラムが格納されている一次記憶部である。このプログラムは、画像形成装置１００の起動時にＲＡＭ１０９に展開され、ＣＰＵ１０８により実行される。ＨＤＤ（ハードディスクドライブ）１１１は、画像形成装置１００の内部で画像データを格納しておくための大容量記憶部である。操作部Ｉ／Ｆ１１２は、ユーザによる操作を画像処理の制御情報として取得したり、ユーザに対して画像処理の制御情報を表示したりするためのインタフェース部である。読取部Ｉ／Ｆ（スキャン画像処理部）１１３は、読取部（スキャナエンジン）１０４と接続され、読取部１０４から入力された画像データに対して、読取部１０４のデバイス特性に合わせた補正のための画像処理を行う画像処理部である。
【００１２】
描画処理部（ＲＩＰ）１１４は、ＣＰＵ１０８がＰＤＬデータを元に生成したベクタ形式の中間データ（ＤＬ：ディスプレイリスト）を参照し、ラスタ形式の画像データとして描画する画像処理部である。ブロックＲＡＭ１１５は、描画処理部１１６から出力されたラスタ形式の画像データを一次保持するローカルメモリである。圧縮処理部１１６は、ブロックＲＡＭ１１５に一次保持されたラスタ形式の画像データに対して圧縮処理を行う画像処理部である。伸張処理部１１７は、圧縮処理部１１６で圧縮処理を行った圧縮画像データに対して伸張処理を行う画像処理部である。印刷部Ｉ／Ｆ（プリント画像処理部）１１８は、印刷部（プリンタエンジン）１０５と接続され、印刷部１０５のデバイス特性に合わせた補正のための画像処理を行った後に、印刷部１０５に対して画像データを出力する画像処理部である。なお、ＰＤＬ印刷時の描画処理に関わる描画処理部１１４、ブロックＲＡＭ１１５、圧縮処理部１１６の動作については、図３を用いて詳細に説明する。
【００１３】
＜ＰＤＬ印刷処理のデータフロー＞
次に、図２及び図１２を用いて、画像形成装置１００におけるＰＤＬ印刷処理のデータフロー及び画像データ単位の関係を説明する。図２は、画像形成装置１００におけるＰＤＬ印刷処理のデータフローを示す図である。図１２は、画像形成装置１００で扱うページ内での矩形領域の座標系の例を示す図である。なお、図２のデータフローは、画像形成装置１００の起動時にＲＡＭ１０９に展開されたプログラムを、ＣＰＵ１０８により実行することで実現されるものとする。図２に示すように、画像形成装置１００は、ホストコンピュータから送信されたＰＤＬデータを通信部Ｉ／Ｆ１０７で受信し、ページ単位のＰＤＬデータ２０１としてＲＡＭ１０９あるいはＨＤＤ１１１に記憶する。次に、ＣＰＵ１０８は、受信したＰＤＬデータ２０１を解釈し、ページ単位あるいはバンド単位の中間データ（ＤＬ）２０２を作成し、再びＲＡＭ１０９に記憶する。
【００１４】
ここで、バンドとは、図１２（ａ）及び図１２（ｂ）で示すように、単一ページを副走査方向で分割することで形成される短冊状の矩形領域を意味する。１つのバンドは、通常は主走査方向の画素数よりも副走査方向の画素数の方が小さいが、この限りでない。一方で、ブロックとは、図１２（ａ）及び図１２（ｂ）で示すように、画像形成装置１００において予め定めた主走査方向の画素数と副走査方向の画素数とが等しい正方形タイル形状の矩形領域を意味する。図１２（ａ）と図１２（ｂ）は、本実施例で描画処理を並列に実行する上で好適な画像データ単位であって、ブロックとバンドとが互いに包含される位置関係とならずに、かつ、ブロックの副走査方向の画素数（すなわちブロックの高さ）を、複数のバンドの高さ（すなわちバンド高さ）で分割したという関係を満たすものである。すなわち、副走査方向（高さ方向）についてのブロックの境界がバンドの境界と一致するよう、バンド分割は行われる。図１２（ａ）と図１２（ｂ）の違いは、バンドの高さが固定であるか可変であるかの違いである。すなわち、図１２（ａ）では、バンドの高さを固定とし、所定サイズのブロックの高さ相当の所定のライン数を均等に分割した複数のバンドで構成される（例えば、３２画素×３２画素のブロックに対して、高さ（３２画素）を２分割した１６ラインの２バンドで構成）。一方で、図１２（ｂ）では、バンドの高さを可変とし、ブロックの高さ相当の所定のライン数に対して偏りを持たせて分割した複数のバンドで構成される（例えば、３２画素×３２画素のブロックに対して、８ラインと２４ラインの２バンドで構成）。具体的には、単一のページ１において、単一のブロック１１の副走査方向の画素数（例えば、３２画素）を複数のバンド１１及びバンド１２（例えば、１６ラインと１６ライン）のそれぞれのバンドの高さで分割した関係を満たすものである。また、単一のページ１において、単一のブロック２１の副走査方向の画素数（例えば、３２画素）を複数のバンド２１及びバンド２２（例えば、８ラインと２４ライン）のそれぞれのバンドの高さで分割した関係を満たすものである。なお、以降の実施形態においては、図１２（ｂ）に示したページ内でのバンド単位、及び、ブロック単位に基づいて説明を行うものとする。図１２の例では、主走査方向への一例のブロックの並び（例えばブロック１１〜１４）は、２つのバンド（例えばバンド１１、１２）に分割されているが、これは本実施例の描画処理部１１４が２つの画像データを並列処理する能力を有するためである。本実施例ではこれ以降も並列処理されるバンド数は２つとして説明するが、描画処理部１１４が３つ以上のバンドを並列処理する能力を有してもよく、その場合にはブロック高さを持つ部分領域のバンドへの分割は、描画処理部１１４が並列処理できるバンド（すなわち画像）の数に応じて行われる。このようにブロックの高さを並列処理できる数のバンドの幅で分割することで、後段の処理（たとえば圧縮処理）の対象となるブロックを効率的に生成することができる。
【００１５】
ＣＰＵ１０８は、描画処理部１１４の並列動作に関わる描画処理設定情報２０３を作成し、描画処理部１１４内部のレジスタ等に設定する。描画処理部１１４には並列に実行可能な描画部を含んでおり、描画処理設定情報２０３には、たとえば、各描画部で生成するバンドの開始ラインと高さとを特定できる情報を含む。詳しくは図８で説明する。この設定を受けて、描画処理部（ＲＩＰ）１１４は、中間データ（ＤＬ）２０２に含まれる描画データを参照し、単一ページ内の複数のバンド単位の矩形領域に対する描画処理を並列に実行して画像データ２０４を作成し、ブロックＲＡＭ１１５に一時保持する。続いて、圧縮処理部１１６は、ブロックＲＡＭ１１５に保持された複数のバンド単位の画像データを結合してブロック単位の画像データを読み出し、ＪＰＥＧ等の圧縮処理を行って圧縮画像データ２０５を作成し、再びＲＡＭ１０９あるいはＨＤＤ１１１に記憶する。更に、伸張処理部１１７は、ブロック単位で圧縮された圧縮画像データ２０５に対してＪＰＥＧ等の伸張処理を行って単一ページを構成する全てのブロック単位を結合したページ単位の画像データ２０６を作成し、再びＲＡＭ１０９に記憶する。この後、印刷部Ｉ／Ｆ１１８は、ＲＡＭ１０９に保持されたページ単位の画像データ２０６を読み出し、印刷部１０５のデバイス特性に合わせた補正のための画像処理を行った後に、印刷部１０５に対して画像データを出力する。これを受けて、印刷部（プリンタエンジン）１０５は、印刷部Ｉ／Ｆ１１８から転送された画像データを記録媒体に印字して出力する。
【００１６】
＜ＰＤＬ印刷時の描画処理＞
次に、図３を用いて、本発明におけるＰＤＬ印刷時の描画処理の動作を説明する。図３は、ＲＡＭ１０９に保持した中間データ（ＤＬ）２０２に対してバンド単位で並列に描画処理を実行した後に、ブロック単位の圧縮画像データ２０５を再びＲＡＭ１０９に記憶するまでの内部動作を示している。
【００１７】
図３は、図１２（ａ）及び図１２（ｂ）のように、ブロック単位の矩形領域がバンド単位の矩形領域に包含されずに、ブロック単位の副走査方向の画素数を描画処理部１１４の並列動作数に基づく複数のバンド単位の高さで分割した場合における例である。すなわち、図３は、主走査方向について連続したブロックをまとめた矩形領域（これを部分領域とも呼ぶ。）を、並列実行可能な描画部の数のバンドに分割した場合の例を示す。図３において、画像形成装置１００は、描画処理部１１４を構成する第１描画部４０１及び第２描画部４０２を用いて、単一ページ内の複数バンドを並列に描画する。第１描画部４０１は、単一ページ内の奇数バンド目を描画処理し、偶数バンド目を読み飛ばして描画オブジェクトのスキャンライン毎の位置座標更新のみを行う。第２描画部４０２は、単一ページ内の偶数バンド目を描画処理し、奇数バンド目を読み飛ばして描画オブジェクトのスキャンライン毎の位置座標更新のみを行う。このように、第１描画部４０１及び第２描画部４０２は、それぞれバンド単位で描画処理対象とする描画オブジェクトを取得するため、ＲＡＭ１０９に一次記憶された中間データ（ＤＬ）２０２は、ページ単位でもバンド単位でも良い。次に、第１描画部４０１は、ブロックＲＡＭ１１５を構成するブロックＲＡＭ４１１に対して、図１２（ｂ）で示したバンド１１及びバンド２１などの奇数番目のバンドに対応するバンド単位の画像データを順に出力する。一方、第２描画部４０２は、ブロックＲＡＭ１１５を構成するブロックＲＡＭ４１１に対して、図１２（ｂ）で示したバンド１２及びバンド２２などの偶数番目のバンドに対応するバンド単位の画像データを順に出力する。続いて、圧縮処理部１１６の圧縮処理部４２１は、ブロックＲＡＭ４１１に一次記憶された図１２（ｂ）で示したバンド１１及びバンド１２を結合した矩形領域からブロック単位で画像データを順に読み出し、圧縮処理を実行した後にＲＡＭ１０９に転送する。ここで、ブロックＲＡＭ４１１は書き出しと読み出しを同時に実行可能なダブルバッファで構成している。従って、例えば、第１描画部４０１によるバンド２１、第２描画部４０２によるバンド２２の書き出し処理と圧縮処理部４２１によるバンド１１及びバンド１２を結合したバンド内のブロック１１〜１４の読み出し処理を同時に実行できる。
【００１８】
ここで、上記処理を実行するために、描画処理部１１４の各描画部たとえば第１描画部４０１は、描画位置保持部３０１と描画位置検知部３０３と描画領域制御部３０５とを有する。第２描画部４０２についても同様である。描画位置保持部３０１は、第１描画部４０１により生成中の描画位置を保持する。描画位置は、たとえば、描画対象の部分領域すなわちバンドにおいて画像データを生成中の主走査ラインの番号で示される。ただし、この描画位置は、描画処理対象のデータ量に対して、ある時点で生成中のデータ量の割合を決定するための指標値なので、その目的にかなうデータであれば特にラインの番号でなくともよいし、描画位置でなくともよい。また各描画部は、本実施例では２つのバッファに対して交互に生成したバンドの画像データを格納するため、描画位置保持部もまた、それぞれのバッファについて設けられることが望ましい。描画位置検知部３０３は、第２描画部４０２の描画位置保持部３０２を参照し、第２描画部４０２における現在の部分領域での描画位置を検知する。なお第２描画部４０２の描画位置検知部３０４は、第１描画部４０１の描画位置保持部３０１を参照し、第１描画部４０１における現在の部分領域での描画位置を検知する。描画領域制御部３０５は、検知した描画位置を取得し、この描画位置に基づいて、次に描画する部分領域（１ブロックの高さを持つバンド）のうち第１描画部により処理する割合を決定する。描画領域制御部３０６は、同様に第２描画部により処理する割合を決定する。なお、いずれかの描画領域制御部３０６が割合を決定すれば他方はその残りを処理することになるので、決定は描画処理を先に終えた方が行えばよい。
【００１９】
＜ディスプレイリストと描画処理＞
ここディスプレイリストと第１描画部４０１および第２描画部４０２それぞれによる描画処理についてもう少し詳しく説明する。中間データであるディスプレイリストには、たとえばページ単位のベクトルオブジェクトが、それぞれの位置やレベルを示す情報とともに含まれて（記述されて）いる。各描画部は、入力された描画オブジェクトを、その位置やレベルに応じた描画処理（スキャンラインレンダリング）を行って画像データ（ラスタデータ）を生成する。描画処理は大きく分けて、エッジ処理、レベル処理、フィル処理、コンポジット処理の４つに分かれている。
【００２０】
エッジ処理は大きく、エッジロード、Ｘ座標算出、エッジソート、エッジトラッキング、エッジ削除の５つの処理に分けられる。エッジロードとはディスプレイリストからエッジ情報をメモリ上へロードする処理のことをいう。エッジ情報はベクトルオブジェクトの輪郭を示すベクトル情報である。次にＸ座標算出処理を行ってロードされたエッジ情報に基づいて、スキャンライン毎にエッジの傾きや塗りルールを元に、当該スキャンラインにおけるエッジのＸ座標を算出する。処理中のスキャンラインに現れるエッジ情報はＡｃｔｉｖｅＥｄｇｅＬｉｓｔ（ＡＥＬ）と呼ばれるリンクリストで主走査方向にＸ座標昇順でソートされている。エッジ同士がクロスした場合や新たにエッジが出現／消滅した場合、ＡＥＬのリンク情報をソートし直して更新する必要がありこれをエッジソートと呼んでいる。エッジソートが終わったＡＥＬはレベル処理部にＸ座標昇順でエッジおよびそのレベル情報を渡す処理を行っており、これをエッジトラッキングと呼んでいる。最後に描画が終了したエッジはエッジ削除処理により削除される。
【００２１】
次にレベル処理は大きくレベル追加、レベル削除、レベルソートの３つの処理に分けられる。レベル追加とは、エッジ処理から送られてきたエッジ情報に含まれたエッジの向きやクリップ情報を基に、当該エッジ情報が描画対象のエッジ情報であるか否かを判定し、描画対象だった場合ＡｃｔｉｖｅＬｅｖｅｌＬｉｓｔ（ＡＬＬ）と呼ばれるリンクリストに追加する処理である。また、レベル削除処理は、レベル追加処理と逆で、エッジの向きやクリップ情報を基にそれまで描画対象だったエッジが描画対象でなくなった場合ＡＬＬから削除する処理のことを言う。ＡＬＬはレベル番号昇順に常にソートされており、レベルの追加や削除があった場合、レベルソートと呼ばれるＡＬＬのソート処理が行われる。これらの処理を行ったレベル情報はスパン単位でフィル処理に渡している。
【００２２】
次にフィル処理は大きく画像拡縮、画像回転、ピクセル生成という３つの処理に分けられる。ベクトルデータに含まれたビットマップ画像には、そのエッジの情報に加えて、拡大縮小や回転などのための指定をふくむことができる。画像拡縮はディスプレイリストに含まれているビットマップ画像に拡大率が指定されていた場合、指定に応じてフィルを生成する処理である。画像回転はディスプレイリストに含まれているビットマップ画像に回転情報が指定されていた場合、指定に応じてフィルを生成する処理である。ピクセル生成はディスプレイリストにある色値ともう一つのある色値と変化情報とが指定されていた場合、指定に応じてフィルを生成する処理である。
【００２３】
最後に、コンポジット処理では、レベル処理で確定したレベルの上下関係とフィル処理で生成したピクセルとを基に、ディスプレイリストに指定されている重ね合わせ処理を行って画像データ（ビットマップデータ）を生成して出力する。
【００２４】
以上の描画処理を、処理対象の先頭のスキャンライン（主走査ライン）から順に着目して着目ラインごとに行う。着目ラインについてコンポジット処理までが完了していれば、当該ラインについては描画処理が完了していることとなる。各描画部は、それぞれの着目ラインを描画位置保持部３０１、３０２に保持し、着目ラインを進める都度、その値を更新する。このようにして、ライン単位で画像データは生成される。
【００２５】
＜ＰＤＬ印刷処理＞
図７は、ＰＤＬ印刷処理を説明するためのコントローラ１０１により実行されるフローチャートである。まず、ＣＰＵ１０８は、ホストコンピュータから送信されたＰＤＬデータを通信部Ｉ／Ｆ１０７を介して受信し、ページ単位のＰＤＬデータとしてＲＡＭ１０９あるいはＨＤＤ１１１に記憶する（Ｓ７０１）。次に、ＣＰＵ１０８は、受信したＰＤＬデータを解釈し（Ｓ７０２）、解釈した情報を元に中間データ（ＤＬ）を生成する（Ｓ７０３）。次に、ＣＰＵ１０８は、描画処理部１１４による並列描画処理設定を実行する（Ｓ７０４）。Ｓ７０４については、図８のフローチャートを用いて別途説明する。次に、ＣＰＵ１０８は、描画処理部１１４を制御して描画処理部１１４を構成する複数の描画部を用いた描画処理を実行する（Ｓ７０５）。Ｓ７０５については、図９のフローチャートを用いて別途説明する。次に、ＣＰＵ１０８は、圧縮処理部１１６を制御して圧縮処理を実行した後に、ＲＡＭ１０９に圧縮画像データを記憶する（Ｓ７０６）。次に、ＣＰＵ１０８は、伸張処理部１１７を制御して、ＲＡＭ１０９に記憶された圧縮画像データに対して伸張処理を実行した後に、再びＲＡＭ１０９に画像データを記憶する（Ｓ７０７）。次に、ＣＰＵ１０８は、印刷部Ｉ／Ｆ１１８を制御してＲＡＭ１０９から印刷部１０５に対して画像データを転送し、印刷部１０５のデバイス特性に合わせた補正の画像処理を行った後に、印刷部１０５に対して画像処理後の画像データを転送する（Ｓ７０８）。その後、印刷部１０５は、印刷部Ｉ／Ｆ１１８から転送された画像データを記録媒体に印字して出力する（Ｓ７０９）。
【００２６】
＜並列描画処理の初期設定＞
図８は、並列描画処理の初期設定を説明するためのフローチャートである。まず、ＣＰＵ１０８は、描画処理部１１４において並列処理を行う並列動作数、及び、画像処理部１１４の後処理で扱う画像データ単位として所定の部分領域を取得する（Ｓ８０１）。ここで、並列動作数は、例えば、描画処理部１１４が図３に示す構成の場合、第１描画部４０１と第２描画部４０２とが並列動作するので、並列動作数は２となる。また、描画処理部１１４による処理対象の部分領域は、画像処理部１１４の後処理としての圧縮処理部１１６で扱う画像データに対応して定まる画像データサイズを有する領域であって、例えば、３２画素×３２画素の正方形タイル形状をもつブロック単位の複数個分に対応するものとする。ここで、部分領域に対応する画像データサイズ分の記憶領域の容量は、ブロックＲＡＭ１１５のダブルバッファのように描画処理部１１４と圧縮処理部１１６の双方の処理を停止させることなく読み書きできるものとする。上記の例の場合、所定の部分領域は、ブロックの高さとページ単位の主走査幅とを持つ領域、たとえば３２ラインで構成された領域となる。このため、部分領域のサイズは、ブロックサイズが後段の処理部たとえば圧縮処理部１１６の仕様により決まっているなら、処理対象のページのサイズによって決定できる。
【００２７】
次に、ＣＰＵ１０８は、Ｓ８０１で取得したブロックの高さを、Ｓ８０１で取得した並列動作数で均等分割するように描画対象領域となるバンドの高さを設定する（Ｓ８０２）。例えば、３２画素×３２画素のブロック単位に対して、並列動作数は２なので、バンドの高さを３２／２＝１６として、これを描画処理部１１４の内部レジスタに設定する。したがって、上記の例の場合、描画処理部１１４を構成する第１描画部４０１は、１ライン目から１６ライン目までの１６ライン分を１バンドとして描画対象領域の初期値とする。一方で、描画処理部１１４を構成する第２描画部４０２は、第１描画部４０１が担当するバンドの次のライン、すなわち１７ライン目から３２ライン目までの１６ライン分を１バンドとして描画対象領域の初期値とする。このように、各描画部による描画対象領域のバンドを示す初期値として、たとえばバンドの先頭となるラインの番号とライン数とがそれぞれの描画部について設定される。なお、第１描画部と第２描画部とは、異なる部分領域に属するバンドを並列に描画処理することがあり得る。そのため、描画対象領域もまた並列に処理されている部分領域ごとに設定されるのが望ましい。たとえば本実施例では、描画処理部１１４は第１バッファと第２バッファの２つのバッファに交互に描画した部分領域を出力して格納する。そのため、最大で２つの部分領域が並列に処理され得る。そこで描画対象領域も、第１バッファと第２バッファのそれぞれに関連付けて設定されることが望ましい。上述したように各描画部の描画位置保持部もまた各部分領域に関連づけて保持されているのが望ましい。なお、以下の説明においては、描画対象領域および描画位置について、上述のようにバッファごとに関連付けられて保持される構成であっても、単にそれらの値が保持されるあるいは設定されるとだけ記載する場合がある。
【００２８】
＜並列描画処理＞
図９は、並列描画処理を説明するためのフローチャートである。以下、ＣＰＵ１０８の制御に基づいて描画処理部１１４が動作するものとして説明する。まず、描画処理部１１４で並列に動作する各描画部の読み出し処理部は、ＣＰＵ１０８から描画処理部１１４の内部レジスタに設定された中間データ（ＤＬ）の先頭アドレスを取得する（Ｓ９０１）。次に、描画処理部１１４は、Ｓ８０１でＣＰＵ１０８から設定された並列動作数と所定の部分領域を取得する（Ｓ９０２）。すなわち、上記の例の場合、並列動作数を２、部分領域のバンドの高さを３２ラインとする。次に、描画処理部１１４における各描画部は、Ｓ８０２でＣＰＵ１０８から設定された描画対象領域の初期値を取得する（Ｓ９０３）。すなわち、上記の例の場合、第１描画部４０１が担当する描画対象領域の初期値は、１ライン目から１６ライン目までの１６ライン分となり、第２描画部４０２が担当する描画対象領域の初期値は、１７ライン目から３２ライン目までの１６ライン分となる。次に、描画処理部１１４における各描画部は、Ｓ９０１で取得した中間データ（ＤＬ）の先頭アドレスから描画する部分領域内に含まれる描画オブジェクトを参照して、該当する描画オブジェクトをすべて取得する（Ｓ９０４）。次に、描画処理部１１４における各描画部は、取得した描画オブジェクトが、自身が担当する描画対象領域内であるか否かを判断し（Ｓ９０５）、描画対象領域内であれば（ＹＥＳ）、Ｓ９０６に遷移し、描画対象領域外でなければ（ＮＯ）、Ｓ９０７に遷移する。
【００２９】
次に、Ｓ９０６で、描画処理部１１４における各描画部は、出力先のブロックＲＡＭ１１５に空き領域があるか否かを判断し、空き領域が無ければ（ＮＯ）、Ｓ９０６で空き領域ができるまで待機し、空き領域があれば（ＹＥＳ）、Ｓ９０７に遷移する。本実施例では、ブロックＲＡＭ１１５には第１バッファと第２バッファという２つの領域が用意される。次に、Ｓ９０７で、描画処理部１１４における各描画部は、Ｓ９０４で取得した描画オブジェクトをレンダリングして対応する画像データを生成し、その描画処理結果の画像データをＳ９０６で検知したブロックＲＡＭ１１５の空き領域に出力する（Ｓ９０７）。上述したようにレンダリング処理はスキャンラインごとに進行し、出力される。出力に伴って描画中の描画部および出力中のバッファに対応した描画位置保持部に保持した生成中の着目スキャンラインの位置座標も更新される。一方で、Ｓ９０８に遷移した場合、描画処理部１１４の各描画部は、当該描画対象領域に含まれる描画オブジェクトのスキャンライン毎の位置座標のみを更新し、当該描画対象領域の描画処理は行わないで中間データ（ＤＬ）を読み飛ばす処理を行う。
【００３０】
Ｓ９０９で、描画処理部１１４の各描画部は、部分領域内で処理対象である次のスキャンラインが存在するかを判断し、存在すれば（ＹＥＳ）、Ｓ９０５に遷移して再び描画処理を繰り返し、存在しなければ（ＮＯ）、Ｓ９１０に遷移する。Ｓ９０９では、たとえば、処理が済んだ最後のスキャンラインのアドレスよりも、処理対象の先頭のスキャンラインのアドレスに処理対象のライン数を加えた値の方が大きくなれば、次のスキャンラインが存在しないと判定できる。Ｓ９１０で、描画処理部１１４の各描画部は、ＲＡＭ１０９に記憶された中間データ（ＤＬ）に描画対象の次の部分領域があるか否かを判断し、次の部分領域があれば（ＹＥＳ），描画処理を繰り返すためにＳ９１１に遷移し、次の部分領域が無ければ（ＮＯ）、描画処理を終了する。
【００３１】
Ｓ９１１で、処理対象のバンド（以下対象バンドとも呼ぶ。）の描画処理を終えた描画処理部１１４の描画部は、他の描画部の現在の描画位置を検知する。例えば、Ｓ９１１において、第１描画部４０１が描画位置検知部３０３によって第２描画部４０２の描画位置保持部３０２を参照し、第２描画部における現在の部分領域での描画位置を検知する。ここでは、第２描画部４０２が担当する１６ラインのうち、描画位置が８ライン目であったものとして説明する。ただし、検知対象は、まさにＳ９１１を実行している描画部（着目描画部とも呼ぶ。）と同じバッファにデータを出力している他の描画部である。換言すれば、着目描画部が処理している部分領域と同じ部分領域を処理している他の描画部による現在の描画位置を検知する。
【００３２】
次に、Ｓ９１２で、描画処理部１１４の各描画部は、自身の描画処理部の次の描画対象領域の割合を算出する。例えば、Ｓ９１２において、第１描画部４０１が描画領域制御部３０５によってＳ９１１で検知した描画位置を取得し、この描画位置に基づいて次の所定の部分領域としての３２ラインに対しての割合を算出する。算出方法としては、例えば、前述した１６ライン中８ライン目の描画位置に対して、第２描画部４０２の残り処理ライン数が８なので、次の３２ラインと残り処理ライン数１６−８＝８を加算した上で再び均等分割したライン数を担当する。すなわち、次の３２ラインの部分領域のうち、（８＋３２）／２＝２０ラインを次の第１描画部４０１の描画対象領域とする。これを一般的にいえば、着目描画部の次の描画対象領域＝（残り処理ライン数＋部分領域のライン数）／２によって次の描画対象領域が求められる。「残り処理ライン数」は、（他の描画部による描画対象領域のライン数−他の描画部による描画位置）であり、他の描画部による描画対象領域のサイズは、（部分領域のライン数−着目描画部による描画対象領域のライン数）で得られるから、着目描画部による次の描画対象領域＝（部分領域のライン数−着目描画部による描画対象領域のライン数−他の描画部による描画位置＋部分領域のライン数）／２で求められる。これに併せて、部分領域のライン数−着目描画部による次の描画対象領域が他の描画部による次の描画対象領域となる。上記数値例では、次の３２ラインの部分領域のうち、３２−２０＝１２ラインが次の第２描画部４０２の描画対象領域となる。Ｓ９１３で、描画処理部１１４の各描画部は、描画領域制御部３０５によってＳ９１２で算出した結果の描画対象領域を再設定し、読み出し処理部と書き出し処理部に通知した後に、Ｓ９０４に遷移して後続の部分領域に対する描画処理を継続する。Ｓ９１３では、第１描画部は、着目描画部による次の描画対象領域としては、算出された値である例えば２０ラインを設定する。一方、後から同一の部分領域の一部である描画処理を完了する第２描画部のために、第２描画部の次の描画対象領域である１２ラインを求めるための値を、第１描画部の描画位置保持部３０１にセットしておく。上述の通り、第２の描画部もまた、着目描画部による次の描画対象領域を（部分領域のライン数−着目描画部による描画対象領域のライン数−他の描画部による描画位置＋部分領域のライン数）／２で求めるため、（部分領域のライン数−着目描画部による描画対象領域のライン数−他の描画部による描画位置＋部分領域のライン数）／２＝（部分領域のライン数−着目描画部による次の描画対象領域）となるように、「他の描画部による描画位置」すなわち第１描画部による描画位置を設定しておく。上述した数値例では、（３２−１６−他の描画部による描画位置＋３２）／２＝３２−２０、すなわち他の描画部による描画位置＝−６４＋４０＋３２−１６＋３２＝２４を第２の描画部により描画位置として設定しておく。
【００３３】
なお、ある部分領域を分割した描画対象領域を先に処理し終えた描画部が、他の描画部の次の描画対象領域を、他の描画部に対してセットしてしまってもよい。ただしこの場合には、着目描画部は、既に次の描画対象領域の設定が終えていることを示す情報を他の描画部に対して示す必要があり、それを受けた他の描画部は、それ自身の次の描画対象領域の設定を行う必要がない。
【００３４】
他方、Ｓ９１１において、第２描画部４０２が描画位置検知部３０２によって、第１描画部４０１の描画位置保持部３０１を参照し、第１描画部における現在の部分領域での描画位置を検知する。ここでは、第１描画部４０１が担当する１６ラインのうち、描画位置が１６ライン目、すなわち、第２描画部４０２が担当する１６ラインを描画完了するよりも先に、第１描画部４０１が担当する１６ラインを描画完了していたものとして説明する。次に、Ｓ９１２において、第２描画部４０２が描画領域制御部３０５によってＳ９１１で検知した描画位置（上記数値例では２４）を取得し、この描画位置に基づいて次の所定の部分領域としての３２ラインに対しての割合を算出する。算出方法としては、前述したとおり、次の３２ラインの部分領域のうち、（３２−１６−２４＋３２）／２＝１２ラインが次の第２描画部４０２の描画対象領域となる。以上のＳ９１１〜Ｓ９１３によって、第１描画部４０１が担当する描画対象領域が１６ライン（初期値）から２０ラインに変更され、第２描画部４０２が担当する描画対象領域が１６ライン（初期値）から１２ラインに変更される。なお第１描画部が、第２描画部の次の描画対象領域を既にセットしている構成では、第２描画部は、それ自身の次の描画対象領域の設定を行う必要がない。
【００３５】
ここでＳ９１２における処理は、着目描画部が描画対象領域の画像データを生成し終えた時点で他方の描画部が生成し残した画像データの量を、複数の描画部に均等に割り振り、その時点で生成し終えた画像データの量に加え、その値をそれぞれの描画部による次の描画対象領域とするものである。
【００３６】
以上の手順を繰り返すことで、所定の部分領域としての３２ラインを複数の描画部で分担して描画処理を実行する際の割合を変更できる。上記の例では、第１描画部４０１が第２描画部４０２よりも先に描画完了した場合に、次の描画対象領域の割合を増やすように制御した例を示したが、逆の場合も同様である。したがって、上記の制御を繰り返すことで、所定の部分領域を描画するうちの複数の描画部の処理時間の差を小さくし、描画処理完了までの全体の処理時間を短縮することができる。これについては、図１３を用いて別途説明を加える。
【００３７】
図１３は、並列描画処理時のタイミングチャートである。図１３（ａ）は、図１２（ａ）に対応し、ブロック高さの部分領域（例えば、バンド１１とバンド１２の組、バンド２１とバンド２２の組）を描画する際に、複数の描画部の各々が担当する描画対象領域の割合を制御せずに、たとえば部分領域を二等分した領域に固定した場合の概念図である。また、図１３（ｂ）は、図１２（ｂ）に対応し、ブロック高さの部分領域（例えば、バンド１１とバンド１２の組、バンド２１とバンド２２の組）を描画する際に、複数の描画部の各々が担当する描画対象領域の割合を、部分領域ごとに制御して変更した場合の概念図である。図１３（ａ）で、第１描画部は、時刻Ｔ０〜Ｔ１でバンド１１を第１バッファに出力し、時刻Ｔ１〜Ｔ２でバンド２１を第２バッファに出力し、第１バッファが空いた時刻Ｔ２〜Ｔ４でバンド３１を第１バッファに出力し、第２バッファが空いた時刻Ｔ４〜Ｔ６でバンド４１を第２バッファに出力する。また、第２描画部は、時刻Ｔ０〜Ｔ１でバンド１２を第１バッファに出力し、時刻Ｔ１〜Ｔ３でバンド２２を第２バッファに出力し、時刻Ｔ３〜Ｔ７でバンド３２を第１バッファに出力し、時刻Ｔ７〜Ｔ１２でバンド４２を第２バッファに出力する。また、圧縮処理部１１６は、時刻Ｔ１〜Ｔ２でブロック１１〜１４を第１バッファから取得し、時刻Ｔ３〜Ｔ４でブロック２１〜２４を第２バッファから取得する。更に、圧縮処理部１１６は、時刻Ｔ７〜Ｔ９でブロック３１〜３４を第１バッファから取得し、時刻Ｔ１２〜Ｔ１３でブロック４１〜４４を第２バッファから取得する。この時、圧縮処理部１１６は、図１３（ａ）の網かけ部分の時刻Ｔ２〜Ｔ３、Ｔ４〜Ｔ７、Ｔ９〜Ｔ１２で、第１描画部よりも遅い第２描画部からの出力待ち時間が発生している。図１３（ｂ）で、第１描画部は、時刻Ｔ０〜Ｔ１でバンド１１を第１バッファに出力し、時刻Ｔ１〜Ｔ２でバンド２１を第２バッファに出力し、時刻Ｔ２〜Ｔ６でバンド３１を第１バッファに出力し、時刻Ｔ６〜Ｔ９でバンド４１を第２バッファに出力する。また、第２描画部は、時刻Ｔ０〜Ｔ１でバンド１２を第１バッファに出力し、時刻Ｔ１〜Ｔ３でバンド２２を第２バッファに出力し、時刻Ｔ３〜Ｔ５でバンド３２を第１バッファに出力し、時刻Ｔ５〜Ｔ１０でバンド４２を第２バッファに出力する。また、圧縮処理部１１６は、時刻Ｔ１〜Ｔ２でブロック１１〜１４を第１バッファから取得して圧縮し、時刻Ｔ３〜Ｔ４でブロック２１〜２４を第２バッファから取得して圧縮する。更に、圧縮処理部１１６は、時刻Ｔ６〜Ｔ８でブロック３１〜３４を第１バッファから取得して圧縮し、時刻Ｔ１０〜Ｔ１１でブロック４１〜４４を第２バッファから取得して圧縮する。この時、圧縮処理部１１６は、図１３（ｂ）の網かけ部分の時刻Ｔ２〜Ｔ３、Ｔ４〜Ｔ６、Ｔ８〜Ｔ１０で、第１描画処理部または第２描画処理部のいずれか遅い描画処理部からの出力待ち時間が発生している。図１３（ａ）と図１３（ｂ）とを比べると、ブロック高さの部分領域を描画する際に、複数の描画部の各々が担当する描画対象領域の割合を制御することで、複数の描画部の各々に発生する待ち時間を短縮し、並列処理効率を向上できることが分かる。
【００３８】
本実施例をまとめると、画像形成装置１００は、並列に動作可能な複数の描画部を含む描画処理部１１４を有しており、複数の描画部それぞれにより、所定高さ（例えばブロック高さ）の部分領域の画像データを、部分領域を分割した描画対象領域（バンド）ごとに分担して生成する。ここで部分領域のうち、部分領域を分割した前記描画対象領域のいずれかについて画像データの生成が最初に完了した時点で生成されていない画像データの量を、複数の描画部に割り振り、その時点で各描画部により生成が完了しているそれぞれの画像データの量に、割り振られた量を加えた画像データの量を、次の部分領域についての描画対象領域としてそれぞれの描画部に設定する。このようにして、各描画部による処理時間の均等化を図っている。
【００３９】
以上述べたように、本発明によれば、描画処理中に実測した描画位置に基づいて複数の描画部の処理時間の差が小さくなるように動的に制御することで、複数の描画部の各々に発生する待ち時間を短縮し、並列処理効率を向上できる。
【００４０】
なお上記実施例では、バッファは２つ使用しているが、１つであっても本実施例を適用することができる。その場合には、描画位置保持部も描画対象領域も各描画部についてひとつあれば良い。
【００４１】
（変形例１）
第１の実施例では、描画処理部１１４で生成した画像データがＲＡＭ１０９とは異なるローカルメモリとしてのブロックＲＡＭ１１５に一時保持したが、本変形例では、描画処理部１１４で生成した画像データを直接ＲＡＭ１０９に格納する構成例を示す。
【００４２】
図４は、本変形例における画像形成装置の構成例を示す図である。図４は、図１で説明した構成の変形例であるため、図１と共通する部分の説明を省略し、図１との差分のみを説明する。図４において、描画処理部（ＲＩＰ）１１４は、システムバス１０６に対してデータ入出力を行うバス接続構成をとる。この他に、画像回転等の画像データの編集を行う編集処理部１１９が同様に接続されていても良い。更に、圧縮処理部１１６、及び、伸張処理部１１７が図１と同様に接続されている。
【００４３】
次に、図５を用いて、本実施例におけるＰＤＬ印刷時の描画処理の動作を説明する。図５は、ＲＡＭ１０９に一時保持した中間データに対してバンド単位で並列に描画処理を実行し、再びＲＡＭ１０９に画像データを格納するまでの内部動作を示している。図５において、画像形成装置１００は、描画処理部１１４を構成する第１描画部４０１及び第２描画部４０２を用いて、単一ページ内の複数バンドを並列に描画する。第１描画部４０１は、単一ページ内の奇数バンド目を描画処理し、偶数バンド目を読み飛ばして描画オブジェクトのスキャンライン毎の位置座標更新のみを行う。第２描画部４０２は、単一ページ内の偶数バンド目を描画処理し、奇数バンド目を読み飛ばして描画オブジェクトのスキャンライン毎の位置座標更新のみを行う。このように、第１描画部４０１及び第２描画部４０２は、それぞれバンド単位で描画処理対象とする描画オブジェクトを取得するため、ＲＡＭ１０９に一次記憶された中間データ（ＤＬ）２０２は、ページ単位でもバンド単位でも良い。次に、第１描画部４０１は、ＲＡＭ１０９を構成するに対してバンド単位の画像データを順に出力する。一方、第２描画部４０２は、ＲＡＭ１０９に対してバンド単位の画像データを順に出力する。描画処理部１１４によってＲＡＭ１０９に格納された画像データは、実現する機能に応じて編集処理部１１９、印刷部Ｉ／Ｆ、通信部Ｉ／Ｆ等のコントローラ１０１内部の他の処理部によって後続の画像処理が実行される。ここで、ＲＡＭ１０９における画像データは書き出しと読み出しを同時に実行可能なダブルバッファで構成している。従って、例えば、第１描画部４０１と第２描画部４０２による書き出し処理とコントローラ１０１内部の他の処理による後続の画像処理のための読み出し処理を同時に実行できる。
【００４４】
以上述べたように、本発明の第２の実施例によれば、描画処理中に実測した描画位置に基づいて複数の描画処理部の処理時間の差が小さくなるように制御することで、複数の描画処理部の各々に発生する待ち時間を短縮し、並列処理効率を向上できる。
【００４５】
（変形例２）
第１の実施例では、描画処理部１１４の内部で実測の描画位置に基づく描画対象領域の割合の変更を行ったが、本変形例では、スキャンライン毎に予測した負荷予測値が与えられた場合の組み合わせによる構成例を示す。
【００４６】
図６は、画像形成装置１００におけるＰＤＬ印刷処理のデータフローを示す図である。図６は、図２で説明した図における変形例であるため、図２と共通する部分の説明を省略し、図２との差分のみを説明する。図６において、ＣＰＵ１０８は、受信したＰＤＬデータ２０１を解釈しページ単位あるいはバンド単位の中間データ（ＤＬ）２０２を作成すると共に、スキャンライン毎に負荷予測値を算出し、負荷予測情報としてＲＡＭ１０９に格納する。負荷予測情報としては、たとえばラスタラインごとのエッジの数などを採用することができる。描画処理部１１４は、中間データ（ＤＬ）２０２に含まれる描画データを参照し、単一ページ内の複数のバンド単位の矩形領域に対する描画処理を並列に実行して画像データ２０４を作成し、ＲＡＭ１０９に格納する。ここで、描画処理部１１４は、実測の描画位置だけでなく、現在の描画対象領域と次の部分領域の負荷予測値に基づいて、複数の描画処理部に対する描画対象領域の割合を変更する。
【００４７】
図１０は、予測処理を伴う並列描画処理設定を説明するための、ＣＰＵ１０８により実行される処理のフローチャートである。図１０は、図８で説明した図における変形例であるため、図８と共通する部分の説明を省略し、図８との差分のみを説明する。図１０におけるＳ１００１は、図８におけるＳ８０１と全く同様である。Ｓ１００２で、ＣＰＵ１０８は、部分領域内のスキャンライン毎の負荷予測値を算出する。算出方法としては、例えば、所定の部分領域として、簡単のために、ページ単位の主走査幅を持つ８ラインを考えた場合、各ラインの負荷予測値を相対値としての重み付け係数（例えば、１：１：２：３：４：２：５：４）を算出する。次に、Ｓ１００３で、ＣＰＵ１０８は、負荷予測値を用いて重み付けた上で、並列動作数で分割した値を部分領域の初期値に設定する。例えば、上記の例の場合、８ライン分の重み付け係数の総和は１＋１＋２＋３＋４＋２＋５＋４＝２２となるので、これを並列動作する複数の描画部（例えば、２個）で均等分割するように担当する描画対象領域を設定する。たとえば上記数値例では、不可予測値の総和は２２であり、並列動作数２でそれを分割すると、１つの描画部の負荷は１１（＝２２／２）となる。そこで、１ラン目から５ライン目までの負荷予測値の合計値が１＋１＋２＋３＋４＝１１となるので、この５ライン分を第１描画部４０１の描画対象領域とする。一方、負荷予測値の総計が２＋５＋４＝１１（＝２２／２）となる残りの３ライン分を第２描画部４０２の描画対象領域として設定する。上記数値例のように、各描画部による描画対象ラインの負荷予測値の総和が同一になるとは限らない。負荷予測値が同一となるように分割できない場合には、それぞれの負荷予測値が最も均等に近くなるように分割する。
【００４８】
図１１は、予測結果を用いた並列描画処理を説明するためのフローチャートである。図１１は、図９で説明した図における変形例であるため、図９と共通する部分の説明を省略し、図９との差分のみを説明する。図１１におけるＳ１１０１〜Ｓ１１１１は、図９におけるＳ９０１〜Ｓ９１１と全く同様である。Ｓ１１１２で、Ｓ１１１０で検知した他の描画処理部における残りのライン数と次の部分領域の負荷予測値を参照して、図１０のＳ１００２を用いて示した算出方法と同様の重み付け計算を行う。例えば、残りライン数分の重み付け係数の総和として４、次の部分領域の重み付け係数の総和として図１０の例と全く同様として２２の値をそれぞれ算出する。次に、Ｓ１１１３で、Ｓ１１１２で算出した４＋２２＝２６を並列動作する複数の描画部で均等分割するように設定する。すなわち、例えば、１＋１＋２＋３＋４＋２＝１３（＝２６／２）に対応する６ライン分を次の第１描画部４０１の描画対象領域とし、［残り４＋］５＋４＝１３（＝２６／２）に対応する２ライン分を次の第２描画部４０２の描画対象領域とする。Ｓ１１１４で、Ｓ１１１３で算出した割合に従って複数の描画部の各々の描画領域制御部が、描画対象領域とするライン数を制御する。上記の制御を繰り返すことで、所定の部分領域を描画するうちの複数の描画部の処理時間の差を小さくし、描画処理完了までの全体の処理時間を短縮することができる。
【００４９】
以上述べたように、本変形例によれば、描画処理中に実測した描画位置と負荷予測値に基づいて複数の描画処理部の処理時間の差が小さくなるように制御することで、複数の描画処理部の各々に発生する待ち時間を短縮し、並列処理効率を向上できる。
【００５０】
（変形例３）
第１の実施例では、ページ単位の主走査幅を持つバンド単位の部分領域、更には部分領域を構成する描画対象領域を複数の描画処理部に割り当てたが、図１２（ｃ）に示すように、ページ単位を主走査方向で分割したバンド単位で順次描画出力しても良い。この場合、ブロックＲＡＭ１１５を構成するバッファ容量を小さく抑えることができる。
【００５１】
（変形例４）
第１の実施例では、並列動作数が２の例を示したが、３以上の場合でも同様の考え方で割り当てを変更できる。例えば、並列動作数が３の場合、１番目に描画処理が完了した描画部が、他の２つの描画部の描画位置をそれぞれ参照し、１番目と３番目の間で割り当てを変更し、２番目は均等分割に相当する割り当てを維持する方法が考えられる。同様に、例えば、並列動作数が４の場合、１番目と４番目の間で割り当てを変更し、２番目と３番目の間で割り当てを変更する方法が考えられる。
【００５２】
この場合には、たとえば最先に描画処理を完了した描画部を上記第１の実施例の第１描画部とし、最先に描画処理を完了した描画部が他の描画部の描画位置を参照し、最も残りライン数が多い描画部を第２の描画部として、上記第１の実施例を適用すればよい。残りライン数を知るためには、たとえば、各描画部について設定した描画対象領域も、他の描画部からアクセス可能に構成しておけばよい。もちろんこれは一例に過ぎず、他の構成をとることも可能である。
【００５３】
（変形例５）
変形例２において、負荷予測処理そのものの処理負荷が重く、本来の描画処理の開始が遅延する可能性がある場合は、負荷予測値を用いずに第１の実施例に記載の実測した描画位置に基づく割り当ての変更のみを実施するように制御しても良い。
【００５４】
（変形例６）
第１の実施例では、一方の描画部による対象バンドの描画処理が完了した時点における他方の描画部による処理の進捗を、対象バンドの処理済みライン数を参照することで決定していた。これに対して、進捗を例えば時間で決定することもできる。たとえば各描画部は、それぞれの対象バンドの処理を開始時にタイマをスタートさせ、終了時にタイマの値を読み取ることで、描画処理に要した時間を測定する。そして、全描画部によるバンドの描画処理が完了したなら、測定した時間差をライン数の差に換算し、第１の実施例またはその変形例と同様の手順で、次の対象バンドの高さを決定する。たとえば、先に対象バンドの処理を完了させた描画部による対象バンド高さをＨｆ、処理時間をＴｆ、後に対象バンドの処理を完了させた描画部による対象バンド高さをＨｓ、処理時間をＴｓ、測定した前記時間差をΔＴとする。先に対象バンドの処理を完了させた描画部による次の対象バンド高さＨｆｎはたとえば、Ｈｆｎ＝Ｈｆ（１＋（ΔＴ／２）＊（１／Ｔｆ））とする。後に対象バンドの処理を完了させた描画部による次の対象バンド高さＨｓｎはたとえば、Ｈｓｎ＝Ｈｓ−（Ｈｆｎ−Ｈｆ）とする。ここでＨｆ＋Ｈｓ＝Ｈｆｎ＋Ｈｓｎ＝ブロック高さである。
【００５５】
もちろんこれは一例に過ぎないが、このように処理負荷の空間的な指標値ではなく時間的な指標値に基づいて、各描画部による描画処理の完了のタイミングのずれができるだけ小さくなるよう、各描画部による処理量を分配することもできる。
【００５６】
［その他の実施例］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５７】
１００  画像形成装置、１０８  ＣＰＵ、１０９  ＲＡＭ、１１４  描画処理部、４０１  第１描画処理部、４０２  第２描画処理部
【図１】
0006445899.tif 000002
【図２】
0006445899.tif 000003
【図３】
0006445899.tif 000004
【図４】
0006445899.tif 000005
【図５】
0006445899.tif 000006
【図６】
0006445899.tif 000007
【図７】
0006445899.tif 000008
【図８】
0006445899.tif 000009
【図９】
0006445899.tif 000010
【図１０】
0006445899.tif 000011
【図１１】
0006445899.tif 000012
【図１２】
0006445899.tif 000013
【図１３】
0006445899.tif 000014