説明

画像処理装置及び画像処理方法

【課題】PDLに記述されたページ内の画像形成命令を並列解釈し、高速にラスタ画像データ生成を行う。
【解決手段】PDLインタプリタが、PDLのページ内の画像形成命令を分割して、解釈処理部に解釈処理を並列実行させる。解釈処理部は相対的な描画状態属性値を使い画像形成命令をオブジェクト描画命令に変換してレンダラに渡す。レンダラでは、複数の中間データ生成部により、中間データ生成を並列的に行ったのち、中間データの結合処理を行う。中間データの結合処理が終了した時点で、ラスタ画像生成処理を並列実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は画像処理装置及び画像処理方法に関し、特に、ページ記述言語で記述されたページ内の画像形成命令を並列に解釈し、画像データを生成する画像処理装置及び画像処理方法に関する。
【背景技術】
【0002】
ページ記述言語(PDL)で記述されたデータをネットワーク等の通信媒体を介して受信し、専用のインタプリタにより解釈しラスタ画像を形成するRIP処理を行い、電子写真及びインクジェット等のプリンタエンジンを用いて印字出力をするページプリンタが広く知られている。またプリンタドライバ等のホストアプリケーションは、PC内のメモリに実行可能なプログラムとして格納されて、PC内のPDLを解釈して、ラスタ画像を生成するRIP処理を行いプリンタに画像を送信する。
【0003】
PDLのRIP処理においては、PDLインタプリタでのソフトウェア処理により解析したデータを、ハードウェア処理もしくはソフトウェア処理によるレンダラに渡す。レンダラはPDLインタプリタから受けとった情報を元に中間データを作成し、複数スキャンライン毎もしくはページ全体のラスタ画像を生成する。上記プリンタ及びPCにおいては、マルチコア及びマルチCPU環境を持つものが多数となっており、RIP処理を並列化して高速に実行することが重要となっている。そこでマルチコア及びマルチCPUでの高速化の為に、RIPシステムでの様々な並列処理方法が考えられている。
【0004】
例えば特許文献1では、ページ単位でPDLインタプリタ及びレンダラに並列処理させる方法が提案されている。これは複数のページから構成されるPDLデータをページ毎に分割し、PDLの各ページをそれぞれの並列にPDLインタプリタの解釈処理及びレンダラのラスタ画像生成処理を実行することにより、RIPシステムの高速化を実現する。
【0005】
また特許文献2では、描画オブジェクト単位の並列処理が提案されている。Adobe社のPostScriptやPDF等の一般的なPDLにおいては、グラフィックス、イメージ、テキストと言った複数の描画オブジェクトが重なりといった位置依存性を持った上で定義されている。RIPシステムにおいて、PDLインタプリタがこれらの位置依存性を考慮し、位置依存性のない描画オブジェクト、つまり重なりのない描画オブジェクト毎にグループ化して、レンダリング処理部に描画オブジェクトを渡す。レンダリング処理部もしくは、レンダリング処理の制御部においてグループ化された単位で描画オブジェクト毎の並列レンダリング処理を実施することにより、処理の高速性を実現する提案である。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006-159738号公報
【特許文献2】特開平10-040360号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1の発明によるページ単位での並列処理では、単一ページのPDLデータに対しては、高速化を実現できない。また処理の重いページが存在すると、そのページを処理するPDLインタプリタ処理の負荷が相対的に高くクリチカルパスとなることから、全体のRIP処理としての高速化が果たせない。また特許文献2の発明は、PDLインタプリタによる解釈処理はシーケンシャルに処理され、位置依存性を前もってPDLインタプリタの解釈処理で解決する必要があり、この処理に負荷が掛かることが予想される。
【課題を解決するための手段】
【0008】
上記課題を解決するために、本発明は以下の構成を有する。すなわち、
ページ記述言語で記述された1ページ分のPDLデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する複数の解釈処理部を有する並列解釈手段と、
前記各分割部分について、前記オブジェクト描画命令から中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記各分割部分についての中間データを結合し、1ページ分の中間データを作成する中間データ結合手段と、
結合されたた前記中間データを分割し、前記分割部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段とを備える。
【0009】
あるいは他の観点によれば本発明は、ページ記述言語で記述された1ページ分のPDLデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈して、当該命令に対応するオペランドとともにオブジェクト描画の関数を呼び出す複数の解釈処理部を有する並列解釈手段と、
前記各分割部分について、呼び出された前記オブジェクト描画の関数およびオペランドに応じて中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記各分割部分についての中間データを結合し、1ページ分の中間データを作成する中間データ結合手段と、
結合されたた前記中間データを分割し、前記分割部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段とを備える。
【発明の効果】
【0010】
本発明によれば、PDLデータの各ページを複数の分割部分に分割し、各分割部分を並列処理することで、RIP処理時間を短縮することができる。特にPDLデータから中間データを生成する工程も並列化していることで、従来に比して一層の高速化が図られている。特に、単一ページからなるPDLデータや、ページ中に多数の画像形成命令がある処理の重いPDLデータのRIP処理時間を大幅に短縮できる。
【図面の簡単な説明】
【0011】
【図1】本発明のシステム構成の一例を示すシステム構成図。
【図2】解釈制御の処理フローを説明した図。
【図3】ページ内の画像形成命令分割を説明した図。
【図4】解釈処理部のフロー図。
【図5】開始位置、終了位置を説明した図。
【図6】描画状態属性のスタックを説明した図。
【図7】オブジェクト描画命令を説明した図。
【図8】中間データ生成部の処理フローを説明した図。
【図9】中間データ概略図。
【図10】中間データ結合部の処理フロー。
【図11】描画状態属性スタックの結合を示した図。
【図12】中間データ結合の例を示した図。
【図13】スキャンライン毎のラスタ画像生成処理を説明した図。
【発明を実施するための形態】
【0012】
[実施形態1]
以下、本発明を実施するための最良の形態について、図面を参照して説明する。図1は、本発明の一実施の形態による画像処理装置の構成を示すブロック図である。図1において、本実施例の描画処理装置はPDLインタプリタ11とレンダラ12から構成される。またPDLインタプリタ11は、解釈制御部13、複数の解釈処理部14を含んでおり、レンダラ12は、複数の中間データ生成部15、中間データ結合部16、ディスプレイリストバッファ(DLバッファ)17、ラスタ画像生成制御部18、複数のラスタ画像生成部19を含んでいる。なお画像処理装置は汎用のコンピュータで実現でき、特に図示したようなプログラムをコンピュータで実行することで上記各部を実現できる。この場合、並列に動作する各処理部を複数のプロセッサにより並列実行することが望ましい。プログラムは、HDD等のファイルストレージに保存されており、そのプログラムをメモリ等にロードしてプロセッサにより実行される。これによってPDLインタプリタやレンダラを実現することもできる。なお、並列に動作する各処理部は、2つあるいはそれ以上の複数のプロセッサコアで実現される。さらに各プロセッサコアにより複数のスレッドが並列実行し、各コアが解釈処理部をそれら複数スレッドにより実現することもできる。
【0013】
この構成において、PDLインタプリタ11がページ記述言語(PDL)の形式で、すなわちページ記述言語で記述されたPDLデータ付け取る。PDLデータは複数の画像形成命令およびそのオペランドを含む。PDLの代表的なものとして、Adobe社のPostScript(登録商標)やPortable Document Format(PDF)、Microsoft社のXML Paper Specification(XPS)といったものがあるが、入力のPDLとしてはこれに限っていない。
【0014】
PDLインタプリタの解釈制御部13は、PDLで記述された着目ページを複数の部分に分割して、複数の解釈処理部14にそれぞれの分割された部分に含まれた画像形成命令の解釈処理を並列実行させる。基本、夫々の部分には、複数のオブジェクトが含まれているが、オブジェクトが1つのみ含まれている場合、または含まれていない場合もある。なおこれら分割された部分を分割部分と呼ぶことにする。それぞれの解釈処理部14は解釈した画像形成命令を内部表現形式であるオブジェクト描画命令に変換してレンダラ12に渡す。このとき各解釈処理部14は、解釈開始位置からの相対的な描画状態属性値を使いオブジェクト描画命令を構築する。
【0015】
オブジェクト描画命令の引き渡しは分割部分単位で行ってもよいが、本例では命令単位で行うものとする。このオブジェクト描画命令への変換および引き渡しは、コードを生成してそれを引き渡すという方法で行ってもよいが、レンダラの提供する関数を呼び出すことで実現することもできる。後者の方法であれば、解釈された画像形成命令は、その後の命令の解釈を待たずに中間データへ変換される。なお本実施形態では、前者のようにオブジェクト描画命令に変換してレンダラに引き渡す手順で説明するが、いずれの方法であっても本発明の本質を損ねることはない。
【0016】
ここで解釈開始位置とは、当該解釈処理部の処理対象である分割部分の先頭の、ページ内における位置を指す。描画状態属性値は、たとえばCTM(coordinate transfer matrix)や色空間、色値、線幅等、描画時に参照する種々の値を含む。描画状態属性値は、描画状態属性値スタックに積まれ、スタックポインタが指し示す位置すなわちスタック最上位の描画状態属性値が描画に用いられる。描画状態属性値は、本来、1ページを単位としてその先頭から順次処理されることでページ途中における値が決まる。ところが本実施形態ではページは複数の部分に分割されている。そこで、PDLインタプリタ11によるオブジェクト描画命令の生成時には、各分割部分について描画状態属性値スタックの初期値を暫定的に定めてスタックの操作および描画状態属性値の参照を行っている。「初期値解釈開始位置からの相対的な描画状態属性値」とは、各分割部分において暫定的に定めた描画状態属性値スタックで与えられる描画状態属性値を指す。この暫定的なスタックには、値が確定している属性についてはその値が格納され、未確定の属性についてはその属性値が格納されているはずの当該スタックの階層を示す値が格納される。この値のことを相対的な描画状態属性あるいは相対的に表現された描画状態属性値とも呼ぶ。相対的に表現された描画状態属性値スタックは、各分割部分を統合することでラスタ画像生成処理の前に確定される。
【0017】
オブジェクト描画命令を受け取ったレンダラ12は、複数の中間データ生成部15により、ディスプレイリスト(DL)等の中間データ生成を並列的に行う。このときの生成される中間データは相対的な描画状態属性をもとにしたものであり、DLバッファ17に格納される。さらに中間データ結合部16は、中間データ生成部15が生成したDLバッファ17内の中間データの結合処理を行い、相対的に表現された描画状態属性値の解決処理を実施する。全ての中間データの結合処理が終了した時点で、ラスタ画像生成制御部18がDLバッファ17内の中間データをもとにタイル単位もしくはバンド単位に分割した領域毎に、複数のラスタ画像生成部19にラスタ画像生成を並列実行させる。以上の処理により着目した1ページのラスタ画像データが生成される。
【0018】
このようなPDLのページ毎の画像形成命令をラスタ画像に変換する処理をPDLの全てのページに対して繰り返して行い、PDLデータを入力としたラスタ画像生成処理を実現する。
【0019】
このように本画像処理装置は、PDLインタプリタ11によるオブジェクト描画命令の生成処理と、レンダラ12による中間データの生成処理との2つのステップから構成される。すなわち、PDLインタプリタ11によるページ内の画像形成命令の並列解釈処理とレンダラ12による並列ラスタ画像生成処理である。以下では、PDLインタプリタ11の並列解釈処理とレンダラ12の並列ラスタ画像生成処理の2つのステップについてそれぞれ説明する。
【0020】
<PDLインタプリタ11による処理>
まずPDLインタプリタ11のステップである、解釈制御部13と複数の解釈処理部14の処理の詳細についてそれぞれ図を用いて説明する。
【0021】
<1ページ分のPDLデータの分割処理>
図2は、解釈制御部13の処理フローを表したフロー図である。解釈制御部13はステップS201において、入力PDLデータの読み込みを行う。S201で読み込まれたPDLデータに対して、S202において、ページ構成の解釈を行い、PDLに含まれるページ構成を配列等で表現されるリストを生成する。S203以下では、生成したリストに基づいて各ページごとの解釈処理を行う。なお、PDLで記述された命令を画像形成命令と呼び、オブジェクト描画命令と区別する。
【0022】
S203では未処理のページがあるかを判別し、未処理ページがない場合は、PDLデータを入力とした画像生成処理を終了する。一方S203において、未処理ページがある場合には、当該ページを着目ページとしてS204において該当着目ページに含まれるPDLの画像形成命令の取得を行う。ページ内の画像形成命令は、PDLの仕様によっては仕様で決められた圧縮方法で圧縮されている場合があり、その場合S204において解凍処理を行い装置のメモリ等に配置する。S205では、S204で取得したページの分割数を決定する。分割数は、システムのコアやCPUの構成に応じて、静的に決定してもよい。またページの画像形成命令のサイズやそのときのシステムの負荷状況によって動的に決定することもある。例えば、システムが多くのCPU数を持ち、並列性が高い場合は、分割数を多くして解釈処理の並列性を高めるよう分割数を決定する。
【0023】
S206ではS205で決定した分割数に応じたページの分割処理が行われる。ページの分割は、メモリ上に配置された1ページ分の画像形成命令に対して、開始ポイントと終了ポイントの位置を指し示すポインタ等を決めることで表現する。すなわち、本実施形態でいう分割とは、分割点を決定することであるということもできる。ある分割部分の終了ポイントは次の分割部分の開始ポイントでもあるので、開始ポイントと終了ポイントとをそれぞれ決定しなくとも、ページ内の分割位置を決定すればよい。
【0024】
図3にPDLとしてPDFを採用した場合に1ページのPDLデータを分割した例を示す。301がページ全体の画像形成命令であり、302がページ全体の分割例である。図3ではページ内に2つの分割点321及び322が定義されている。S206での分割は、画像形成命令を解釈することなしに行われる。1ページのPDLデータのサイズをS205で決定した分割数で割ることにより、一つの分割部分のサイズが求められる。さらに1ページのPDLデータを求めた分割部分のサイズ毎に区切り、ページ内の先頭から何番目の分割部分かを表すインデックス値と、インデックス値に対する開始ポイント及び終了ポイントを決める。ページの先頭にあたる分割部分のインデックス値を通常は1とする。
【0025】
S207においては、S206で分割した全ての分割部分に対する解釈処理部14の起動が完了しているかを確認する。未起動の解釈処理部14がある場合には、S208に進み当該解釈処理部14の起動処理を行い、対応するPSLデータの分割部分の解釈処理を行う。これにより各分割部分は並列に処理される。各解釈処理部14の起動に際して、各解釈処理部14による処理対象の分割部分を示すインデックス値と、開始ポイント及び終了ポイントすなわち分割位置を示すポインタとを各解釈処理部14に渡す。S207において全てのページ内の解釈処理部14の起動が完了していると判定した場合にはS203に戻り、未処理ページがあるかの処理を行う。以降、未処理ページ毎に上記工程を繰り返すことによって、入力されたPDLデータの全てのページに対して、ページを分割し、分割部分ごとの並列解釈処理に供する。
【0026】
<命令解釈処理>
図4に複数起動され並列に実行される解釈処理部14のフロー図を示した。起動された解釈処理部14は、S401でグループ開始を表す内部表現であるオブジェクト描画命令のうちグループ開始命令の呼び出しを行う。すなわち、グループ開始命令をこれから出力するオブジェクト描画命令群の先頭の命令として出力し、レンダラ12に入力する。オブジェクト描画命令とは後述する図7に示したようなコードであり、解釈処理部14が生成する内部的なコードである。オブジェクト描画命令は中間データ生成部15が処理可能なものであればよい。このグループ開始命令には、当該解釈処理部により処理される1ページのPDLデータから分割された分割部分のインデックス値が付与される。これにより、レンダラ12は処理対象の分割部分のページ中における位置を判定できる。なお、オブジェクト描画命令を例えばコードとして出力する代わりに、中間データ生成部15が提供する関数を当該関数に与えるオペランドとともに呼び出してもよい。
【0027】
解釈処理部14は、S402で描画状態属性スタックの初期化を行う。スタックは本来処理に応じて動的に変更されるので、各分割部分の解釈処理を開始する際のスタックの状態は、その直前の分割部分の処理が終了した時点の状態と等しい。そこで、描画状態属性スタックは解釈処理開始時の初期相対値を示すGS0で初期化される。初期相対値GS0は、インデックス値が1小さい解釈制御部14の描画状態属性スタックに対する相対値を表している。つまり仮にページの先頭から解釈処理を開始したとして、処理が当該分割部分の真の開始ポイントに至った時点における描画状態属性スタックへの相対的なポインタを示している。この分割部分ごとに初期化されたスタックを当該分割部分における初期スタックと呼ぶことにする。これは、直前の分割部分の解釈処理終了時点における描画状態属性スタックの最上位である。なおスタックの最上位は当該スタックのポインタ(あるいはスタックポインタ)で示すものとし、以降S403で画像形成命令毎の解釈が開始される。スタックは解釈処理部14でたとえばローカルなメモリ等に保持される。
【0028】
解釈処理においては、装置のメモリ上に置かれたPDLデータの開始ポイントの参照ポインタから順次画像形成命令の解釈が行われる。この時開始ポイントで参照する文字がPDL仕様で決められた区切り文字でない場合は、区切り文字以降までポインタを移動し、それ以降解釈処理を開始する。区切り文字は例えば画像形成命令を構成するオペレータとオペランドとを区切りあるいはオペランド同士を区切り、あるいはオペレータ同士を区切る。さらにここでの解釈処理は常にPDL仕様における予約語のオペレータと当該オペレータのオペランドとの組を対象とする。オペレータに対するオペランド数はオペレータごとに決まっており、オペランドの数が規定の数と異なる場合には、画像形成命令の途中に開始ポイントがあるものとして、オペレータ終了直後の命令を真の開始ポイントとして、解釈処理を継続する。このようにS403の解釈開始で真の開始ポイントが決定される。オペレータは、たとえばあらかじめ予約された文字列であり、オペレータのコードはそれのみに基づいてオペレータであると判定できる。このために、たとえ色値のようにバイナリで表されるものであっても、オペランドとしては、たとえば数字や文字を示す文字コードで表されてオペレータと区別可能である。
【0029】
図5に、ステップS206による分割点と、真の開始ポイントおよび真の終了ポイントの例を示した。分割部分501が当該解釈処理部15に割り与えられた画像形成命令からなる分割部分であり、開始ポイント502でその先頭が示されている。開始ポイント502から文字に順次着目して画像形成命令をパースすることにより、矩形形成命令のオペレータである"re"が当該分割部分における最初のオペレータとして見出される。なお本例では、区切り文字およびオペレータ以外のコードはオペランドとみなされ、またオペランドがオペレータに先行する構文であるとする。そこでオペランドを走査する際には、オペランドの長さを、たとえばバイト単位などで数える。そしてオペレータが見つかったなら、そこまでに数えたオペランドの数が当該オペレータに対して所定のオペランド数と一致するか判定する。たとえば図5の例では、オペレータ"re"に対応するオペランドの数を調べる。オペランドの数は、たとえばオペレータごとにオペランド数が対応付けられた表などから直ちに判明する。オペレータ"re"のオペランドはPDL仕様により4と決まっているのに対して、開始ポイント502からオペレータ"re"までのオペランド数は2である。そのため、開始ポイント502はオペランドの途中を参照しているとして、最初に見つかったオペレータ、本例ではオペレータ"re"、の直後を真の開始ポイント503と決定してその位置を記憶する。同様に終了ポイント504に対してもオペレータを区切りとした真の終了ポイント505が決められ、記憶される。この真の分割点の決定は、互いに隣接する分割部分でも同様に行われるため、真の分割点は各分割部分において一致する。
【0030】
真の分割点が決定されたなら、S404以降では、真の開始ポイントから始めて順次着目した画像形成命令のオペレータ毎に解釈が行われる。ステップS405では、着目した画像形成命令がテキスト、画像、図形といったオブジェクトの描画にかかる命令(この命令を、オブジェクト描画命令と区別するためにオブジェクト描画画像形成命令と呼ぶことにする)であるか否かを判定する。S405で、着目した画像形成命令がオブジェクト描画画像形成命令でないと判定された場合には、その画像形成命令が描画状態属性値の更新であるとして、S406で描画状態属性値の更新を行う。
【0031】
図6に描画状態属性値のスタックの例を示す。S402で初期化されたスタックは、処理対象としているPDLデータの分割部分の直前の分割部分に属する画像形成命令を実行し終えた時点における描画状態属性値スタックの最上位データへの相対値を示している。なお相対値とは、直前の分割部分を特定可能な情報であればよく、仮の値とよぶこともできる。なおS402で初期化したスタックを当該分割部分における初期スタックと呼ぶことにする。スタックレベル601はGS0で初期化がされたことを表している。値GS0が、当該分割部分の直前の分割部分の描画状態属性値スタックからの連続性を示している。以降の画像形成命令で描画状態属性値の更新があるとその画像形成命令に従い描画状態属性スタックの最上位データが変更される。スタック602は描画状態属性の色空間がpush命令で更新された例であり、さらにスタック603はスタックの最上位データの描画状態属性の線幅値が更新された例である。このように描画状態属性値スタックの値は、画像形成命令により更新が行われる。
【0032】
一方ステップS601で初期化されたスタックに対して2回あるいはそれ以上のpop命令により、当該分割部分における初期スタック以前のスタック値が参照された場合には、スタックはpopできない。そこで符号604にあるように、参照先を相対的に示す表現でスタックを更新する。例えば、当該分割部分における初期スタック601の状態からpop命令が読みだされて実行されると、その内容は、GS0からその一段下を参照する表現(たとえば符号など)GS1に書き換えられる。GS1の添え数[1]は、参照するスタックレベル初期スタックより1つ下であることを示す。さらにpop命令があれば、GS1は更にその下のレベルを示すGS2に書き換えられる。このようにして更新された図6のスタック604の値GS2は、最上位スタックの2段下位のスタックの値への参照となる。当該分割部分における初期スタック601より下のスタックレベルを参照している場合、push命令があった場合には、描画状態属性スタックの上位へ描画状態属性スタックの更新値を積む。スタックレベル605は、push命令によりスタックレベル604の上に色値が更新された描画状態属性が積まれたことを表している。
【0033】
さて図4に戻ると、S405において着目した画像形成命令がオブジェクト描画画像形成命令であるか否か判定する。オブジェクト描画画像形成命令であった場合は、S407で当該画像形成命令に対応するオブジェクト描画命令を呼び出す。すなわち、フェッチした画像形成命令に対応するオブジェクト描画命令をそのオペランドとともに出力してレンダラ12に引き渡す。この時の描画状態属性値は、描画状態属性スタックの最上位の値を使う。データ605が最上位であった場合には、相対スタック参照であるGS2が色値以外の描画状態属性値となる。次にS408において解釈処理がすでに終了ポイントを超えたかの判別をする。終了ポイントを越えていない場合は、S404に戻り、次の画像形成命令に着目して解釈処理を続行する。S408で既に終了ポイントを越えていた場合には、S409においてグループ終了命令を呼び出す。すなわちグループ終了命令をレンダラ12に引き渡す。その際に、その時点での描画状態属性値スタックレベルをオペランドとして付加する。そして処理対象のPDLデータの分割部分を対象とした解釈処理を終了する。
【0034】
図7に解釈処理部14の一連のオブジェクト描画命令呼び出しの例を示した。符号701が解釈開始時に呼び出すグループ開始命令である。符号702は図形描画を行うオブジェクト描画命令であり、図7ではCTMおよび色値については相対的な値GS0がレンダラ12に引き渡されている。しかし線幅及び色空間については、この命令の解釈時に値が定まっており、その値が引き渡されている。さらに符号703は解釈終了時のグループ終了命令であり、解釈処理終了時の描画状態属性値スタック(図7ではGS0−GS3)が付加されている。このように解釈処理部14は終了ポイント後のオペレータの区切りまで解釈処理を行い、レンダラ12に対するオブジェクト描画命令呼び出しを相対的な描画状態属性値により実現する。
【0035】
<レンダラ12の処理>
続いてレンダラ12のステップについて説明する。図8に並列処理される複数の中間データ生成部15のうちのひとつによる処理フロー図を示す。なお図8は解釈処理部11からオブジェクト描画命令がグループ開始命令で始まりグループ終了命令で終わることを前提としているが、まずオブジェクト描画命令の種類を判定し、その種類に応じた処理に分岐するように構成してもよい。その場合には、オブジェクト描画命令が入力される都度、中間データ生成部15は命令の種類に応じた処理を実行する。
【0036】
図8において、起動された中間データ生成部15は、S801において、対応する解釈処理部14からまずグループ開始命令を受け取り、Display List等の中間データ生成処理を開始する。S802でDLバッファ17に中間データの領域(DLバッファ17)を確保し、S801のグループ開始命令に付加されたインデックス値を中間データに与える。すなわち、DLバッファ17にインデックス値を書き込む。S803においては解釈処理部14からオブジェクト描画命令を受け取る。S804において、S803で受け取ったオブジェクト描画命令がグループ終了命令かを判別する。オブジェクト描画命令がグループ終了命令でない場合は、図形、画像、テキスト等を描画するためのオブジェクト描画命令であるとして、S805でDLバッファ17の中間データにオブジェクトを追加する。図9に中間データの概略図を示した。中間データ901は、スキャンライン902を基としたリストにより構成される。図形、画像、テキストといった各オブジェクトは、輪郭を意味するエッジリスト903により表現され、各エッジは、該当するスキャンラインリスト902にぶら下がる。さらに各エッジリストは、そのオブジェクトの塗り色や線幅等の描画属性904をもっている。ここで中間データ生成部15は、解釈処理部14が相対的な描画状態属性を指定した場合は、その相対値によりDLバッファ17内の中間データのエッジリスト903及び描画属性904を生成する。ここで座標移動を示す描画状態属性値(たとえばCTM)については、相対的な描画状態属性が原点移動であるとして、中間データの生成を行う。これにより中間データ901は、中間データ生成開始時を基とした相対スキャンラインに対するリストとなる。S805で生成済みの中間データに対するオブジェクトの追加が行われると、S803に戻りオブジェクト描画命令の受信を繰り返す。S804においてオブジェクト描画命令がグループ終了命令であった場合は、S806でグループ終了命令に付加されている描画状態属性値スタックの配列をDLバッファ17内に格納し、S807で中間データ結合部16に終了を通知し、中間データ生成部15の処理を終了する。
【0037】
<中間データ結合処理>
中間データ結合部16の処理フローを図10に示す。中間データ結合処理は、1ページを分割した各分割部分について生成された中間データをリンクして、確定していない描画状態属性値を確定する処理である。なお或るインデックス値に関連付けて生成された中間データを、そのインデックス値の中間データと呼ぶ。
【0038】
S1001において結合する中間データのインデックス値を初期化する。初期値はPDLデータを分割した際の初期値であり通常1とする。中間データ結合部16は、S1002で、S1001で初期化したインデックス値の中間データの生成処理終了を待つ。S1003でインデックス値をインクリメントし、そのインデックス値に該当する中間データ生成処理終了を待つ。S1004で現在のインデックス値の中間データ中の描画状態属性値スタックとS1002の中間データの描画状態属性値スタックとの結合処理を行う。描画状態属性値スタックの結合処理の例を図11に示した。スタック1101が結合前の描画状態属性値スタックであり確定されていない値を含む。スタック1102が結合対象である描画状態属性値スタックであり、それ以前のインデックスを持つスタックと既に結合されている。先頭すなわちインデックス値が1であれば結合するまでもなく確定している。スタック1103は結合後の描画状態属性値スタックである。なお「結合対象」と「結合前」とはインデックス値で特定できる。結合される分割部分は互いに隣接していることから、インデックス値は連続しており、インデックス値が小さい方の分割部分を結合対象、大きい方を結合前と定義することもできる。
【0039】
結合対象描画状態値スタック1102における最下層スタック配列は、結合前描画状態属性値スタック1101の最上位を示すGS0であるため、GS0は結合前描画状態スタック1101の最上位のスタック配列1104で置き換えられ、結合がされる。以降、結合対象描画状態属性値スタック1102に上位スタック配列にあるGS0の属性値を全て結合前描画状態属性値スタックの参照相対値である最上位の値での置き換えが行われる。例えば、結合前描画状態属性値スタックの2段目の線幅のGS0は、結合前描画状態属性値スタック最上位の値4で置き換えられる。そして全ての相対値が置き換えられた時点で、結合後の描画状態属性値スタック1103を得ることができる。このS1004における描画状態属性スタックの結合において、結合後の描画状態属性スタックのGS0に相当する相対スタック開始位置1105を保持しておく。この例ではGS0のみを示したが、それより下のレベルを参照する場合も同様に置き換えが行われる。
【0040】
S1005ではS1004で結合した描画状態スタックを基にして中間データ中の相対描画状態属性値の置き換え処理を行う。相対値で記載された描画状態属性値は、図11のスタック1103を参照して置換され、置き換え後の中間データを得る。中間データ中の相対値が記載された描画状態属性値は、相対スタック開始位置1105からの相対で置き換え後の値が決定される。例えばGS0は相対スタック開始位置の値を示し、GS2は相対スタック開始位置から2段下位の値での置き換えとなる。
【0041】
置き換え後の中間データは、座標移動に関する描画状態属性値の置き換えもされたことによりページに対する絶対的な座標が求まる。つまり相対的な位置で作成された中間データに対して、移動を表す確定した描画状態属性値のCTMをかけることで移動量が算出できる。S1006において、結合対象である中間データに対する移動量を加味して、結合対象である中間データと結合前中間データとの結合処理を行う。図12に中間データの結合処理の例を示す。1201は結合前の中間データである。一般的にPDLにおける重なりといった位置依存性は、各オブジェクトの画像形成命令順に配置される。つまり先に定義されたオブジェクトと、後から定義されたオブジェクトが重なりを持つ場合は、後から定義されたオブジェクトが上位に配置される。定義の後先は記述の順できまるから、インデックス値が小さいものすなわち「結合対象」の中間データの方が「結合前」の中間データよりも先に定義されていることになる。そのため、結合後の中間データ1203は、S1005で置き換えられた結合対象の中間データ1202を、結合前の中間データ1201の各スキャンラインをベースにしたエッジリストの最後尾に追加することで結合を実現できる。中間データ1203は結合後の中間データを表している。S1007では、S1006で結合対象であった中間データがページの最終中間データかの判定をする。最後の中間データであった場合には、S1008に進み、ラスタ画像制御部18にラスタ生成開始の命令を送り、中間データ結合処理を終了する。S1007で最後の中間データでなかった場合には、S1003に戻って中間データ結合をページ全体の結合処理が終了するまで繰り返す。
【0042】
<ラスタ画像生成処理>
以降でレンダラ12におけるラスタ画像生成の処理について、ラスタ画像制御部18と複数並列処理されるラスタ画像生成部19の詳細を説明する。ラスタ画像制御部18は、中間データ結合部16でページ単位の中間データ生成が終了すると、ラスタ画像の生成を開始する。まずラスタ画像制御部は、生成されるページ全体に対する分割数を決める。一般的にラスタ生成の分割については、複数スキャンライン毎もしくはページの左上を原点として、x軸y軸両方向に対して分割するといったタイル単位の領域に分けての並列ラスタ画像生成が行われる。複数スキャンライン単位で並列ラスタ生成する場合は、生成するラスタ画像の解像度とページのサイズから、ページ全体に要するスキャンライン数を得る。ページ全体でスキャンラインが7000で、各ラスタ画像生成部19が処理するスキャンライン数を50とすると分割数は140となる。ラスタ画像制御部18は、所望のラスタ画像を生成するために、ラスタ画像生成部19を起動する。ラスタ画像生成部19は、DLバッファ17に格納されている中間データの読み込みを行う。このときラスタ画像生成部19が生成対象とするスキャンラインに必要なスキャンライン分の中間データを読み込む。ラスタ画像の生成は、各スキャンライン毎にエッジ、塗り色、重なりの解決により実行される。図13に各スキャンライン生成の例を示した。スキャンライン1301が着目するスキャンラインである。スキャンライン1301において、x軸方向にエッジ有無を調べる。スキャンライン1301上には、図形1302、画像オブジェクト1303のエッジがある。
【0043】
領域1304及び1307にはオブジェクトが存在しない為、背景色で塗られる。領域1305は図形オブジェクト1302が定義されている領域であり、この図形オブジェクトの塗り色で各ピクセルの色が決められる。また領域1306は図形オブジェクト1302とその上位に透明度を持った画像オブジェクト1303とが重複した領域である。この領域は、各ピクセルに対して、図形オブジェクトの塗り色と画像の各ピクセルの色値、さらに透明度を使用した合成結果により、最終的なピクセル値を得る。この合成方法については、各PDL仕様で定義されたものであり、PDFではブレンドモードとして様々な合成方法が定義されている。このようなスキャンライン中の各ピクセルの値を順次決めることによってスキャンライン毎のラスタ画像を得る。これを全てのスキャンラインで実施することによって、所望のスキャンライン数のラスタ画像を得ることができる。このようなラスタ画像生成処理を各ラスタ画像生成部19が並列動作することでページ全体のラスタ画像を出力する。
【0044】
上記実施形態によれば、PDLを入力としてラスタ画像生成を行う画像処理装置において、PDLインタプリタがPDLの各ページ内の画像形成命令の並列解釈をおこない、レンダラにおける中間データ生成及びラスタ画像生成に対しても並列処理を実行させる。これによりマルチCPU及びマルチコア環境において、RIP処理時間を短縮することができる。また特に、単一ページからなるPDLやページ中に多数の画像形成命令がある処理の重い特定ページが存在するPDLのRIP処理時間を大幅に短縮できる。
【0045】
[変形例1]
実施例で説明したPDLインタプリタ11の処理は、ページ毎の処理をシーケンシャルに処理していた。PDL全体の処理は、ページ単位での高速化がされていたが、PDL全体のラスタ生成の高速化は考慮されていかった。そこで解釈制御部13がページ分割も同時に行い、それぞれのページで並列処理することで、さらに並列性を増し、高速にラスタ画像生成を行うことができる。
【0046】
[変形例2]
実施例で説明した解釈制御部13のページ毎の画像形成命令の分割は、画像形成命令のサイズに対して、分割数で均等に分割していた。そのため中間データ結合部16において、所望の中間データ生成部15の処理終了待ちが多発することが考えられる。そこで、解釈制御部13において分割数で均等に分割するのではなく、分割するサイズはページの画像形成命令の開始に近い部分をより小さいサイズに分割することで、中間データ結合部16での待ちの発生を抑えることが可能となる。
【0047】
[変形例3]
実施例で説明した中間データ結合部16の結合処理は、中間データに対してインデックス値の小さいものから順次結合処理を行っていた。そのため、分割した画像形成命令が複雑である等の理由で特定の中間データ生成が遅い場合、その処理の終了待ちが発生する。そこで中間データの結合処理を、中間データ生成部15の処理が終わったもので、インデックス値が隣り合う中間データの結合を行っていくことで、待ち時間は短くなり、より高速な中間データ結合生成が可能となる。
【0048】
[変形例4]
最初の実施形態ではページの分割は適当に行った後、各分割部分をパースして命令の区切り目を確定していた。これに対して、注目した1ページ分のPDLを分割する処理は、分割位置の確定も含めて解釈制御部13が一元的に行うように構成することもできる。分割位置決定後の処理は上記実施形態と同様である。
【0049】
[その他の実施例]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

