(57)【要約】【課題】画像の展開処理における処理負荷の偏りを減少させ、ＲＩＰ処理を高速化する。【解決手段】本発明の一実施形態に係る画像処理装置は、ＰＤＬデータを解釈するＰＤＬ解釈手段と、解釈されたＰＤＬデータに基づいて、中間データを生成する中間データ生成手段と、中間データに基づいてラスタ画像を生成するラスタ画像生成手段と、を有する。中間データ生成手段は、複数の処理手段を有し、描画ページの１ページを複数の領域に分割した複数の分割領域のそれぞれに含まれる画像データの展開処理を、複数の処理手段のいずれかに割り当てる。複数の処理手段はそれぞれ、割り当てられた画像データの展開処理を並列に実行して、複数の分割領域のそれぞれに対応する中間データを生成する。【選択図】図３
2019155657.tif 000002
【特許請求の範囲】
【請求項１】
ＰＤＬデータを解釈するＰＤＬ解釈手段と、
前記解釈されたＰＤＬデータに基づいて、中間データを生成する中間データ生成手段と、
前記中間データに基づいてラスタ画像を生成するラスタ画像生成手段と、を有する画像処理装置であって、
前記中間データ生成手段は、複数の処理手段を有し、描画ページの１ページを複数の領域に分割した複数の分割領域のそれぞれに含まれる画像データの展開処理を、前記複数の処理手段のいずれかに割り当て、
前記複数の処理手段はそれぞれ、前記割り当てられた画像データの展開処理を並列に実行して、前記複数の分割領域のそれぞれに対応する中間データを生成することを特徴とする画像処理装置。
【請求項２】
前記中間データは、画像オブジェクトのエッジ情報と各エッジに対応する塗り情報を含み、
前記複数の処理手段はそれぞれ、前記塗り情報に対応する画像データの展開処理を行うことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記分割領域は、１ページをスキャンラインに垂直な方向に分割した領域であることを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記複数の処理手段はそれぞれ、所定のスキャンライン数のバンド単位で前記中間データを生成することを特徴とする請求項１乃至３のいずれか１項に記載の画像処理装置。
【請求項５】
前記中間データ生成手段は、前記画像データのページ上の位置に従って、前記画像データの展開処理を前記複数の処理手段のいずれかに割り当てることを特徴とする請求項１乃至４のいずれか１項に記載の画像処理装置。
【請求項６】
前記中間データ生成手段は、前記複数の分割領域に跨る画像データの展開処理を、前記複数の処理手段のいずれかに割り当てることを特徴とする請求項１乃至４のいずれか１項に記載の画像処理装置。
【請求項７】
前記中間データ生成手段は、前記複数の分割領域に跨る画像データの展開処理を、前記複数の分割領域に跨る画像データのピクセル数に応じて割り当てることを特徴とする請求項６に記載の画像処理装置。
【請求項８】
前記中間データ生成手段は、前記複数の分割領域に跨る画像データの展開処理を、前記複数の分割領域に跨る画像データのタイル数に応じて割り当てることを特徴とする請求項６に記載の画像処理装置。
【請求項９】
前記中間データ生成手段は、前記複数の処理手段のそれぞれによって展開される画像データのピクセル数の偏りが小さくなるように、前記画像データの展開処理を割り当てることを特徴とする請求項１乃至４のいずれか１項に記載の画像処理装置。
【請求項１０】
前記中間データ生成手段は、前記複数の処理手段のそれぞれによって展開される画像データのタイル数の偏りが小さくなるように、前記画像データの展開処理を割り当てることを特徴とする請求項１乃至４のいずれか１項に記載の画像処理装置。
【請求項１１】
前記中間データ生成手段は、さらに、前記複数の処理手段のそれぞれの処理能力に応じて、前記画像データの展開処理を割り当てることを特徴とする請求項１乃至１０のいずれかに記載の画像処理装置。
【請求項１２】
前記処理能力は、ＣＰＵコアのクロック数であることを特徴とする請求項１１に記載の画像処理装置。
【請求項１３】
前記処理能力は、ハードウェアアシストの有無であることを特徴とする請求項１１に記載の画像処理装置。
【請求項１４】
前記分割領域の数は、ＣＰＵのコア数に応じて決定されることを特徴とする請求項１乃至１３のいずれか１項に記載の画像処理装置。
【請求項１５】
前記分割領域の数は、ＡＳＩＣとのハードウェア構成に応じて決定されることを特徴とする請求項１乃至１３のいずれか１項に記載の画像処理装置。
【請求項１６】
コンピュータを、請求項1乃至１５のいずれか１項に記載の画像処理装置として機能させるためのプログラム。
【請求項１７】
ＰＤＬデータを解釈するＰＤＬ解釈手段と、
前記解釈されたＰＤＬデータに基づいて、中間データを生成する中間データ生成手段と、
前記中間データに基づいてラスタ画像を生成するラスタ画像生成手段と、を有する画像処理装置によって実行される画像処理方法であって、
前記中間データ生成手段は、複数の処理手段を有し、
前記中間データ生成手段が、描画ページの１ページを複数の領域に分割した分割領域のそれぞれに含まれる画像データの展開処理を、前記複数の処理手段のいずれかに割り当てるステップと、
前記複数の処理手段がそれぞれ、前記割り当てられた画像データの展開処理を並列に実行して、前記分割領域のそれぞれに対応する中間データを生成するステップと
を含むことを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法、及びプログラムに関する。
【背景技術】
【０００２】
ページ記述言語（ＰＤＬ）で記述されたデータ（以下、ＰＤＬデータともいう）を、ネットワーク等を介して受信し、専用のインタプリタにより解釈し、ラスタ画像を形成するＲＩＰ処理を行い、印刷処理をするプリンタが広く知られている。また、ＰＣ内のメモリに実行可能なプログラムとして格納されたプリンタドライバ等のホストアプリケーションが、ＰＣ内のＰＤＬデータを解釈して、ＲＩＰ処理によりラスタ画像を生成し、プリンタに送信することもできる。
【０００３】
ＲＩＰ処理では、ＰＤＬインタプリタでＰＤＬデータが解析され、オブジェクト描画命令がリスト化される。オブジェクト描画命令のリストは、ディスプレイリストともいう。次いで、ハードウェアもしくはソフトウェアによって実現されたレンダラが、ディスプレイリストに基づいて中間データを生成し、所定の単位（例えば、複数スキャンライン毎、もしくはページ全体）でラスタ画像を生成する。
【０００４】
また、ＲＩＰ処理では、各処理を複数のプロセッサ（ＣＰＵ）や複数のハードウェアリソースに割り当てることで、並列処理による高速化を実現することができる。例えば、ＰＤＬ解析処理やレンダリング処理といった処理毎にプロセッサやハードウェアを割り当て、並列処理させるパイプライン化技術がある。また、複数ページのＲＩＰ処理を、ページ毎に複数のプロセッサやハードウェアに割り当てる方法（ページ並列化）や、１ページのＲＩＰ処理をバンド毎に複数のプロセッサに割り当てる方法がある。
【０００５】
さらに、このような技術において、処理負荷が特定のプロセッサやハードウェアに偏らないようにして、各処理を並列化する技術が知られている。例えば、特許文献１は、ＰＤＬデータの種類やＰＤＬデータを生成したアプリケーションプログラムの種別等から処理負荷を特定し、処理負荷に基づいて各処理をパイプラインに割り当てることを開示している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−２８０１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１の技術であっても、ＰＤＬデータ中に画像が多く含まれる場合、中間データを生成する際の画像の展開処理において、特定のプロセッサやハードウェアに処理負荷が偏ってしまうことがある。処理負荷が偏ってしまうと、ＲＩＰ処理の高速化はそれほど見込めなくなってしまう。
【０００８】
本発明は、このような問題に鑑みてなされたものであり、その目的とするところは、画像の展開処理における処理負荷の偏りを減少させ、ＲＩＰ処理を高速化することにある。
【課題を解決するための手段】
【０００９】
本発明の一実施形態に係る画像処理装置は、ＰＤＬデータを解釈するＰＤＬ解釈手段と、前記解釈されたＰＤＬデータに基づいて、中間データを生成する中間データ生成手段と、前記中間データに基づいてラスタ画像を生成するラスタ画像生成手段と、を有し、前記中間データ生成手段は、複数の処理手段を有し、描画ページの１ページを複数の領域に分割した複数の分割領域のそれぞれに含まれる画像データの展開処理を、前記複数の処理手段のいずれかに割り当て、前記複数の処理手段はそれぞれ、前記割り当てられた画像データの展開処理を並列に実行して、前記複数の分割領域のそれぞれに対応する中間データを生成することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、画像の展開処理における処理負荷の偏りを減少させ、ＲＩＰ処理を高速化することができる。
【図面の簡単な説明】
【００１１】
【図１】画像処理装置のハードウェア構成図である。
【図２】画像処理装置の機能ブロック図である。
【図３】中間データ生成部の機能ブロック図である。
【図４】描画ページの例を示す図である。
【図５】ＤｉｓｐｌａｙＬｉｓｔの例を示す図である。
【図６】短冊領域に分割した描画ページの例を示す図である。
【図７】短冊領域に分割し、さらにバンド毎に分割した描画ページの例を示す図である。
【図８】中間データの構成例を示す図である。
【図９】画像管理テーブルの構成例を示す図である。
【図１０】画像管理テーブル生成処理のフローチャートである。
【図１１】画像管理テーブルの構成例を示す図である。
【図１２】中間データ生成処理のフローチャートである。
【図１３】画像データ読み込み処理のフローチャートである。
【図１４】描画ページの例を示す図である。
【図１５】展開スレッド決定処理のフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について、図面を参照して詳細に説明する。
【第１の実施形態】
【００１３】
＜コンピュータの構成＞
図１は、本発明の第１の実施形態にかかる画像処理装置のハードウェア構成図である。画像処理装置１０１は、入出力Ｉ／Ｆ（インターフェース）１０２、ＣＰＵ１０３、ＲＡＭ１０４、ＲＯＭ１０５、及びネットワークＩ／Ｆ１０６を有し、各構成要素は、データ転送バス１１１によって相互に通信可能に接続される。なお、画像処理装置１０１は、コンピュータ、プリンタ、またはモバイル機器などとすることができる。
【００１４】
入出力Ｉ／Ｆ１０２は、データの入出力を行う。入力元としては、ＣＤ、ＤＶＤ、ＵＳＢ、ＳＤカードなどの各種データ保存可能なメディアがある。また、出力先としては、前述したメディアに加えて、プリンタやディスプレイなどがある。本実施形態では、入出力Ｉ／Ｆ１０２は、ＰＤＬデータなどの画像データを画像処理装置１０１へ入力するため、また、生成した中間データを不図示の外部機器へ出力するために使用される。
【００１５】
ＣＰＵ１０３は、演算処理を実行する。本実施形態では、ＣＰＵ１０３は、画像処理装置１０１の各モジュールの処理における各種演算処理を行う。ＣＰＵ１０３は、複数の演算ユニット（コアともいう）を搭載しており、複数の処理（スレッドＡ、Ｂ等）を並列で処理することができる。
【００１６】
ＲＡＭ１０４は、一時的なデータの保存に用いられる。ＣＰＵ１０３が実行するソフトウェアは、データ保存や自身の動作の為にＲＡＭ１０４を使用する。本実施形態では、例えば、画像データや一時変数が保存される。また、本実施形態のプログラムは、ＲＡＭ１０４にロードされ、実行される。
【００１７】
ＲＯＭ１０５は、主に永続的なデータの保存に用いられる。本実施形態では、ＲＯＭ１０５は、プログラムや画像データの格納先として用いられ、ＲＯＭ１０５の容量に対して大きすぎるデータについては、一時的に不図示の外部記憶装置に退避されうる。
【００１８】
ネットワークＩ／Ｆ１０６は、外部とのデータ転送に用いられる。画像処理装置１０１は、ネットワークＩ／Ｆ１０６を介して、ネットワーク１１０上の各機器と通信可能である。また、クラウドや個別のサーバなどとデータ送受信の必要がある場合には、画像処理装置１０１は、ネットワークＩ／Ｆ１０６から有線ＬＡＮまたは無線ＬＡＮに接続されて、データ転送が行われる。
【００１９】
＜ＰＤＬ−ＲＩＰ処理の全体説明＞
図２は、本発明の一実施形態における画像処理装置１０１の機能ブロック図である。尚、図２中の全てのソフトウェアモジュールは、ＲＯＭ１０５上にコンピュータ読み取り可能に記録されたプログラムを、ＲＡＭ１０４をワークメモリとして利用して、ＣＰＵ１０３が実行することで実装される。以下、各ソフトウェアモジュールについて説明する。
【００２０】
図２（ａ）において、本実施形態の画像処理装置１０１は、ＰＤＬインタプリタ２０１、中間データ生成部２０２、及びラスタ画像生成部２０４を有する。図２（ｂ）は、本実施形態において、ＰＤＬインタプリタ２０１、中間データ生成部２０２、及びラスタ画像生成部２０４が、異なる画像処理装置に配置された例を示す。図示されるように、ＰＤＬインタプリタ２０１及び中間データ生成部２０２が、画像処理装置１０１ａに配置され、ラスタ画像生成部２０４が、別の画像処理装置１０１ｂに配置されている。以下、図２（ａ）に示した画像処理装置１０１に基づいて、本実施形態の詳細について説明する。
【００２１】
ＰＤＬインタプリタ２０１は、ＰＤＬデータの形式で画像形成命令を受け取る。ＰＤＬデータの代表的なものとして、Ａｄｏｂｅ社のＰｏｓｔＳｃｒｉｐｔやＰＤＦ、Ｍｉｃｒｏｓｏｆｔ社のＸＰＳといったものがあるが、これらに限定されない。
【００２２】
次いで、ＰＤＬインタプリタ２０１は、ＰＤＬデータ中の画像形成命令を解釈する。すなわち、ＰＤＬインタプリタ２０１は、ＰＤＬ解釈手段として機能する。画像形成命令には、各ＰＤＬ仕様に応じて、テキスト命令、グラフィックス命令、画像オブジェクト命令等が定義される。各描画命令の実体は、ＰＤＬデータ中で様々な圧縮形式により、圧縮することができる。例えば、ＰＤＦ仕様において、画像オブジェクト命令は、ＪＰＥＧといった非可逆圧縮や、ＬＺＷといった可逆圧縮で圧縮されている。ＰＤＬインタプリタ２０１は、解釈した画像形成命令を、内部表現形式であるオブジェクト描画命令に変換して、中間データ生成部２０２に渡す。
【００２３】
中間データ生成部２０２は、オブジェクト描画命令から、ページ単位もしくは任意の領域毎に中間データ２０３を生成する。中間データ２０３は、ラスタ画像生成部２０４に渡される。例えば、中間データ２０３を所定のスキャンライン数のバンド単位で生成した場合は、生成したバンド分の中間データ２０３がラスタ画像生成部２０４に渡される。
【００２４】
そして、ラスタ画像生成部２０４は、中間データ２０３に基づいて、処理されたバンド分のラスタ画像を生成する。画像処理装置１０１は、バンド毎にラスタ画像生成処理を繰り返すことで、ＰＤＬデータを入力とした１ページ分のラスタ画像を生成する。ＰＤＬインタプリタ２０１、中間データ生成部２０２、及びラスタ画像生成部２０４は、パイプライン化による並列処理をすることで、高速化することも可能である。
【００２５】
＜中間データ生成処理＞
以下では、中間データ生成部２０２が実施する中間データ生成処理について説明する。
【００２６】
図３は、中間データ生成部２０２の構成を詳細に示すブロック図である。図示されるように、中間データ生成部２０２は、ＤＬ（ディスプレイリスト）を生成するＤＬ生成部３０１、生成されたＤＬに基づいて中間データを生成して格納する複数の中間データ格納部３０３を有する。なお、２つの中間データ格納部が図示されているが、中間データ格納部の数は２つに限定されるものではない。
【００２７】
ＤＬ生成部３０１は、ＰＤＬインタプリタ２０１が解釈した画像形成命令をオブジェクト描画命令として受け取り、ＤｉｓｐｌａｙＬｉｓｔ３０２を生成し、保持する。ＤＬ生成部３０１は、保持しているＤｉｓｐｌａｙＬｉｓｔ３０２を順次、更新していく。
【００２８】
中間データ格納部３０３は、制御部３０４、エッジ情報生成部３０５、及び塗り情報生成部３０６を有する。制御部３０４は、中間データ格納部３０３の全体的な動作を制御し、ＤｉｓｐｌａｙＬｉｓｔ３０２を読み込んだり、中間データ２０３の生成単位を決定したりする。エッジ情報生成部３０５は、ＤｉｓｐｌａｙＬｉｓｔ３０２の形式で保持されたオブジェクト描画命令に基づいて、描画ページにおけるオブジェクトのエッジ情報を生成する。描画ページについては図４を参照して後述する。塗り情報生成部３０６は、ＤｉｓｐｌａｙＬｉｓｔ３０２の形式で保持されたオブジェクト描画命令に基づいて、描画ページにおけるオブジェクトのエッジの塗り情報（色情報）を生成する。
【００２９】
図４は、中間データを説明する為の描画ページの例を示す。描画ページ４００は、ＰＤＬデータに含まれた複数の画像形成命令に基づいて表現されたものである。描画ページ４００のＰＤＬデータには、以下の順番で画像形成命令が定義されている。
【００３０】
画像形成命令４０１は、画像オブジェクトを配置するための画像オブジェクト命令であり、透明度０％で定義されている。画像形成命令４０２は、テキストを配置するためのテキスト命令であり、黒（Ｒ＝０，Ｇ＝０，Ｂ＝０）の塗りを指定されている。以下、画像形成命令４０４、画像形成命令４０５、画像形成命令４０８が、画像オブジェクト命令である。また、画像形成命令４０３、画像形成命令４０６、画像形成命令４０７が、テキスト命令である。なお、描画ページ４００には示されていないが、画像形成命令には、グラフィックスを配置するためのグラフィックス命令も含まれ、ＲＧＢ値によって塗りが指定される。
【００３１】
次に、図４の描画ページ４００に対するＤｉｓｐｌａｙＬｉｓｔ３０２及び中間データ２０３の具体例を説明する。
【００３２】
ＤＬ生成部３０１は、画像形成命令４０１に対するオブジェクト描画命令を、ＰＤＬインタプリタ２０１から受け取り、ＤｉｓｐｌａｙＬｉｓｔ３０２に当該オブジェクトの開始座標点、塗りの色、重ね合わせ情報を追加する。以降、画像形成命令４０２から画像形成命令４０８に対するオブジェクトについての情報を順次、ＤｉｓｐｌａｙＬｉｓｔ３０２に追加し、ＤｉｓｐｌａｙＬｉｓｔ３０２を更新する。ＤｉｓｐｌａｙＬｉｓｔ３０２は、描画ページ４００の左上端を原点として、各オブジェクトの開始座標をＹ方向に整列させたリストである。
【００３３】
図５は、描画ページ４００に対するＤｉｓｐｌａｙＬｉｓｔ３０２の例を示す。ＤｉｓｐｌａｙＬｉｓｔ３０２では、描画ページ４００のＹ方向及び定義順であるＺオーダー順に、オブジェクト描画命令がリスト化される。
【００３４】
ＤｉｓｐｌａｙＬｉｓｔ３０２のメンバ５０１は、画像形成命令４０１に対するものであり、開始スキャンラインである１０００スキャンラインのリスト部分に追加される。画像形成命令４０１は、画像オブジェクト命令である。メンバ５０１の要素として、オブジェクトのＸ方向の座標が「５０」、オブジェクトの形状を表すパス情報（Ｐａｔｈ）が「画像矩形」、色情報として画像の実体を表す参照ＩＤが「画像０１」、透明度が「０％」として指定されている。また、メンバ５０１には、色情報として指定された画像の実体の特性を表す画像特性５０２が紐付けられる。画像特性５０２は、ＰＤＬデータ中に格納されている「画像０１」の圧縮形式や、元画像のサイズ（縦×横の大きさ）、ファイルサイズ（データ量）等の特性情報を含む。本実施形態では、ＤｉｓｐｌａｙＬｉｓｔ３０２は、メンバ５０１に対する画像の実体は格納しない。すなわち、後述するように、画像の実体は、後の中間データ生成処理において、初めてＰＤＬデータ中から読み込まれ、メモリ上に展開される。
【００３５】
メンバ５０３は、画像形成命令４０２に対するものであり、メンバ５０１と同様に１０００スキャンラインのメンバとしてリストに追加される。ただし、メンバ５０３のＸ方向の座標は、メンバ５０１とは異なり、「２６００」と指定されている。画像形成命令４０２は、テキスト命令であるため、パス情報（Ｐａｔｈ）は「文字列」として指定されている。また、色情報は、黒（Ｒ＝０，Ｇ＝０，Ｂ＝０）の塗りとして指定されている。
【００３６】
以降、同様に画像オブジェクト命令として、メンバ５０５、メンバ５０７、メンバ５１１と、それぞれの画像特性情報として、画像特性５０６、画像特性５０８、画像特性５１２が、ＤｉｓｐｌａｙＬｉｓｔ３０２に格納される。また、テキスト命令として、メンバ５０４、メンバ５０９、メンバ５１０が、ＤｉｓｐｌａｙＬｉｓｔ３０２に登録される。ＤｉｓｐｌａｙＬｉｓｔ３０２に格納された複数のオブジェクト描画命令は、中間データ生成部２０２の以降の処理で、中間データ２０３を生成するために使用される。
【００３７】
本実施形態では、中間データ生成処理において、ＤｉｓｐｌａｙＬｉｓｔ３０２から、複数の中間データ格納部３０３の並列処理により、中間データ２０３が生成される。すなわち、複数の中間データ格納部３０３は、中間データ生成部２０２が有する複数の処理手段として機能する。以降では、図６、図７、図８を用いて、中間データ生成の並列処理を説明する。並列処理のスレッド数は、ＣＰＵのコア数に応じて決定され、２以上のコアでの並列処理が可能である。本実施形態は、スレッド数を２として説明する。
【００３８】
図６は、図４に示した描画ページ４００が、スキャンラインに垂直な方向で、複数の短冊状の領域（以下、短冊領域ともいう）に分割されていることを示している。描画ページ４００は、２つの短冊状の領域６０１、６０２に分割され、それぞれの領域に対する中間データ２０３を、２つの中間データ格納部３０３が並列処理によりそれぞれ生成する。２つの短冊状の領域６０１、６０２は、１ページの描画ページ４００を、複数の領域に分割した複数の分割領域である。
【００３９】
また、図７に示すように、描画ページ４００は、スキャンラインに垂直な方向で短冊状の領域に分割し、さらにスキャンラインに平行な方向に所定のライン数を有するバンド単位で分割してもよい。すなわち、描画ページ４００をバンド毎に分割し、中間データ格納部３０３がバンド毎に中間データを生成し、格納することも可能である。図７に示した描画ページ４００では、２つの短冊状の領域６０１、６０２が、それぞれ３つのバンドに分割されている。この場合、１つの中間データ格納部３０３が、短冊領域６０１に含まれる３つのバンド領域７０１、７０２、７０３のそれぞれに対応する中間データを生成する。また、もう１つの中間データ格納部３０３が、短冊領域６０２に含まれる３つのバンド領域７０４、７０５、７０６のそれぞれに対応する中間データを生成する。このような領域分割は、描画ページの出力サイズや、ＣＰＵ１０３のコア数に応じて決定される。
【００４０】
図８は、短冊状の領域６０１及び６０２のそれぞれに対する中間データ２０３の構成を示す。
【００４１】
図８（ａ）は、短冊状の領域６０１に対する中間データを示す。中間データは、画像における各オブジェクトのエッジを特定するためのエッジ情報８０１と、各オブジェクトの塗り（例えば、色）を特定するための塗り情報８０２とを含む。また、中間データは、塗り情報８０２から参照される画像を、画像データ８０３として含む。
【００４２】
エッジ情報８０１、塗り情報８０２、及び画像データ８０３は、３つのバンド領域７０１、７０２、７０３のそれぞれに対して、バンド毎に生成される。なお、エッジ情報８０１は、従来の一般的な手法により、オブジェクト描画命令の重なりを考慮して、バンド領域毎に分割される。また、エッジ情報８０１の各エッジは、塗りつぶす色を表す塗り情報８０２の各成分に紐付けられている。オブジェクト描画命令の重なりがある領域（すなわち、複数のオブジェクトが重なっている領域）では、塗り情報８０２に、複数の塗り情報成分が含まれる。
【００４３】
エッジ８０４に囲まれた領域は、塗り情報８０２の一成分である塗り情報成分８０６に紐付けられている。塗り情報成分８０６は、画像ＩＤとして「画像０１」を指定し、画像の透明度が０％であることを示している。
【００４４】
エッジ８０５に囲まれた領域は、塗り情報８０２の一成分である塗り情報成分８０７に紐付けられている。塗り情報成分８０７は、画像ＩＤとして「画像０３」を指定し、画像の透明度が０％あることを示している。
【００４５】
塗り情報成分８０６、８０７が指定する画像の実体はそれぞれ、画像データ８０３に画像成分８０８及び８０９として含まれている。画像データ８０３の各画像成分は、ＰＤＬデータ中で圧縮された状態から、画像特性５０２に示された圧縮形式に従って展開され、展開された状態で中間データとして格納される。
【００４６】
このように、本実施形態では、画像の実体の読み込み及び展開処理は、中間データを生成する際に画像の実体が必要になった段階で初めて実施される。ＰＤＬデータ中で定義された画像が他の画像等のオブジェクトに重なって隠れている場合は、隠れている画像の画像データの読み込みは実施されない。また、中間データのデータサイズが大きい場合には、再度圧縮することでデータサイズを小さくしてもよい。
【００４７】
３つ目のバンド領域７０３の中間データでは、「画像０３」及び「画像０４」の画像成分として画像成分８１０及び８１１が画像データ８０３に格納される。「画像０３」及び「画像０４」の画像成分は、任意のタイルサイズに分割され、バンド領域７０３に必要な部分のみが格納される。すなわち、画像が複数のバンド領域に跨る場合には、それぞれのバンド領域の中間データに画像全体を格納しないので、中間データのデータサイズを小さくすることができる。
【００４８】
図８（ｂ）は、短冊状の領域６０２に対する中間データを示す。図８（ｂ）に示した中間データも、図８（ａ）の中間データと同様に、エッジ情報８０１、塗り情報８０２、及び画像データ８０３を含む。図８（ｂ）の中間データでは、「画像０４」の画像成分として、塗り情報成分８２１から参照される画像の実体の画像成分８２２が、中間データに格納される。「画像０４」の画像成分は、任意のタイルサイズに分割され、バンド領域７０６に必要な領域のみが格納される。
【００４９】
中間データ格納部３０３が実施する画像の実体の読み込み及び展開処理は、ＤＬ生成部３０１によって生成される画像管理テーブルを用いて行われ、画像管理テーブルにより、展開の対象スレッド等が管理される。
【００５０】
図９は、本実施形態における画像管理テーブル９００の構成を示す。画像管理テーブル９００は、画像ＩＤ９０１、圧縮形式９０２、元画像サイズ９０３、開始座標値９０４、展開スレッド番号９０５、参照スレッド数９０６、及び展開先アドレス９０７を含む。画像管理テーブル９００には、ＤＬ生成部３０１によって、ＤｉｓｐｌａｙＬｉｓｔ３０２中に含まれる画像の情報が登録される。
【００５１】
具体的には、画像ＩＤ９０１、圧縮形式９０２、元画像サイズ９０３、及び開始座標値９０４にはそれぞれ、ＤｉｓｐｌａｙＬｉｓｔ３０２に含まれる各画像のＩＤ、特性（圧縮形式及び元画像サイズ）、及び座標値が登録される。展開スレッド番号９０５には、対象画像の展開を行うスレッドの識別番号が登録される。参照スレッド数９０６には、対象画像を参照するスレッドの数（すなわち、対象画像を領域に含むスレッドの数）が登録される。展開先アドレス９０７には、中間データを生成する際に画像が展開されたメモリ上のアドレスが登録される。
【００５２】
図１０は、本実施形態における画像管理テーブル生成処理のフローチャートを示す。図１０のフローチャートで示される一連の処理は、ＣＰＵがＲＯＭに格納されているプログラムをＲＡＭに展開し、実行することに行われる。あるいはまた、図１０のフローチャートにおけるステップの一部または全部の機能をＡＳＩＣや電子回路等のハードウェアで実現してもよい。なお、各処理の説明における記号「Ｓ」は、当該フローチャートにおけるステップを意味する。
【００５３】
ＤＬ生成部３０１は、１ページ分のＤｉｓｐｌａｙＬｉｓｔ３０２を生成した後、Ｓ１００１で、生成したＤｉｓｐｌａｙＬｉｓｔ３０２を読み込む。
【００５４】
Ｓ１００２で、ＤＬ生成部３０１は、画像管理テーブル９００の領域をメモリ上に確保する。画像管理テーブル９００は、複数の中間データ格納部３０３が共通にアクセスできる。例えば、中間データ格納部３０３が複数のスレッドで実行される場合は、画像管理テーブル９００の領域は共有メモリ上に確保される。また、中間データ格納部３０３が複数のハードウェアで実行される場合や、ハードウェアアシストを用いて実行される場合は、画像管理テーブル９００の領域は、複数のハードウェアからアクセスできるＲＡＭに確保される。
【００５５】
Ｓ１００３で、ＤＬ生成部３０１は、中間データ格納部３０３によって行われる並列処理の数を決定する。並列処理の数は、ＣＰＵのコア数、マルチＣＰＵの数、またはＡＳＩＣとのハードウェア構成に応じて決定してもよいし、事前に定義した数に従って決定してもよい。例えば、大判プリンタ等で大きなサイズの描画ページを処理する場合は、並列処理の数を増やすことで、全体の処理を速くすることができる。なお、本実施形態では、ＣＰＵ１０３が２つのコアを有するので、並列処理の数は「２」とする。
【００５６】
Ｓ１００４で、ＤＬ生成部３０１は、Ｓ１００３で決定した並列処理の数に応じて、複数のデータ格納部３０３のそれぞれに、描画ページの処理対象の領域を割り当てる。例えば、図７及び図８に示した例において、出力用紙サイズが横４８００ピクセル、縦７９００ピクセルであるとする。この場合、１つの中間データ格納部３０３には、横１ピクセルから２３９９ピクセルの短冊状の領域６０１が割り当てられる。また、もう１つの中間データ格納部３０３には、横２４００から４８００ピクセルの短冊状の領域６０２が割り当てられる。
【００５７】
Ｓ１００５で、ＤＬ生成部３０１は、出力サイズのＤｉｓｐｌａｙＬｉｓｔ３０２中の画像の検索を行う。画像の検索は、スキャンライン順に実施される。
【００５８】
Ｓ１００６で、画像が発見されると、Ｓ１００７に進む。後述するように、ＤＬ生成部３０１は、画像を発見する毎にＳ１００７からＳ１０１０の処理を繰り返し、ＤｉｓｐｌａｙＬｉｓｔ３０２中のすべての画像を画像管理テーブル９００に登録する。一方、画像が発見されない場合は、処理を終了する。
【００５９】
Ｓ１００７で、ＤＬ生成部３０１は、発見した画像の画像特性５０２をＤｉｓｐｌａｙＬｉｓｔ３０２から取得し、画像管理テーブル９００に登録する。具体的には、ＤＬ生成部３０１は、画像管理テーブル９００の画像ＩＤ９０１、圧縮形式９０２、及び元画像サイズ９０３に、ＤｉｓｐｌａｙＬｉｓｔ３０２の画像特性５０２を登録する。
【００６０】
Ｓ１００８で、ＤＬ生成部３０１は、ＤｉｓｐｌａｙＬｉｓｔ３０２から、発見した画像の開始点の座標（すなわち、Ｙ方向の座標を示すスキャンラインの位置と、Ｘ方向の座標）を求めて、画像管理テーブル９００の開始座標値９０４に格納する。
【００６１】
Ｓ１００９で、ＤＬ生成部３０１は、発見した画像の開始座標値９０４が、Ｓ１００４でデータ格納部３０３に割り当てた描画ページの領域のどこに該当するかを判断して、展開スレッド番号９０５を決定する。例えば、図７の例では、画像オブジェクト４０１、４０５、４０８（画像ＩＤ９０１はそれぞれ「０１」、「０３」、「０４」）の開始座標値９０４は、短冊状の領域６０１に存在するため、スレッド１が割り当てられる。したがって、これらの画像の展開スレッド番号９０５は、「１」と登録される。また、画像オブジェクト４０４（画像ＩＤ９０１は「０２」）の開始座標値９０４は、短冊状の領域６０２に存在するため、スレッド２が割り当てられる。したがって、展開スレッド番号９０５は「２」と登録される。このように、画像の展開スレッドは、画像のページ上の位置に従って割り当てられる。
【００６２】
Ｓ１０１０で、ＤＬ生成部３０１は、画像がいくつの領域に重なるかを示す参照スレッド数９０６を、Ｓ１００４でデータ格納部３０３に割り当てた描画ページの領域と、画像の開始座標値や画像のサイズから求める。図７の例では、画像オブジェクト４０８が、短冊領域６０１、６０２に重なっているので、画像ＩＤが「０４」の参照スレッド数９０６は、「２」と登録される。その他の画像は複数の領域に重なっていないので、参照スレッド数９０６は「１」と登録される。
【００６３】
なお、画像管理テーブル９００の展開先アドレス９０７は、メモリリソースが潤沢にある環境では、画像管理テーブル９００の生成時に登録してもよい。しかしながら、一般的にメモリリソースには限りがあり、固定バッファが画像の展開領域として使用される。したがって、本実施形態では、中間データを生成する際の画像の展開処理時に、画像の展開先アドレスを登録する。
【００６４】
次いで、処理はＳ１００５に戻り、ＤＬ生成部３０１は、ＤｉｓｐｌａｙＬｉｓｔ３０２中の画像の検索を行う。ＤｉｓｐｌａｙＬｉｓｔ３０２中の全ての画像が発見され、画像管理テーブル９００に登録されると、処理は終了する。
【００６５】
上記説明では、Ｓ１００９において、画像の展開を行う展開スレッド番号９０５を、画像の開始座標値９０４に基づいて決定した。しかしながら、短冊領域毎の画像配置に偏りがあることで、画像の読み込み及び展開処理を実施する各並列処理の負荷にも偏りが発生することがある。特に、複数の短冊領域に画像が跨る場合は、どちらのスレッドで画像の展開処理を行うかで負荷の偏りが大きく変わってくる。そのため、図１１に示すように、本発明の一実施形態に係る画像管理テーブル１１００は、各スレッドで処理される画像のタイル数１１０１及び１１０２（スレッドが２個の場合）をさらに有してもよい。タイル数１１０１及び１１０２は、各短冊領域に重なる画像のサイズを示す。画像のサイズは、タイル数に限定されるものではなく、例えば、ピクセル数で保持してもよい。
【００６６】
次に、タイル数１１０１及び１１０２を有する画像管理テーブル１１００の生成処理について説明する。
【００６７】
ＤＬ生成部３０１は、図１０のＳ１００９における展開スレッド決定処理において、タイル数１１０１とタイル数１１０２とを比較して、どちらのスレッドで画像を展開するべきか判断する。例えば、図７の画像オブジェクト４０８（画像ＩＤ「０４」）は、画像管理テーブル１１００にも示すように、短冊領域６０１に重なるタイル数（画像のサイズ）より、短冊領域６０２に重なるタイル数（画像のサイズ）の方が多い。この場合、ＤＬ生成部３０１は、画像オブジェクト４０８（画像ＩＤ「０４」）の展開スレッド番号を、「２」（短冊領域６０２）と決定する。すなわち、ＤＬ生成部３０１は、重なるタイル数が多い方の領域（短冊領域６０２）を処理するスレッドを、対象画像の展開スレッドと決定する。
【００６８】
以上説明したように、ＤＬ生成部３０１は画像管理テーブルを生成する。生成された画像管理テーブルは、後続の中間データ生成処理において、画像の展開処理を行うスレッド等を管理するために用いられる。
【００６９】
図１２は、本実施形態における中間データ生成処理のフローチャートを示す。以下では、中間データ格納部３０３が、画像管理テーブルを用いて複数スレッドで中間データを生成する処理について説明する。本実施形態では、中間データを生成する際に、画像の読み込み及び展開処理が実施される。
【００７０】
なお、図１２のフローチャートで示される一連の処理は、ＣＰＵがＲＯＭに格納されているプログラムをＲＡＭに展開し、実行することに行われる。あるいはまた、図１２のフローチャートにおけるステップの一部または全部の機能をＡＳＩＣや電子回路等のハードウェアで実現してもよい。なお、各処理の説明における記号「Ｓ」は、当該フローチャートにおけるステップを意味する。
【００７１】
まず、Ｓ１２０１で、中間データ格納部３０３の制御部３０４は、生成する中間データの対象スキャンラインを決定する。図８の例では、Ａ４ページの７８００ラインを３つバンドに分割して中間データ２０３を生成する。そのため、最初の対象スキャンライン（すなわち、１バンド目）は、スキャンライン１から２６００スキャンラインと決定される。
【００７２】
Ｓ１２０２で、中間データ格納部３０３の塗り情報生成部３０６は、ＤｉｓｐｌａｙＬｉｓｔ３０２から、対象スキャンラインであるスキャンライン１から２６００スキャンラインに存在するオブジェクトの塗りつぶし情報を読み込む。
【００７３】
Ｓ１２０３で、塗り情報生成部３０６は、読み込んだ塗りつぶし情報に基づいて、中間データ２０３の塗り情報８０２の塗り情報成分を生成する。塗り情報成分は、図８に示したように、塗り情報成分のＩＤ（塗りＩＤ）と、各エッジの塗りつぶしの色（例えば、ＲＧＢ値）もしくは画像の実体を示す画像ＩＤと、その透明度とを含む。
【００７４】
Ｓ１２０４で、中間データ格納部３０３のエッジ情報生成部３０５が、エッジ生成の対象となるＤｉｓｐｌａｙＬｉｓｔ３０２のパス情報を読み込む。
【００７５】
Ｓ１２０５で、エッジ情報生成部３０５は、読み込んだパス情報に基づいて、中間データ２０３のエッジ情報８０１のエッジ情報成分を生成する。エッジ情報生成部３０５は、対象スキャンラインに位置する各オブジェクトの重なりを考慮した境界をエッジとして、領域を分けていく。図８のエッジ８０４のように、各エッジはその塗りつぶしの色について、塗り情報８０２の各塗り情報成分への参照値を有する。また、エッジ情報８０１は、スキャンライン毎に生成する場合は、所定の正方領域を１つのタイルとして、タイルごとに生成してもよい。例えば、エッジ情報８０１は、Ｘ方向及びＹ方向にそれぞれ６４ピクセル単位で生成してもよい。さらに、生成したエッジ情報は、可逆圧縮によりサイズを小さくすることができる。この場合、タイル単位のエッジ情報の集合として、２６００スキャンラインを対象としたエッジ情報８０１が生成される。
【００７６】
Ｓ１２０６で、塗り情報生成部３０６は、Ｓ１２０３で生成した塗り情報８０２から、画像オブジェクトを検索する。画像オブジェクトの検索は、塗り情報８０２の各塗り情報成分に画像を示す画像ＩＤが含まれるかどうかを順にみることで行われる。
【００７７】
Ｓ１２０７で、画像オブジェクトが存在した場合は、Ｓ１２０８の画像データ読み込み処理に進む。画像データ読み込み処理で、塗り情報生成部３０６は、ＰＤＬデータ中の画像データを読み込み、塗り情報８０２の塗り情報成分に含まれる画像ＩＤに基づいて、画像オブジェクトに対応する画像データ８０３を生成する。画像データ読み込み処理の詳細は、図１３を参照して後述する。一方、画像オブジェクトが存在しない場合は、Ｓ１２０９に進む。
【００７８】
Ｓ１２０９で、制御部３０４は、対象スキャンラインがページの最終ラインかどうか判定する。最終ラインでない場合は、Ｓ１２０１に戻り、次のバンド（すなわち、次の対象スキャンライン）の中間データ生成処理が行われる。一方、最終ラインである場合は、中間データ生成処理を終了する。
【００７９】
以上説明したように、複数の中間データ格納部３０３はそれぞれ、各スレッドで並列に中間データを生成する。
【００８０】
次に、図１３のフローチャートを参照して、上述した図１２のＳ１２０８における画像データ読み込み処理の詳細を説明する。
【００８１】
なお、図１３のフローチャートで示される一連の処理は、ＣＰＵがＲＯＭに格納されているプログラムをＲＡＭに展開し、実行することに行われる。あるいはまた、図１３のフローチャートにおけるステップの一部または全部の機能をＡＳＩＣや電子回路等のハードウェアで実現してもよい。なお、各処理の説明における記号「Ｓ」は、当該フローチャートにおけるステップを意味する。
【００８２】
Ｓ１３０１で、塗り情報生成部３０６は、メモリ情報から画像管理テーブル９００を参照できるようにする。画像管理テーブル９００が共有メモリ上に存在する場合は、塗り情報生成部３０６は、そのアドレスを取得する。
【００８３】
Ｓ１３０２で、塗り情報生成部３０６は、中間データの塗り情報８０２に含まれる画像データに対する画像ＩＤを取得する。ここでは、未処理の１つの画像ＩＤが取得される。
【００８４】
Ｓ１３０３で、画像ＩＤがない場合は、画像データの読み込み処理を終了する。一方、画像ＩＤがある場合は、Ｓ１３０４に進む。
【００８５】
Ｓ１３０４で、塗り情報生成部３０６は、画像管理テーブル９００から、Ｓ１３０２で取得した画像ＩＤに対応する画像情報（展開スレッド番号９０５、圧縮形式９０２等）を取得する。
【００８６】
Ｓ１３０５で、塗り情報生成部３０６は、取得した画像情報に基づいて、指定された展開スレッドが自身のスレッドかどうか判定する。具体的には、塗り情報生成部３０６は、展開スレッド番号９０５が自身のスレッド番号である場合、Ｓ１３０６に進む。
【００８７】
Ｓ１３０６で、塗り情報生成部３０６は、ＰＤＬインタプリタ２０１に対して画像データの読み込みを要求する。
【００８８】
Ｓ１３０７で、塗り情報生成部３０６は、読み込まれた画像データに対して、画像管理テーブル９００の圧縮形式９０２に応じた展開処理を行う。また、塗り情報生成部３０６は、展開した画像データの展開先アドレスを、画像管理テーブル９００の展開先アドレス９０７に書き込む。
【００８９】
Ｓ１３０８で、塗り情報生成部３０６は、中間データの画像データ８０３に、展開先アドレスに格納された画像データをコピーする。この際、画像データは、消費メモリや中間データサイズに応じて、任意の圧縮形式で圧縮してもよい。
【００９０】
Ｓ１３０９で、塗り情報生成部３０６は、画像管理テーブル９００の参照スレッド数９０６を１減算する。
【００９１】
Ｓ１３１０で、塗り情報生成部３０６は、参照スレッド数９０６が０であるかどうか判定する。参照スレッド数９０６が０である場合、Ｓ１３１１に進む。
【００９２】
Ｓ１３１１で、塗り情報生成部３０６は、展開先アドレス９０７に展開された画像データの解放処理を行い、Ｓ１３０２に戻る。
【００９３】
一方、上述したＳ１３０５で、展開スレッド番号９０５が自身のスレッド番号でない場合は、Ｓ１３１２に進む。
【００９４】
Ｓ１３１２で、塗り情報生成部３０６は、画像データ８０３に、展開先アドレス９０７に格納された画像データをコピーする。
【００９５】
Ｓ１３１３で、コピーに成功した場合は、Ｓ１３０９に進み、塗り情報生成部３０６は上述した処理（参照スレッド数９０６のデクリメント）を行う。一方、中間データ格納部３０３は、並列処理で画像データの展開処理を実施している為、対象画像データが他のスレッドで展開処理される画像データである場合に、展開処理が完了していないことがある。その場合、画像管理テーブル９００において、対象画像データの展開先アドレス９０７が書き込まれていない為、塗り情報生成部３０６は画像データのコピーに失敗してしまう。したがって、処理は、Ｓ１３１３からＳ１３１０を経由して、Ｓ１３０２に進み、塗り情報生成部３０６は、中間データの塗り情報８０２に含まれる他の画像データに対する画像ＩＤを取得する。
【００９６】
次に、Ｓ１３０３で、他の画像データに対する画像ＩＤが取得できない場合は、全ての画像ＩＤの展開処理が終わったと判定され、画像展開処理は終了する。
【００９７】
以上説明したように、中間データ生成部２０２における複数の中間データ格納部３０３が、画像データの読み込み処理を並列に実行して、画像データを並列に展開することで、中間データ２０３の生成処理を高速に行うことができる。
【００９８】
＜ラスタ画像生成処理＞
以下では、ラスタ画像生成部２０４が中間データ２０３からラスタ画像を生成する処理に関して詳細に説明する。
【００９９】
スキャンライン方向に垂直な方向で区切られた短冊状の領域毎に生成された中間データ２０３の塗り情報８０２は、ラスタ画像生成部２０４のメモリ中に格納される。ラスタ画像生成部２０４は、中間データ２０３のバンド単位に分割されたエッジ情報８０１を順次スキャンラインで展開し、各エッジ領域に対応する塗り情報８０２の各塗り情報成分の重ね合わせ処理から、色を決定する。画像ＩＤが参照される場合は、ラスタ画像生成部２０４は、圧縮もしくはＲＡＷ形式で格納された当該画像ＩＤに対応する画像データを展開した後に、重ね合わせ処理を実施する。ラスタ画像生成部２０４は、重ね合わせ処理によって得られた色で当該エッジ領域を順次塗っていくことで、ラスタ画像を得る。
【０１００】
以降、ラスタ画像生成部２０４は、バンド毎に中間データを受信し、バンド単位のラスタ画像生成処理を実施する。メモリ中に格納された塗り情報８０２は、対象スキャンラインのラスタ画像生成処理が終了するまで、メモリ中に保持される。
【０１０１】
以上説明したように、スキャンラインに垂直な方向で区切られた短冊状の領域毎に、中間データ生成処理及びラスタ画像生成処理を行うことで、高速なＲＩＰ処理を実現することができる。
【第２の実施形態】
【０１０２】
以下では、ＤＬ生成部３０１による展開スレッド決定処理が、第１の実施形態と異なる実施形態について、詳細に説明する。本実施形態では、ＤＬ生成部３０１は、各中間データ格納部３０３が展開する画像データの累積サイズが最終的になるべく均等になるように（すなわち、展開する画像データの累積サイズの差がなるべく小さくなるように）、展開スレッドを決定する。本実施形態によると、各スレッドにおける画像の展開処理の負荷の偏りが少なくなり、ＰＤＬ−ＲＩＰ処理全体を高速化することができる。
【０１０３】
図１４は、本実施形態の特徴を説明する為の描画ページ１４００の例を示す。描画ページ１４００は、１ページが３つの短冊領域１４１０、１４１１、１４１２に分割された、１バンドの描画ページである。３つの短冊領域１４１０、１４１１、１４１２のそれぞれに対して、並列に中間データ格納部３０３による中間データ生成処理が行われる。画像形成命令１４０１乃至１４０５は全て、画像オブジェクト命令であり、各画像オブジェクト命令は、複数の短冊領域に跨っている。
【０１０４】
図１５は、本実施形態における展開スレッド決定処理のフローチャートを示す。本実施形態では、各スレッドに割り当てた負荷変数を使用して、画像管理テーブル９００の展開スレッド番号９０５を決定する。
【０１０５】
なお、図１５のフローチャートで示される一連の処理は、ＣＰＵがＲＯＭに格納されているプログラムをＲＡＭに展開し、実行することに行われる。あるいはまた、図１５のフローチャートにおけるステップの一部または全部の機能をＡＳＩＣや電子回路等のハードウェアで実現してもよい。なお、各処理の説明における記号「Ｓ」は、当該フローチャートにおけるステップを意味する。
【０１０６】
Ｓ１５０１で、ＤＬ生成部３０１は、１バンド分の画像管理テーブル９００を読み込む。
【０１０７】
Ｓ１５０２で、ＤＬ生成部３０１は、並列数分の負荷変数の初期化を行う。図１４の例では、描画ページ１４００は３つの短冊領域１４１０、１４１１、１４１２に分割されているので、各短冊領域を処理する３つのスレッドのそれぞれに対応する３つの負荷変数（ＰＡ、ＰＢ、ＰＣ）を０で初期化する。負荷変数は、後述するように、各スレッドで展開対象となった画像のピクセル数を保持する。
【０１０８】
Ｓ１５０３で、ＤＬ生成部３０１は、読み込んだ１バンド分の画像管理テーブル９００から、１つ目の画像情報（例えば、画像ＩＤ９０１、元画像サイズ９０３等）を読み込む。
【０１０９】
Ｓ１５０４で、画像情報が見つかった場合は、Ｓ１５０５に進む。一方、Ｓ１５０４で、画像情報が見つからなかった場合は、Ｓ１５０７に進む。
【０１１０】
Ｓ１５０５で、ＤＬ生成部３０１は、３つの負荷変数を比較して、値の最も小さな負荷変数を有するスレッドを展開スレッドとして決定する。また、ＤＬ生成部３０１は、決定したスレッドの番号を、読み込んだ画像ＩＤ９０１の展開スレッド番号９０５として画像管理テーブル９００に登録する。なお、最初の画像を処理する際は、３つの負荷変数は初期化されているので、値はすべて０になっている。この場合、展開スレッドは、所定のスレッドの順番で決定してもよいし、各スレッドを処理する中間データ格納部３０３の性能（処理能力）の順序に従って決定してもよい。図１４の例では、各短冊領域を処理するスレッドを、左側からスレッド１、スレッド２、スレッド３とすると、最初の画像オブジェクト１４０１の展開スレッドは、スレッドの番号順に従ってスレッド１とする。
【０１１１】
Ｓ１５０６で、ＤＬ生成部３０１は、決定した展開スレッドの負荷変数に、Ｓ１５０３で読み込んだ元画像サイズ９０３から算出した画像のピクセル数を加算する。
【０１１２】
Ｓ１５０７で、ＤＬ生成部３０１は、処理した画像がバンド内の最後の画像かどうか判定する。最後の画像でない場合は、Ｓ１５０３に戻り、ＤＬ生成部３０１は、次の画像の情報を読み込む。一方、最後の画像の場合は、Ｓ１５０８に進む。
【０１１３】
Ｓ１５０８で、ＤＬ生成部３０１は、処理したバンドがページ内の最後のバンドかどうか判定する。最後のバンドでない場合は、Ｓ１５０１に戻り、ＤＬ生成部３０１は、次のバンドに対する展開スレッド決定処理を行う。一方、最後のバンドの場合は、処理を終了する。
【０１１４】
以上説明したように、本実施形態におけるＤＬ生成部３０１は、負荷変数が最も小さいスレッドに、順に画像の展開処理を割り当てることにより、ページ内の全ての画像の展開スレッドを決定する。こうすることにより、各スレッドにおける画像の展開処理の負荷の偏り（すなわち、展開する画像データの累積サイズの偏り）を少なくすることができる。
【０１１５】
例えば、図１４の画像オブジェクト１４０１、１４０２、１４０３、１４０４、１４０５のピクセル数をそれぞれ、１００、１２０、１４０、１８０、１８０とする。また、スレッドの負荷変数が等しい場合は、スレッド番号の小さいスレッドを展開スレッドとして決定するとする。この場合、最初の画像オブジェクト１４０１（ピクセル数１００）の展開スレッド番号は、負荷変数ＰＡ、ＰＢ、ＰＣが「０」に初期化されているので、スレッド番号の小さい「１」となる。また、負荷変数はそれぞれ、ＰＡ＝１００、ＰＢ＝０、ＰＣ＝０となる。次いで、画像オブジェクト１４０２（ピクセル数１２０）の展開スレッド番号は、負荷変数ＰＢ、ＰＣが「０」であるため、スレッド番号の小さい「２」となる。負荷変数はそれぞれ、ＰＡ＝１００、ＰＢ＝１２０、ＰＣ＝０となる。次いで、画像オブジェクト１４０３（ピクセル数１４０）の展開スレッド番号は、負荷変数ＰＣの値が「０」であり、最も小さいので、「３」となる。また、負荷変数はそれぞれ、ＰＡ＝１００、ＰＢ＝１２０、ＰＣ＝１４０となる。次いで、画像オブジェクト１４０４（ピクセル数１８０）の展開スレッド番号は、負荷変数ＰＡの値が「１００」であり、最も小さいので、「１」となる。また、負荷変数はそれぞれ、ＰＡ＝２８０、ＰＢ＝１２０、ＰＣ＝１４０となる。次いで、画像オブジェクト１４０５（ピクセル数１８０）の展開スレッド番号は、負荷変数ＰＢの値が「１２０」で最も小さいので、「２」となる。このように、画像オブジェクト１４０１、１４０４の展開スレッド番号が「１」になり、画像オブジェクト１４０２、１４０５の展開スレッド番号が「２」になり、画像オブジェクト１４０３の展開スレッド番号が「３」となる。
【０１１６】
上記説明では、画像単位で負荷の偏りが少なくなるように展開スレッドを決定したが、画像の特定のタイル単位で展開が可能な場合は、特定のタイル単位で負荷変数を比較して、展開スレッドを決定してもよい。また、画像単位で順次、負荷変数を比較したが、バンドに含まれるすべての画像のピクセル数を並列数で除算して、タイル数の分割がこの値にもっとも近くなるように、各スレッドに展開処理を分担してもよい。
【０１１７】
また、上記Ｓ１５０５では、画像が位置する領域に関係なく、単純に負荷変数を比較して展開スレッドを決定したが、画像が複数の領域を跨がない場合は、当該画像が位置する領域のスレッドで展開処理を実施したほうが良い場合がある。例えば、各スレッドが占有のメモリ領域を持つ場合、共有メモリより高速にアクセスを行うことができる。そのため、負荷変数に対して所定の負荷係数をかけることで、優先するスレッドを考慮して、展開スレッドを決定することができる。上記例では、自身の領域の負荷変数に対して０．３という係数をかけ、負荷変数を比較する際の値を小さくすることで、他のスレッドより優位にたつことができる。
【０１１８】
同様に、中間データ格納部３０３の処理がスレッドではなく、ＡＳＩＣ等で並列に実施される場合、特定の展開処理にハードウェアアシストが用いられる場合がある。例えば、ＪＰＥＧの画像の展開に対してあるＡＳＩＣがハードデコーダを有する場合には、この形式の画像の展開処理では、負荷変数に特定の負荷係数０．２等の値をかけて、展開スレッドを決定してもよい。すなわち、ＧＰＵ（Graphics Processing Unit）やＦＰＧＡ（Field-Programmable Gate Array）等のハードウェアアシストの有無に応じて、展開スレッドを決定してもよい。また、代替として、ＣＰＵコアのクロック数に応じて、展開スレッドを決定してもよい。このように、処理能力に応じた負荷係数を用いることで、高速に処理できる中間データ格納部３０３では多くの展開処理を実施することが可能となり、全体的な処理速度が向上する。なお、上述した第１の実施形態においても、本実施形態と同様に、複数の中間データ格納部３０３のそれぞれの処理能力に応じて、展開スレッドを決定してもよい。
【その他の実施形態】
【０１１９】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１２０】
２０１  ＰＤＬインタプリタ
２０２  中間データ生成部
２０３  中間データ
３０１  ＤＬ生成部
３０２  ディスプレイリスト
３０３  中間データ格納部
３０４  制御部
３０５  エッジ情報生成部
３０６  塗り情報生成部
【図１】
2019155657.tif 000003
【図２】
2019155657.tif 000004
【図３】
2019155657.tif 000005
【図４】
2019155657.tif 000006
【図５】
2019155657.tif 000007
【図６】
2019155657.tif 000008
【図７】
2019155657.tif 000009
【図８】
2019155657.tif 000010
【図９】
2019155657.tif 000011
【図１０】
2019155657.tif 000012
【図１１】
2019155657.tif 000013
【図１２】
2019155657.tif 000014
【図１３】
2019155657.tif 000015
【図１４】
2019155657.tif 000016
【図１５】
2019155657.tif 000017