(57)【特許請求の範囲】
【請求項１】
印刷対象の画像を表すデータをラスタ画像データに変換する画像処理装置であって、
前記画像における処理対象ラインにおいて、描画されるオブジェクトが重なる数に基づいて、連続する画素の位置情報を取得する取得手段と、
前記連続する画素において、前記描画されるオブジェクトのうち少なくとも一部の画素データを示す画素情報を保持する第一の保持手段と、
前記描画されるオブジェクトのうち、前記連続する画素において単一の画素値からなるオブジェクトの画素データを示す画素情報を保持する第二の保持手段と、
前記連続する画素のうち、オブジェクトが対応するレイヤ毎に、前記連続する画素の画素データを画素情報として前記オブジェクトの重ね順に前記第一の保持手段または前記第二の保持手段に入力する入力手段と、
前記第一の保持手段または前記第二の保持手段に保持された前記連続する画素における画素情報に基づいて、共通して処理可能な領域を特定し、前記領域における全てのレイヤの画素情報を１組として、前記第一の保持手段または前記第二の保持手段から取り出して出力する出力手段を有することを特徴とする画像処理装置。
【請求項２】
前記入力手段は、前記画素情報の属するレイヤが単一の画素値を持つレイヤであると判定した場合、前記画素情報を前記第二の保持手段に入力し、前記画素情報の属するレイヤが単一の画素値を持つレイヤではないと判定した場合は、前記画素情報を前記第一の保持手段に入力することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記出力手段は、前記連続する画素において、前記領域を複数、特定することを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
さらに、前記出力手段から得られる画素情報に基づいて、前記処理対象ラインにおける各画素の画素値を決定する決定手段を有し、
前記決定手段は、前記領域ごとに前記画素情報を参照して、順に画素値を決定することを特徴とする請求項１乃至３のいずれか一項に記載の画像処理装置。
【請求項５】
前記出力手段は、前記領域における画素情報を前記レイヤの重なり順に出力することを特徴とする請求項１乃至４のいずれか一項に記載の画像処理装置。
【請求項６】
前記出力手段は、レイヤ毎に生成されたスパン情報コマンドに基づいて、前記処理対象ラインにおける前記連続する画素ごとのレイヤ数と、前記画素情報を保持している保持手段を検出することを特徴とする請求項１乃至５のいずれか一項に記載の画像処理装置。
【請求項７】
前記第二の保持手段は、前記連続する画素において単一の画素値を持つレイヤが存在しない場合は、前記第一の保持手段として機能することを特徴とする請求項１乃至６のいずれか一項に記載の画像処理装置。
【請求項８】
印刷対象の画像を表すデータをラスタ画像データに変換する画像処理方法であって、
前記画像における処理対象ラインにおいて、描画されるオブジェクトが重なる数に基づいて、連続する画素の位置情報を取得し、
前記連続する画素のうち、オブジェクトが対応するレイヤ毎に、前記連続する画素の画素データを画素情報として前記オブジェクトの重ね順に、前記連続する画素において、前記描画されるオブジェクトのうち少なくとも一部の画素データを示す画素情報を保持する第一の保持手段と、前記描画されるオブジェクトのうち、前記連続する画素において単一の画素値からなるオブジェクトの画素データを示す画素情報を保持する第二の保持手段と、のうちいずれかに、入力し、
前記第一の保持手段または前記第二の保持手段に保持された前記連続する画素における画素情報に基づいて、共通して処理可能な領域を特定し、前記領域における全てのレイヤの画素情報を１組として、前記第一の保持手段または前記第二の保持手段から取り出して出力することを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ページ記述言語（ＰＤＬ）で記述されたデータから画像データを生成する技術に関する。
【背景技術】
【０００２】
記録媒体に画像を印刷する場合、ページ記述言語（ＰＤＬ：ｐａｇｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｌａｎｇｕａｇｅ）で記述された印刷対象のデータをネットワーク等の通信媒体を介して受信する。プリンタなどの画像形成装置で出力するため、ＰＤＬで記述されたデータに対してＲＩＰ（Ｒａｓｔｅｒ  ｉｍａｇｅ  ｐｒｏｃｅｓｓｏｒ）処理を実行することにより、ＰＤＬで記述されたデータは、ラスタ画像データに変換される。具体的にはまず、印刷する画像形成装置（プリンタ）専用のインタプリタが、受信したＰＤＬによって記述されたデータを解釈し、中解釈したけかに基づいて中間データを作成する。さらに、中間データに基づいてレンダリング処理が実行され、ラスタ画像ｗｐ生成する。以上のようなＲＩＰ処理によって生成されるラスタ画像は、所定の画像処理を施され、亜ｇ像形成装置が印刷可能な印字データに変換され、プリンタが印刷データに基づいて記録媒体上に印刷する。
【０００３】
さらにレンダリング処理では、スキャンラインアルゴリズムが知られている。スキャンラインアルゴリズムでは、描画すべきオブジェクトの境界（エッジ）とスキャンラインの交点を算出して、隣接する２つのエッジ間の連続画素（スパン）の画素値をオブジェクト情報から算出する。不透明のオブジェクトが重なっている場合、スパンの単位でオブジェクトの重なりを判定することによって最前面のオブジェクトのみを描画することで最終結果を得られる。
【０００４】
一方、透明なオブジェクトが重なっている場合には、最終的な画素値を算出する為にはすべての透明なオブジェクトの画素値を重なっている順に合成する必要がある。しかしながらスキャンラインアルゴリズムでは、スパンごとにオブジェクトの重なりを判定し、合成する処理を行う必要がある。そのため、透明なオブジェクトが多く重なっているようなデータの場合には、処理が複雑になり、時間がかかってしまう。
【０００５】
そこで特許文献１では、重なる２つのオブジェクトの解像度情報を取得し、画像合成時に高解像度のオブジェクトに合わせて低解像度のオブジェクトを変換して合成することで、出来るだけ出力解像度より低い解像度で合成する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１３０４６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に開示された方法では、３つ以上の複数のオブジェクトが重なる領域における画素を合成するためには、複雑な制御を必要としていた。さらに、画素を合成するためには、オブジェクトが重なる順に各レイヤにおける画素情報が出力されるのを待つ必要があった。
【０００８】
そこで本発明は、簡単な構成により、複数のオブジェクトが重なる領域における画素を効率よく合成処理することができるデータを出力することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、印刷対象の画像を表すデータをラスタ画像データに変換する画像処理装置であって、前記画像における処理対象ラインにおいて、描画されるオブジェクトが重なる数に基づいて、連続する画素の位置情報を取得する取得手段と、前記連続する画素において、前記描画されるオブジェクトのうち少なくとも一部の画素データを示す画素情報を保持する第一の保持手段と、前記描画されるオブジェクトのうち、前記連続する画素において単一の画素値からなるオブジェクトの画素データを示す画素情報を保持する第二の保持手段と、前記連続する画素のうち、オブジェクトが対応するレイヤ毎に、前記連続する画素の画素データを画素情報として前記オブジェクトの重ね順に前記第一の保持手段または前記第二の保持手段に入力する入力手段と、前記第一の保持手段または前記第二の保持手段に保持された前記連続する画素における画素情報に基づいて、共通して処理可能な領域を特定し、前記領域における全てのレイヤの画素情報を１組として、前記第一の保持手段または前記第二の保持手段から取り出して出力する出力手段を有することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、簡単な構成により、複数のオブジェクトが重なる領域における画素を効率よく合成処理することができるデータを出力できる。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態における画像形成装置の全体構成例を示すブロック図。
【図２】従来構成のレンダラ処理部１０６の構成例を示すブロック図。
【図３】複数レイヤにわたってオブジェクトの重なった印刷データの１例を示す図。
【図４】図３のスパン４の複数レイヤの画素情報コマンド例と生成順序を示す図。
【図５】図３のスパン４の複数レイヤを画素単位のスパンに分割したときのスパンと画素情報コマンドの例を示す図。
【図６】第１実施形態におけるレンダラ処理部１０６の構成例を示すブロック図。
【図７】画素バッファ６０１の構成例を示すブロック図。
【図８】画素バッファ６０１における出力制御部７０３の処理フロー図。
【図９】第１実施形態における画素バッファ６０１の構成例を示すブロック図。
【図１０】第１実施形態における出力制御部９０４の処理フロー図。
【図１１】第１実施形態における画素バッファ６０１の処理例を示す図。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して、本発明の実施形態を詳細に説明する。なお、以下の実施形態において示す構成は一例にすぎず、本発明は図示された構成に限定されるものではない。
【００１３】
＜第１実施形態＞
図１は、第１実施形態に適用可能な画像形成装置１００の全体構成の一例を示すブロック図である。画像形成装置１００は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、入力部１０４、ＰＤＬ処理部１０５、レンダラ処理部１０６、画像処理部１０７、出力部１０８から構成され、共有バス１０９を介して接続されている。
【００１４】
ＣＰＵ１０１は、ＲＯＭ１０２に格納された制御プログラムを読み出し実行することにより、演算処理や画像形成装置１００各部の動作を統括的に制御する。ＲＡＭ１０３は、読み出し及び書き込み可能なメモリであり、画像データなどの各種データを一時的に格納するための記憶媒体である。入力部１０４は、ホストＰＣやサーバ（不図示）から転送されてくるページ記述言語で記述された印刷対象のデータ（以降、ＰＤＬデータ）を受信し、ＲＡＭ１０３に格納する。ＰＤＬ処理部１０５は、入力部１０４が受信したＰＤＬデータを解析し、レンダラ処理部１０６が解釈可能なフォーマットの中間データに変換する。レンダラ処理部１０６は、ＰＤＬ処理部１０５が生成した中間データからラスタ画像データを生成する。画像処理部１０７は、レンダラ処理部１０６で生成されたラスタ画像データに対して所定の画像処理を施して印刷データを生成する。出力部１０８は、インクジェットヘッドやレーザービーム方式のプリンタエンジンであり、画像処理部１０７を介して生成された印刷データに従って、印刷処理を実行する。
【００１５】
図２は、従来型のレンダラ処理部１０６を示すブロック図である。従来型のレンダラ処理部１０６における課題について説明する。レンダラ処理部１０６は、命令実行部２０１、エッジ処理部２０２、画素生成部２０３、画素合成部２０４、画素合成スタック２０５および画素出力部２０６からなり、パイプライン処理を実行する。命令実行部２０１は、中間データ２０７から処理命令２０８を読み出して処理し、各処理部に読み出した命令をコマンドとして転送する。エッジ処理部２０２は、中間データ２０７からエッジ情報２０９を読みだして、スキャンラインとオブジェクトのアウトラインが交差する２つの交点間の連続画素（スパン）の位置情報を生成する。各スパンは、オブジェクトが対応するレイヤの重なりが同じ画素群からなる線分である。さらにエッジ生成部２０２は、画素を生成するためのスパンの位置情報を、スパン情報コマンドとして画素生成部２０３に転送する。ここで生成されるスパン情報コマンドもまた、パイプラインの各処理部に転送される。画素生成部２０３は、中間データ２０７の画素データテーブル２１０を参照して、スパン情報コマンドからスパンにおける画素情報を生成する。画素合成部２０４は、受け取ったスパンにおける最終的な出力画素値を決定するために、複数のオブジェクトの重なりを合成する必要がある場合には、画素合成スタック２０５を使用して途中までの画素合成の中間結果を保持する。画素出力部２０６は、画素合成部２０４が算出された最終的な画素値を、レンダリング結果として出力バッファ（不図示）に出力する。
【００１６】
次に、同一スパンに複数のオブジェクトが重なっているときの処理について説明する。図３は、画像オブジェクト３０１と単色塗りつぶしオブジェクト３０２、３０３の３つのオブジェクトが重なっているページの例を示している。画像オブジェクト３０１は、最背面のレイヤ１に描画されており、背面の見えない不透明なオブジェクトである。オブジェクト３０２、３０３はそれぞれレイヤ２、レイヤ３に描画されており、画像オブジェクト３０１の前面に重なっている。なお、レイヤ１、２、３の順に背面から前面に重なっているとする。また、オブジェクト３０２、３０３は透過して背面が見える透過オブジェクトである。したがってオブジェクト３０２および３０３が重なっている領域については、その領域に含まれる画素の最終出力値を生成すためには、それぞれのオブジェクトの画素値を合成する必要がある。
【００１７】
上述のような３つのオブジェクトが重なっている位置を横切るスキャンライン３０４のスパンの生成とスパンのレンダリングについて説明する。処理対象ラインであるスキャンライン３０４は、各オブジェクトのアウトラインとの交点によって、複数のスパンに分けられて処理される。図３のようにスキャンライン３０４は、スパン１からスパン７の７つのスパンに分けられる。各スパンの開始位置、終了位置はＰＤＬ処理部１０５によって予め設定されており、中間データ２０７のエッジ情報２０９として符号化されて記憶されている。エッジ情報２０９を、レンダラ処理部１０５のエッジ処理部２０２が復号処理することによって各スパンの開始位置、終了位置が算出される。また、エッジ情報２０９には各スパンに描画される画素情報の参照先が登録されている。同一スパンに複数のオブジェクトが重なって描画される場合には、最背面のレイヤから順に複数の参照先が登録されている。例えばスパン４では、３つのオブジェクトが重なっているので、最背面から順に画像オブジェクト３０１とオブジェクト３０２、３０３の画素情報の参照先が順に登録されている。レンダラ処理部１０５におけるパイプライン処理において、これらの参照先の情報はスパン４の位置情報を含んだスパン情報コマンドとして、エッジ処理部２０２から画素生成部２０３に対して送信される。
【００１８】
このように、スパン情報コマンドは参照先の情報を有するため、描画されるオブジェクトのあるレイヤ毎に１つ生成される。つまり、オブジェクトが複数重なったスパンにおいては、複数のスパン情報コマンドが生成される。また、スパン情報コマンドは、対応するレイヤが最上位のレイヤであるかどうかを示すフラグを有する。画素生成部２０３は、受け取ったスパンの位置情報と画素情報の参照先の情報から、中間データ２０７を参照して各オブジェクトの画素データを生成し、画素情報コマンドとして画素合成部２０４に送信する。このとき、画素生成部２０３は、同一の画素値が連続する複数画素については、１つの画素情報コマンドとして画素合成部２０４に送る。画素情報コマンドは、生成された画素値とその開始画素位置、終了画素位置の情報を含む。画素生成部２０３は、同一画素の連続を１メッセージとして送るので、図３のスパン４の例では、図４に示すような画素情報が画素合成部２０４に送られる。図４は図３のスパン４の画素情報として送られる画素情報コマンド例と、その生成順序を示している。画素生成部２０３は、中間データを参照して、重なり順に、指定されたオブジェクトのスパンの開始位置から終了位置までの画素を生成する。したがって、図４が示す生成順序のように下のレイヤのすべての画素情報が生成されるまで、上のレイヤの画素情報は生成されない。
【００１９】
画素合成部２０４は、上述のような順序で送られてくる画素情報コマンドを受け取って、複数のレイヤの重なりに位置する各オブジェクトの画素データを適切に合成し、各画素の最終出力値を決定する。例えば、図４の例ではレイヤ１の４つの画素情報をすべて保存しておかないと、レイヤ２の画素と適切に合成することが出来ない。また、オブジェクトの描画の方法によっては、レイヤ１の画素情報を一時保存しておいて、レイヤ２とレイヤ３の画素を合成してから、合成後の画素をレイヤ１と合成する。画素情報を一時的に保存にするために、画素合成スタック２０６が使用される。このように従来の構成では、上述のような順序で画素情報が送られるために、スパンに描画される全てのオブジェクトの画素情報をバッファリングしておく必要があり、多くのリソースを必要としていた。また画素合成部２０４は、図４のようにレイヤ毎に同一画素数が続く画素範囲が異なった画素情報を処理する必要があるため、複雑な制御を必要としていた。
【００２０】
一方、画素合成スタック２０６に必要なリソースを低減する従来手法として、スパン３０４のようにオブジェクトの重なりがある場合は、図５のように画素単位のスパンに分割して処理する手法が知られている。このように、画素情報の生成単位であるスパンをさらに分割して画素合成の順序に合わせて画素生成すれば、画素合成の為にスパンの全画素をバッファリングする必要がない。しかし、パイプラインを伝えるスパン情報および画素情報のコマンド数や、合成回数が増大するという課題があった。
【００２１】
図６は、第１実施形態に適用可能なレンダラ処理部１０６の構成を示している。図２に示した従来のレンダラ処理部１０６に対して、第１実施形態におけるレンダラ処理部１０６では、画素生成部２０３と画素合成部２０４の間に、画素バッファ６０１を設けている。画素バッファ６０１は、画素生成部２０３が生成する画素情報を保持し、後述の処理フローにおいて画素情報を再生成することで、画素合成部２０４が効率よく合成することができるようにする。なおここでは、１〜３レイヤ目用バッファを構成としているため、３つの重なりまで対応できる。以下、画素バッファ６０１の構成例、および動作について説明する。各レイヤバッファ７０２は、スパンの長さとオブジェクトが保持し得るビット数に基づいて、容量が設定される。例えば、スパンを構成する最大画素数が６４画素と設定され、オブジェクトとしては、ＲＧＢそれぞれ最大８ビットの画像データが描画されるとする。この場合、１つのレイヤバッファ７０２には、最大２４ビット×６４画素のデータが格納される。従って、レイヤバッファ７０２は、最大２４ビット×６４画素のデータが格納可能な容量を設けられていることが望ましい。
【００２２】
図７は、図６における画素バッファ６０１の詳細な構成を示すブロック図である。画素バッファ６０１は、入力制御部７０１とレイヤ毎に画素情報をスキャン方向順にバッファリングするためのレイヤバッファ７０２、出力制御部７０３を有する。入力制御部７０１は、画素生成部２０３からスパン情報コマンドを受け付けると、スパンの開始画素位置ＳＴＡＲＴＸと終了画素位置ＥＮＤＸを取得する。また、スパン情報コマンドに含まれる最上位レイヤを示すフラグを持つレイヤを受信するまでに受信したスパン情報コマンドの数をカウントすることでレイヤ総数Ｎ（本実施形態の場合は、Ｎは１〜３）を取得する。また、受信したスパン情報コマンドは出力制御部に転送する。スパン情報コマンドに続いて、画素生成部２０３からスパンの画素情報を受け付けると、最初に送られてくるレイヤの画素情報を１レイヤ目のバッファに保存する。１レイヤ目のすべての画素情報をバッファに保存すると、すでに保存したレイヤ数とレイヤ総数Ｎを比較し、まだレイヤが残っているかを判定する。まだレイヤが残っている場合は、続いて送られてくる画素情報を、２レイヤ目以降のバッファに保存していき、Ｎレイヤ分の保存が終わるまで処理を繰り返す。すべてのレイヤを保存し終わると、次のスパン情報コマンドを受け付けて同様の処理を繰り返す。
【００２３】
出力制御部７０３は、各レイヤバッファから画素情報を取り出して、画素合成部２０４が効率よく合成することができるように画素情報を再生成する。以下、図８を用いて出力制御部７０３の動作を説明する。図８は、出力制御部７０３が実行する処理のフローチャートである。
【００２４】
ステップＳ８０２において出力制御部７０３は、入力制御部７０１から複数のスパン情報コマンドを受け付けると、コマンドからスパンの開始画素位置ＳＴＡＲＴＸと終了画素位置ＥＮＤＸを取得する。また、入力制御部７０１と同様に、スパン情報コマンドに含まれる最上位レイヤを示すフラグを持つレイヤを受信するまでに受信したスパン情報コマンドの数をカウントすることでレイヤ総数Ｎを取得する。
【００２５】
ステップＳ８０２において出力制御部７０３は、Ｎ個それぞれのレイヤバッファから１つずつ計Ｎ個の画素情報を取り出して、共通して取り出せる画素区間を特定する。ここで共通して取り出せる画素区間は、後段の画素合成部２０４が共通して処理可能な領域（区間）とも言える。最初に取り出される画素区間の開始画素位置は常にＳＴＡＲＴＸとなり、画素区間の終了画素位置については、Ｎ個の同一画素の連続する画素区間から最小の終了画素位置ＮＥＸＴＥＮＤを検出することで得られる。２区間目からの開始画素位置は１区間前のＮＥＸＴＥＮＤ＋１となる。
【００２６】
ステップＳ８０３において、ステップＳ８０１で取り出したＮ個の画素情報のうち１レイヤ目からＮレイヤ目の順に、開始画素位置ＳＴＡＲＴＸから終了画素位置ＮＥＸＴＸの部分的な画素情報を生成する。生成した部分的な画素情報は、１組の画素情報として画素合成部２０４に出力する。ステップＳ８０３までで既に出力したＮＥＸＴＸの画素位置がスパンの終了位置ＥＮＤＸに達していれば（ＮＥＸＴＸ＝＝ＥＮＤＸ）、現在のスパンの出力処理を終了し、次のスパン情報コマンドを入力制御部７０１から受け付けて同様の処理を繰り返す。まだＮＥＸＴＸがＥＮＤＸに達していない場合は（ＮＥＸＴＸ＜ＥＮＤＸ）、ステップＳ８０４に進み、Ｎ個のレイヤの画素情報から既にＳ８０３で画素合成部２０４に送信した画素範囲を削除する。ステップＳ８０４で画素範囲を削除した結果、全ての画素範囲が削除されたレイヤが存在する場合、ステップＳ８０５に進む。ステップＳ８０５において削除したレイヤのレイヤバッファから次の画素範囲の画素情報を取り出して、新しくＮ個のレイヤの画素情報を更新し、Ｓ８０２からの処理を繰り返す。
【００２７】
以上説明したように、画素生成部２０３によって作成された複数レイヤにわたってオブジェクトが重なった位置の画素情報をバッファリングする。さらに、複数レイヤ間で同一画素が連続している領域を揃えながら各レイヤの画素情報を並び替えて再生成する。これにより、画素合成部２０４は、複数のレイヤにわたって複数の画素の合成結果が同一になる画素範囲はレイヤ１からレイヤＮまでの画素情報を１組として合成処理できる。そのため画素合成部２０４は、レイヤ数よって決まるスパンにおいて重なり順に全ての画素情報が転送されるのを待つことなく、効率的に画素合成処理を実行することが出来る。なお図６では、３レイヤ分のバッファを有する場合の例を示しているが、レイヤバッファの個数を変更することで容易に４以上の任意のＮレイヤにも対応可能である。
【００２８】
＜変形例＞
第１実施期待では、図７および図８のフロー図を用いて説明したように、重なったオブジェクトの画素情報をレイヤ毎に異なる画素バッファに保存する。しかしながら、第１実施形態に示す構成では設けたレイヤバッファの個数以上にレイヤ数の重なりがあるスパンについては、処理することが出来ない。そこで変形例として、図９に示すように単一画素値レイヤバッファ９０３を設ける方法について説明する。以下、図９と出力制御部９０４が実行する処理フロー図を示した図１０を用いて、変形例における処理の動作を説明する。単一画素値レイヤバッファ９０３は、スパンの開始画素位置から終了画素位置までの全域が単一画素値であるレイヤを保存するバッファとして使用される。例えば、図３で例示したオブジェクト３０２、３０３は、画素位置に依らずに単一画素値で描画されるオブジェクトであるため、これらのオブジェクトから生成されるスパンは単一画素値レイヤバッファ９０３に格納する。従って、レイヤバッファ９０２には、全レイヤの画素情報のうち、一部のレイヤの画素情報が入力される。単一画素値からなるオブジェクトの場合、画素毎の画素情報を保持する必要がなく、１画素分の画素情報を保持しておけばよい。そのため例えば前述のレイヤバッファ７０２と同様、同一画素値レイヤバッファ９０３が２４ビット×６４画素のデータが格納可能な容量を設けられている場合、６４のオブジェクトの画素情報を保持できることになる。従って図９に示すバッファの場合、単一画素値ではない画像オブジェクトの重なりは２つ、単一画素値からなるオブジェクトの重なりは６４まで対応できることになる。
【００２９】
入力制御部９０１は、画素生成部２０３からスパン情報コマンドを受け付けると、スパンの開始画素位置ＳＴＡＲＴＸと終了画素位置ＥＮＤＸとレイヤ総数Ｎを取得し、出力制御部に転送する。スパン情報コマンドに続いて、画素生成部２０３からスパンの画素情報を受け付けると、処理対象のレイヤが単一画素値のオブジェクトからなるレイヤかどうかを判断する。画素情報から得られる開始画素位置とＳＴＡＲＴＸ、終了画素位置とＥＮＤＸを比較し、共に一致した画素情報のレイヤは単一画素レイヤと判定される。単一画素値レイヤであった場合は、単一画素値レイヤバッファ９０３に画素情報を保存して、次のレイヤの入力処理に移行する。単一画素値レイヤでなかった場合は、本レイヤのすべての画素情報を第ｎレイヤバッファ［ｎ＝１、２、・・・、Ｎ：ｎは当該スパンにおけるｎ番目の単一画素値でないレイヤを指す］に保存して、次のレイヤの入力処理に移行する。すでに保存したレイヤ数とレイヤ総数Ｎを比較して、まだレイヤが残っている場合は、続いて送られてくる画素情報について上記処理を繰り返す。すべてのレイヤを保存し終わると、次のスパン情報コマンドを受け付けて、同様の処理を繰り返す。
【００３０】
出力制御部９０４は、図１０の処理フローに従って、各レイヤバッファから画素情報を取り出して、画素合成部２０４が効率よく合成することができるように画素情報を再生成する。以下、図１０を用いて出力制御部９０４の動作を説明する。
【００３１】
ステップＳ１００１において出力制御部９０４は、入力制御部９０１からスパン情報コマンドを受け付けると、コマンドからスパンの開始画素位置ＳＴＡＲＴＸと終了画素位置ＥＮＤＸを取得する。また、スパン情報コマンドに含まれる最上位レイヤを示すフラグを持つレイヤを受信するまでに受信したスパン情報コマンドの数をカウントすることでレイヤ総数Ｎを取得する。
【００３２】
ステップＳ１００２において出力制御部９０４は、スパン情報コマンドには含まれる、画素生成部２０３が画素生成時に使用した参照先の情報に基づいて、各レイヤがレイヤバッファと単一画素値レイヤバッファのどちらに含まれているかを検出する。この結果、１番下のレイヤからＮ番目のレイヤの画素情報は、それぞれどのバッファから取り出せばいいかを決定できる。ステップＳ１００３において、ステップ１００２における判定結果に基づいて、それぞれのバッファからＮ個の画素情報を取り出すと、第１実施形態と同様に共通して取り出せる画素区間を特定する。最初に取り出される画素区間の開始画素位置は常にＳＴＡＲＴＸとなり、画素区間の終了画素位置については、Ｎ個の同一画素の連続する画素区間から最小の終了画素位置ＮＥＸＴＥＮＤを調べることで得られる。２区間目からの開始画素位置は１区間前のＮＥＸＴＥＮＤ＋１となる。
【００３３】
ステップＳ１００４において、ステップＳ１００３で取り出したＮ個の画素情報から１レイヤ目からＮレイヤ目の順に、開始画素位置ＳＴＡＲＴＸ、終了画素位置ＮＥＸＴＸの部分画素情報を生成する。生成した部分画素情報は、１組の画素情報として画素合成部２０４に出力する。ステップＳ１００４までで既に出力したＮＥＸＴＸの画素位置がスパンの終了位置ＥＮＤＸに達していれば（ＮＥＸＴＸ＝＝ＥＮＤＸ）、現在のスパンの出力処理を終了し、次のスパン情報コマンドを入力制御部９０１から受け付けて同様の処理を繰り返す。まだＮＥＸＴＸがＥＮＤＸに達していない場合は（ＮＥＸＴＸ＜ＥＮＤＸ）、ステップＳ１００５に進む。ステップＳ１００５において、Ｎ個のレイヤの画素情報から既にＳ１００４で画素合成部２０４に送信した画素範囲を削除する。ステップＳ１００４で画素範囲を削除した結果、全ての画素範囲が削除されたレイヤが存在する場合、ステップＳ１００６に進む。ステップＳ１００６において削除したレイヤのレイヤバッファから次の画素範囲の画素情報を取り出して、新しくＮ個のレイヤの画素情報を更新し、Ｓ１００３からの処理を繰り返す。
【００３４】
図１１は、図９の２種類のレイヤバッファ３個に対して、５つのレイヤが重なったスパンを処理する例を示している。画素バッファ６０１の主要な動作を詳細に説明する。入力制御部９０１によって、レイヤ１の画素情報は第１レイヤバッファに、レイヤ４の画素情報は第２レイヤバッファに、レイヤ２、３、５の画素情報は単一画素値レイヤバッファ９０３にバッファリングされる。出力制御部９０４は、各バッファから全５レイヤの先頭の画素情報を取り出し、最小の終了画素位置を検出する。検出した全５レイヤにわたって共通する画素範囲をもとに、部分画素情報を重なり順に画素合成部２０４に送信する。取り出した画素情報のうち、送信済みの画素範囲を削除する。全ての画素範囲が削除されたレイヤが存在する場合、削除されたレイヤが保存されているレイヤバッファから新たに画素情報を取り出す。以上の処理をスパンの終了画素位置ＥＮＤＸに達するまで繰り返す。
【００３５】
以上説明したように変形例によれば、画素生成部２０３によって作成された複数レイヤにわたって重なった画素情報を画素バッファ６０１でバッファリングする。さらに複数レイヤ間で同一画素が連続している領域を揃えながら画素情報を並び替えて再生成する。これによって、画素合成部２０４は、複数のレイヤにわたって複数の画素の合成結果が同一になる画素範囲はレイヤ１からレイヤＮまでの１組の合成処理で完了でき、効率的に画素合成処理することが出来る。また、画素バッファ６０１に単一画素値レイヤバッファ９０３を設けることで、少ないリソースでより多くのレイヤの重なりをバッファリングすることが出来る。１ページ分のデータには、オブジェクト３０１のような画像が多数重なって描画されることはあまり発生しない。一方、オブジェクト３０２や３０３のような単一画素値かなる図形やレイアウトは、複数重なって描画される場合がある。さらに前述の通り単一画素値からなるオブジェクトは、画像オブジェクトの１画素分の画素情報を保持しておけばよいので、単一画素値からなるオブジェクトは１つのバッファに格納する。これにより１ページにおいてより多数の重なりに対応可能な構成を実現することができる。また、図９ではレイヤバッファ９０２が２個、単一画素値レイヤバッファ９０３が１個の構成で説明したが、それぞれのバッファの個数は変更可能である。
【００３６】
＜第２実施形態＞
第１実施形態の変形例では入力制御部９０１は画素生成部２０３が生成した画素情報をもとに、レイヤバッファ９０２と単一画素値レイヤバッファ９０３のどちらにバッファリングするかを制御する構成とした。第２実施形態ではバッファリングするバッファの制御を画素バッファ６０１よりパイプラインの前段に位置するエッジ処理部２０２や画素生成部２０３で行う構成とする方法について説明する。
【００３７】
エッジ処理部２０２で制御する場合について説明する。第１実施形態で述べたようにエッジ処理部２０２は、レイヤ毎にスパン情報コマンドを生成してパイプライン後段のモジュールに送信する。スパン情報コマンドは、画素生成部２０３が画素情報を生成するための参照先の情報を含む。エッジ処理部２０２は、この参照先が単一画素値であるとき、スパン情報コマンドに単一画素値であることを通知するフラグを付与する。入力制御部９０１は、スパン情報コマンドに付与されたフラグを検知したとき、該当するレイヤの画素情報を単一画素値レイヤバッファにバッファリングする。単一画素値であることを通知するフラグを付与する処理は、画素生成部２０３が実施しても構わない。本実施形態によれば、入力制御部９０１は画素情報の中身を解析せずに、スパン情報コマンドのフラグを検出するだけでバッファの制御が可能となる。また、入力制御部９０１において同様にスパン情報コマンドに含まれる参照先の情報から単一画素値かどうかを判定するように構成してもよい。
【００３８】
＜その他の実施形態＞
第１実施形態では、最適化前の画素バッファ６０１の制御フローに基づいて、出力制御部９０４の動作フローを説明した。しかしながら、本実施形態では、単一画素値レイヤバッファに保存されているレイヤの画素情報については、全画素区間が同一画素値であることがあらかじめ分かっている。したがって、ステップＳ１００３とステップＳ１００６の処理の対象から同一画素値レイヤの画素情報を除外する、などの最適な実装形態をとっても構わない。
【００３９】
また、レイヤバッファ９０２と単一画素値レイヤバッファ９０３は、同じ構成のバッファとして構成して機能を切り替えてもよい。つまり、単一画素値レイヤが存在しないスパンでは単一画素値レイヤバッファをレイヤバッファとして使用してもよい。この場合、単一画素値レイヤが存在するか否かを判定し、判定結果に応じて第１の実施形態と、偏見例とを切り替えるような構成となる。
【符号の説明】
【００４０】
１００  画像形成装置
１０６  レンダラ処理部
６０１  画素バッファ
７０１  入力制御部
７０２  １〜Ｎレイヤ用バッファ
７０３  出力制御部
【図１】
0006614941.tif 000002
【図２】
0006614941.tif 000003
【図３】
0006614941.tif 000004
【図４】
0006614941.tif 000005
【図５】
0006614941.tif 000006
【図６】
0006614941.tif 000007
【図７】
0006614941.tif 000008
【図８】
0006614941.tif 000009
【図９】
0006614941.tif 000010
【図１０】
0006614941.tif 000011
【図１１】
0006614941.tif 000012