JP2021022024A - 画像処理装置、画像処理方法およびプログラム - Google Patents

画像処理装置、画像処理方法およびプログラム Download PDF

Info

Publication number
JP2021022024A
JP2021022024A JP2019136590A JP2019136590A JP2021022024A JP 2021022024 A JP2021022024 A JP 2021022024A JP 2019136590 A JP2019136590 A JP 2019136590A JP 2019136590 A JP2019136590 A JP 2019136590A JP 2021022024 A JP2021022024 A JP 2021022024A
Authority
JP
Japan
Prior art keywords
pixel
buffer
span
pixel information
layer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2019136590A
Other languages
English (en)
Inventor
昂志 藤井
Takashi Fujii
昂志 藤井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2019136590A priority Critical patent/JP2021022024A/ja
Publication of JP2021022024A publication Critical patent/JP2021022024A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Record Information Processing For Printing (AREA)
  • Image Processing (AREA)

Abstract

【課題】複数のオブジェクトが重なる領域における画素合成処理を効率よく行えるデータを出力する。【解決手段】バッファ903は、スキャンライン上の各スパンを構成する連続する画素における描画対象のオブジェクトの画素情報を格納する。バッファ領域分割部902は、同一のスパンにおける、連続する画素の数と、オブジェクトが重なる数とに基づき、バッファの格納領域を分割する。入力制御部901は、同一のスパンに存在する複数のオブジェクトの画素情報を、各オブジェクトが属するレイヤごとに、かつ、当該同一のスパンにおいて重なる順に、分割されたバッファの格納領域に入力する。出力制御部904は、バッファの格納領域に入力された複数のオブジェクトの画素情報に基づき、同一のスパンにおいて共通して処理可能な部分を特定し、当該特定した部分におけるレイヤの画素情報をバッファの格納領域から出力する。【選択図】図9

Description