【特許請求の範囲】
【請求項1】
ページ記述言語で記述された1ページ分のPDLデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する複数の解釈処理部を有する並列解釈手段と、
前記分割部分の各々について、前記オブジェクト描画命令から中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記分割部分の各々についての中間データを結合し、1ページ分の中間データを作成する中間データ結合手段と、
結合された前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段と
を備えることを特徴とする画像処理装置。
【請求項2】
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、1ページ分の中間データを作成することを特徴とする請求項1記載の画像処理装置。
【請求項3】
前記中間データ結合手段は、前記中間データ生成手段によって生成した複数の分割部分に係る中間データを、前記分割部分のページ内における順に結合することを特徴とする請求項1または2記載の画像処理装置。
【請求項4】
前記中間データ結合手段は、前記中間データ生成手段によって生成した複数の分割部分に係る中間データを、前記分割部分のページ内における順によらず、隣り合う分割部分に係る中間データの結合を繰り返すことで1ページ分の中間データを結合することを特徴とする請求項1乃至3のいずれか一項に記載の画像処理装置。
【請求項5】
前記並列解釈手段は、前記分割部分の分割位置を、前記PDLデータの画像形成命令の区切りに合わせて移動することを特徴とする請求項1乃至4のいずれか一項に記載の画像処理装置。
【請求項6】
ページ記述言語で記述された1ページ分のPDLデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する複数の解釈処理部を有する並列解釈手段と、
前記分割部分の各々について、前記オブジェクト描画命令から中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記分割部分の各々についての中間データを結合し、1ページ分の中間データを作成する中間データ結合手段と、
結合された前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段と
してコンピュータを機能させるためのプログラム。
【請求項7】
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、1ページ分の中間データを作成することを特徴とする請求項6記載のプログラム。
【請求項8】
前記複数の解釈処理部および前記複数の中間データ生成部として、前記コンピュータの有する複数のプロセッサのそれぞれを機能させることを特徴とする請求項6または7に記載のプログラム。
【請求項9】
画像処理装置の分割手段が、ページ記述言語で記述された1ページ分のPDLデータを複数の分割部分に分割する分割工程と、
画像処理装置の並列解釈手段が、分割された前記分割部分の各々を対象として、並列に、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する並列解釈工程と、
画像処理装置の中間データ生成手段が、前記分割部分の各々について、並列に、前記オブジェクト描画命令から中間データを生成する中間データ生成工程と、
画像処理装置の中間データ結合手段が、前記分割部分の各々についての中間データを結合し、1ページ分の中間データを作成する中間データ結合工程と、
画像処理装置の並列ラスタ画像生成手段が、結合された前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成工程と
を有することを特徴とする画像処理方法。
【請求項10】
前記並列解釈工程において、ひとつの分割部分の処理において、当該分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合工程において、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、1ページ分の中間データを作成することを特徴とする請求項9記載の画像処理方法。
【請求項11】
ページ記述言語で記述された1ページ分のPDLデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈して、当該命令に対応するオペランドとともにオブジェクト描画の関数を呼び出す複数の解釈処理部を有する並列解釈手段と、
前記分割部分の各々について、呼び出された前記オブジェクト描画の関数およびオペランドに応じて中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記分割部分の各々についての中間データを結合し、1ページ分の中間データを作成する中間データ結合手段と、
結合されたた前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段と
を備えることを特徴とする画像処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2012−221256(P2012−221256A)
【公開日】平成24年11月12日(2012.11.12)
【国際特許分類】
【出願番号】特願2011−86754(P2011−86754)
【出願日】平成23年4月8日(2011.4.8)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】