(57)【特許請求の範囲】
【請求項１】
ページ記述言語で記述された１ページ分のＰＤＬデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する複数の解釈処理部を有する並列解釈手段と、
前記分割部分の各々について、前記オブジェクト描画命令から中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記分割部分の各々についての中間データを結合し、１ページ分の中間データを作成する中間データ結合手段と、
結合された前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段と
を備え、
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、１ページ分の中間データを作成することを特徴とする画像処理装置。
【請求項２】
前記中間データ結合手段は、前記中間データ生成手段によって生成した複数の分割部分に係る中間データを、前記分割部分のページ内における順に結合することを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記中間データ結合手段は、前記中間データ生成手段によって生成した複数の分割部分に係る中間データを、前記分割部分のページ内における順によらず、隣り合う分割部分に係る中間データの結合を繰り返すことで１ページ分の中間データを結合することを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記並列解釈手段は、前記分割部分の分割位置を、前記ＰＤＬデータの画像形成命令の区切りに合わせて移動することを特徴とする請求項１乃至３のいずれか一項に記載の画像処理装置。
【請求項５】
ページ記述言語で記述された１ページ分のＰＤＬデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する複数の解釈処理部を有する並列解釈手段と、
前記分割部分の各々について、前記オブジェクト描画命令から中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記分割部分の各々についての中間データを結合し、１ページ分の中間データを作成する中間データ結合手段と、
結合された前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段としてコンピュータを機能させるためのプログラムであって、
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、１ページ分の中間データを作成することを特徴とするプログラム。
【請求項６】
前記複数の解釈処理部および前記複数の中間データ生成部として、前記コンピュータの有する複数のプロセッサのそれぞれを機能させることを特徴とする請求項５に記載のプログラム。
【請求項７】
画像処理装置の分割手段が、ページ記述言語で記述された１ページ分のＰＤＬデータを複数の分割部分に分割する分割工程と、
画像処理装置の並列解釈手段が、分割された前記分割部分の各々を対象として、並列に、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する並列解釈工程と、
画像処理装置の中間データ生成手段が、前記分割部分の各々について、並列に、前記オブジェクト描画命令から中間データを生成する中間データ生成工程と、
画像処理装置の中間データ結合手段が、前記分割部分の各々についての中間データを結合し、１ページ分の中間データを作成する中間データ結合工程と、
画像処理装置の並列ラスタ画像生成手段が、結合された前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成工程とを有し、
前記並列解釈工程において、ひとつの分割部分の処理において、当該分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合工程において、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、１ページ分の中間データを作成することを特徴とする画像処理方法。
【請求項８】
ページ記述言語で記述された１ページ分のＰＤＬデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈して、当該命令に対応するオペランドとともにオブジェクト描画の関数を呼び出す複数の解釈処理部を有する並列解釈手段と、
前記分割部分の各々について、呼び出された前記オブジェクト描画の関数およびオペランドに応じて中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記分割部分の各々についての中間データを結合し、１ページ分の中間データを作成する中間データ結合手段と、
結合されたた前記中間データを分割し、分割した部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段とを備え、
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、１ページ分の中間データを作成することを特徴とする画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置及び画像処理方法に関し、特に、ページ記述言語で記述されたページ内の画像形成命令を並列に解釈し、画像データを生成する画像処理装置及び画像処理方法に関する。
【背景技術】
【０００２】
ページ記述言語（ＰＤＬ）で記述されたデータをネットワーク等の通信媒体を介して受信し、専用のインタプリタにより解釈しラスタ画像を形成するＲＩＰ処理を行い、電子写真及びインクジェット等のプリンタエンジンを用いて印字出力をするページプリンタが広く知られている。またプリンタドライバ等のホストアプリケーションは、ＰＣ内のメモリに実行可能なプログラムとして格納されて、ＰＣ内のＰＤＬを解釈して、ラスタ画像を生成するＲＩＰ処理を行いプリンタに画像を送信する。
【０００３】
ＰＤＬのＲＩＰ処理においては、ＰＤＬインタプリタでのソフトウェア処理により解析したデータを、ハードウェア処理もしくはソフトウェア処理によるレンダラに渡す。レンダラはＰＤＬインタプリタから受けとった情報を元に中間データを作成し、複数スキャンライン毎もしくはページ全体のラスタ画像を生成する。上記プリンタ及びＰＣにおいては、マルチコア及びマルチＣＰＵ環境を持つものが多数となっており、ＲＩＰ処理を並列化して高速に実行することが重要となっている。そこでマルチコア及びマルチＣＰＵでの高速化の為に、ＲＩＰシステムでの様々な並列処理方法が考えられている。
【０００４】
例えば特許文献１では、ページ単位でＰＤＬインタプリタ及びレンダラに並列処理させる方法が提案されている。これは複数のページから構成されるＰＤＬデータをページ毎に分割し、ＰＤＬの各ページをそれぞれの並列にＰＤＬインタプリタの解釈処理及びレンダラのラスタ画像生成処理を実行することにより、ＲＩＰシステムの高速化を実現する。
【０００５】
また特許文献２では、描画オブジェクト単位の並列処理が提案されている。Adobe社のPostScriptやＰＤＦ等の一般的なＰＤＬにおいては、グラフィックス、イメージ、テキストと言った複数の描画オブジェクトが重なりといった位置依存性を持った上で定義されている。ＲＩＰシステムにおいて、ＰＤＬインタプリタがこれらの位置依存性を考慮し、位置依存性のない描画オブジェクト、つまり重なりのない描画オブジェクト毎にグループ化して、レンダリング処理部に描画オブジェクトを渡す。レンダリング処理部もしくは、レンダリング処理の制御部においてグループ化された単位で描画オブジェクト毎の並列レンダリング処理を実施することにより、処理の高速性を実現する提案である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2006-159738号公報
【特許文献２】特開平10-040360号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献1の発明によるページ単位での並列処理では、単一ページのＰＤＬデータに対しては、高速化を実現できない。また処理の重いページが存在すると、そのページを処理するＰＤＬインタプリタ処理の負荷が相対的に高くクリチカルパスとなることから、全体のＲＩＰ処理としての高速化が果たせない。また特許文献２の発明は、ＰＤＬインタプリタによる解釈処理はシーケンシャルに処理され、位置依存性を前もってＰＤＬインタプリタの解釈処理で解決する必要があり、この処理に負荷が掛かることが予想される。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明は以下の構成を有する。すなわち、
ページ記述言語で記述された１ページ分のＰＤＬデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈してオブジェクト描画命令に変換する複数の解釈処理部を有する並列解釈手段と、
前記各分割部分について、前記オブジェクト描画命令から中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記各分割部分についての中間データを結合し、１ページ分の中間データを作成する中間データ結合手段と、
結合されたた前記中間データを分割し、前記分割部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段とを備え、
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、１ページ分の中間データを作成する。
【０００９】
あるいは他の観点によれば本発明は、ページ記述言語で記述された１ページ分のＰＤＬデータを複数の分割部分に分割する分割手段と、
分割された前記分割部分の各々を対象として、当該分割部分に含まれたページ記述言語の命令を解釈して、当該命令に対応するオペランドとともにオブジェクト描画の関数を呼び出す複数の解釈処理部を有する並列解釈手段と、
前記各分割部分について、呼び出された前記オブジェクト描画の関数およびオペランドに応じて中間データを生成する複数の中間データ生成部を有する中間データ生成手段と、
前記各分割部分についての中間データを結合し、１ページ分の中間データを作成する中間データ結合手段と、
結合されたた前記中間データを分割し、前記分割部分ごとに並列してラスタ画像を生成する並列ラスタ画像生成手段とを備え、
前記解釈処理部の各々は、当該解釈処理部が対象とする分割部分より前の分割部分で定義される描画状態属性値を参照する場合、該描画状態属性値に参照先を示す仮の描画状態属性値を割り当てて前記オブジェクト描画命令に変換し、
前記中間データ結合手段は、前記分割部分の各々についての中間データを結合し、前記分割部分について割り当てられた前記仮の描画状態属性値を参照先の描画状態属性値で置換し、１ページ分の中間データを作成する。
【発明の効果】
【００１０】
本発明によれば、ＰＤＬデータの各ページを複数の分割部分に分割し、各分割部分を並列処理することで、ＲＩＰ処理時間を短縮することができる。特にＰＤＬデータから中間データを生成する工程も並列化していることで、従来に比して一層の高速化が図られている。特に、単一ページからなるＰＤＬデータや、ページ中に多数の画像形成命令がある処理の重いＰＤＬデータのＲＩＰ処理時間を大幅に短縮できる。
【図面の簡単な説明】
【００１１】
【図１】本発明のシステム構成の一例を示すシステム構成図。
【図２】解釈制御の処理フローを説明した図。
【図３】ページ内の画像形成命令分割を説明した図。
【図４】解釈処理部のフロー図。
【図５】開始位置、終了位置を説明した図。
【図６】描画状態属性のスタックを説明した図。
【図７】オブジェクト描画命令を説明した図。
【図８】中間データ生成部の処理フローを説明した図。
【図９】中間データ概略図。
【図１０】中間データ結合部の処理フロー。
【図１１】描画状態属性スタックの結合を示した図。
【図１２】中間データ結合の例を示した図。
【図１３】スキャンライン毎のラスタ画像生成処理を説明した図。
【発明を実施するための形態】
【００１２】
［実施形態１］
以下、本発明を実施するための最良の形態について、図面を参照して説明する。図１は、本発明の一実施の形態による画像処理装置の構成を示すブロック図である。図１において、本実施例の描画処理装置はＰＤＬインタプリタ１１とレンダラ１２から構成される。またＰＤＬインタプリタ１１は、解釈制御部１３、複数の解釈処理部１４を含んでおり、レンダラ１２は、複数の中間データ生成部１５、中間データ結合部１６、ディスプレイリストバッファ（ＤＬバッファ）１７、ラスタ画像生成制御部１８、複数のラスタ画像生成部１９を含んでいる。なお画像処理装置は汎用のコンピュータで実現でき、特に図示したようなプログラムをコンピュータで実行することで上記各部を実現できる。この場合、並列に動作する各処理部を複数のプロセッサにより並列実行することが望ましい。プログラムは、ＨＤＤ等のファイルストレージに保存されており、そのプログラムをメモリ等にロードしてプロセッサにより実行される。これによってＰＤＬインタプリタやレンダラを実現することもできる。なお、並列に動作する各処理部は、２つあるいはそれ以上の複数のプロセッサコアで実現される。さらに各プロセッサコアにより複数のスレッドが並列実行し、各コアが解釈処理部をそれら複数スレッドにより実現することもできる。
【００１３】
この構成において、ＰＤＬインタプリタ１１がページ記述言語（ＰＤＬ）の形式で、すなわちページ記述言語で記述されたＰＤＬデータ付け取る。ＰＤＬデータは複数の画像形成命令およびそのオペランドを含む。ＰＤＬの代表的なものとして、Adobe社のＰｏｓｔＳｃｒｉｐｔ（登録商標）やPortable Document Format（ＰＤＦ）、Microsoft社のXML Paper Specification（ＸＰＳ）といったものがあるが、入力のＰＤＬとしてはこれに限っていない。
【００１４】
ＰＤＬインタプリタの解釈制御部１３は、ＰＤＬで記述された着目ページを複数の部分に分割して、複数の解釈処理部１４にそれぞれの分割された部分に含まれた画像形成命令の解釈処理を並列実行させる。基本、夫々の部分には、複数のオブジェクトが含まれているが、オブジェクトが１つのみ含まれている場合、または含まれていない場合もある。なおこれら分割された部分を分割部分と呼ぶことにする。それぞれの解釈処理部１４は解釈した画像形成命令を内部表現形式であるオブジェクト描画命令に変換してレンダラ１２に渡す。このとき各解釈処理部１４は、解釈開始位置からの相対的な描画状態属性値を使いオブジェクト描画命令を構築する。
【００１５】
オブジェクト描画命令の引き渡しは分割部分単位で行ってもよいが、本例では命令単位で行うものとする。このオブジェクト描画命令への変換および引き渡しは、コードを生成してそれを引き渡すという方法で行ってもよいが、レンダラの提供する関数を呼び出すことで実現することもできる。後者の方法であれば、解釈された画像形成命令は、その後の命令の解釈を待たずに中間データへ変換される。なお本実施形態では、前者のようにオブジェクト描画命令に変換してレンダラに引き渡す手順で説明するが、いずれの方法であっても本発明の本質を損ねることはない。
【００１６】
ここで解釈開始位置とは、当該解釈処理部の処理対象である分割部分の先頭の、ページ内における位置を指す。描画状態属性値は、たとえばＣＴＭ（coordinate transfer matrix）や色空間、色値、線幅等、描画時に参照する種々の値を含む。描画状態属性値は、描画状態属性値スタックに積まれ、スタックポインタが指し示す位置すなわちスタック最上位の描画状態属性値が描画に用いられる。描画状態属性値は、本来、１ページを単位としてその先頭から順次処理されることでページ途中における値が決まる。ところが本実施形態ではページは複数の部分に分割されている。そこで、ＰＤＬインタプリタ１１によるオブジェクト描画命令の生成時には、各分割部分について描画状態属性値スタックの初期値を暫定的に定めてスタックの操作および描画状態属性値の参照を行っている。「初期値解釈開始位置からの相対的な描画状態属性値」とは、各分割部分において暫定的に定めた描画状態属性値スタックで与えられる描画状態属性値を指す。この暫定的なスタックには、値が確定している属性についてはその値が格納され、未確定の属性についてはその属性値が格納されているはずの当該スタックの階層を示す値が格納される。この値のことを相対的な描画状態属性あるいは相対的に表現された描画状態属性値とも呼ぶ。相対的に表現された描画状態属性値スタックは、各分割部分を統合することでラスタ画像生成処理の前に確定される。
【００１７】
オブジェクト描画命令を受け取ったレンダラ１２は、複数の中間データ生成部１５により、ディスプレイリスト（ＤＬ）等の中間データ生成を並列的に行う。このときの生成される中間データは相対的な描画状態属性をもとにしたものであり、ＤＬバッファ１７に格納される。さらに中間データ結合部１６は、中間データ生成部１５が生成したＤＬバッファ１７内の中間データの結合処理を行い、相対的に表現された描画状態属性値の解決処理を実施する。全ての中間データの結合処理が終了した時点で、ラスタ画像生成制御部１８がＤＬバッファ１７内の中間データをもとにタイル単位もしくはバンド単位に分割した領域毎に、複数のラスタ画像生成部１９にラスタ画像生成を並列実行させる。以上の処理により着目した１ページのラスタ画像データが生成される。
【００１８】
このようなＰＤＬのページ毎の画像形成命令をラスタ画像に変換する処理をＰＤＬの全てのページに対して繰り返して行い、ＰＤＬデータを入力としたラスタ画像生成処理を実現する。
【００１９】
このように本画像処理装置は、ＰＤＬインタプリタ１１によるオブジェクト描画命令の生成処理と、レンダラ１２による中間データの生成処理との２つのステップから構成される。すなわち、ＰＤＬインタプリタ１１によるページ内の画像形成命令の並列解釈処理とレンダラ１２による並列ラスタ画像生成処理である。以下では、ＰＤＬインタプリタ１１の並列解釈処理とレンダラ１２の並列ラスタ画像生成処理の２つのステップについてそれぞれ説明する。
【００２０】
＜ＰＤＬインタプリタ１１による処理＞
まずＰＤＬインタプリタ１１のステップである、解釈制御部１３と複数の解釈処理部１４の処理の詳細についてそれぞれ図を用いて説明する。
【００２１】
＜１ページ分のＰＤＬデータの分割処理＞
図２は、解釈制御部１３の処理フローを表したフロー図である。解釈制御部１３はステップＳ２０１において、入力ＰＤＬデータの読み込みを行う。Ｓ２０１で読み込まれたＰＤＬデータに対して、Ｓ２０２において、ページ構成の解釈を行い、ＰＤＬに含まれるページ構成を配列等で表現されるリストを生成する。Ｓ２０３以下では、生成したリストに基づいて各ページごとの解釈処理を行う。なお、ＰＤＬで記述された命令を画像形成命令と呼び、オブジェクト描画命令と区別する。
【００２２】
Ｓ２０３では未処理のページがあるかを判別し、未処理ページがない場合は、ＰＤＬデータを入力とした画像生成処理を終了する。一方Ｓ２０３において、未処理ページがある場合には、当該ページを着目ページとしてＳ２０４において該当着目ページに含まれるＰＤＬの画像形成命令の取得を行う。ページ内の画像形成命令は、ＰＤＬの仕様によっては仕様で決められた圧縮方法で圧縮されている場合があり、その場合Ｓ２０４において解凍処理を行い装置のメモリ等に配置する。Ｓ２０５では、Ｓ２０４で取得したページの分割数を決定する。分割数は、システムのコアやＣＰＵの構成に応じて、静的に決定してもよい。またページの画像形成命令のサイズやそのときのシステムの負荷状況によって動的に決定することもある。例えば、システムが多くのＣＰＵ数を持ち、並列性が高い場合は、分割数を多くして解釈処理の並列性を高めるよう分割数を決定する。
【００２３】
Ｓ２０６ではＳ２０５で決定した分割数に応じたページの分割処理が行われる。ページの分割は、メモリ上に配置された１ページ分の画像形成命令に対して、開始ポイントと終了ポイントの位置を指し示すポインタ等を決めることで表現する。すなわち、本実施形態でいう分割とは、分割点を決定することであるということもできる。ある分割部分の終了ポイントは次の分割部分の開始ポイントでもあるので、開始ポイントと終了ポイントとをそれぞれ決定しなくとも、ページ内の分割位置を決定すればよい。
【００２４】
図３にＰＤＬとしてＰＤＦを採用した場合に１ページのＰＤＬデータを分割した例を示す。３０１がページ全体の画像形成命令であり、３０２がページ全体の分割例である。図３ではページ内に２つの分割点３２１及び３２２が定義されている。Ｓ２０６での分割は、画像形成命令を解釈することなしに行われる。１ページのＰＤＬデータのサイズをＳ２０５で決定した分割数で割ることにより、一つの分割部分のサイズが求められる。さらに１ページのＰＤＬデータを求めた分割部分のサイズ毎に区切り、ページ内の先頭から何番目の分割部分かを表すインデックス値と、インデックス値に対する開始ポイント及び終了ポイントを決める。ページの先頭にあたる分割部分のインデックス値を通常は１とする。
【００２５】
Ｓ２０７においては、Ｓ２０６で分割した全ての分割部分に対する解釈処理部１４の起動が完了しているかを確認する。未起動の解釈処理部１４がある場合には、Ｓ２０８に進み当該解釈処理部１４の起動処理を行い、対応するＰＳＬデータの分割部分の解釈処理を行う。これにより各分割部分は並列に処理される。各解釈処理部１４の起動に際して、各解釈処理部１４による処理対象の分割部分を示すインデックス値と、開始ポイント及び終了ポイントすなわち分割位置を示すポインタとを各解釈処理部１４に渡す。Ｓ２０７において全てのページ内の解釈処理部１４の起動が完了していると判定した場合にはＳ２０３に戻り、未処理ページがあるかの処理を行う。以降、未処理ページ毎に上記工程を繰り返すことによって、入力されたＰＤＬデータの全てのページに対して、ページを分割し、分割部分ごとの並列解釈処理に供する。
【００２６】
＜命令解釈処理＞
図４に複数起動され並列に実行される解釈処理部１４のフロー図を示した。起動された解釈処理部１４は、Ｓ４０１でグループ開始を表す内部表現であるオブジェクト描画命令のうちグループ開始命令の呼び出しを行う。すなわち、グループ開始命令をこれから出力するオブジェクト描画命令群の先頭の命令として出力し、レンダラ１２に入力する。オブジェクト描画命令とは後述する図７に示したようなコードであり、解釈処理部１４が生成する内部的なコードである。オブジェクト描画命令は中間データ生成部１５が処理可能なものであればよい。このグループ開始命令には、当該解釈処理部により処理される１ページのＰＤＬデータから分割された分割部分のインデックス値が付与される。これにより、レンダラ１２は処理対象の分割部分のページ中における位置を判定できる。なお、オブジェクト描画命令を例えばコードとして出力する代わりに、中間データ生成部１５が提供する関数を当該関数に与えるオペランドとともに呼び出してもよい。
【００２７】
解釈処理部１４は、Ｓ４０２で描画状態属性スタックの初期化を行う。スタックは本来処理に応じて動的に変更されるので、各分割部分の解釈処理を開始する際のスタックの状態は、その直前の分割部分の処理が終了した時点の状態と等しい。そこで、描画状態属性スタックは解釈処理開始時の初期相対値を示すGS0で初期化される。初期相対値GS0は、インデックス値が1小さい解釈制御部１４の描画状態属性スタックに対する相対値を表している。つまり仮にページの先頭から解釈処理を開始したとして、処理が当該分割部分の真の開始ポイントに至った時点における描画状態属性スタックへの相対的なポインタを示している。この分割部分ごとに初期化されたスタックを当該分割部分における初期スタックと呼ぶことにする。これは、直前の分割部分の解釈処理終了時点における描画状態属性スタックの最上位である。なおスタックの最上位は当該スタックのポインタ（あるいはスタックポインタ）で示すものとし、以降Ｓ４０３で画像形成命令毎の解釈が開始される。スタックは解釈処理部１４でたとえばローカルなメモリ等に保持される。
【００２８】
解釈処理においては、装置のメモリ上に置かれたＰＤＬデータの開始ポイントの参照ポインタから順次画像形成命令の解釈が行われる。この時開始ポイントで参照する文字がＰＤＬ仕様で決められた区切り文字でない場合は、区切り文字以降までポインタを移動し、それ以降解釈処理を開始する。区切り文字は例えば画像形成命令を構成するオペレータとオペランドとを区切りあるいはオペランド同士を区切り、あるいはオペレータ同士を区切る。さらにここでの解釈処理は常にＰＤＬ仕様における予約語のオペレータと当該オペレータのオペランドとの組を対象とする。オペレータに対するオペランド数はオペレータごとに決まっており、オペランドの数が規定の数と異なる場合には、画像形成命令の途中に開始ポイントがあるものとして、オペレータ終了直後の命令を真の開始ポイントとして、解釈処理を継続する。このようにＳ４０３の解釈開始で真の開始ポイントが決定される。オペレータは、たとえばあらかじめ予約された文字列であり、オペレータのコードはそれのみに基づいてオペレータであると判定できる。このために、たとえ色値のようにバイナリで表されるものであっても、オペランドとしては、たとえば数字や文字を示す文字コードで表されてオペレータと区別可能である。
【００２９】
図５に、ステップＳ２０６による分割点と、真の開始ポイントおよび真の終了ポイントの例を示した。分割部分５０１が当該解釈処理部１５に割り与えられた画像形成命令からなる分割部分であり、開始ポイント５０２でその先頭が示されている。開始ポイント５０２から文字に順次着目して画像形成命令をパースすることにより、矩形形成命令のオペレータである"re"が当該分割部分における最初のオペレータとして見出される。なお本例では、区切り文字およびオペレータ以外のコードはオペランドとみなされ、またオペランドがオペレータに先行する構文であるとする。そこでオペランドを走査する際には、オペランドの長さを、たとえばバイト単位などで数える。そしてオペレータが見つかったなら、そこまでに数えたオペランドの数が当該オペレータに対して所定のオペランド数と一致するか判定する。たとえば図５の例では、オペレータ"re"に対応するオペランドの数を調べる。オペランドの数は、たとえばオペレータごとにオペランド数が対応付けられた表などから直ちに判明する。オペレータ"re"のオペランドはPDL仕様により４と決まっているのに対して、開始ポイント５０２からオペレータ"re"までのオペランド数は２である。そのため、開始ポイント５０２はオペランドの途中を参照しているとして、最初に見つかったオペレータ、本例ではオペレータ"re"、の直後を真の開始ポイント５０３と決定してその位置を記憶する。同様に終了ポイント５０４に対してもオペレータを区切りとした真の終了ポイント５０５が決められ、記憶される。この真の分割点の決定は、互いに隣接する分割部分でも同様に行われるため、真の分割点は各分割部分において一致する。
【００３０】
真の分割点が決定されたなら、Ｓ４０４以降では、真の開始ポイントから始めて順次着目した画像形成命令のオペレータ毎に解釈が行われる。ステップＳ４０５では、着目した画像形成命令がテキスト、画像、図形といったオブジェクトの描画にかかる命令（この命令を、オブジェクト描画命令と区別するためにオブジェクト描画画像形成命令と呼ぶことにする）であるか否かを判定する。Ｓ４０５で、着目した画像形成命令がオブジェクト描画画像形成命令でないと判定された場合には、その画像形成命令が描画状態属性値の更新であるとして、Ｓ４０６で描画状態属性値の更新を行う。
【００３１】
図６に描画状態属性値のスタックの例を示す。Ｓ４０２で初期化されたスタックは、処理対象としているＰＤＬデータの分割部分の直前の分割部分に属する画像形成命令を実行し終えた時点における描画状態属性値スタックの最上位データへの相対値を示している。なお相対値とは、直前の分割部分を特定可能な情報であればよく、仮の値とよぶこともできる。なおＳ４０２で初期化したスタックを当該分割部分における初期スタックと呼ぶことにする。スタックレベル６０１はGS0で初期化がされたことを表している。値GS0が、当該分割部分の直前の分割部分の描画状態属性値スタックからの連続性を示している。以降の画像形成命令で描画状態属性値の更新があるとその画像形成命令に従い描画状態属性スタックの最上位データが変更される。スタック６０２は描画状態属性の色空間がpush命令で更新された例であり、さらにスタック６０３はスタックの最上位データの描画状態属性の線幅値が更新された例である。このように描画状態属性値スタックの値は、画像形成命令により更新が行われる。
【００３２】
一方ステップＳ６０１で初期化されたスタックに対して2回あるいはそれ以上のpop命令により、当該分割部分における初期スタック以前のスタック値が参照された場合には、スタックはｐｏｐできない。そこで符号６０４にあるように、参照先を相対的に示す表現でスタックを更新する。例えば、当該分割部分における初期スタック６０１の状態からｐｏｐ命令が読みだされて実行されると、その内容は、ＧＳ０からその一段下を参照する表現（たとえば符号など）ＧＳ１に書き換えられる。ＧＳ１の添え数［１］は、参照するスタックレベル初期スタックより１つ下であることを示す。さらにｐｏｐ命令があれば、ＧＳ１は更にその下のレベルを示すＧＳ２に書き換えられる。このようにして更新された図６のスタック６０４の値GS2は、最上位スタックの２段下位のスタックの値への参照となる。当該分割部分における初期スタック６０１より下のスタックレベルを参照している場合、ｐｕｓｈ命令があった場合には、描画状態属性スタックの上位へ描画状態属性スタックの更新値を積む。スタックレベル６０５は、push命令によりスタックレベル６０４の上に色値が更新された描画状態属性が積まれたことを表している。
【００３３】
さて図４に戻ると、Ｓ４０５において着目した画像形成命令がオブジェクト描画画像形成命令であるか否か判定する。オブジェクト描画画像形成命令であった場合は、Ｓ４０７で当該画像形成命令に対応するオブジェクト描画命令を呼び出す。すなわち、フェッチした画像形成命令に対応するオブジェクト描画命令をそのオペランドとともに出力してレンダラ１２に引き渡す。この時の描画状態属性値は、描画状態属性スタックの最上位の値を使う。データ６０５が最上位であった場合には、相対スタック参照であるGS2が色値以外の描画状態属性値となる。次にＳ４０８において解釈処理がすでに終了ポイントを超えたかの判別をする。終了ポイントを越えていない場合は、Ｓ４０４に戻り、次の画像形成命令に着目して解釈処理を続行する。Ｓ４０８で既に終了ポイントを越えていた場合には、Ｓ４０９においてグループ終了命令を呼び出す。すなわちグループ終了命令をレンダラ１２に引き渡す。その際に、その時点での描画状態属性値スタックレベルをオペランドとして付加する。そして処理対象のＰＤＬデータの分割部分を対象とした解釈処理を終了する。
【００３４】
図７に解釈処理部１４の一連のオブジェクト描画命令呼び出しの例を示した。符号７０１が解釈開始時に呼び出すグループ開始命令である。符号７０２は図形描画を行うオブジェクト描画命令であり、図７ではＣＴＭおよび色値については相対的な値ＧＳ０がレンダラ１２に引き渡されている。しかし線幅及び色空間については、この命令の解釈時に値が定まっており、その値が引き渡されている。さらに符号７０３は解釈終了時のグループ終了命令であり、解釈処理終了時の描画状態属性値スタック（図７ではＧＳ０−ＧＳ３）が付加されている。このように解釈処理部１４は終了ポイント後のオペレータの区切りまで解釈処理を行い、レンダラ１２に対するオブジェクト描画命令呼び出しを相対的な描画状態属性値により実現する。
【００３５】
＜レンダラ１２の処理＞
続いてレンダラ１２のステップについて説明する。図８に並列処理される複数の中間データ生成部１５のうちのひとつによる処理フロー図を示す。なお図８は解釈処理部１１からオブジェクト描画命令がグループ開始命令で始まりグループ終了命令で終わることを前提としているが、まずオブジェクト描画命令の種類を判定し、その種類に応じた処理に分岐するように構成してもよい。その場合には、オブジェクト描画命令が入力される都度、中間データ生成部１５は命令の種類に応じた処理を実行する。
【００３６】
図８において、起動された中間データ生成部１５は、Ｓ８０１において、対応する解釈処理部１４からまずグループ開始命令を受け取り、Ｄｉｓｐｌａｙ  Ｌｉｓｔ等の中間データ生成処理を開始する。Ｓ８０２でＤＬバッファ１７に中間データの領域（ＤＬバッファ１７）を確保し、Ｓ８０１のグループ開始命令に付加されたインデックス値を中間データに与える。すなわち、ＤＬバッファ１７にインデックス値を書き込む。Ｓ８０３においては解釈処理部１４からオブジェクト描画命令を受け取る。Ｓ８０４において、Ｓ８０３で受け取ったオブジェクト描画命令がグループ終了命令かを判別する。オブジェクト描画命令がグループ終了命令でない場合は、図形、画像、テキスト等を描画するためのオブジェクト描画命令であるとして、Ｓ８０５でＤＬバッファ１７の中間データにオブジェクトを追加する。図９に中間データの概略図を示した。中間データ９０１は、スキャンライン９０２を基としたリストにより構成される。図形、画像、テキストといった各オブジェクトは、輪郭を意味するエッジリスト９０３により表現され、各エッジは、該当するスキャンラインリスト９０２にぶら下がる。さらに各エッジリストは、そのオブジェクトの塗り色や線幅等の描画属性９０４をもっている。ここで中間データ生成部１５は、解釈処理部１４が相対的な描画状態属性を指定した場合は、その相対値によりＤＬバッファ１７内の中間データのエッジリスト９０３及び描画属性９０４を生成する。ここで座標移動を示す描画状態属性値（たとえばＣＴＭ）については、相対的な描画状態属性が原点移動であるとして、中間データの生成を行う。これにより中間データ９０１は、中間データ生成開始時を基とした相対スキャンラインに対するリストとなる。Ｓ８０５で生成済みの中間データに対するオブジェクトの追加が行われると、Ｓ８０３に戻りオブジェクト描画命令の受信を繰り返す。Ｓ８０４においてオブジェクト描画命令がグループ終了命令であった場合は、Ｓ８０６でグループ終了命令に付加されている描画状態属性値スタックの配列をＤＬバッファ１７内に格納し、Ｓ８０７で中間データ結合部１６に終了を通知し、中間データ生成部１５の処理を終了する。
【００３７】
＜中間データ結合処理＞
中間データ結合部１６の処理フローを図１０に示す。中間データ結合処理は、１ページを分割した各分割部分について生成された中間データをリンクして、確定していない描画状態属性値を確定する処理である。なお或るインデックス値に関連付けて生成された中間データを、そのインデックス値の中間データと呼ぶ。
【００３８】
Ｓ１００１において結合する中間データのインデックス値を初期化する。初期値はＰＤＬデータを分割した際の初期値であり通常１とする。中間データ結合部１６は、Ｓ１００２で、Ｓ１００１で初期化したインデックス値の中間データの生成処理終了を待つ。Ｓ１００３でインデックス値をインクリメントし、そのインデックス値に該当する中間データ生成処理終了を待つ。Ｓ１００４で現在のインデックス値の中間データ中の描画状態属性値スタックとＳ１００２の中間データの描画状態属性値スタックとの結合処理を行う。描画状態属性値スタックの結合処理の例を図１１に示した。スタック１１０１が結合前の描画状態属性値スタックであり確定されていない値を含む。スタック１１０２が結合対象である描画状態属性値スタックであり、それ以前のインデックスを持つスタックと既に結合されている。先頭すなわちインデックス値が１であれば結合するまでもなく確定している。スタック１１０３は結合後の描画状態属性値スタックである。なお「結合対象」と「結合前」とはインデックス値で特定できる。結合される分割部分は互いに隣接していることから、インデックス値は連続しており、インデックス値が小さい方の分割部分を結合対象、大きい方を結合前と定義することもできる。
【００３９】
結合対象描画状態値スタック１１０２における最下層スタック配列は、結合前描画状態属性値スタック１１０１の最上位を示すGS0であるため、ＧＳ０は結合前描画状態スタック１１０１の最上位のスタック配列１１０４で置き換えられ、結合がされる。以降、結合対象描画状態属性値スタック１１０２に上位スタック配列にあるGS0の属性値を全て結合前描画状態属性値スタックの参照相対値である最上位の値での置き換えが行われる。例えば、結合前描画状態属性値スタックの２段目の線幅のGS0は、結合前描画状態属性値スタック最上位の値４で置き換えられる。そして全ての相対値が置き換えられた時点で、結合後の描画状態属性値スタック１１０３を得ることができる。このＳ１００４における描画状態属性スタックの結合において、結合後の描画状態属性スタックのGS0に相当する相対スタック開始位置１１０５を保持しておく。この例ではＧＳ０のみを示したが、それより下のレベルを参照する場合も同様に置き換えが行われる。
【００４０】
Ｓ１００５ではＳ１００４で結合した描画状態スタックを基にして中間データ中の相対描画状態属性値の置き換え処理を行う。相対値で記載された描画状態属性値は、図１１のスタック１１０３を参照して置換され、置き換え後の中間データを得る。中間データ中の相対値が記載された描画状態属性値は、相対スタック開始位置１１０５からの相対で置き換え後の値が決定される。例えばGS0は相対スタック開始位置の値を示し、GS2は相対スタック開始位置から2段下位の値での置き換えとなる。
【００４１】
置き換え後の中間データは、座標移動に関する描画状態属性値の置き換えもされたことによりページに対する絶対的な座標が求まる。つまり相対的な位置で作成された中間データに対して、移動を表す確定した描画状態属性値のＣＴＭをかけることで移動量が算出できる。Ｓ１００６において、結合対象である中間データに対する移動量を加味して、結合対象である中間データと結合前中間データとの結合処理を行う。図１２に中間データの結合処理の例を示す。１２０１は結合前の中間データである。一般的にＰＤＬにおける重なりといった位置依存性は、各オブジェクトの画像形成命令順に配置される。つまり先に定義されたオブジェクトと、後から定義されたオブジェクトが重なりを持つ場合は、後から定義されたオブジェクトが上位に配置される。定義の後先は記述の順できまるから、インデックス値が小さいものすなわち「結合対象」の中間データの方が「結合前」の中間データよりも先に定義されていることになる。そのため、結合後の中間データ１２０３は、Ｓ１００５で置き換えられた結合対象の中間データ１２０２を、結合前の中間データ１２０１の各スキャンラインをベースにしたエッジリストの最後尾に追加することで結合を実現できる。中間データ１２０３は結合後の中間データを表している。Ｓ１００７では、Ｓ１００６で結合対象であった中間データがページの最終中間データかの判定をする。最後の中間データであった場合には、Ｓ１００８に進み、ラスタ画像制御部１８にラスタ生成開始の命令を送り、中間データ結合処理を終了する。Ｓ１００７で最後の中間データでなかった場合には、Ｓ１００３に戻って中間データ結合をページ全体の結合処理が終了するまで繰り返す。
【００４２】
＜ラスタ画像生成処理＞
以降でレンダラ１２におけるラスタ画像生成の処理について、ラスタ画像制御部１８と複数並列処理されるラスタ画像生成部１９の詳細を説明する。ラスタ画像制御部１８は、中間データ結合部１６でページ単位の中間データ生成が終了すると、ラスタ画像の生成を開始する。まずラスタ画像制御部は、生成されるページ全体に対する分割数を決める。一般的にラスタ生成の分割については、複数スキャンライン毎もしくはページの左上を原点として、x軸y軸両方向に対して分割するといったタイル単位の領域に分けての並列ラスタ画像生成が行われる。複数スキャンライン単位で並列ラスタ生成する場合は、生成するラスタ画像の解像度とページのサイズから、ページ全体に要するスキャンライン数を得る。ページ全体でスキャンラインが７０００で、各ラスタ画像生成部１９が処理するスキャンライン数を５０とすると分割数は１４０となる。ラスタ画像制御部１８は、所望のラスタ画像を生成するために、ラスタ画像生成部１９を起動する。ラスタ画像生成部１９は、ＤＬバッファ１７に格納されている中間データの読み込みを行う。このときラスタ画像生成部１９が生成対象とするスキャンラインに必要なスキャンライン分の中間データを読み込む。ラスタ画像の生成は、各スキャンライン毎にエッジ、塗り色、重なりの解決により実行される。図１３に各スキャンライン生成の例を示した。スキャンライン１３０１が着目するスキャンラインである。スキャンライン１３０１において、x軸方向にエッジ有無を調べる。スキャンライン１３０１上には、図形１３０２、画像オブジェクト１３０３のエッジがある。
【００４３】
領域１３０４及び１３０７にはオブジェクトが存在しない為、背景色で塗られる。領域１３０５は図形オブジェクト１３０２が定義されている領域であり、この図形オブジェクトの塗り色で各ピクセルの色が決められる。また領域１３０６は図形オブジェクト１３０２とその上位に透明度を持った画像オブジェクト１３０３とが重複した領域である。この領域は、各ピクセルに対して、図形オブジェクトの塗り色と画像の各ピクセルの色値、さらに透明度を使用した合成結果により、最終的なピクセル値を得る。この合成方法については、各ＰＤＬ仕様で定義されたものであり、ＰＤＦではブレンドモードとして様々な合成方法が定義されている。このようなスキャンライン中の各ピクセルの値を順次決めることによってスキャンライン毎のラスタ画像を得る。これを全てのスキャンラインで実施することによって、所望のスキャンライン数のラスタ画像を得ることができる。このようなラスタ画像生成処理を各ラスタ画像生成部１９が並列動作することでページ全体のラスタ画像を出力する。
【００４４】
上記実施形態によれば、ＰＤＬを入力としてラスタ画像生成を行う画像処理装置において、ＰＤＬインタプリタがＰＤＬの各ページ内の画像形成命令の並列解釈をおこない、レンダラにおける中間データ生成及びラスタ画像生成に対しても並列処理を実行させる。これによりマルチＣＰＵ及びマルチコア環境において、ＲＩＰ処理時間を短縮することができる。また特に、単一ページからなるＰＤＬやページ中に多数の画像形成命令がある処理の重い特定ページが存在するＰＤＬのＲＩＰ処理時間を大幅に短縮できる。
【００４５】
[変形例１]
実施例で説明したＰＤＬインタプリタ１１の処理は、ページ毎の処理をシーケンシャルに処理していた。ＰＤＬ全体の処理は、ページ単位での高速化がされていたが、ＰＤＬ全体のラスタ生成の高速化は考慮されていかった。そこで解釈制御部１３がページ分割も同時に行い、それぞれのページで並列処理することで、さらに並列性を増し、高速にラスタ画像生成を行うことができる。
【００４６】
[変形例２]
実施例で説明した解釈制御部１３のページ毎の画像形成命令の分割は、画像形成命令のサイズに対して、分割数で均等に分割していた。そのため中間データ結合部１６において、所望の中間データ生成部１５の処理終了待ちが多発することが考えられる。そこで、解釈制御部１３において分割数で均等に分割するのではなく、分割するサイズはページの画像形成命令の開始に近い部分をより小さいサイズに分割することで、中間データ結合部１６での待ちの発生を抑えることが可能となる。
【００４７】
[変形例３]
実施例で説明した中間データ結合部１６の結合処理は、中間データに対してインデックス値の小さいものから順次結合処理を行っていた。そのため、分割した画像形成命令が複雑である等の理由で特定の中間データ生成が遅い場合、その処理の終了待ちが発生する。そこで中間データの結合処理を、中間データ生成部１５の処理が終わったもので、インデックス値が隣り合う中間データの結合を行っていくことで、待ち時間は短くなり、より高速な中間データ結合生成が可能となる。
【００４８】
[変形例４]
最初の実施形態ではページの分割は適当に行った後、各分割部分をパースして命令の区切り目を確定していた。これに対して、注目した１ページ分のＰＤＬを分割する処理は、分割位置の確定も含めて解釈制御部１３が一元的に行うように構成することもできる。分割位置決定後の処理は上記実施形態と同様である。
【００４９】
［その他の実施例］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005767501.tif 000002
【図２】
0005767501.tif 000003
【図３】
0005767501.tif 000004
【図４】
0005767501.tif 000005
【図５】
0005767501.tif 000006
【図６】
0005767501.tif 000007
【図７】
0005767501.tif 000008
【図８】
0005767501.tif 000009
【図９】
0005767501.tif 000010
【図１０】
0005767501.tif 000011
【図１１】
0005767501.tif 000012
【図１２】
0005767501.tif 000013
【図１３】
0005767501.tif 000014