本発明は、画像処理装置、画像処理方法およびプログラムに関する。
画像処理装置は、ページ記述言語(PDL)で記述されたデータ(以下、PDLデータともいう)を専用のインタプリタにより解釈して中間データを作成し、作成した中間データに基づいてレンダリング処理を実行することによりラスタ画像データを生成する。このような一連の処理であるRIP(Raster Image Processor)処理によって生成されるラスタ画像データは、所定の画像処理が施され、画像形成装置が印刷可能な印刷データに変換される。画像形成装置は、印刷データに基づいて記録媒体上に印刷する。
レンダリング処理で使用するアルゴリズムとして、スキャンラインアルゴリズムが知られている。スキャンラインアルゴリズムでは、描画対象のオブジェクトのエッジとスキャンラインの交点を導出して、隣接する2つのエッジで区切られた閉領域(以下、スパンともいう)を構成する複数画素の画素値をオブジェクト情報から導出する。不透明のオブジェクトが重なっている場合、スパン単位でオブジェクトの重なりを判定して最前面のオブジェクトのみを描画することで最終結果を得ている。
一方、透明なオブジェクトが重なっている場合、最終的な画素値を導出する為に、全ての透明なオブジェクトの画素値を重なっている順に合成する必要がある。スキャンラインアルゴリズムでは、スパン単位でオブジェクトの重なりを判定しており、透明なオブジェクトの重なりが多いと、処理が複雑になり、時間がかかってしまう。
特許文献1は、各レイヤバッファに格納された、スパン単位で重なる複数のオブジェクトの画素情報から、同一の画素値が連続する領域を揃えて再生成した画素情報を基に、合成結果が同一の画素範囲を一度にまとめて画素合成処理を行う技術を開示している。また、特許文献1は、スパン単位で重なる複数のオブジェクトがレイヤバッファの数量より多い場合、オブジェクトの画素情報を1画素単位に分割して処理を行う技術も開示している。
特開2017−103563号公報
特許文献1では、スパン単位で重なる複数のオブジェクトの画素情報は、予め設定されたレイヤ数分のレイヤバッファであって、オブジェクトが属するレイヤ毎に、レイヤに応じたレイヤバッファに格納される。そのため、レイヤバッファに空き領域が存在しても、空き領域が存在するレイヤバッファとオブジェクトの画素情報とで対応するレイヤが異なる場合、レイヤバッファの空き領域にオブジェクトの画素情報を格納することができなかった。これにより、複数のオブジェクトが重なる領域における画素合成処理を効率よく行えるデータを出力できない場合があった。
本発明は、複数のオブジェクトが重なる領域における画素合成処理を効率よく行えるデータを出力する技術を提供することを目的としている。
本発明の一態様に係る画像処理装置は、スキャンライン上の各スパンを構成する連続する画素における描画対象のオブジェクトの画素情報を格納するバッファと、同一のスパンにおける、前記連続する画素の数と、前記オブジェクトが重なる数とに基づき、前記バッファの格納領域を分割する第一の分割手段と、前記同一のスパンに存在する複数の前記オブジェクトの画素情報を、各オブジェクトが属するレイヤごとに、かつ、当該同一のスパンにおいて重なる順に、前記第一の分割手段により分割された前記バッファの格納領域に入力する入力手段と、前記入力手段により前記バッファの格納領域に入力された前記複数のオブジェクトの画素情報に基づき、前記同一のスパンにおいて共通して処理可能な部分を特定し、当該特定した部分のレイヤの前記画素情報を前記バッファの格納領域から出力する出力手段と、を有することを特徴とする。
本発明によれば、複数のオブジェクトが重なる領域における画素合成処理を効率よく行えるデータを出力することができる。
画像形成装置の全体構成例を示すブロック図。 レンダリング処理部の構成例を示すブロック図。 印刷データ例を示す図。 画素情報コマンド例を示す図。 画素情報用バッファの構成例を示す図。 画素情報の出力処理の手順例を示すフローチャート。 画素情報コマンド例を示す図。 画素情報用バッファへの画素情報コマンドの格納例を示す図。 画素情報用バッファの構成例を示すブロック図。 画素情報の出力処理の手順例を示すフローチャート。 画素情報コマンド例を示す図。 バッファへの画素情報コマンドの格納例を示す図。 レンダリング処理部の構成例を示すブロック図。 スパンの分割処理の手順例を示すフローチャート。 スパンの分割処理を説明するための図。
以下、本発明を実施するための形態について図面を用いて説明する。ただし、この実施形態に記載されている構成要素はあくまで例示であり、本発明の範囲をそれらに限定する趣旨のものではない。また、実施形態で説明されている構成要素の組み合わせのすべてが、課題を解決するための手段に必須のものとは限らず、種々の変形及び変更が可能である。
<実施形態1>
本実施形態では、本発明に係る画像処理装置を画像形成装置に適用した場合について説明する。図1は、本実施形態に係る画像形成装置の全体構成例を示すブロック図である。画像形成装置100は、CPU101、ROM102、RAM103、入力部104、PDL処理部105、レンダリング処理部106、画像処理部107、出力部108を有する。画像形成装置100の各構成要素は、共有バス109によって相互に接続される。図1に示す画像形成装置100の各処理部105〜107の一部もしくは全部は、専用のハードウェアによって実現することができる。あるいは、各処理部105〜107の一部もしくは全部は、ROM102に記憶されたプログラムをCPU101がRAM103に展開し、実行することで実現することができる。
CPU101は、RAM103をワークメモリとして、ROM102などに格納された制御プログラムを読み出し実行することにより、演算処理や画像形成装置100の各構成要素の動作を統括的に制御する。これにより、後述する様々な処理が実行される。RAM103は、読み出し及び書き込み可能なメモリであり、後述の中間データを含む画像データなどの各種データを一時的に格納するための記憶媒体である。また、RAM103は中間データをレンダリング処理する際の作業領域でもある。入力部104は、ホストPCやサーバ(不図示)から転送されるページ記述言語で記述された印刷対象のデータ(以降、PDLデータという)を受信し、RAM103に格納する。
PDL処理部105は、入力部104が受信したPDLデータを解析し、レンダリング処理部106が解釈可能なフォーマットの中間データ(DL:Display List)に変換する。レンダリング処理部106は、PDL処理部105が生成した中間データからラスタ画像データを生成する。なお、中間データは、詳細につき後述する、処理命令、エッジ情報、画素データテーブルなどを含む。
画像処理部107は、レンダリング処理部106が生成したラスタ画像データに対して所定の画像処理を施して印刷データを生成する。出力部108は、インクジェットヘッドやレーザービーム方式のプリンタエンジンであり、画像処理部107が生成した印刷データに従って、印刷処理を実行する。
図2は、レンダリング処理部106の従来の構成例を示すブロック図である。図2を用いて、レンダリング処理部106の従来の構成例における課題について説明する。レンダリング処理部106は、パイプラインを構成する、命令実行部201、エッジ処理部202、画素生成部203、画素情報用バッファ204、画素合成部205、画素合成スタック206、画素出力部207を有する。図2に示すレンダリング処理部106の各部の一部もしくは全部は、専用のハードウェアによって実現することができる。あるいは、各部の一部もしくは全部は、ROM102に記憶されたプログラムをCPU101がRAM103に展開し、実行することで実現することができる。中間データ208は、処理命令209、エッジ情報210、画素データテーブル211を有する。
命令実行部201は、PDL処理部105が生成した中間データ208から処理命令209を読み取って、上述のパイプラインを構成する各処理部にコマンドとして転送する。エッジ処理部202は、命令実行部201から転送されたコマンドに基づき、上述の中間データ208からエッジ情報210を読みだして、スキャンラインとオブジェクトのアウトラインが交差する2つの交点間の閉領域を構成する複数画素の位置情報を生成する。前述の通り、スパンとは、単一のスキャンラインにおいて、ページ内に描画されるオブジェクト同士の境界またはオブジェクトと背景との境界であるエッジで区切られ、複数画素で構成される閉領域を指している。さらに、エッジ処理部202は、生成した位置情報に対応するスパンの画素を生成するための画素情報を生成する。そして、エッジ処理部202は、生成した複数画素(スパン)の位置情報および画素情報をスパン情報コマンドとして画素生成部203に渡す(送信する)。エッジ処理部202が生成するスパン情報コマンドもまた、処理命令209と同様、上述のパイプラインを構成する各処理部に転送される。画素生成部203は、エッジ処理部202から受信したスパン情報コマンドを基に、画素情報の参照先である、中間データ208の画素データテーブル211を参照して、スパンの画素情報(オブジェクトの画素情報ともいう)を生成する。スパンの画素情報とは、画素合成部205で画素値を生成すために必要な画素情報であって、例えば、RGB値を示す画素情報や、ブレンド値を示す画素情報などが挙げられる。画素生成部203が生成したスパンの画素情報は、画素情報用バッファ204に格納される。画素合成部205は、画素情報用バッファ204からスパンの画素情報を受信し、受信したスパンの画素情報を基に最終画素データを導出し、スパンの出力画素値を決定する。画素合成部205は、スパンの出力画素値を決定する際、複数のオブジェクトの重なりを合成する必要があるときには、途中までの画素合成の中間結果を画素合成スタック206に保持させる。画素出力部207は、画素合成部205で導出された最終画素データを、レンダリング結果として出力バッファ(RAM103)に出力する。
次に、同一スパンに複数のオブジェクトが重なっているときの処理について説明する。図3は、画像オブジェクト301と、単色塗りつぶしオブジェクト302、303との合計3つのオブジェクトが重なっているページの印刷データ例を示す図である。図3において、X軸方向はスキャン処理が実行される主走査方向に沿う方向を示し、Y軸方向は主走査方向に直交する副走査方向に沿う方向を示している。画像オブジェクト301は、最背面のレイヤ1に描画されており、背面の見えない不透明なオブジェクトである。すなわち、画像オブジェクト301は、レイヤ1に属する。単色塗りつぶしオブジェクト302、303はそれぞれレイヤ2、レイヤ3に描画されており、画像オブジェクト301の前面に重なっている。すなわち、単色塗りつぶしオブジェクト302は、レイヤ2に属する。単色塗りつぶしオブジェクト303は、レイヤ3に属する。レイヤ1、レイヤ2、レイヤ3の順に背面から前面に重なっているとする。また、単色塗りつぶしオブジェクト302、303は、透過して背面が見える透過オブジェクトである。したがって、画像オブジェクト301、単色塗りつぶしオブジェクト302、303が重なっている領域については、最終出力画素値を得るためには、それぞれのオブジェクト301、302、303の画素値を合成する必要がある。レイヤとは、ページ内に描画するオブジェクト同士の上下関係を示すものであり、必ずオブジェクト毎にレイヤ番号が割り振られている。
上述のような3つのオブジェクト301、302、303が重なっている位置を横切るスキャンライン304のスパンの生成とスパンのレンダリングについて説明する。なお、スキャンラインとは、それに沿ってスキャン処理が実行される主走査方向の画素(ピクセル)の並びであり、スキャンラインの高さは1ピクセルとなっている。スキャンライン304は、描画対象の各オブジェクト301、302、303のアウトラインとの交点によって、複数のスパンに分けられて処理される。スキャンライン304上には3つのオブジェクト301、302、303が描画されており、図3に示すように、スキャンライン304は、スパン1からスパン7の7つのスパンに分けられる。各スパンの開始位置およびその終了位置は、PDL処理部105によって予め導出されており、中間データ208のエッジ情報210として符号化されてRAM103に記憶される。符号化されてRAM103に記憶されたエッジ情報210をレンダリング処理部106のエッジ処理部202が復号処理することによって、各スパンの開始位置およびその終了位置が導出される。また、エッジ情報210には各スパンに描画される画素情報の参照先が登録されている。同一スパンに複数のオブジェクトが重なって描画される場合、エッジ情報210には、最背面のレイヤから順に複数の参照先が登録されている。スパン4では、3つのオブジェクトが重なっているので、エッジ情報210には、最背面から順に画像オブジェクト301と単色塗りつぶしオブジェクト302、303の画素情報の参照先が登録されている。レンダリング処理部106のパイプライン処理において、各オブジェクトの画素情報の参照先に関する情報はスパン4の位置情報を含んだスパン情報コマンドとして、エッジ処理部202から画素生成部203に対して送信される。
このようにスパン情報コマンドは、各オブジェクトの画素情報の参照先に関する情報を有するため、レイヤ毎に1つ生成される。すなわち、オブジェクトが重なったスパンにおいては、複数のスパン情報コマンドが生成される。また、スパン情報コマンドは、属するレイヤが最上位のレイヤであるかどうかを示すフラグを有する。例えば、スパン4において、レイヤ1、2のそれぞれに対応して生成したスパン情報コマンドが最上位レイヤでないことを示すフラグを有する一方、レイヤ3に対応して生成したスパン情報コマンドが最上位レイヤであることを示すフラグを有する。また、スパン2においては、レイヤ1およびレイヤ2が重ならず、レイヤ3のみであることから、レイヤ3に対応して生成したスパン情報コマンドが最上位レイヤであることを示すフラグを有する。画素生成部203は、受信したスパンの位置情報と画素情報の参照先の情報を基に、中間データ208の画素データテーブル211を参照して画素データを生成し、生成した画素データを画素情報コマンドとして画素情報用バッファ204に送信する。このとき、画素生成部203は、同一の画素値が連続する複数画素については、1つの画素情報コマンドとして画素情報用バッファ204に送信する。画素情報コマンドは、生成された画素値と、その画素値が連続する複数画素における開始位置を示す開始画素位置およびその終了位置を示す終了画素位置の情報を含む。
次に、画素情報コマンド例、画素情報コマンドに基づく画素情報の生成順序について説明する。図4は、図3に示すスパン4の画素情報として画素情報用バッファに送られる画素情報コマンド例を示す図である。図4は、画素情報コマンドに基づき画素情報を生成する順番についても示している。画素生成部203は、同一の画素値の連続を1メッセージとして送るので、図3のスパン4の例では、図4に示すように、レイヤ1が4つの画素情報411、412、413、414で構成される。レイヤ2が1つの画素情報421で構成され、レイヤ3が1つの画素情報431で構成される。すなわち、レイヤ1に属する画像オブジェクト301が複数(4つ)の画素情報で構成され、レイヤ2に属するオブジェクト302とレイヤ3に属するオブジェクト303が、それぞれ同一の画素情報(1つの画素情報)で構成される。画素生成部203は、中間データ208の画素データテーブル211を参照して、重なり順に、指定されたオブジェクトのスパンの開始位置から終了位置までの画素情報を生成する。すなわち、レイヤ1の1から4までの数字が示す画素情報の生成が終了すると、レイヤ1の上のレイヤであるレイヤ2にて数字の5が示す画素情報の生成が開始される。そして、レイヤ2にて数字の5が示す画素情報の生成が終了すると、レイヤ2の上のレイヤであるレイヤ3にて数字の6が示す画素情報の生成を開始する。したがって、図4において、1から6までの数字が示す生成順序のように、下のレイヤであるレイヤ1の全ての画素情報が生成されるまで、レイヤ1の上のレイヤであるレイヤ2、3の画素情報は生成されない。同様に、下のレイヤであるレイヤ2の全ての画素情報が生成されるまで、レイヤ2の上のレイヤであるレイヤ3の画素情報は生成されない。
画素合成部205は、画素情報用バッファ204に格納された画素情報コマンドを受信し、受信した画素情報コマンドを基に複数のレイヤの重なりを適切に合成する。
次に、従来例である画素情報用バッファ204について説明する。画素情報用バッファ204では、画素合成部205が効率よく合成できるよう、画素生成部203が生成する画素情報をレイヤごとにバッファリングし、後述の処理フローで画素情報を再生成する。
以下、画素情報用バッファ204の構成例、およびその動作について説明する。図5は、図2における画素情報用バッファ204の構成例を示す図である。画素情報用バッファ204は、入力制御部501と、1レイヤ目用バッファ502と、2レイヤ目用バッファ503と、3レイヤ目用バッファ504と、出力制御部505とを有する。1−3レイヤ目用バッファ502−504(以下、単にレイヤバッファ502−504ともいう)はそれぞれ、スキャン方向上流側から下流側に向かう順番であるスキャン方向順にレイヤごとに画素情報をバッファリングする。画素情報用バッファ204は、1−3レイヤ目用バッファ502−504を有することから、1つのスパンにて3つのオブジェクトの重なりまで対応できる。各レイヤバッファ502、503、504の容量は、画素生成部203が一度に生成する画素情報の数に基づいて設定される。
次に、画素情報用バッファ204の動作について説明する。入力制御部501は、画素生成部203からスパン情報コマンドを受信すると、スパン情報コマンドに含まれるスパンの開始画素位置STARTXとその終了画素位置ENDXを取得する。また、入力制御部501は、対応するレイヤが最上位のレイヤであることを示すフラグを有するスパン情報コマンドを受信するまで、受信したスパン情報コマンドの数をカウントすることでレイヤ総数N(本構成例では、Nは1−3)を取得する。また、入力制御部501は、受信したスパン情報コマンドを出力制御部505に転送する。入力制御部501は、スパン情報コマンドに続いて、画素生成部203からスパンの画素情報コマンドを受信すると、最初に送られてくるレイヤの画素情報を1レイヤ目用バッファ502に格納する。入力制御部501は、1レイヤ目のすべての画素情報を1レイヤ目用バッファ502に格納すると、すでに格納したレイヤ数とレイヤ総数Nを比較し、まだ格納していないレイヤの画素情報があるかどうかを判定する。入力制御部501は、まだ格納していないレイヤの画素情報があるとの判定結果を得た場合、続いて送られてくる画素情報を、2レイヤ目用以降のバッファに格納する。入力制御部501は、このような判定処理および格納処理を、Nレイヤ分の画素情報を格納し終わるまで繰り返し実行する。入力制御部501は、すべてのレイヤの画素情報を格納し、詳細につき後述する、出力制御部505による出力処理が終わると、処理対象であったスパン情報コマンドに続く、次のスパン情報コマンドを受信して同様の処理を実行する。入力制御部501は、スパン情報コマンドを受信し終わるまで、このような処理を繰り返し実行する。
出力制御部505は、図6の処理フローに従い、各レイヤバッファ502、503、504から画素情報を取り出して、画素合成部205が効率よく合成することができるように画素情報を再生成する。出力制御部505は、再生成した画素情報を画素合成部205に出力する。以下、図6を用いて、出力制御部505の動作を説明する。図6は、図5に示す出力制御部505による画素情報の出力処理の手順例を示すフローチャートである。なお、各処理の説明における符号「S」は、当該フローチャートにおけるステップであることを意味する。この点、以下のフローチャートの説明においても同様とする。
S601において、出力制御部505は、入力制御部501から、処理対象のスパンに関し、レイヤ総数Nである各レイヤのスパン情報コマンドを受信する。出力制御部505は、受信した各レイヤのスパン情報コマンドからスパンの開始画素位置STARTXとその終了画素位置ENDXを取得する。スパンの開始画素位置STARTXとその終了画素位置ENDXの差分がスパンサイズとなる。また、出力制御部505は、入力制御部501と同様、対応するレイヤが最上位であることを示すフラグを有するスパン情報コマンドを受信するまで、受信したスパン情報コマンドの数をカウントすることでレイヤ総数Nを取得する。なお、出力制御部505は、スパンの開始画素位置STARTXをNEXTSTARTとする。
S602において、出力制御部505は、N個のレイヤバッファから先頭の画素情報を1つずつ合計N個の画素情報を取り出し、レイヤバッファから共通して取り出せる画素区間を導出して特定する。共通して取り出せる画素区間は、画素合成部205が共通して処理可能な領域ともいえる。出力制御部505は、最初に取り出す画素区間の開始画素位置を常にSTARTXとし、同一の画素値がN個連続する画素区間から最小の終了画素位置NEXTENDを調べることで、画素区間の終了画素位置NEXTXを取得する。なお、N個は、1以上の整数である。出力制御部505は、2区間目以降の開始画素位置に関し、1区間前の終了画素位置NEXTENDに1画素位置を加算することにより取得する。すなわち、出力制御部505は、1区間前の終了画素位置NEXTENDと1画素位置の和(NEXTEND+1)を2区間目以降の開始画素位置として取得する。出力制御部505は、S602にてNEXTENDを調べて決定すると、処理をS603へ移行する。
S603において、出力制御部505は、S601で取り出したN個の画素情報を基に、1からNレイヤ目の順に、開始画素位置STARTXからS602で取得した終了画素位置NEXTXまでの部分的な画素情報を生成して画素合成部205に出力する。
S604において、出力制御部505は、画素合成部205に既に出力した部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達していないかどうかを判定する。出力制御部505は、画素合成部205に既に出力した部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達している(NEXTX==ENDX)との判定結果を得た場合(S604のNO)、次の処理を実行する。すなわち、出力制御部505は、現在の処理対象であるスパンに対する出力処理を終了し、次の処理対象であるスパンのスパン情報コマンドを入力制御部501から受信して同様の処理を繰り返し実行する。出力制御部505は、画素合成部205に既に出力した部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達していない(NEXTX<ENDX)との判定結果を得た場合(S604のYES)、処理をS605に移行する。
S605において、出力制御部505は、N個のレイヤの画素情報からS603にて画素合成部205に既に出力した部分的な画素情報が示す画素範囲(出力済みの画素範囲)を削除する。
S606において、出力制御部505は、S605にて出力済みの画素範囲を削除した結果、出力制御部505にて全ての画素情報が無くなったレイヤに関し、当該レイヤに対応するレイヤバッファから新たに画素情報を取得する。そして、出力制御部505は、このような更新処理を実行した後、処理をS602に移行する。出力制御部505は、処理対象のスパンの終了画素位置に達するまで、S602〜S606の処理を繰り返し実行する。
ここで、上述のS601−S606に関し、図4に示す各レイヤの画素情報コマンド例がレイヤに対応する、図5に示すレイヤバッファに格納された状態を例に説明する。
S601では、出力制御部505は、各レイヤの画素情報コマンドにて、X座標で左端となるスパンの開始画素位置STARTXと、X座標で右端となるスパンの終了画素位置ENDXを取得する。また、出力制御部505は、対応するレイヤが最上位であることを示すフラグを有するレイヤ3のスパン情報コマンドを受信するまで、受信したスパン情報コマンドの数をカウントすることで、レイヤ総数Nとして3を取得する。
S602では、出力制御部505は、1レイヤ目用バッファ502から1つ目の画素情報411を取り出し、2レイヤ目用バッファ503から1つ目の画素情報421を取り出し、3レイヤ目用バッファ504から画素情報431を取り出す。そして、出力制御部505は、レイヤバッファから取り出した画素情報411、421、413に基づき、同一の画素値の画素で構成される画素区間にて、最小の終了画素位置NEXTXを調べる。出力制御部505は、画素情報411が他の画素情報421、431と比べて、X軸方向で最も短いことから、最小の終了画素位置NEXTXとして画素情報411の終了画素位置を調べる。
S603では、出力制御部505は、S601で取り出した3つの画素情報411、421、431を基に、1−3レイヤ目の順に、開始画素位置STARTXからS602で導出した画素情報411の終了画素位置までの部分的な画素情報を生成する。出力制御部505は、1−3レイヤ目の順に、画素情報411、画素情報421、431において、画素情報411に対応する画素領域となる部分的な画素情報を生成して画素合成部205に出力する。
S604では、出力制御部505がS603で画素情報411と画素情報421、431の部分的な画素情報とを画素合成部205に出力した場合、部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達しないことになる。そのため、この場合、出力制御部505は処理をS605に移行することになる。
S605では、出力制御部505がS603で画素情報411と画素情報421、431の部分的な画素情報とを画素合成部205に出力した場合、出力済みの画素情報411に対応する画素範囲を削除する。これにより、出力制御部505では、レイヤ1に関し全ての画素情報が無くなった状態となる。
S606では、出力制御部505がS604で出力済みの画素情報411に対応する画素範囲を削除した結果、出力制御部505では、レイヤ1に関し全ての画素情報が無くなった状態となる。レイヤ1に関し、当該レイヤ1に対応する1レイヤ目用バッファ502から新たに2つ目の画素情報412を取得する。そして、出力制御部505は、このような更新処理を実行した後、処理をS602に移行する。
上述のS601−S606の処理によって、画素情報411に対応する部分的な画素情報の画素合成部への出力に引き続き、出力制御部505は、画素情報412の取り出し、画素情報412に対応する部分的な画素情報の画素合成部への出力を実行する。そして、出力制御部505は、画素情報413の取り出し、画素情報413に対応する部分的な画素情報の画素合成部への出力を行なった後、画素情報414の取り出し、画素情報414に対応する部分的な画素情報の画素合成部への出力を実行する。画素情報411−414が他のレイヤの画素情報421、431より短いことから、出力制御部505は、画素情報411、412、413、414の順で、これら画素情報それぞれに対応する部分的な画素情報を出力制御部から画素合成部へ出力することになる。
以上説明したように、画素生成部203によって生成された複数レイヤにわたって重なった画素情報をバッファリングして、複数レイヤ間で同一の画素値が連続している領域を揃えながら画素情報を並び替えて再生成する。これによって、画素合成部205は、複数のレイヤにわたって複数の画素の合成結果が同一になる画素範囲はレイヤ1からレイヤNまでの1組の合成処理で完了できる。すなわち、画素合成部205は、複数のレイヤにわたって複数の画素の合成結果が同一になる画素範囲はレイヤ1からレイヤNまでをまとめた1つの合成処理で完了できる。その結果、画素合成部205は、効率的に画素合成処理を行うことができる。上記では、3レイヤ分のバッファを持ったときの構成を示しているが、レイヤバッファの個数を変更することで容易に4以上の任意のNレイヤにも対応可能である。
しかしながら、図5に示すレイヤバッファ502〜504を有する画素情報用バッファ204では、設けられたレイヤバッファの個数以上にレイヤ数の重なりがあるスパンを効率よく処理することができない。
図7は、レイヤ総数4の画素情報コマンド例に基づく画素生成部203による処理例を示す図である。図7は、画素情報コマンドに基づき画素情報を生成する順番についても示している。図7において、X軸方向はスキャン処理が実行される主走査方向に沿う方向を示している。画素情報用バッファ204に設けられたレイヤバッファの個数以上にレイヤ数の重なりがあるスパンを処理する場合、画素生成部203は、次の処理を実行する。すなわち、画素生成部203は、図7に示すように、予め1画素単位にスパンを分割して画素合成の順序に併せて16個の画素情報701−716を生成する。このように、1画素単位に分割して画素合成の順序に合わせて画素情報を生成すれば、画素合成のためにスパンの全画素をバッファリングする必要がなくなる。しかし、画素合成部205による合成処理の回数が多くなるため、処理性能が低下する。画素情報用バッファ204がより多くレイヤバッファを有することで、処理性能の低下を防ぐことができるが、必要なリソースが大きい。CAD画像印刷に通常使われるデータ形式であるHP−GL/2フォーマットでは、レイヤ数が多いことが知られており、これらのデータを扱う場合、処理性能が問題となる。
また、前述した通り画素情報用バッファ204内の各レイヤバッファ502、503、504のバッファリング可能な画素数(以降、バッファサイズともいう)は、画素生成部203が一度に生成する画素情報の数に基づいて容量が設定される。一度に生成する画素情報の数とスパンサイズに差異がある場合、各レイヤバッファ502、503、504に未使用領域が発生し、バッファに空き領域が存在しても、画素情報を格納できないケースが発生する。図8は、各レイヤバッファ502、503、504がバッファリング可能な画素情報の数を8とした場合の、図4に示す画素情報コマンドの格納例を示す図である。1レイヤ目用バッファ502において、データが格納される領域801は、4つの画素情報411、412、413、414が格納された領域と、4つの空き領域とが存在する。2レイヤ目用バッファ503において、データが格納される領域802は、1つの画素情報421が格納された領域と、7つの空き領域とが存在する。3レイヤ目用バッファ504において、データが格納される領域803は、1つの画素情報431が格納された領域と、7つの空きの領域とが存在する。画素情報用バッファ204全体では、6個の画素情報411〜414、421、431を格納した領域と、18個の空き領域が存在する。図8の例では、画素情報用バッファ204の構成に起因する制約上4レイヤ以上の画素情報を格納できない。画素情報用バッファ204の各レイヤバッファ502、503、504に空き領域が存在しても、4レイヤ目の画素情報が存在する場合、1画素単位にスパンを分割するため、3レイヤ以下の画素情報を処理する場合と比べて処理性能が低下する。
以下、本実施形態の画素情報用バッファ900について説明する。上述した従来例の画素情報用バッファ204では、図5に示すブロック図および図6に示すフローチャートを用いて説明したように、重なったオブジェクトの画素情報をレイヤ毎にレイヤバッファに格納する。しかしながら、上述の画素情報用バッファ204では、レイヤバッファの個数より多いレイヤ数の重なりがあるスパンについて、空き領域があっても、レイヤバッファの個数と同じレイヤ数の重なりがあるスパンの場合と同様な処理を行うことができない。このようなスパンについては、画素生成部203が、図7に示すように1画素単位にスパンを分割するため、画素値を合成する処理回数が増加し、処理性能が問題になる。また、レイヤ数の多い印刷データの性能向上のためにより多くのレイヤバッファを設けることは、必要なリソースが大きくなり過ぎる。
そこで、本実施形態では、図9に示すように、画素情報用バッファ900の構成を変えることで、次の効果を得ることができるようにした。すなわち、本実施形態では、図5に示した従来例の画素情報用バッファ204と同等のリソースで、より多くのレイヤ数の画素情報を効率よくバッファリングし、画素値を合成する処理回数を低減する効果を得ることができるようにした。
図9に示す画素情報用バッファ900は、図5に示す従来例の画素情報用バッファ204にバッファ領域分割部902を追加し、従来例ではレイヤごとに分かれていたバッファ502、503、504を1つで担うバッファ903に変えた構成となっている。バッファ903は、全レイヤで共通に使用される。バッファ903は、バッファ領域分割部902によってレイヤ数分の領域に分割されており、分割された領域それぞれに各レイヤが割り当てられて使用される。複数のレイヤバッファを1つのバッファに変更したことに伴い、画素情報用バッファ900では、入力制御部901および出力制御部904の処理も、画素情報用バッファ204の入力制御部501および出力制御部505の処理と異なる。図9に示す画素情報用バッファ900の各部の一部もしくは全部は、専用のハードウェアによって実現することができる。あるいは、各部の一部もしくは全部は、ROM102に記憶されたプログラムをCPU101がRAM103に展開し、実行することで実現することができる。
次に、図9に示す画素情報用バッファ900が有する入力制御部901の動作について説明する。入力制御部901は、画素生成部203からスパン情報コマンドを受信すると、スパン開始画素位置STARTXと終了画素位置ENDXとレイヤ数Nを取得し、出力制御部904に転送する。入力制御部901は、取得したスパン開始画素位置STARTXと終了画素位置ENDXからスパンサイズを導出し、導出したスパンサイズをバッファ領域分割部902に転送する。その後、入力制御部901は、バッファ領域分割部902から各レイヤのバッファ領域の開始アドレスを取得する。入力制御部901は、スパン情報コマンドに続いて、画素生成部203からスパンの画素情報を受信すると、各レイヤのバッファ領域の開始アドレスを基にバッファ903に画素情報を格納する。
バッファ領域分割部902は、バッファ903の格納領域を、入力制御部901から転送されたスパンサイズで除算して分割数を取得する。そして、バッファ領域分割部902は、取得した分割数でバッファ903の格納領域を分割して分割数分の分割領域を生成する。生成した分割数分の分割領域は、描画対象のオブジェクトが属するレイヤに対応付けられる。スパンサイズは、各レイヤのバッファサイズとして割り当てる。すなわち、スパンサイズは、各分割領域のサイズとして割り当てる。分割数は、レイヤ総数として割り当てられる。バッファ領域分割部902は、前記除算によって整数で割り切れない場合、小数点以下を切り捨てた値は、上述のレイヤ総数として割り当てられる。バッファ領域分割部902は、割り当てられた各レイヤのバッファ領域の開始アドレスを入力制御部901および出力制御部904のそれぞれに転送する。
出力制御部904は、各レイヤのバッファ領域から画素情報を取り出して、画素合成部205が画素を効率よく合成することができるように画素情報を再生成する。すなわち、従来例の出力制御部505では各レイヤバッファから画素情報を取り出す処理を実行した。これに対し、本実施形態の出力制御部904は、バッファ領域分割部902から転送された各レイヤのバッファ領域の開始アドレスを基にバッファ903から画素情報を取り出し画素合成部205に出力する処理を実行する。
バッファ領域分割部902によって、バッファ903をスパンサイズで分割する処理を実行するが、分割した領域の数がレイヤ数よりも少ない場合、バッファ903は、画素情報を格納できない。このような場合、従来例の出力制御部505と同様、画素生成部203によって1画素単位にスパンが分割され、1画素単位で画素値の合成処理が実行される。
出力制御部904は、図10の処理フローに従い、バッファ903から画素情報を取り出して、画素合成部205が効率よく画素値を合成することができるように画素情報を再生成する。出力制御部904は、再生成した画素情報を画素合成部205に出力する。以下、図10を用いて、出力制御部904の動作を説明する。図10は、図9に示す出力制御部904による画素情報の出力処理の手順例を示すフローチャートである。
S1001において、出力制御部904は、入力制御部901から、処理対象のスパンに関し、レイヤ総数Nである各レイヤのスパン情報コマンドを受信する。出力制御部904は、受信した各レイヤのスパン情報コマンドからスパンの開始画素位置STARTXとその終了画素位置ENDXを取得する。スパンの開始画素位置STARTXとその終了画素位置ENDXの差分がスパンサイズとなる。また、出力制御部904は、入力制御部901と同様、対応するレイヤが最上位であることを示すフラグを有するスパン情報コマンドを受信するまで、受信したスパン情報コマンドの数をカウントすることでレイヤ総数Nを取得する。なお、出力制御部904は、スパンの開始画素位置STARTXをNEXTSTARTとする。
S1002において、出力制御部904は、バッファ領域分割部902から転送された各レイヤのバッファ領域の開始アドレスを基に、バッファから各レイヤの先頭の画素情報を1つずつ合計N個の画素情報を取り出す。そして、出力制御部904は、バッファから取り出した合計N個の画素情報に関し、バッファから共通して取り出せる画素区間を導出して特定する。共通して取り出せる画素区間は、画素合成部205が共通して処理可能な領域ともいえる。出力制御部904は、最初に取り出す画素区間の開始画素位置を常にSTARTXとし、同一の画素値がN個連続する画素区間から最小の終了画素位置NEXTENDを調べることで、画素区間の終了画素位置NEXTXを取得する。なお、N個は、1以上の整数である。出力制御部904は、2区間目以降の開始画素位置に関し、1区間前の終了画素位置NEXTENDに1画素位置を加算することにより取得する。すなわち、出力制御部904は、1区間前の終了画素位置NEXTENDと1画素位置の和(NEXTEND+1)を2区間目以降の開始画素位置として取得する。出力制御部904は、S1002にてNEXTENDを調べて決定すると、処理をS1003へ移行する。
S1003において、出力制御部904は、S1001で取り出したN個の画素情報を基に、1からNレイヤ目の順に開始画素位置STARTXからS1002で取得した終了画素位置NEXTXまでの部分的な画素情報を生成して画素合成部205に出力する。
S1004において、出力制御部904は、画素合成部205に既に出力した部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達していないかどうかを判定する。出力制御部904は、画素合成部205に既に出力した部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達している(NEXTX==ENDX)との判定結果を得た場合(S1004のNO)、次の処理を実行する。すなわち、出力制御部904は、現在の処理対象であるスパンに対する出力処理を終了し、次の処理対象であるスパンのスパン情報コマンドを入力制御部901から受信して同様の処理を繰り返し実行する。出力制御部904は、画素合成部205に既に出力した部分的な画素情報の終了画素位置NEXTXがスパンの終了画素位置ENDXに達していない(NEXTX<ENDX)との判定結果を得た場合(S1004のYES)、処理をS1005に移行する。
S1005において、出力制御部904は、N個のレイヤの画素情報からS1003にて画素合成部205に既に出力した部分的な画素情報が示す画素範囲(出力済みの画素範囲)を削除する。
S1006において、出力制御部904は、S1005にて出力済みの画素範囲を削除した結果、出力制御部904にて全ての画素情報が無くなったレイヤに関し、開始アドレスを更新し、当該レイヤに対応するバッファ領域から新たに画素情報を取得する。そして、出力制御部904は、このような更新処理を実行した後、処理をS1002に移行する。出力制御部904は、処理対象のスパンの終了画素位置に達するまで、S1002〜S1006の処理を繰り返し実行する。
以上、説明したように、バッファ領域分割部902によってバッファ903をスパンサイズに分割し、入力制御部901によってスパンサイズに分割したバッファ903への画素情報の格納を実行する。これにより、各レイヤの画素情報の格納に、スパンサイズに応じたバッファサイズを割り当てることができる。図5に示す従来例の画素情報用バッファ204と同じバッファサイズで、4レイヤ以上の画素情報のバッファ903への格納例について説明する。図5に示す画素情報用バッファ204のレイヤバッファ502、503、504はそれぞれ、画素情報を8個格納可能であることから、画素情報用バッファ204全体で24個の画素情報を格納可能である。図11は、スパンサイズ4、レイヤ総数5の画素情報コマンド例を示す図である。図11において、X軸方向はスキャン処理が実行される主走査方向に沿う方向を示している。図11に示す画素情報コマンド例では、レイヤ数が5であり4以上であるため、図8に示す従来例の画素情報用バッファ204では、全ての画素情報をレイヤバッファに格納することができない。図12は、バッファ903への図11に示す画素情報コマンドの格納例を示す図である。図12に示すバッファ903は、24個の画素情報を格納可能な構成となっており、図11に示すスパンサイズが4であるので、バッファ903をスパンサイズの4で分割し、6レイヤ分の画素情報を格納可能な構成となる。レイヤ1からレイヤ5用のバッファ領域1201、1202、1203、1204、1205には、図11に示すレイヤ1からレイヤ5の画素情報がレイヤに対応して格納される。すなわち、レイヤ1用バッファ領域1201には、レイヤ1の先頭の画素情報1111、画素情報1112、画素情報1113、画素情報1114が、下方から順に格納される。レイヤ2用バッファ領域1202における最下方には、レイヤ2の画素情報1121が格納される。レイヤ3用バッファ領域1203における最下方には、レイヤ3の画素情報1131が格納される。レイヤ4用バッファ領域1204には、レイヤ4の先頭の画素情報1141、画素情報1142が、下方から順に格納される。レイヤ5用バッファ領域1205における最下方には、レイヤ5の画素情報1151が格納される。よって、レイヤ6用バッファ領域1206に格納される画素情報がないことから、レイヤ6用バッファ領域1206は空領域となる。
以上、説明したように、本実施形態に係る画像処理装置によれば、次の効果を奏する。すなわち、画素生成部203で生成された複数レイヤにわたって重なった画素情報を、画素情報用バッファ900でバッファリングし、複数レイヤ間で同一の画素値が連続している領域を揃えながら画素情報を並び変えて再生成する。これによって、画素合成部205は、複数レイヤにわたって複数の画素の合成結果が同一になる画素範囲はレイヤ1からレイヤNまでの1組の合成処理で完了できる。すなわち、画素合成部205は、複数のレイヤにわたって複数の画素の合成結果が同一になる画素範囲はレイヤ1からレイヤNまでをまとめた1つの合成処理で完了できる。その結果、画素合成部205は、効率的に画素合成処理を行うことができる。また、バッファ領域分割部902により、バッファ903をスパンサイズで分割することで、バッファ903を効率的に使用し、少ないリソースでより多くのレイヤの重なりをバッファリングし、画素合成を効率よく行うことができる。すなわち、複数のオブジェクトが重なる領域における画素合成処理を効率よく行えるデータを出力することができる。
<実施形態2>
実施形態1では、バッファ領域分割部902によりバッファ903をスパンサイズに分割し、分割した領域を各レイヤの画素情報の格納領域に割り当てることでバッファ903を効率的に使用した。本実施形態では、スパン内の画素情報を画素情報用バッファに格納できない場合、画素生成部で、スパンサイズをバッファに格納可能なサイズに分割して処理する方法について説明する。
図13は、本実施形態のレンダリング処理部1300の構成例を示す図である。本実施形態のレンダリング処理部1300は、実施形態1にて説明したレンダリング処理部にスパン分割部1301を追加し、画素生成部203を画素生成部1302に変更した構成となっている。図13に示すレンダリング処理部1300の各部の一部もしくは全部は、専用のハードウェアによって実現することができる。あるいは、各部の一部もしくは全部は、ROM102に記憶されたプログラムをCPU101がRAM103に展開し、実行することで実現することができる。
スパン分割部1301は、処理対象のスパンに関し、詳細につき後述する画素生成部1302から送信された、レイヤ総数Nである各レイヤのスパン情報コマンドを受信する。そして、スパン分割部1301は、受信した各レイヤのスパン情報コマンドを基に、バッファ903が格納可能なスパンサイズを導出してその情報を得る。スパン分割部1301は、導出して得た、バッファ903が画素情報を格納可能なスパンサイズの情報を画素生成部1302に送信する。
スパン分割部1301の動作について説明する。図14は、スパン分割部1301によるスパン分割処理の手順例を示すフローチャートである。
S1401において、スパン分割部1301は、処理対象のスパンに関し、画素生成部1302から送信された、レイヤ総数Nである各レイヤのスパン情報コマンドを受信する。スパン分割部1301は、受信した各レイヤのスパン情報コマンドからスパンの開始画素位置STARTXとその終了画素位置ENDXを取得する。また、スパン分割部1301は、入力制御部501と同様、対応するレイヤが最上位であることを示すフラグを有するスパン情報コマンドを受信するまで、受信したスパン情報コマンドの数をカウントすることでレイヤ総数Nを取得する。
S1402において、スパン分割部1301は、S1401で取得したスパンの開始画素位置STARTXとその終了画素位置ENDXから、開始画素位置STARTXと終了画素位置ENDXの差分を演算することでスパンサイズを導出する。
S1403において、スパン分割部1301は、S1401で取得したレイヤ総数と、予め取得して既知である、バッファ903のバッファサイズを比較する。スパン分割部1301は、レイヤ総数がバッファサイズ以上であり、レイヤ総数がバッファサイズ未満ではないとの比較結果を得た場合(S1403のNO)、処理をS1404に移行する。スパン分割部1301は、レイヤ総数がバッファサイズよりも小さく、レイヤ総数がバッファサイズ未満であるとの比較結果を得た場合(S1403のYES)、処理をS1405に移行する。
S1404において、スパン分割部1301は、処理対象のスパンの画素情報をバッファ903に格納しきれないため、S1402で導出したスパンサイズを1に設定し、設定した1画素単位の分割処理を前記画素情報に対して実行する。スパン分割部1301は、分割処理を実行した後、本処理を終了する。
S1405において、スパン分割部1301は、S1401で取得したレイヤ総数とS1402で導出したスパンサイズの積(レイヤ総数×スパンサイズ)がバッファ903のバッファサイズ以下であるかどうかを判定する。スパン分割部1301は、レイヤ総数とスパンサイズの積がバッファサイズ以下であるとの判定結果を得た場合(S1405のYES)、処理対象のスパンの画素情報をバッファ903に格納できるため、本処理を終了する。スパン分割部1301は、レイヤ総数とスパンサイズの積がバッファ903のバッファサイズよりも大きく、バッファサイズ以下ではないとの判定結果を得た場合(S1405のNO)、処理をS1406に移行する。
S1406において、スパン分割部1301は、S1402で導出したスパンサイズを2で除算して現在の半分の値に更新する処理を実行する。スパン分割部1301は、更新処理を実行した後、処理をS1405へ移行する。すなわち、スパン分割部1301は、レイヤ総数とスパンサイズの積がバッファ903のバッファサイズ以下であるとの判定結果を得るまで、S1405およびS1406の処理を繰り返し実行する。このような処理がスパン分割部1301によって実行されることで、バッファ903に格納可能なスパンサイズが導出される。
画素生成部1302は、先ず、エッジ処理部202から送信された、レイヤ総数Nである各レイヤのスパン情報コマンドを受信し、受信したレイヤ総数Nである各レイヤのスパン情報コマンドをスパン分割部1301に送信する。画素生成部1302は、レイヤ総数Nである各レイヤのスパン情報コマンドを基に、画素情報の参照先である、中間データ208の画素データテーブル211を参照して、スパン内の画素情報を生成する。そして、画素生成部1302は、スパン分割部1301から送信されたバッファ903が画素情報を格納可能なスパンサイズの情報を基に、画素情報コマンドを更新する。画素生成部1302は、更新した画素情報コマンドを画素情報用バッファ900に送信する。すなわち、画素生成部1302は、スパン分割部1301によりスパンサイズが1に設定された場合、処理対象のスパンに関し、1画素単位で画素情報を画素情報用バッファ900に送信する。画素生成部1302は、スパン分割部1301によりS1406の処理が行われた場合、処理対象のスパンに関し、スパンサイズを2Mで除算して得たサイズの画素情報を画素情報用バッファ900に送信する。Mは、S1406の処理を行った回数である。なお、画素生成部1302が、画素データテーブル211とほぼ同じ大きさのデータを格納可能な領域を有しており、画素情報用バッファ900に送信する前の画素情報は、画素生成部1302に格納される。
図15は、スパンサイズ8、レイヤ総数5の画素情報に関し、スパン分割部1301によるスパンの分割処理を説明するための図である。図15において、X軸方向はスキャン処理が実行される主走査方向に沿う方向を示している。図15の上図では、スパン分割処理を行う前のレイヤ1−5の画素情報コマンド例を示している。図15の下図では、スパン分割処理を行った後のレイヤ1−5の画素情報コマンド例を示している。
図15の上図では、レイヤ1の画素情報コマンドは、8つの画素情報1511−1518を含んでいる。レイヤ2の画素情報コマンドは、1つの画素情報1521を含んでいる。レイヤ3の画素情報コマンドは、1つの画素情報1531を含んでいる。レイヤ4の画素情報コマンドは、4つの画素情報1541−1544を含んでいる。レイヤ5の画素情報コマンドは、1つの画素情報1551を含んでいる。
図15の下図において、開始画素位置0から終了画素位置3までの画素範囲に関し、レイヤ1の画素情報コマンドは、4つの画素情報1511−1514を含んでいる。レイヤ2の画素情報コマンドは、画素情報1521に関し、開始画素位置0から終了画素位置3までの画素情報1522を含んでいる。レイヤ3の画素情報コマンドは、画素情報1531に関し、開始画素位置0から終了画素位置3までの画素情報1532を含んでいる。レイヤ4の画素情報コマンドは、2つの画素情報1541−1542を含んでいる。レイヤ5の画素情報コマンドは、画素情報1551に関し、開始画素位置0から終了画素位置3までの画素情報1552を含んでいる。
図15の下図において、開始画素位置4から終了画素位置7までの画素範囲に関し、レイヤ1の画素情報コマンドは、4つの画素情報1515〜1518を含んでいる。レイヤ2の画素情報コマンドは、画素情報1521に関し、開始画素位置4から終了画素位置7までの画素情報1523を含んでいる。レイヤ3の画素情報コマンドは、画素情報1531に関し、開始画素位置4から終了画素位置7までの画素情報1533を含んでいる。レイヤ4の画素情報コマンドは、2つの画素情報1543〜1544を含んでいる。レイヤ5の画素情報コマンドは、画素情報1551に関し、開始画素位置4から終了画素位置7までの画素情報1553を含んでいる。
スパン分割部1301は、画素生成部1302から各レイヤのスパン情報コマンドを受信すると、受信した各レイヤのスパン情報コマンドから開始画素位置0、終了画素位置7、レイヤ総数5を取得する(S1401)。スパン分割部1301は、取得した開始画素位置0および終了画素位置7からスパンサイズ8を導出する(S1402)。バッファサイズ(バッファ総数)を24とした場合、レイヤ総数が5であるで、スパン分割部1301は、バッファサイズがレイヤ総数よりも大きいとの判定結果を取得し、取得した判定結果(S1403のYES)に基づき、処理をS1405に移行する。
S1405において、スパン分割部1301は、レイヤ総数5およびスパンサイズ8からレイヤ総数とスパンサイズの積である40を導出する。そして、スパン分割部1301は、レイヤ総数とスパンサイズの積がバッファ総数24よりも大きくバッファサイズ以下ではないとの判定結果を取得し、取得した判定結果(S1405のNO)に基づき、処理をS1406に移行する。
S1406において、スパン分割部1301は、画素情報をバッファに格納するために、スパンサイズを半分に分割しスパンサイズを4に更新する。スパン分割部1301は、スパンサイズを更新した後、処理をS1405へ移行し、S1405にて、レイヤ総数と更新したスパンサイズの積がバッファサイズ以下であるかどうかを判定する。スパン分割部1301は、スパンサイズを4に更新したことで、レイヤ総数とスパンサイズの積は20となり、画素情報の最大値はバッファ総数24よりも小さくバッファサイズ以下である。これにより、画素情報をバッファ903に格納することができるようになることから、スパン分割部1301は、本処理を終了する。
画素生成部1302は、バッファ903に格納可能なスパンサイズに分割され、若番の開始画素位置を含む画素情報を基に生成した画素データを画素情報用バッファ900に送信する。なお、画素生成部1302は、画素情報用バッファ900に先に送信した画素データに続く開始画素位置を含む画素情報に基づき生成した画素データを画素情報用バッファ900に送信するまで一時的に保持する。
次に、画素情報用バッファ900から画素合成部205に全ての画素データが出力されると、画素生成部1302は、先に送信したデータに続く開始画素位置を含む画素情報を基に生成した画素データを画素情報用バッファ900に送信する。
このように、画素生成部1302では、所定のサイズの画素データを出力する一方、出力前の画素データを一時的に保持する処理は、スパンの終了画素位置ENDXを含む画素データの出力が終わるまで継続される。
以上、説明したように、実施形態1では、バッファ903に画素情報を格納できない場合、1画素単位でスパンを分割し、画素合成処理を実行するため、バッファ903に画素情報を格納できる場合と比べて処理性能が低下した。実施形態2では、バッファ903に画素情報が格納できない場合、スパンサイズを分割してバッファ903に格納可能なスパンサイズに更新するため、実施形態1の場合と比べて、処理性能の低下を抑制できる。
[その他の実施形態]
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
900 画素情報用バッファ
901 入力制御部
902 バッファ領域分割部
903 バッファ
904 出力制御部

