図1は、印刷画像処理システムの構成の一例を示すブロック図である。図1の例のシステムは、端末装置10、印刷制御システム20、および印刷装置50を備える。印刷制御システム20は、フロントエンド装置30およびバックエンド装置40を有している。端末装置10は、通信手段60を介してフロントエンド装置30に接続されており、ユーザの指示に従い、文書の印刷命令を含む印刷ジョブをフロントエンド装置30に対して送信する。フロントエンド装置30は、通信手段62を介してバックエンド装置40に接続され、バックエンド装置40は、通信手段64を介して印刷装置50に接続される。
通信手段60,62,64は、例えば、LAN(Local Area Network)等のデータ通信ネットワークであってよい。通信手段60,62,64は、互いに共通の通信手段であってもよいし、それぞれ異なる通信手段であってもよい。例えば、端末装置10とフロントエンド装置30との間の通信手段60としてLANを用い、フロントエンド装置30とバックエンド装置40との間の通信手段62およびバックエンド装置40と印刷装置50との間の通信手段64として、それぞれ、LANと異なる専用の通信手段を用いてもよい。
図1の例のシステムでは、端末装置10から送信された印刷ジョブをフロントエンド装置30において処理し、この処理結果のデータがバックエンド装置40に渡され、バックエンド装置40において生成された描画データ(ラスターデータとも言う)に従って印刷装置50による印刷が行われる。
図1の例の端末装置10、フロントエンド装置30、およびバックエンド装置40は、例えば汎用のコンピュータによって実現され得る。コンピュータは、ハードウエアとして、CPU(中央演算装置)、メモリ(一次記憶)、各種I/O(入出力)インタフェース、通信インタフェースなどがバスを介して接続された回路構成を有する。コンピュータは、通信インタフェースを介して、他の装置との間でデータの授受を行う。また、バスに対し、例えばI/Oインタフェース経由で、キーボードやマウスなどの入力装置、および、CRT(Cathode Ray Tube)や液晶ディスプレイなどの表示装置が接続される。また、バスには、I/Oインタフェースを介して、HDD(ハードディスクドライブ)やSSD(ソリッドステートドライブ)等の固定二次記憶装置、及び、DVD、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブが接続される。このようなドライブは、メモリに対する外部記憶装置として機能する。後述の各実施形態の処理内容が記述されたプログラムがCDやDVDなどの記録媒体を経由して、またはネットワーク経由で、HDDなどの固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがメモリに読み出されCPUにより実行されることにより、後述の各実施形態の処理が実現される。
なお、後述の各実施形態の例において、バックエンド装置40の機能の一部は、プログラムの実行によるソフトウエア処理ではなく、ハードウエア処理により実現してよい。ハードウエア処理は、例えば、動的再構成可能プロセッサ(Dynamic Reconfigurable Processor,DRP)と呼ばれる、処理の実行の途中で動的に回路を再構成できるプロセッサを用いて行ってもよい。あるいは、ASIC(Application Specific Integrated Circuit)等の回路を用いてハードウエア処理を行ってもよい。例えば、バックエンド装置40の機能の一部を実行する、DRPやASIC等のハードウエア要素を予め構成しておき、このようなハードウエア要素を汎用コンピュータのバスに対して接続することで、バックエンド装置40を実現すればよい。
フロントエンド装置30およびバックエンド装置40を実現するハードウエアの1つの具体例として、それぞれがサーバとして機能する複数の情報処理装置を1つの筐体内に搭載したブレードサーバを用いることが考えられる。ブレードサーバは、CPUやメモリを備える汎用のコンピュータを1枚の基板(ブレード)に実装し、複数のブレードを筐体内に搭載したサーバ装置である。例えば、ブレードサーバに搭載された1つのブレードをフロントエンド装置30として機能させ、他の1つのブレードをバックエンド装置40として機能させてもよい。あるいは、例えば、フロントエンド装置30およびバックエンド装置40のそれぞれを、ブレードサーバに搭載された複数のブレードにより実現してもよい。
もちろんこれは一例に過ぎず、フロントエンド装置30とバックエンド装置40を、それぞれ個別の筐体に搭載された個別のコンピュータ装置上に構築してもよい。また、フロントエンド装置30とバックエンド装置40とを、同一のコンピュータ装置上に構築してもよい(すなわち、それら各装置の処理を行うプログラムを同一のコンピュータ上で実行)。
印刷装置50は、紙等の媒体に印刷を行う装置であり、例えば、連続紙プリンタであってよいし、カット紙プリンタであってもよい。なお、印刷装置50の印刷方式は特に限定されない。電子写真方式でもよいし、インクジェット方式でもよい。またその他の方式でもよい。
図2に、印刷制御システム20が備えるフロントエンド装置30およびバックエンド装置40の機能構成の例を示す。フロントエンド装置30は、印刷ジョブ受信部32、解釈部34及び中間データ最適化部36を備える。バックエンド装置40は、中間データバッファ42、描画部44および出力バッファ46を備える。
フロントエンド装置30の印刷ジョブ受信部32は、端末装置10から印刷ジョブを受信する。本実施形態の例において、印刷ジョブは、文書を印刷する旨の命令と、印刷対象の文書をページ記述言語で記述したデータと、を含む。ページ記述言語(PDLと略す:PDLはPage Description Language の略)は、ディスプレイ表示処理、印刷処理等を情報処理機器に実行させるためのコンピュータプログラミング言語である。ページ記述言語の例としては、PostScript(登録商標)やPDF(Portable Document Format)等がある。ページ記述言語で記述されたデータは、印刷対象の文書を構成する文字や図形、イメージ(ビットマップ画像)などのオブジェクトの位置情報、書式情報および色情報などを含む。以下の説明では、印刷対象の文書をページ記述言語で記述したデータを「PDLデータ」と呼ぶ。印刷ジョブ受信部32は、受信した印刷ジョブに含まれるPDLデータを解釈部34に渡す。
解釈部34は、印刷ジョブ受信部32から取得したPDLデータを解釈し、その解釈結果に応じて、描画データの生成の手順を表す命令を含む中間データを生成して出力する。描画データは、印刷対象の画像を印刷装置50が取り扱い可能な形式で表現した印刷画像データであり、例えばラスター形式のデータがその一例である。中間データは、PDLデータと描画データの中間の粒度のデータである。中間データ形式は、例えば、PDLで記述された画像オブジェクトを更に単純な形状の微小要素に細分化して表現したものである。中間データ形式としては、例えばディスプレイリスト形式が知られている。
また、中間データの別の例として、図3に模式的に示すものがある。図3の例では、中間データ形式でのオブジェクト(PDLデータ上の画像オブジェクトを細分化して得た微小要素)は、バウンディングボックス指定、カラー指定、及び形状指定の3つのデータ項目の組で表現される
「バウンディングボックス指定」は、当該オブジェクトのバウンディングボックス、すなわち当該オブジェクトを内包する矩形(各辺がページの辺に平行な長方形)を規定する情報であり、例えばその長方形の左上と右下の頂点の座標を含む。
「カラー指定」は、そのオブジェクトの各画素のカラー(色)を規定する情報であり、カラー形式とカラーデータの情報を含む。「カラー形式」は、オブジェクトの画素の色の定め方を規定する情報であり、例えば、単色(全画素が同一色)、グラデーション(色が画素の配列方向に沿って連続的に変化)、ラスター(画素毎に個別に色を指定:ビットマップ)等の形式がある。「カラーデータ」は、カラー形式に応じたデータ形式で各画素のカラーを表すデータである。例えば単色の場合、カラーデータは、1つの色をCMYK(シアン、マゼンタ、イエロー、ブラック)等のあらかじめ定められた色空間での座標で表現した色値である。グラデーションの場合、カラーデータは、色の初期値と変化率の情報を含む。ラスターの場合、カラーデータは、画素毎の色値を含んだデータである。
「形状指定」は、そのオブジェクトの形状を規定する情報であり、形状形式と形状データの情報を含む。「形状形式」は、オブジェクトの形状を表す形式であり、例えば、矩形形式、ラン形式、ラスターマスク形式などがある。「形状データ」は、オブジェクトの形式を当該オブジェクトの形状形式に従って表現したデータである。
個々の形状形式について説明すると、「矩形形式」は、オブジェクトの形状をページの各辺に平行な辺で囲まれる矩形(長方形)で表現する形式である。この形式の形状データとしては、矩形の左上頂点と右下頂点の座標の組合せを用いればよい。
「ラン形式」は、印刷の主走査線(一般には印刷時の用紙の進行方向に垂直な方向)に沿ったラン(Run:同一画素値の画素の連続)の集まりで形状を表現する方式である。主走査線上には1以上のランが含まれ、それらランの集合がオブジェクトである。言い換えれば、個々のランの部分の画素に対し、カラー指定に従って決まる色(画素値)が描画される。逆に言えば、主走査線上の画素のうち、ランに属さない画素はオブジェクトの外部の画素であり、そのオブジェクトのカラーは描画されない。すなわち、ラン形式の形状データは、一種のマスクとして機能する。ラン形式の形状データは、主走査線のy座標(副走査方向についての座標)と、その主走査線上にあるランの左端及び右端のx座標のペア(xl,xr)を例えば左側のランから順に並べたものでよい。
また、ラン形式では、副走査方向に隣接する複数の主走査線についての形状データを1つのパッケージにまとめてもよい。このパッケージのことを「ランマスク」と呼ぶ。ランマスクは、そのランマスクの外周形状である矩形(各辺がページの縦横に平行)の例えば左上頂点と右下頂点の座標のペアと、その各マスクに含まれる各主走査線のランデータ(ラン形式の形状データ)を副走査方向に沿って並べたデータと、を含む。
「ラスターマスク形式」は、矩形の二値ビットマップで形状を表す形式である。すなわち、矩形(各辺がページの縦横に平行)のラスターマスク内の画素のうち値が「1」である画素の集合が、当該オブジェクトの形状を表す。描画処理では、ラスターマスク内の画素のうち値が「1」である画素に対して、カラー指定に基づいたカラー値(画素値)が書き込まれる。ラスターマスク内の画素のうち値が「0」である画素については、カラー地は書き込まれない(すなわち描画処理ではその画素については何も行われない)。
ここで、中間データの解像度及び色空間を、印刷装置50と同じ解像度及び色空間としてもよい。こうすれば、バックエンド装置40の描画部44の処理において解像度変換や色空間変換が不要になる。また、中間データは、色版(例えばC,M,Y,Kの各版)ごとに分版されていてもよいし、複数の色版のデータを1つにまとめたコンポジット形式であってもよい。
なお、図3に示した中間データでのオブジェクトの表現形式は、あくまで一例に過ぎない。
解釈部34は、PDLデータを解釈することで、そのPDLデータが表す各オブジェクトを、中間データ形式において用いられる単位形状(例えば矩形形式、ラン形式、ラスター形式の形状)に分解し、単位形状ごとにその形状やカラーを表すデータ(これが中間データ形式でのオブジェクトを表す)を生成する。
中間データ最適化部36は、解釈部34が生成した中間データの最適化を実行する。ここでいう「最適化」とは、バックエンド装置40の描画部44での描画処理の処理負荷を低減するよう中間データに変更を加える処理のことである。すなわち、描画部44にとって効率的な形となるよう、中間データのデータ内容を効率化する処理である。特に中間データが表すオブジェクトのうち自分の後のオブジェクトにより完全に隠されるオブジェクトを削除したり、オブジェクトの形状を自分の後のオブジェクトにより隠される部分を除いた形状に変更したりすることで、描画部44が描画する画素数を減らす処理のことである。ここでは、「最適化」と表現したが、必ずしも描画部44が描画する画素数を理論上の最少にまで削減するとは限らない。「最適化」処理をしない場合より、描画部44が描画する画素数が減ればよいものとする。中間データ最適化部36については、後で詳しく説明する。
中間データ最適化部36により最適化された中間データは、バックエンド装置40に対して出力される。出力された中間データは、バックエンド装置40の中間データバッファ42に書き込まれる。描画部44は、中間データバッファ42に記憶された中間データを読み出し、読み出した中間データに従って描画データ(ラスターデータ)を生成する。例えば、オブジェクトの形状データが示す範囲内の各画素の値を、そのオブジェクトのカラーデータから求め、例えばページメモリ上の当該画素に対応するアドレスにその画素値を書き込むことで、オブジェクトの描画(レンダリング)を行う。1ページに含まれる全オブジェクトを描画することで、そのページのラスター画像(描画データ)が形成される。生成された各ページの描画データは出力バッファ46に格納され、印刷装置50から順次読み出される。印刷装置50は、出力バッファ46から読み出した各ページの描画データを、用紙に対して印刷する。
次に、図4を参照して、中間データ最適化部36の内部構成の一例を説明する。図示の例では中間データ最適化部36は、中間データ取得部362、最適化処理部364、及びスプール366を有する。
中間データ取得部362は、解釈部34から入力されるオブジェクトごとの中間データを取得する。例えば、オブジェクトごとに、図3に例示したバウンディングボックス指定、カラー指定、及び形状指定の組を取得する。解釈部34は、オブジェクトの描画順(すなわち描画部44で描画される順序)に従って各オブジェクトの中間データを出力し、中間データ取得部362はそのように順に出力される中間データを取得する。
スプール366は、各オブジェクトの中間データを記憶する記憶領域である。スプール366は、フロントエンド装置30の例えばメインメモリ上に確保される。
最適化処理部364は、中間データ取得部362が新たなオブジェクトを取得するごとに、そのオブジェクトの中間データを用いて、スプール366内に既にスプール(保持)されているオブジェクトのうち、その新たなオブジェクトにより完全に又は部分的に隠されるオブジェクトの中間データに対して更新を加える。この更新処理のことを、以下では「eclipse」処理と呼ぶ。eclipseとは、日食、月食のように1つの物により別の物を完全に又は部分的に隠す(遮蔽する)ことを意味する。ここでは、新たに取得したオブジェクトにより、スプール366内にあるそのオブジェクトよりも描画順が前のオブジェクトを遮蔽する。具体的には、最適化処理部364が実行するeclipse処理では、(1)スプール366内のオブジェクトのうち、その新たなオブジェクトで完全に隠されるオブジェクト(すなわち新たなオブジェクトの内部に完全に包含されるオブジェクト)はスプールから削除する。(2)また、スプール366内のオブジェクトのうち、その新たなオブジェクトと部分的に重なるオブジェクトについては、そのオブジェクトの形状を、その重なる部分を除いた形状へと変更する。(3)スプール366内のオブジェクトのうちその新たなオブジェクトと重なる部分が全くないオブジェクトについては、何も変更しない。
eclipse処理では、新たなオブジェクトで隠されるオブジェクトの形状のみを変更すればよく、そのオブジェクトのカラーのデータについては基本的に変更しなくてよい。
eclipse処理のうち、上述の(2)、すなわち、スプール内のオブジェクトの形状を、新たなオブジェクトにより隠される「部分」を除いた形状に変更する処理では、例えば中間データの形式が複雑なオブジェクト形状を表現できるものであれば、スプール内のオブジェクトの形状データを、単に変更後の形状を表すものに変更すればよい。
また、中間データ形式で表現できるオブジェクトの形状が限られている場合、eclipse処理では、オブジェクトを、中間データ形式で表現可能な形状の複数のオブジェクトに分割することで、変形後の形状を表現してもよい。
また、上述の例のように、オブジェクトの形状の表現形式が、矩形形式、ラン形式、及びラスターマスク形式に限られている場合、eclipse処理では、新たなオブジェクトにより部分的に隠されるスプール内のオブジェクトの形状をすべてラン形式で表現すればよい。
ラン形式のオブジェクト同士であれば、eclipse処理では、スプール内のオブジェクト(オブジェクトの重なり順で下側)内のある第1のラン(xl1,xr1)が、このランと同じy座標値を有する新たなオブジェクト(重なり順で上側)内の第2のラン(xl2,xr2)と重なる場合、スプール内のオブジェクトの第1のラン(xl1,xr1)を、(xl1,xl2)(第1のランの右側が隠される場合)、又は(xr2,xr1)(第1のランの左側が隠される場合)に変更すればよい。また、第1のランが第2のランの内部に完全に含まれる場合は、スプール内のオブジェクトの形状データから第1のランのデータを削除すればよい。
上述した矩形形式及びラスターマスク形式の定義からわかるように、これら両形式の形状はいずれもラン形式(あるいはランマスク形式)でも表現可能なので、eclipse処理によりスプール内のオブジェクトの形状を変更することになる場合には、そのオブジェクトの形状データをラン形式に変換してから変形後の形状を計算すればよい。
eclipse処理は、オブジェクトの形状に関する処理なので、オブジェクトのカラー(色)データは基本的に変更不要である。特に、オブジェクト内の個々の画素の色を計算する処理は不要である。例えば、ラスター形式のカラーデータの場合、印刷装置50とカラーデータの間で一般に位置座標系が異なるので、印刷装置50での各画素に対応する色をカラーデータ中から求める場合、平行移動、回転、拡大縮小などの幾何学的な座標変換が必要となる。描画部44ではこのような処理により各画素の色を求めるのであるが、中間データ最適化部36のeclipse処理では各画素の色を求める必要はない。
図5に、中間データ最適化部36が実行する処理の手順の一例を示す。この手順では、中間データ取得部362が、解釈部34から新たに出力されたオブジェクトを取得する(S10)。このオブジェクトを「現オブジェクト」と呼ぶ。最適化処理部364は、スプール366内に記憶されているすべてのオブジェクトに対して、eclipse処理を実行する(S12)。
eclipse処理の後、最適化処理部364は、現オブジェクトを、スプール366に入れる(S14)。そして、処理すべきオブジェクトが残っているかどうかを判定し(S16)、まだ残っていれば(判定結果がY)、S10に戻って次の中間データを取得し、S10〜S14の処理を繰り返す。S16の判定は、例えば、印刷装置50が印刷を行う画像の単位範囲(ページ、バンド、タイルなど)ごとに行えばよい。ここで、バンドは、ページを主走査方向の線で副走査方向(印刷時に用紙が搬送される方向。印刷の主走査方向に直交)に沿って複数に分割してできる帯状領域であり、タイルはページを主走査方向及び副走査方向の両方について分割してできる矩形領域である。S16では、例えば、解釈部34が出力する単位範囲(ページ等)の末尾を示すデータが到来したか否かを判定し、到来した場合にその単位範囲のすべてのオブジェクトの処理が終了したと判定し、判定結果をNとする。この場合、図5の処理手順は、単位範囲ごとに繰り返されることになる。
S16の判定結果がNになると、スプール366に蓄積されているすべてのオブジェクトを出力する(S18)。ここで、スプール366のすべてのオブジェクトは、描画順が後のオブジェクトにより隠される部分を除いた形状に変形されているので、オブジェクト同士が重なる部分は存在しない。したがって、スプール366内のオブジェクトはどのような順序で出力してもよい。
次に、図5の手順の処理の具体例を、図6を参照して説明する。図6は、同一ページ100内の別々の4つのオブジェクト102(中間データ)が番号1〜4の順に、解釈部34から中間データ最適化部36に入力される場合の、スプール366の記憶内容の変遷を示している。まず、1番目のオブジェクトが入力された場合、スプール366にはその1番目のオブジェクトが記憶される。次に、その1番目のオブジェクトと部分的に重なる2番目のオブジェクトが入力されると、1番目のオブジェクトの形状が2番目のオブジェクトと重なる部分を除いたL字型の形状に変更される。また、2番目のオブジェクトがスプール366内に記憶される。次に、その2番目のオブジェクトと部分的に重なり、1番目のオブジェクトとは重ならない3番目のオブジェクトが入力されると、2番目のオブジェクトの形状が3番目のオブジェクトと重なる部分を除いた形状に変更される。ここでは、1番目のオブジェクトは変形されない。また、3番目のオブジェクトがスプール366内に記憶される。そして、その3番目のオブジェクトを完全に包含し、2番目のオブジェクトと部分的に重なり、1番目のオブジェクトとは重ならない4番目のオブジェクトが入力されると、2番目のオブジェクトの形状が4番目のオブジェクトと重なる部分を除いた形状に変更されると共に、完全に隠される3番目のオブジェクトは削除される。ここでは、3番目のオブジェクトは、カラーのデータやその他の属性データも含めた当該オブジェクトの全部のデータが削除されることで、そのオブジェクトそのものが存在しなくなる。なお、1番目のオブジェクトは変形されない。そして、4番目のオブジェクトがスプール366内に記憶される。この4番目のオブジェクトが、そのページ上での描画順が最後のオブジェクトである場合、4番目のオブジェクトをスプール366内に記憶した時点でスプール366の内部にあるオブジェクト、すなわち変形後の1番目及び2番目のオブジェクトと、その4番目のオブジェクトとが、バックエンド装置40へと出力されることになる。
オブジェクトごとにその後続のすべてのオブジェクトと重なる部分を除き、描画する方式では、個々のオブジェクトを描画するごとに、その後続のすべてのオブジェクトとの重なりを調べる必要がある。このため、同じオブジェクトが、先行するオブジェクトとの比較のため何度も繰り返し読み込まれることになる。これに対し、本実施形態の方式では、スプール366を利用することで、個々のオブジェクトをそれぞれ1回読み込むだけでよい。
なお、図5の手順の実行の中で、スプール366が一杯になり、これ以上新たなオブジェクトを記憶できなくなる事態も生じ得る。1つの例では、この事態が生じた時点で、スプール366内にあるすべてのオブジェクトをバックエンド装置40へと出力し、スプール366を空にする。このように、S16で次のオブジェクトがないと判定される前に、スプール366内のオブジェクト群をすべて出力することを、スプール366の「フラッシュ」と呼ぶことにする。ページ等の単位範囲の処理の途中でスプール366内のオブジェクト群をフラッシュしたとしても、その前後のオブジェクト群との間に不整合は生じない。そして、その後に入力される新たなオブジェクトから、図5の手順を繰り返す。
以上に説明した例では、中間データ最適化部36は、新たなオブジェクト(現オブジェクト)が入力されると必ずスプール366内のオブジェクトに対してeclipse処理を行ったが,これは一例に過ぎない。例えば、オブジェクト同士が重なった部分の色の決め方の中には、上のオブジェクトの色が採用され下のオブジェクトの色が現れない方式のほかに、上のオブジェクトと下のオブジェクトの両方の色が混合するオーバープリント方式がある。本実施形態(以下に述べる他の例も含む)の装置/システムでは、現オブジェクトに対してオーバープリントの指定がある場合は、スプール366内のオブジェクトに対する現オブジェクトによるeclipse処理をしないようにする。 また、現オブジェクトに対してオーバープリント指定があることを検出した場合、その時点でスプール366の「フラッシュ」を行うようにしてもよい。
次に図7を参照して、中間データ最適化部36の別の処理手順を説明する。図7の手順において、図5の手順と同様の処理を行うステップについては同一符号を付した。
この手順では、解釈部34から現オブジェクトを取得すると(S10)、最適化処理部364は、その現オブジェクトのカラー形式を判定する(S11)。この例では、カラー形式が第1種、第2種のいずれに該当するかを判定する。1つの例では、単色(すなわちオブジェクトの全画素が同一色)形式を第1種とし、ラスター形式及びグラデーション形式を第2種とする。現オブジェクトのカラー形式が第1種であれば、現オブジェクトをスプール366に入れる(S14a)。また、この例では、スプール366は、各オブジェクトの中間データを、描画順(スプール366の視点から見れば、入ってくる順)と関連づけて記憶する。例えば、入ってくる順に先入れ先出し方式で記憶するものであってもよい。その後、S16に進む。
一方、S11で現オブジェクトのカラー形式が第2種であると判定した場合、最適化処理部364は、スプール366内のオブジェクトを、現オブジェクトによりeclipse処理する(S12)。そして、現オブジェクトは、スプール366に入れずにバックエンド装置40へと出力し(S13)、S16に進む。
S16で残りのオブジェクトがあれば、S10に戻り次のオブジェクトについてS10〜S14aの処理を繰り返す。そして、S16で残りのオブジェクトがないと判定した場合、スプール366内のオブジェクト群を、描画順に後段(バックエンド装置40)へと出力する(S18a)。図7の手順では、現オブジェクトのカラー形式が第1種である場合、スプール366内のオブジェクトに対して現オブジェクトによるeclipse処理を行わないので、スプール366内のオブジェクト同士が重なる場合があることを考慮して、S18aでは描画順にオブジェクトを出力するのである。したがって、逆に、現オブジェクトのカラー形式が第1種である場合にも、スプール366内のオブジェクト群を現オブジェクトでeclipse処理することとした場合には、スプール366のオブジェクトを後段へ出力する順序は描画順通りでなくてよい。
この手順の処理の具体例を、図8を参照して更に詳しく説明する。図8の左側に示される4つのオブジェクト102が、上から順に中間データ最適化部36に入力されてくるとする。ここで、1番目と4番目のオブジェクトのカラー形式は第2種であり、2番目と3番目のオブジェクトのカラー形式は第1種であるとする。
この場合、図7の手順では、まず1番目のオブジェクトは第2種カラーなのでS11の判定結果が「第2種」となる。この時点では、スプール366内にはオブジェクトが存在しないので、中間データ最適化部36はeclipse処理を行わず、そのオブジェクトをバックエンド装置40へと出力する。2番目のオブジェクトは、第1種なので、スプール366へと蓄積される。3番目のオブジェクトも第1種なので、同様にスプール366に入れられる。
4番目のオブジェクトは第2種なので、中間データ最適化部36は、このオブジェクトにより、スプール366内のオブジェクトに対してeclipse処理を行う。この例では、2番目のオブジェクトは4番目のオブジェクトと部分的に重なるので、2番目のオブジェクトはその重なりの部分を除いた形状へと変形される。また、3番目のオブジェクトは4番目のオブジェクトにより完全に覆われるので、スプール366から削除される。最終的には、スプール366内には、変形後の2番目のオブジェクトのみが残る。eclipse処理の後、4番目のオブジェクトは後段へと出力される。そして、その後、3番目の出力として、スプール366内にある変形後の(入力順が)2番目のオブジェクトが出力されることとなる。
以上をまとめると、中間データ最適化部36からは、まず1番目のオブジェクトが出力され、次に4番目のオブジェクトが出力され、最後にeclipse処理により変形された後の2番目のオブジェクトが出力されることとなる。
図7及び図8の例は、特定のカラー形式のオブジェクトのみをスプールする方式なので、すべてのオブジェクトをスプール対象とする図5の方式よりも、スプール366の容量が小さくて済む。言い換えれば、スプール366の容量が同じであれば、図7の方式の方が図5の方式よりも、スプール366が一杯になってフラッシュするまでに、より多くのオブジェクトを処理することができる。ここで、例えばスプールの対象とする第1種のカラー形式として、データ量が相対的に小さい単色形式を採用すれば、スプール366の容量が(第1種としてラスター形式やグラデーション形式を採用する場合よりも)少なくて済む。
また、図7の方式では、図8に示したように、中間データ最適化部36からは、まず第1種のカラー形式のオブジェクト群が描画順に出力された後、第2種のカラー形式のオブジェクト群がスプール366から出力されることになる。すなわち、中間データ最適化部36から出力されるオブジェクトのカラー形式の切り替わりは1回だけであり、第1種から第2種、第2種から第1種などと何度も交互に切り替わることはない。このようにカラー形式の切り替わりの回数が抑えられることは、バックエンド装置40の描画部44にDRP(動的再構成可能プロセッサ)を利用する際に特に有益である。以下、この点について説明する。
描画部44で行う画像処理の中には、カラー形式に応じて異なる処理内容となるものがある。例えば、単色形式とグラデーション形式とラスター形式では、前述の通り各画素の色値の求め方が異なる。また、ラスター形式のカラーデータは圧縮されている場合があるため、カラーデータの伸張処理が必要になる場合があるが、単色形式やグラデーション形式のカラーデータは量が少ないため圧縮されておらず、従って伸張処理は不要である。また、ラスター形式と単色形式(あるいはグラデーション形式)では、ラスタライズ後の画像データに行う後処理の種類が異なる場合もある。描画部44をDRPで構成した場合、これら異なる複数の処理内容のための回路を、DRP上にすべて一度に構成できればそのようにすればよいが、一般には、DRPが持つ回路要素の数ではそのようなことは難しい。そこで、カラー形式の切り替わりに応じて、DRP内に構成するラスタライズや画像処理のための回路構成を切り替える必要がある。DRPは、回路構成の切り替え自体は高速に(例えば1クロックで)実行できるものの、切り替え前の回路構成内のパイプライン内にある処理途中のデータがすべて処理し終わるまで回路構成の切り替えはできないので、全体的には回路構成の切り替えによる時間的なペナルティは小さくない。このため、回路構成の切り替え回数が少なければ少ないほど、処理効率がよくなる。このようなことから、図7の方式は、描画部44(DRP)の処理効率の改善に寄与する。
このように描画部44にDRPを用いるシステム構成の場合、描画部44は、入力される各オブジェクトの中間データからカラー形式の情報を認識し、認識したカラー形式に応じて、DRP内の回路構成を切り替える。より詳しくは、描画部44は、新たに受け取ったオブジェクトのカラー形式が、現在DRP内に構成している処理回路に対応したカラー形式と異なっている場合、現在の処理回路のパイプライン内にあるデータの処理がすべて終わった後、DRPの回路構成をその新たなオブジェクトのカラー形式に対応した物へと切り替える。
以上の図7の例の説明では、第1種のカラー形式(スプール対象)が単色形式であり、第2種のカラー形式(スプールしない)がグラデーション形式及びラスター形式であるとしたが、これは一例に過ぎない。この代わりに、例えば、単色形式及びグラデーション形式を第1種とし、ラスター形式を第2種としてもよい。また、ラスター形式を第1種とし、単色形式及びグラデーション形式を第2種としてもよい。このほかにも様々な組合せが考えられる。
具体的なカラー形式が3種類以上ある場合、それら3種以上のカラー形式の第1種と第2種への分類の仕方は、各カラー形式のための処理回路をDRP上で構成する際の回路規模に応じて決定してもよい。例えば、単色形式用とグラデーション形式用の処理回路はDRP上に同時に構成できるが、単色形式用とラスター形式用の処理回路、及びグラデーション形式用とラスター形式用の処理回路はDRP上に同時に構成できない場合、単色形式とグラデーション形式を1グループとして、これを第1種又は第2種のいずれかに割り振り、ラスター形式を第1種又は第2種のうちの残りの方に割り振ればよい。
次に、図9〜図11を参照して、更に別の例を説明する。図9は、この例で用いる中間データ最適化部36の内部構成を示す。この例では、中間データ最適化部36に2つのスプール366−1及び366−2を設ける。第1スプール366−1は、第1種のカラー形式のオブジェクトを記憶するためのものであり、第2スプール366−2は第2種のカラー形式のオブジェクトを記憶するためのものである。第1種及び第2種の分類は、上述した図7及び図8の例と同様でよい。
図10は、図9に例示した中間データ最適化部36の処理手順を示す。図10の手順のうち、図7の手順のステップと同様のステップには同一符号を付した。
図10の手順では、S11で現オブジェクトのカラー形式が第1種に該当すると判定した場合、最適化処理部364は、第2スプール366−2内のオブジェクトに対し、現オブジェクトによるeclipse処理を行う(S20)。第2スプール366−2に保持されているオブジェクトは第2種のカラー形式である。S20では、これらオブジェクトのうち現オブジェクトで完全に隠されるものは第2スプール366−2から削除され、部分的に隠されるものはその隠される部分を除いた形に変形される。S20の後、最適化処理部364は、現オブジェクトを第1スプール366−1に入れる(S22)。第1スプール366−1は、入力されたオブジェクトを、入力順(すなわち描画順)と対応づけて記憶する。
また、S11でカラー形式が第2種と判定した場合、最適化処理部364は、第1スプール366−1内のオブジェクト(第1種)に対し、現オブジェクトによるeclipse処理を行う(S24)。そして、最適化処理部364は、現オブジェクトを第2スプール366−2に入れる(S26)。第2スプール366−2は、入力されたオブジェクトを、入力順と対応づけて記憶する。
S10〜S26の処理を繰り返し、S16で次のオブジェクトがなくなったことがわかると、最適化処理部364は、第1スプール366−1内にあるオブジェクトを入力順に後段に出力し(S28)、その後、第2スプール366−2内にあるオブジェクトを入力順に後段に出力する(S29)。なお、eclipse処理の結果、第1スプール366−1内のオブジェクトと第2スプール366−2内のオブジェクトとは互いに重ならない形状となっているので、S28とS29とはどちらを先に実行してもよい。
また、図10の手順では、第1種のオブジェクト同士、第2種のオブジェクト同士の間ではeclipse処理を行わないので、個々のスプール366−1及び366−2内のオブジェクト同士が重なる場合がある。S28及びS29ではこのことを考慮して、各スプール内のオブジェクトをその入力順に出力している。したがって、逆に、同一種別のオブジェクト同士の間でもeclipse処理することとした場合には、S28及びS29でのスプールからのオブジェクトの出力順序は入力順通りでなくてよい。
図10の手順の処理の具体例を、図11を参照して更に詳しく説明する。図11の左側に示される4つのオブジェクト102が、上から順に中間データ最適化部36に入力されてくるとする。入力されるオブジェクトの系列は、図8の例と同じであり、1番目と4番目のオブジェクトのカラー形式が第2種、2番目と3番目のオブジェクトのカラー形式が第1種であるとする。
この場合、図10の手順では、まず第2種である1番目のオブジェクトを取得した時点では、第1スプール366−1内にはオブジェクトが存在しないので、最適化処理部364はeclipse処理を行わず、そのオブジェクトを第2スプール366−2に入れる。次に、第1種である2番目のオブジェクトが取得されると、最適化処理部364は、そのオブジェクトで、第2スプール366−2内にある1番目のオブジェクトをeclipse処理する。これにより、1番目のオブジェクトがL字型に変形される。また、最適化処理部364は、その2番目のオブジェクトを第1スプール366−1に入れる。
次に取得される3番目のオブジェクトは第1種なので、第2スプール366−2内にある1番目のオブジェクトに対してeclipse処理が行われる。ここで、第2スプール366−2内にある1番目のオブジェクトは、2番目のオブジェクトと重なる部分が除かれた形状に変形済みであり、3番目のオブジェクトとは重なる部分がない。したがって、このeclipse処理では、1番目のオブジェクトは変形されない。
次に入力される4番目のオブジェクトは第2種なので、最適化処理部364は、このオブジェクトにより、第1スプール366−1内のオブジェクト(すなわち2番目と3番目)に対してeclipse処理を行う。この例では、2番目のオブジェクトは4番目のオブジェクトと部分的に重なるので、2番目のオブジェクトはその重なりの部分を除いた形状へと変形される。また、3番目のオブジェクトは4番目のオブジェクトにより完全に覆われるので、第1スプール366−1から削除される。最終的には、第1スプール366−1内には、変形後の2番目のオブジェクトのみが残る。eclipse処理の後、4番目のオブジェクトは第2スプール366−2に入れられる。
4番目のオブジェクトが最後のオブジェクトであるとすると、この後、各スプール内のオブジェクトが順に後段へと出力されることとなる。図11の例では、まず第2スプール366−2内のオブジェクト(1番目及び4番目)が出力され、その後、第1スプール366−1内のオブジェクト(2番目)が出力されている。
このように、図9〜図11の例でも、上述の図7及び図8の例と同様、カラー形式が同種別のオブジェクト群が連続してバックエンド装置40に出力されるので、カラー形式の切り替わりは最小限にとどめられる。また、図7及び図8の例では第2種のオブジェクトはeclipseされずにそのまま後段に出力されるのに対し、図9〜図11の例では、第2種のオブジェクトもeclipseされるので、描画部44が描画すべき画素の数が図7及び図8の例よりも少なくなり、その分だけ処理部44の処理負荷が軽減される。
図7及び図8の例、並びに図9〜図11の例は、いずれもカラー形式を第1種と第2種の2種に分類した。しかし、それら各々の例の方式は、カラー形式を3種以上に分類する場合にも拡張可能である。
例えばカラー形式を3種に分類する場合、図7及び図8の例では、スプール366を2つ設け、3種のカラー形式のうちの2種を別々のスプール366に割り当てる。例えば、第1種を第1スプールに、第2種を第2スプールにそれぞれ割り当て、第3種はスプールしないものとする。この場合、カラー形式が第1種のオブジェクトが入力された場合、そのオブジェクトで少なくとも第2スプール内のオブジェクトをeclipseすると共に、そのオブジェクトを第1スプールに入れる。また第2種のオブジェクトが入力された場合、そのオブジェクトで少なくとも第1スプール内のオブジェクトをeclipseすると共に、そのオブジェクトを第2スプールに入れる。そして、第3種のオブジェクトが入力された場合、そのオブジェクトで第1スプール内及び第2スプール内のオブジェクトをeclipseすると共に、そのオブジェクトを後段に出力する。
一般化すれば、カラー形式をn種に分類する場合、図7及び図8の方式では、スプールを(n−1)個用意し、スプールに対応づけられた種別のオブジェクトが入力された場合、最適化処理部364は、そのオブジェクトにより、その種別以外に対応する(n−2)個のスプール内のオブジェクトをeclipseし、そのオブジェクトをその種別に対応するスプールに入れる。なお、入力されたオブジェクトにより、そのオブジェクトの種別に対応するスプール内のオブジェクトも更にeclipseするようにしてもよい。また、スプールに対応づけられていない種別のオブジェクトが入力された場合には、そのオブジェクトにより(n−1)個のスプールすべての中のオブジェクトをeclipseすると共に、そのオブジェクトを後段へと出力する。
図9〜図11の例の場合は、n種のカラー形式がある場合、それぞれの種別に対して1個のスプール(合計n個)を用意する。最適化処理部364は、オブジェクトが入力されると、そのオブジェクトにより、そのオブジェクトの種別以外に対応する(n−1)個のスプール内のオブジェクトを少なくともeclipseすると共に、そのオブジェクトをその種別に対応するスプールに入れる。
次に、図12〜図14を参照して、更に別の例を説明する。図12に示すシステム構成では、フロントエンド装置30が論理ページ解釈部34−pとキャッシュ要素解釈部34−cという2種類の解釈部34を有する。
ここで、キャッシュ要素解釈部34−cは、PDLデータに含まれるキャッシュ対象要素の解釈(中間データ形式への変換)を専門に行う解釈部である。キャッシュ対象要素とは、1つのPDLデータの中で複数回繰り返し使用される画像要素のことである。例えば、PostScript(登録商標)の場合、フォームやイメージなどといったタイプのオブジェクトがその一例である。キャッシュ対象要素は1以上のオブジェクトから構成される。キャッシュ対象要素であるか否かは、1つの例では、要素の種類で判別すればよい。例えば、PDLデータからフォームやイメージ等といったキャッシュ対象の要素種別に対応する描画コマンドを見つけた場合、その描画コマンドで描画される1以上のオブジェクトがキャッシュ対象の要素と判別される。また、PDLデータ中では、キャッシュ対象のオブジェクトに対して、当該オブジェクトをPDLデータ中で一意に識別する識別情報が付与されることも多い。PDLデータ中に同じオブジェクトIDを指定したコマンドがある場合、それらコマンドは同じオブジェクトの描画を指示している。
この例では、一度生成したキャッシュ対象要素の中間データをキャッシュし、再利用する枠組み(図12のキャッシュ48)を提供する。これにより、同じキャッシュ対象要素の中間データが何度も生成されるといった非効率を避ける。キャッシュ48は、キャッシュ対象要素の中間データを一時的に記憶する記憶領域である。
キャッシュ要素解釈部34−cは、PDLデータを先頭から順に解釈する中で、キャッシュ対象要素以外の要素については中間データの生成を行わず、キャッシュ対象要素についてのみ、その要素の記述を中間データに変換する。そして、変換結果の中間データを、そのキャッシュ対象要素を一意的に識別するためのキャッシュIDと対応づけて、バックエンド装置40のキャッシュ48に記憶させる。
ここで、キャッシュIDとしては、1つの例では、PDLデータ中に含まれる当該キャッシュ対象要素のオブジェクトIDを用いる。
また、別の例として、キャッシュ対象要素の最終的な描画結果の画像の状態を規定する各種のパラメータに基づきキャッシュIDを生成してもよい。キャッシュIDを規定する描画等のパラメータとしては、描画コマンド(あるいはオブジェクトID)、座標変換行列(座標の回転角や拡大縮小率を表す行列)、描画属性情報(例えば線幅、ラインキャップ、ラインジョイン、マイタ―リミット、線の形状、ストローク調整、描画方式、論理演算モード、パターン情報)、クリップ情報、カラー情報等がある。例えば、それらパラメータとを結合したものをバイナリデータとして表現し、MD5ハッシュ関数(rfc1321で定義)等のハッシュ関数を用いて、そのバイナリデータからキャッシュIDを生成する。なお、キャッシュIDの材料として用いた上述のパラメータ群を、「キーデータ(Key Data)」と呼ぶ。なお、厳密には、ハッシュ関数には衝突があるため、上述の方式では異なるキャッシュデータのキャッシュID(ハッシュ値)が同じ値となる可能性がある。ハッシュの衝突を避けるために、キーデータそのものをキャッシュIDとして用いてもよい。ただし、キーデータはかなり長いデータとなるため、利用可能なキャッシュデータが有るか無いかを調べる際、キーデータ同士の照合にある程度の時間を要する。キャッシュ管理部38内のすべてのキャッシュエントリに対してキーデータの照合を行うにはかなりの時間がかかってしまう。そこで、以下の例では、キーデータと、そのキーデータのハッシュ値と、の組合せをキャッシュIDとして用いる。この例では、利用可能なキャッシュデータの有無を調べる際、まずハッシュ値で絞り込みを行うことで、キーデータの照合を行うキャッシュエントリの数を少なくする。
キャッシュ管理部38は、キャッシュ48に保持されるキャッシュデータ(すなわちキャッシュ対象要素の中間データ)の管理情報を保持する。キャッシュ管理部38には、キャッシュデータごとに、キャッシュIDと、そのキャッシュデータのキャッシュ48の記憶空間内での記憶場所を示す情報(例えば先頭アドレスと、そのデータのサイズとの組合せ)とが記憶される。キャッシュ要素解釈部34−cは、PDLデータ中のキャッシュ対象要素を処理する際、その要素のキャッシュデータがキャッシュ48に登録されているかどうかをキャッシュ管理部38から求め、登録されている場合にはその要素のキャッシュデータの生成は行わず、登録されていない場合にのみ生成を行う。
論理ページ解釈部34−pは、各論理ページのPDLデータの中間データを生成する。論理ページとは、PDLデータにおいて規定されている論理的な意味でのページのことであり、物理的な印刷媒体(用紙など)の1つの面である物理ページの対立概念である。印刷設定に応じて、物理ページ1ページ上に、1又は複数の論理ページが印刷される場合もある。なお、以下では、特に断りのない場合は、「ページ」という用語は、論理ページを指すものとする。
論理ページ解釈部34−pは、ページのPDLデータを処理する中で、キャッシュ対象要素以外のオブジェクトについては、そのオブジェクトの描画コマンドやパラメータを解釈し、その解釈結果を示す中間データを生成し、生成した中間データをそのページの中間データに組み込む。一方、PDLデータ中のキャッシュ対象要素については、そのキャッシュ対象要素を解釈して中間データを生成する代わりに、キャッシュ48内のその要素のキャッシュデータを特定するキャッシュIDを求める。そして、求めたキャッシュIDを参照するコマンドを、その要素を表す中間データとして、そのページの中間データに組み込む。論理ページ解釈部34−pが生成した各ページの中間データは、バックエンド装置40の中間データバッファ42に送られる。
ここで、論理ページ解釈部34−pは、キャッシュ対象要素のキャッシュIDを求める際には、キャッシュ対象要素の描画結果を特定するパラメータ群からキャッシュIDを生成するなど、キャッシュ要素解釈部34―cと同じ方法を用いればよい。
図12の例では、フロントエンド装置30内には論理ページ解釈部34−pが1つしか存在しないが、これは一例に過ぎない。この代わりにフロントエンド装置30内に論理ページ解釈部34−pを複数設け、それら複数の論理ページ解釈部34−pにそれぞれ異なるページを割り当てて並列に解釈処理を行わせてもよい。
論理ページ解釈部34−pおよびキャッシュ要素解釈部34−cは、例えば、CPU上で実行されるプロセスとして実現される。例えば、マルチコアCPUを用いたシステム構成において、個々のコアでそれぞれ1つずつ解釈部のプロセスを実行するという構成が考えられる。また、別の例として、論理ページ解釈部34−pおよびキャッシュ要素解釈部34−cとを別々のコンピュータ上で実行してもよい。
バックエンド装置40の描画部44は、中間データバッファ42内にある各ページの中間データを例えばページ順に読み出し、読み出したページの中間データのコマンドに従って描画データを生成していく。ここで、読み出したページの中間データ内に、キャッシュIDを参照する旨のコマンドが含まれる場合は、キャッシュ48からそのキャッシュIDに対応する中間データ(すなわちフォームの中間データ)を読み出し、読み出した中間データを処理することで、フォームの描画データを生成し、ページの描画データに対して合成する。
なお、キャッシュ対象の種類に該当する要素のうち、中間データをキャッシュするとかえって処理効率が落ちる要素は、キャッシュしないようにしてもよい。すなわち、キャッシュを用いるためには、キャッシュへの登録や必要なキャッシュデータの有無の問合せ等の処理のオーバーヘッドが生じる。非常に小さい又は構造が簡単な要素の場合、中間データの生成処理に要する時間が非常に短くて済むので、そのような処理オーバーヘッドを考慮すると、キャッシュを利用しない方が処理が早いことも多い。そこで、キャッシュした方が処理効率がよいもののみを、キャッシュすることとする。キャッシュした方がしない場合よりも効率がよい要素は、例えば以下のルールによって判定すればよい。
(ルール1)当該要素のバウンディングボックス(物理ページ上で当該フォームを囲むことができる最小の長方形)の画素数が、予め決められた数(「画素数閾値」と呼ぶ)より多い場合は、当該フォームをキャッシュ対象とし、そうでない場合はキャッシュ対象としない。
(ルール2)当該要素に含まれるオブジェクトの数が予め決められた数(「オブジェクト数閾値」と呼ぶ)より多い場合は当該フォームをキャッシュ対象とし、そうでない場合はキャッシュ対象としない。
(ルール3)当該フォームに予め決められた大きさ(「イメージサイズ閾値」と呼ぶ)より大きいイメージ(ビットマップ)がある場合は当該フォームをキャッシュ対象とし、そうでない場合はキャッシュ対象としない。
例えば、以上に例示したルール1〜3のいずれか1つを用いて判定を行ってもよいし、2以上を組み合わせて判定を行ってもよい。2以上を組み合わせる場合は、少なくとも1つのルールで「キャッシュ対象」と判定されれば、他のルールによる判定結果によらず、当該フォームはキャッシュ対象とする。
なお、上述の画素数閾値、オブジェクト数閾値およびイメージサイズ閾値は、フロントエンド装置30やバックエンド装置40のシステム構成や性能に応じた値であり、実験やシミュレーション等で定めておけばよい。
図12の例では、フロントエンド装置30に、論理ページ解釈部34−pの出力を最適化する中間データ最適化部36−pと、キャッシュ要素解釈部34−cの出力を最適化する中間データ最適化部36−cを設けている。中間データ最適化部36−p及び中間データ最適化部36−cの内部構成は、図4、図9などを参照して説明した例における中間データ最適化部36と同様でよい。
図13にキャッシュ対象要素用の中間データ最適化部36−cが実行する処理の手順の例を示す。この例では、中間データ最適化部36−cは、キャッシュ要素解釈部34−cから新たなキャッシュ対象要素の中間データを取得(S30)するごとに、その中間データの最適化を実行する(S32)。S32(最適化)の具体的な処理としては、図5、図7、及び図9を参照して説明した各手順のいずれを用いてもよい。例えば図5の手順を代表例にとって説明すると、中間データ最適化部36−cは、取得したキャッシュ対象要素に含まれるオブジェクト群を描画順に1つ取り出す(S10)。次に、取り出した現オブジェクトの中間データにより、中間データ最適化部36−cが備えるスプール内にある各オブジェクトの中間データに対してeclipse処理を施す(S12)。そして、その現オブジェクトをスプールに記憶させる(S14)。その後、そのキャッシュ対象要素に含まれる最後のオブジェクトの処理が終了したかどうかを判定し(S16)、終了したと判定されるまでS10〜S16の処理を繰り返す。そして、終了した場合、スプール内にある全オブジェクト(すなわち、当該キャッシュ対象要素に含まれる各オブジェクトの最適化結果)をキャッシュ48へと送信する。キャッシュ48は、送られてきた最適化済みの中間データを、キャッシュIDと対応づけて記憶する。
S32(キャッシュ対象要素の最適化)の後、印刷ジョブのPDLデータの最後まで処理を終えたかどうかを判定し(S34)、まだ最後に達していなければ、S30に戻って次のキャッシュ対象要素を処理する。S34でジョブの最後に達したことがわかった場合は、処理を終了する。
このように、図13の手順は、1つのキャッシュ対象要素を、フロントエンド装置30からバックエンド装置40への中間データの出力単位とし、その出力単位ごとにスプール366を用いて中間データの最適化を行うものである。
論理ページ用の中間データ最適化部36−pの処理手順は、図13の手順の「キャッシュ対象要素」を「ページ」に置き換えたものでよい。すなわち、この場合は、1つの論理ページがフロントエンド装置30からバックエンド装置40への中間データの出力単位となる。中間データ最適化部36−pは、1ページごとに、そのページに含まれる各オブジェクトの中間データを最適化し、1ページ分を最適化するごとに、その最適化結果をバックエンド装置40の中間データバッファ42に転送する。なお、ページの中間データ内には、キャッシュ対象要素を表すキャッシュID参照コマンドが含まれる場合があるが、このコマンドについては最適化は行わなくてよい。
図13の手順では、キャッシュ対象要素の中間データをすべて最適化したが、これは一例に過ぎない。最適化を行うことでかえって処理効率が落ちるものや、最適化による処理効率の改善効果が薄い物については、最適化を行わないようにしてもよい。この例を、図14に示す。図14の手順のうち、図13の手順と同様のステップには、同じ符号を付す。
図14の例は、キャッシュ対象要素の中間データを描画部44が描画する際に要する時間の予測値があらかじめ定めた閾値よりも小さい場合に、最適化を行わないようにする。すなわち、描画に要する時間が短い要素は、最適化をしなくても十分速く描画処理できるので、最適化を行わないのである。
図14の例では、中間データ最適化部36−cは、S30で取得したキャッシュ対象要素について、描画部44の負荷の指標値として、その要素の描画に要する時間の予測値を求める(S36)。描画時間の予測値としては、例えば、オブジェクトの面積(そのオブジェクトのバウンディングボックスの面積で代用可)にそのオブジェクトのカラー形式に応じた描画時間係数を乗じたものを、キャッシュ対象要素内の全オブジェクトについて総和したもの用いてもよい。カラー形式ごとの描画時間係数は、そのカラー形式のオブジェクトの単位面積の描画に要する時間を表す係数である。例えば、カラー形式ごとに、そのカラー形式のオブジェクトの単位面積の描画に要する時間の平均的な値を実験やシミュレーションで求めておき、その値を係数として用いればよい。単色形式、グラデーション形式、ラスター形式の3種のカラー形式の中では、単色形式の係数が最も小さく、次がグラデーション形式であり、最も大きいのがラスター形式である。中間データ最適化部36−cは、S36で求めた描画予測時間をあらかじめ定めた閾値と比較し(S37)、描画予測時間が閾値未満であれば、そのキャッシュ対象要素の中間データをそのままキャッシュ48へと転送する(すなわち、最適化しない)。S37の判定で、描画予測時間が閾値以上と判定した場合は、当該キャッシュ対象要素について中間データの最適化処理を実行する(S32)。S38又はS32の後、印刷ジョブの最後に達したかどうかを判定し(S34)、まだ最後に達していなければ、S30に戻って次のキャッシュ対象要素を処理する。S34でジョブの最後に達したことがわかった場合は、処理を終了する。
図14の例では、描画部44の負荷の指標値としてキャッシュ対象要素の描画予測時間を用いたが、これは一例に過ぎない。別の指標値として、例えば、キャッシュ対象要素の描画予測時間を、その要素に含まれるオブジェクトの総数で正規化した値(例えば予測時間をオブジェクト総数で割った値)を用いてもよい。小さいオブジェクトが多数ある場合も、大きいオブジェクトが少数の場合も、共に描画予測時間は長くなる。ここで、前者(小さいオブジェクトが多数)の方が最適化のためのeclipse処理の回数が多くなるので、最適化のためのコストが後者より高くなる。このため、描画予測時間が同じであれば、後者の方が前者よりも最適化のメリットが大きい。描画予測時間をオブジェクトの総数で正規化した値を用いれば、オブジェクトの総数に応じた最適化のためのコストを考慮に入れた、より適切な指標値が得られる。
また、描画部44の負荷の指標値として、キャッシュ対象要素に含まれるオブジェクトの面積の総和を、そのキャッシュ対象要素の面積で正規化した値(例えば前者を後者で割った値)を用いてもよい。この指標値が1を超えると、必ずどれかのオブジェクトが重なっていることになる。この指標値が大きいほど重なりが多いので、最適化の利益が大きい。そこで、キャッシュ対象要素についてこの指標値を計算し、得られた指標値があらかじめ定めた閾値より大きい場合に最適化を行い、閾値以下であれば最適化を行わないようにすればよい。なお、キャッシュ対象要素の面積及びその中の個々のオブジェクトの面積は、それぞれについてのバウンディングボックスの面積で代用してもよい。
図14の手順は、1つのキャッシュ対象要素を、フロントエンド装置30からバックエンド装置40への中間データの出力単位とし、その出力単位ごとに、最適化を行った方がよいか否かを判定するものである。
図14の手順はキャッシュ対象要素についてのものであったが、論理ページの中間データの最適化にも同様の処理手順を適用可能である。論理ページの中間データを最適化する場合、出力単位は1つの論理ページであり、この出力単位に含まれるオブジェクト群についての描画処理の負荷の指標値に基づき、その出力単位の中間データを最適化するか否かを判定する。
図12に示した例は、論理ページとキャッシュ対象要素の両方について中間データの最適化を行ったが、最適化を行うのをいずれか一方のみに限定してもよい。論理ページは基本的に1回しか描画されないのに対し、キャッシュ対象要素は複数回描画される可能性が高いので、いずれか一方のみを最適化するとすれば、キャッシュ対象要素を選んだ方が効果が高い。
以上に説明した各例では、オブジェクト同士が重なる場合に、-描画順が前のオブジェクトの形状を、後のオブジェクトで覆われる部分を除く形状へと変更する例を主として示したが、後のオブジェクトにオーバープリント指定がなされている場合は、そのような形状変更は行わない。すなわち、オーバープリント指定のあるオブジェクトについては、スプール366内のオブジェクトに対するeclipse処理は行わない 。また、オーバープリント指定のオブジェクトを検出した場合、その時点でスプール366の「フラッシュ」を行うようにしてもよい。
以上に説明した実施形態はあくまで一例に過ぎず、本発明の技術的思想の範囲内で様々な変形や変更が可能である。