Claims (10)

  1. スキャンライン上の各スパンを構成する連続する画素における描画対象のオブジェクトの画素情報を格納するバッファと、
    同一のスパンにおける、前記連続する画素の数と、前記オブジェクトが重なる数とに基づき、前記バッファの格納領域を分割する第一の分割手段と、
    前記同一のスパンに存在する複数の前記オブジェクトの画素情報を、各オブジェクトが属するレイヤごとに、かつ、当該同一のスパンにおいて重なる順に、前記第一の分割手段により分割された前記バッファの格納領域に入力する入力手段と、
    前記入力手段により前記バッファの格納領域に入力された前記複数のオブジェクトの画素情報に基づき、前記同一のスパンにおいて共通して処理可能な部分を特定し、当該特定した部分におけるレイヤの前記画素情報を前記バッファの格納領域から出力する出力手段と、
    を有することを特徴とする画像処理装置。
  2. 前記第一の分割手段は、前記バッファの格納領域を前記連続する画素の数で除算して分割数を取得し、取得した前記分割数で前記バッファの格納領域を分割して分割領域を生成し、
    前記入力手段は、前記同一のスパンに存在する前記複数のオブジェクトの前記画素情報を、前記各オブジェクトが属する前記レイヤに応じて、前記第一の分割手段で生成した前記分割領域に入力する
    ことを特徴とする請求項1に記載の画像処理装置。
  3. 前記第一の分割手段は、前記除算によって整数で割り切れない場合、小数点以下を切り捨てた値で前記バッファの格納領域を分割して前記分割領域を生成する
    ことを特徴とする請求項2に記載の画像処理装置。
  4. 前記同一のスパンにおける、前記連続する画素の数と、前記オブジェクトが重なる数との積が、前記バッファの格納領域のサイズを超える場合、前記同一のスパンを分割する第二の分割手段を有する
    ことを特徴とする請求項1から3の何れか一項に記載の画像処理装置。
  5. 前記第二の分割手段は、前記同一のスパンにおける、前記連続する画素の数と、前記オブジェクトが重なる数との積が、前記バッファの格納領域のサイズを超える場合、前記同一のスパンを半分にすることを特徴とする請求項4に記載の画像処理装置。
  6. 前記同一のスパンにおける、前記連続する画素の数と、前記オブジェクトが重なる数との積が、前記バッファの格納領域のサイズ以下となるまで、前記第二の分割手段による前記同一のスパンの分割を繰り返し実行することを特徴とする請求項4または5に記載の画像処理装置。
  7. 前記出力手段により出力された前記画素情報を用いて、画素値を生成する合成手段を有することを特徴とする請求項1から6の何れか一項に記載の画像処理装置。
  8. 前記連続する画素の位置情報を取得する取得手段をさらに有し、
    前記連続する画素の数は、前記取得手段で取得した前記画素の位置情報に基づき導出されることを特徴とする請求項1から7の何れか一項に記載の画像処理装置。
  9. スキャンライン上の各スパンを構成する連続する画素における描画対象のオブジェクトの画素情報をバッファに格納する格納ステップと、
    同一のスパンにおける、前記連続する画素の数と、前記オブジェクトが重なる数とに基づき、前記バッファの格納領域を分割する第一の分割ステップと、
    前記同一のスパンに存在する複数の前記オブジェクトの画素情報を、各オブジェクトが属するレイヤごとに、かつ、当該同一のスパンにおいて重なる順に、前記第一の分割ステップにて分割された前記バッファの格納領域に入力する入力ステップと、
    前記入力ステップにて前記バッファの格納領域に入力された前記複数のオブジェクトの画素情報に基づき、前記同一のスパンにおいて共通して処理可能な部分を特定し、特定した部分におけるレイヤの前記画素情報を前記バッファの格納領域から出力する出力ステップと、
    を有することを特徴とする画像処理方法。
  10. コンピュータを、請求項1から8の何れか一項に記載の画像処理装置の各手段として機能させるためのプログラム。
JP2019136590A 2019-07-25 2019-07-25 画像処理装置、画像処理方法およびプログラム Pending JP2021022024A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019136590A JP2021022024A (ja) 2019-07-25 2019-07-25 画像処理装置、画像処理方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019136590A JP2021022024A (ja) 2019-07-25 2019-07-25 画像処理装置、画像処理方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2021022024A true JP2021022024A (ja) 2021-02-18

Family

ID=74573876

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019136590A Pending JP2021022024A (ja) 2019-07-25 2019-07-25 画像処理装置、画像処理方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2021022024A (ja)

Similar Documents

Publication Publication Date Title
JP6729766B2 (ja) 印刷データ処理装置及びプログラム
JP2910649B2 (ja) 画像形成装置および画像形成方法
JP2014000753A (ja) 画像処理装置、画像処理方法、プログラム
US10762401B2 (en) Image processing apparatus controlling the order of storing decompressed data, and method thereof
JP2012200934A (ja) 画像データ処理システム
US9600747B2 (en) Image forming apparatus and control method that execute a plurality of rendering processing units in parallel
JP5675445B2 (ja) 情報処理装置、情報処理装置の制御方法、及びコンピュータプログラム
JP5397678B2 (ja) 画像処理装置、画像形成装置、画像処理方法およびプログラム
JP2011198287A (ja) 画像処理装置及び画像処理プログラム
JP6544905B2 (ja) 画像処理装置、画像処理方法、プログラム
JP2021022024A (ja) 画像処理装置、画像処理方法およびプログラム
JP6904717B2 (ja) 画像処理装置、その制御方法、およびプログラム
JPH01277055A (ja) 多値描画のためのラスターデータ生成方法
CN107203354B (zh) 图像处理设备及其控制方法
US20100296118A1 (en) Image data processor and image data processing program storage medium
JP6590606B2 (ja) 画像処理装置、画像処理方法、プログラム
US10579316B2 (en) Image processing apparatus that performs rendering processing, method of rendering processing, and storage medium
JP6323209B2 (ja) 画像処理装置及びプログラム
JP2016206934A (ja) 画像処理装置、画像処理方法及びプログラム
JP6614941B2 (ja) 画像処理装置および画像処理方法
JP2014194635A (ja) 画像形成装置及び画像形成方法ならびにプログラム
JP2017087514A (ja) 画像処理装置、画像処理方法、およびプログラム
JP7073192B2 (ja) 画像処理装置、画像処理装置の制御方法、およびプログラム
JPH10151815A (ja) 印刷処理装置
JP4861084B2 (ja) 描画処理装置及びその制御方法