(57)【要約】【課題】グループ間のコンポジット処理を高速に実行することで、トータルの印刷処理を高速に実行できる画像処理装置を提供すること。【解決手段】本発明に係る画像処理装置は、ディスプレイリストを解釈しオブジェクトをロードする手段と、ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位であるか判定する手段と、ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位である場合に、ロードしたオブジェクトの属するグループのグループナンバー及び現在処理中のスキャンラインにおけるオブジェクトの左右のエッジの座標を保持する手段と、コンポジット処理がグループ間のコンポジット処理であり、現在把握している最上位のオブジェクトが属するグループより下位のグループ同士で実行される場合に、左右のエッジの座標で表される区間内でコンポジット処理をスキップする手段とを備える。【選択図】図８
2015075839.tif 000002
【特許請求の範囲】
【請求項１】
ディスプレイリストに対するビットマップを生成してレンダリング処理を実行する画像処理装置であって、
ディスプレイリストを解釈しオブジェクトをロードするロード手段と、
当該ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位であるか否か判定する判定手段と、
前記ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位である場合に、ロードしたオブジェクトの属するグループのグループナンバー及び現在処理中のスキャンラインにおける当該オブジェクトの左右のエッジの座標を保持する保持手段と、
コンポジット処理がグループ間のコンポジット処理であり、現在把握している最上位のオブジェクトが属するグループより下位のグループ同士で実行される場合に、前記左右のエッジの座標で表される区間内でコンポジット処理をスキップするスキップ手段と
を備えたことを特徴とする画像処理装置。
【請求項２】
前記判定手段は、前記ロードしたオブジェクトが台形であるか否かを、エッジの傾きに基づいて判定し、
前記保持手段は、前記ロードしたオブジェクトが不透過且つ台形であり現在把握しているオブジェクトより上位である場合に、前記ロードしたオブジェクトの属するグループのグループナンバー及び当該オブジェクトの左右のエッジの座標を保持する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
エッジ処理においてキャッシュミスヒットが発生しないエッジ数を算出し、当該算出したエッジ数に基づいてエッジを分割するグループの数を算出する手段と、
当該算出したグループの数に基づいてエッジをグループ毎に分割するか否か判定する手段と
を更に備えたことを特徴とする請求項１に記載の画像処理装置。
【請求項４】
前記判定手段は、前記ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であるか否か判定し、
前記保持手段は、前記ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位である場合に、ロードしたオブジェクトの属するグループのグループナンバー及び現在処理中のスキャンラインにおける当該オブジェクトの左右のエッジの座標を保持する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項５】
前記ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位である場合に、グループ間のコンポジットスキップ処理の対象となる区間の数が保持できる個数以内であるか否かを判定する手段と、
グループ間のコンポジットスキップ処理の対象となる区間の数が保持できる個数以内ではない場合に、保持しているオブジェクトの中で最も背面に近いオブジェクトに関するデータを削除して、当該ロードしたオブジェクトに関するデータを登録する手段と
を更に備えたことを特徴とする請求項１に記載の画像処理装置。
【請求項６】
前記ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位である場合であって、前記ロードしたオブジェクトの大きさが所定の大きさより大きい場合に、前記保持手段は、前記ロードしたオブジェクトの属するグループのグループナンバー及び現在処理中のスキャンラインにおける当該オブジェクトの左右のエッジの座標を保持することを特徴とする請求項１に記載の画像処理装置。
【請求項７】
エッジ処理が、左右のエッジの座標を保持しているオブジェクトのエッジ処理である場合に、現在処理中のスキャンラインの次のスキャンラインにおける当該オブジェクトの左右のエッジの座標を保持する手段を更に備えたことを特徴とする請求項１に記載の画像処理装置。
【請求項８】
ディスプレイリストに対するビットマップを生成してレンダリング処理を実行する画像処理方法であって、
ディスプレイリストを解釈しオブジェクトをロードするステップと、
当該ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位であるか否か判定するステップと、
前記ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位である場合に、ロードしたオブジェクトの属するグループのグループナンバー及び現在処理中のスキャンラインにおける当該オブジェクトの左右のエッジの座標を保持するステップと、
コンポジット処理がグループ間のコンポジット処理であり、現在把握している最上位のオブジェクトが属するグループより下位のグループ同士で実行される場合に、前記左右のエッジの座標で表される区間内でコンポジット処理をスキップするステップと
を備えたことを特徴とする画像処理方法。
【請求項９】
コンピュータを請求項１乃至７の何れか１項に記載の画像処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法、及びプログラムに関する、具体的には、本発明は、レンダリングにおけるピクセルのコンポジット処理を実行する画像処理装置、画像処理方法、及びプログラムに関する。
【背景技術】
【０００２】
印刷データを主走査方向に１ライン毎に読み込んでレンダリングを行うスキャンラインレンダリングという方法がある（特許文献１参照）。スキャンラインレンダリングでは、ページ内に描画する画像オブジェクト（以下「オブジェクト」と称する）と、オブジェクトとの境目又はオブジェクトと、背景画像との境目を指すエッジに関する情報（エッジデータ）に従ってレンダリングを行う。特許文献１は、スキャンラインレンダリングを行うために、１ライン分のエッジデータをメモリにロードすることを開示する。
【０００３】
アプリケーションソフトウェアを用いたユーザによって作成される、レンダリング対象となる印刷データは、アプリケーションソフトウェアの描画能力向上に伴い、含まれるエッジ数が多く、複雑なものになってきている。そのため、レンダリングシステムのメモリリソースが不足することや、レンダリング処理に時間がかかること等が問題になっている。
【０００４】
このような大量エッジを含む印刷データのレンダリング処理方法として、特許文献２は、処理を行うページ記述言語（ＰＤＬ）データが含むオブジェクトをレベル毎にグループ化して複数のディスプレイリストを生成するフォールバックと呼ばれる処理を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１３７８２５号公報
【特許文献２】特開２００２−１６９６６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１が開示するスキャンラインレンダリング処理によって大量エッジを含む印刷データをレンダリングする際、特許文献２が開示するフォールバック処理を実行することで、限られたメモリリソースを用いてのディスプレイリストの生成が可能となる。
【０００７】
しかし、この方法では、生成したディスプレイリストにＣＰＵキャッシュ内に格納できないだけのエッジが含まれる場合、ＣＰＵキャッシュのキャッシュミスヒットの頻発を引き起こし、これにより、レンダリング処理、特にエッジ処理に時間がかかることがある。
【課題を解決するための手段】
【０００８】
本願発明は、ディスプレイリストに対するビットマップを生成してレンダリング処理を実行する画像処理装置であって、ディスプレイリストを解釈しオブジェクトをロードするロード手段と、当該ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位であるか否か判定する判定手段と、前記ロードしたオブジェクトが不透過であり現在把握しているオブジェクトより上位である場合に、ロードしたオブジェクトの属するグループのグループナンバー及び現在処理中のスキャンラインにおける当該オブジェクトの左右のエッジの座標を保持する保持手段と、コンポジット処理がグループ間のコンポジット処理であり、現在把握している最上位のオブジェクトが属するグループより下位のグループ同士で実行される場合に、前記左右のエッジの座標で表される区間内でコンポジット処理をスキップするスキップ手段とを備えたことを特徴とする。
【発明の効果】
【０００９】
本発明により、エッジ数が多い複雑なデータをレンダリング処理する場合であっても、グループ毎にエッジを処理することにより高速にエッジ処理を行うことが可能になる。また、本発明により、グループ間のコンポジット処理も高速に行うことが可能になり、トータルの印刷処理を高速に行うことが可能になる。
【図面の簡単な説明】
【００１０】
【図１】実施例１に係る画像処理システムの構成を示すブロック図である。
【図２】実施例１に係るＭＦＰの構成を示すブロック図である。
【図３】実施例１に係るスキャンラインレンダリング処理を示す図である。
【図４】実施例１に係る大量エッジがディスプレイリストに含まれていた場合のエッジ処理を示す図である。
【図５】実施例１に係るエッジのグループ分割処理を示す図である。
【図６】実施例１に係るグループ内のコンポジット処理と、グループ間のコンポジット処理とを示す図である。
【図７】実施例１に係るグループ間のコンポジットスキップ処理を示す図である。
【図８】実施例１に係るグループ間のコンポジットスキップ処理を示すフローチャートである。
【図９】実施例２に係る複数の区間におけるグループ間のコンポジットスキップ処理を示す図である。
【図１０】実施例２に係る複数の区間におけるグループ間のコンポジットスキップ処理を示すフローチャートである。
【図１１】実施例３に係る最適オブジェクトの選択を伴うグループ間のコンポジットスキップ処理を示す図である。
【図１２】実施例３に係る最適オブジェクトの選択を伴うグループ間のコンポジットスキップ処理を示すフローチャートである。
【図１３】実施例４に係る矩形以外のオブジェクトのスパンにおけるグループ間のコンポジットスキップ処理を示す図である。
【図１４】実施例４に係る矩形以外のオブジェクトのスパンにおけるグループ間のコンポジットスキップ処理のフローチャートである。
【図１５】実施例５に係る矩形以外のオブジェクトのスパンにおけるグループ間の簡易コンポジットスキップ処理を示す図である。
【図１６】実施例５に係る矩形以外のオブジェクトのスパンにおけるグループ間の簡易コンポジットスキップ処理のフローチャートである。
【図１７】本発明に係るエッジのグループ分割処理と、先行技術との関連を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について図面を用いて説明する。
【実施例１】
【００１２】
＜システム構成＞
図１は、実施例１に係る画像処理システムの構成を示すブロック図である。このシステムでは、１台のホストコンピュータ（以下「ＰＣ」と称する）１３０と、２台の画像処理装置１００、１１０とがＬＡＮ１４０に接続されている。ただし、本発明における画像処理システムにおいて、ホストコンピュータや画像処理装置の接続数がこれらに限られることはない。また、本実施例では接続手段としてＬＡＮを適用しているが、接続手段はこれに限られることはない。例えば、ＷＡＮ（公衆回線）などの任意のネットワーク、ＵＳＢなどのシリアル伝送方式、又はセントロニクスやＳＣＳＩなどのパラレル伝送方式なども適用可能である。
【００１３】
ＰＣ１３０は、パーソナルコンピュータの機能を有している。ＰＣ１３０は、ＬＡＮ１４０やＷＡＮを介してＦＴＰやＳＭＢプロトコルを用いてファイルを送受信したり電子メールを送受信したりすることができる。さらに、ＰＣ１３０は、画像処理装置１００、１１０に対して、プリンタドライバを介した印刷命令を行うことも可能となっている。
【００１４】
画像処理装置１００及び画像処理装置１１０は同じ構成であり、ともにスキャナ部を有する画像処理装置である。以下では、説明の簡単のために、画像処理装置１００、１１０のうちの画像処理装置１１０に注目して、その構成を詳細に説明する。
【００１５】
画像処理装置１１０は、画像入力デバイスであるスキャナ部１１３と、画像出力デバイスであるプリンタ部１１４と、画像処理装置１１０全体の動作制御を司るコントローラ１１１と、ユーザインターフェース（ＵＩ）である操作部１１２とから構成される。
【００１６】
＜コントローラユニットの構成＞
図２は、実施例１に係るＭＦＰ（Multifunction Peripheral）のコントロールユニット（コントローラ）の構成を示すブロック図である。図２は、図１におけるコントローラ１０１やコントローラ１１１の詳細な構成を示した図である。コントロールユニット２００は、画像入力デバイスであるスキャナ部２０１や画像出力デバイスであるプリンタ部２０２と接続されており、画像データの読み取りやプリント出力のための制御を行う。また、コントロールユニット２００は、ＬＡＮ  Ｎ１や公衆回線２０４と接続されており、画像情報やデバイス情報をＬＡＮ  Ｎ１や公衆回線２０４経由で入出力するための制御を行う。プリンタ部２０２は、デバイスＩ／Ｆ２１７と接続されており、プリンタ部２０２が有するプリンタエンジンが、コントロールユニット２００で生成された描画データを紙に出力する処理を行う。
【００１７】
ＣＰＵ２０５は、ＭＦＰ全体を制御するための中央処理装置である。ＲＡＭ２０６は、ＣＰＵ２０５が動作するためのシステムワークメモリであり、入力された画像データを一時記憶するための画像メモリでもある。ＲＯＭ２０７は、ブートＲＯＭであり、システムのブートプログラムを格納する。ＨＤＤ２０８は、ハードディスクドライブであり、各種処理のためのシステムソフトウェア及び入力された画像データ等を格納する。操作部Ｉ／Ｆ２０９は、画像データ等を表示可能な表示画面を有する操作部２１０に対するインタフェース部であり、操作部２１０に対して操作画面データを出力する。また、操作部Ｉ／Ｆ２０９は、操作部２１０からユーザが入力した情報をＣＰＵ２０５に伝える役割をする。ネットワークＩ／Ｆ２１１は、例えばＬＡＮカード等で実現され、ＬＡＮ  Ｎ１と接続されて外部装置との間で情報の入出力を行う。モデム２１２は、公衆回線２０４と接続され、外部装置との間で情報の入出力を行う。ＣＰＵ２０５、ＲＡＭ２０６、ＲＯＭ２０７、ＨＤＤ２０８、操作部Ｉ／Ｆ２０９、ネットワークＩ／Ｆ２１１、及びモデム２１２がシステムバス２１３上で接続されている。
【００１８】
イメージバスＩ／Ｆ２１４は、システムバス２１３と、画像データを高速で転送する画像バス２１５とを接続するためのインタフェースであり、データ構造を変換するバスブリッジである。画像バス２１５上には、ラスタイメージプロセッサ（ＲＩＰ）２１６、デバイスＩ／Ｆ２１７、スキャナ画像処理部２１８、プリンタ画像処理部２１９、画像編集用画像処理部２２０、及びカラーマネージメントモジュール（ＣＭＭ）２３０が接続される。
【００１９】
ＲＩＰ２１６は、ページ記述言語（ＰＤＬ）データコードやベクトルデータをイメージに展開する。デバイスＩ／Ｆ２１７は、スキャナ部２０１やプリンタ部２０２と、コントロールユニット２００とを接続するためのインタフェースであり、画像データの同期系／非同期系の変換を行う。スキャナ画像処理部２１８は、スキャナ部２０１から入力された画像データに対して、補正、加工、編集等の各種処理を行う。プリンタ画像処理部２１９は、プリント出力する画像データに対して、プリンタエンジンに応じた補正、解像度変換等の処理を行う。画像編集用画像処理部２２０は、画像データの回転や、画像データの圧縮伸長処理等の各種画像処理を行う。ＣＭＭ２３０は、画像データに対して、プロファイルやキャリブレーションデータに基づいた、色変換処理（色空間変換処理ともいう）を施す専用ハードウェアモジュールである。プロファイルとは、機器に依存した色空間で表現したカラー画像データを機器に依存しない色空間（例えばＬａｂ等）に変換するための関数のような情報である。キャリブレーションデータとは、画像処理装置におけるスキャナ部２０１やプリンタ部２０２の色再現特性を修正するためのデータである。
【００２０】
＜本明細書における用語の定義＞
ここでは本明細書で使用する用語の定義について説明する。
【００２１】
「ディスプレイリスト」とは、各種ＰＤＬから変換され生成される、ＲＩＰが処理できる共通フォーマットである。ディプレイリストには、インストラクションと呼ばれるどのオブジェクトをどの場所に書くかという描画命令、各オブジェクトにひも付けられるエッジ情報、レベル情報、レベル情報にひも付けられるフィル情報、及びＲＯＰ情報が記載されている。
【００２２】
「エッジ」とは、ページ内に描画するオブジェクトと、オブジェクトとの境目又はオブジェクトと、背景との境目を指す。オブジェクトは左右のエッジにより形状が形成される。処理中のスキャンラインにおける左右エッジのＸ座標を左右のＸ座標と呼ぶ。
【００２３】
「スパン」とは、エッジ間で囲まれる閉領域を指す。
【００２４】
「レベル」とは、ページ内に描画するオブジェクト同士の上下関係を示すもので、必ずオブジェクト毎にレベル番号が割り振られている。なお、上記のとおりオブジェクトは左右のエッジにより形状が形成されるので、ページ内に描画するエッジ同士の上下関係もレベルによって示されることとなる。
【００２５】
「フィル」とは、スパンに対する塗りのことで、Ｂｉｔｍａｐ画像やシェーディングのように１ピクセル毎に異なる色値を持つフィルや、ベタ塗りのようにスパン中で色値の変化がないフィル等が存在する。
【００２６】
「スキャンライン」とは、それに沿ってスキャン処理が実行される用紙搬送方向の各ラインである。１スキャンラインの２次元平面における高さは１ピクセルとなっている。また、複数のスキャンラインを束ねたものをバンドと呼ぶ。
【００２７】
「グループ」とは、オブジェクト又はオブジェクトを形成する複数のエッジがレベル昇順にグループ化された集合である。一例として、レベル番号が１から３００１までのエッジが１つずつ存在し、１つのグループに最大１０００エッジ含まれる場合を検討する。この場合、最背面のグループにはレベル番号が１から１０００までのエッジが含まれる。次に一つ上位のグループにはレベル番号が１００１から２０００までのエッジが含まれる。更に一つ上位のグループにはレベル番号が２００１から３０００までのエッジが含まれる。最上位のグループにはレベル番号が３００１のエッジが含まれる。グループの上下関係を保持するために、各グループにはグループナンバー（本明細書ではグループＮＯと略記される）が割り振られている。例えば、最背面のグループのグループＮＯが１、その上のグループのグループＮＯが２等とすることができる。グループＮＯは、グループ管理構造体の中で管理されている。
【００２８】
＜ディスプレイリストのレンダリング処理について＞
図３は、スキャンラインレンダリングと呼ばれるレンダリング処理について説明した図である。以下の処理は、コントローラ１０１によって実行される。具体的には、以下の処理は、コントローラ１０１のＣＰＵ２０５が、ＨＤＤ２０８に格納されているスキャンラインレンダリングのプログラムをＲＡＭ２０６にロード及び実行することで、実行される。
【００２９】
図３（ａ）は、本実施例に係るスキャンラインレンダリング処理の処理フローについて説明するブロック図である。スキャンラインレンダリング処理は大きく分けて、エッジ処理、レベル処理、フィル処理、コンポジット処理の４つに分かれている。以下に各処理の詳細を記載する。なお、ＣＰＵ２０５が複数のＣＰＵで構成されている場合、それぞれのＣＰＵに別々の処理を実行させてもよい。具体的には、１つ目のＣＰＵにエッジ処理だけを実行させ、２つ目のＣＰＵにレベル処理だけを実行させ、３つ目のＣＰＵにフィル処理だけを実行させ、４つ目のＣＰＵにコンポジット処理だけを実行させてもよい。
【００３０】
＜エッジ処理＞
エッジ処理は大きく分けて５つの処理からなっている。５つの処理とは、エッジロード処理、エッジ削除処理、Ｘ座標算出処理、エッジソート処理、及びエッジトラッキング処理である。
【００３１】
エッジロード処理とは、ＤＬ（ディスプレイリスト）メモリに格納されているディスプレイリストから、オブジェクトのアウトラインを示すエッジデータをメインメモリ上へロードする処理のことをいう。なお、エッジロード処理は、エッジデータを後述のリンクリストとして管理すべく、エッジデータをエッジリストにロードする処理とも言い換えることができる。
【００３２】
Ｘ座標算出処理とは、ロードされたエッジデータに対して、スキャンライン毎に、エッジの傾きや塗りルールに基づいてエッジの位置を示すＸ座標を算出する処理である。
【００３３】
処理中のスキャンラインに現れるエッジは、ＡｃｔｉｖｅＥｄｇｅＬｉｓｔ（ＡＥＬ）と呼ばれるリンクリスト（エッジリスト）によって、スキャンライン毎にエッジリストの先頭からエッジのＸ座標昇順でソートされている。Ｎ番目のスキャンラインにおけるエッジリストに含まれるエッジデータは、直前に走査したスキャンラインであるＮ−１番目のスキャンラインにおけるエッジリストを用いてソートされる。
【００３４】
具体的には、Ｎ番目のスキャンラインのエッジリストにおいてエッジデータが、それぞれのＸ座標に従ってエッジＥ１、Ｅ２、Ｅ３の順でソートされていると仮定する。そして、スキャンラインが変わった際に、Ｎ＋１番目のスキャンライン上のエッジＥ１、Ｅ２、Ｅ３のＸ座標をＸ座標算出処理によって求める。そして、Ｎ番目のスキャンラインのエッジリスト及びＸ座標算出処理によって求められたエッジＥ１、Ｅ２、Ｅ３のＸ座標に従って、Ｎ＋１番目のスキャンラインエッジリストにおいてエッジＥ１〜Ｅ３のソートを実行する。
【００３５】
ここでＮ番目のスキャンラインのエッジリストにおいてはエッジＥ１、Ｅ２、Ｅ３の順でソートされているので、まず、エッジＥ３のＸ座標と、Ｎ番目のスキャンラインのエッジリストにおいては１つ前のエッジであったエッジＥ２のＸ座標とを比較する。これによって、Ｎ＋１番目のスキャンラインのエッジリストにおいて、エッジＥ３がエッジＥ２よりも前にあるかどうかを判定する。エッジＥ３がエッジＥ２より前にある場合に、エッジＥ３のＸ座標は、Ｎ番目のスキャンラインのエッジリストにおいてエッジＥ２よりさらに前のエッジＥ１のＸ座標と比較される。これにより、Ｎ＋１番目のスキャンラインのエッジリストにおいてエッジＥ３がエッジＥ１よりも前にあるかどうかが判定される。
【００３６】
そして、これらの比較判定の結果に従ってＮ＋１番目のスキャンラインのエッジリストにおけるエッジＥ３の順番が決定され、決定された順番となるようにエッジリストのリンク構造を更新する。この処理はそれぞれのエッジに対しても実行され、Ｎ＋１番目のスキャンラインのエッジリストが更新される。
【００３７】
なお、エッジのＸ座標同士の比較が行われる際に、エッジデータがＣＰＵキャッシュ上になければメインメモリ上のエッジデータにアクセスする必要がある。しかし、エッジデータがＣＰＵキャッシュにコピーされている場合には、メインメモリではなくＣＰＵキャッシュ上のエッジデータにアクセスすることで処理が高速化される。このような動作は、ＣＰＵキャッシュと接続するＣＰＵ２０５の動作として一般的である。
【００３８】
以上説明したように、スキャンラインが変わってエッジのＸ座標の前後が逆転した場合、新たにエッジが出現した場合、又はエッジが消滅した場合等に、エッジリストのリンク構造を更新する必要が生じる。このエッジリストを更新する処理をエッジソート処理と呼んでいる。
【００３９】
エッジソート処理が終わったエッジリストはレベル処理部に渡されて、Ｘ座標昇順でのエッジデータ及びレベルデータがレベル処理部に渡される。この処理をエッジトラッキング処理と呼んでいる。
【００４０】
最後に、描画が終了したエッジは、メモリから削除される。この処理をエッジ削除処理と呼んでいる。
【００４１】
＜レベル処理＞
レベル処理は大きく分けて３つの処理からなっている。３つの処理とは、レベル追加処理、レベル削除処理、及びレベルソート処理である。
【００４２】
レベル追加処理において、エッジ処理から送られてきたエッジデータに含まれるエッジの向きやクリップ情報に基づいてエッジが描画対象のエッジであるか否かが判定される。エッジが描画対象であると判定された場合、ＡｃｔｉｖｅＬｅｖｅｌＬｉｓｔ（ＡＬＬ）と呼ばれるリンクリストに、該当するレベルデータが追加される。
【００４３】
レベル削除処理は、レベル追加処理と逆の処理である。レベルの削除処理において、エッジの向きやクリップ情報に基づいてそれまで描画対象だったエッジが描画対象でなくなったと判定された場合、ＡＬＬから該当するレベルデータが削除される。
【００４４】
ＡＬＬはレベル番号昇順に常にソートされており、レベル追加処理やレベル削除処理があった場合、レベルソート処理と呼ばれるＡＬＬのソート処理が行われる。レベル追加処理、レベル削除処理、及びレベルソート処理を行ったレベルデータは、スパン単位でフィル処理に渡される。
【００４５】
＜フィル処理＞
フィル処理は大きく分けて３つの処理からなっている。３つの処理とは、画像拡縮処理、画像回転処理、及びピクセル生成処理である。
【００４６】
画像拡縮処理は、ディスプレイリストに含まれているビットマップ画像に拡大率が指定されていた場合に、指定された拡大率に従って各ピクセルの色値を生成する処理である。
【００４７】
画像回転処理は、ディスプレイリストに含まれているビットマップ画像に回転情報が指定されていた場合に、指定された回転情報に従って各ピクセルの色値を生成する処理である。
【００４８】
ピクセル生成処理は、ディスプレイリストにおいて、ある色値をある色値に変化させる変化情報が指定されていた場合に、指定された変化情報に従って各ピクセルの色値を生成する処理である。
【００４９】
＜コンポジット処理＞
コンポジット処理とは、レベル処理で確定したレベルの上下関係及びフィル処理で生成したピクセル値に基づいて実行される、ディスプレイリストに指定されている重ね合わせ処理である。
【００５０】
＜並列処理されるエッジ処理、レベル処理、フィル処理、及びコンポジット処理＞
上で説明した各処理は、スパンを単位としてパイプラインで並列に処理される。この並列処理について、図３（ｂ）、（ｃ）を用いて説明する。
【００５１】
図３（ｂ）は、１枚のページ画像データを示す。オブジェクト４０３はオブジェクト４０１乃至４０３のうちで最背面のオブジェクトであり、最背面にあることを示すレベル番号が割り当てられている。オブジェクト４０３の上位にオブジェクト４０２が重なり、さらにオブジェクト４０２の上位にオブジェクト４０１が重なっている。これら３つのオブジェクトはすでにディスプレイリスト化されている。このようなページ画像データに対してスキャンライン毎にスキャンラインレンダリング処理を行う。
【００５２】
詳細に図３（ｂ）を説明すると、ページ画像データの１スキャンライン目は、オブジェクトが存在しないのでスパン１−１が処理される。２スキャンライン目は、オブジェクト４０２が存在し、２つのエッジが検出されるので、スパン２−１、２−２、２−３が処理される。３スキャンライン目は、オブジェクト４０１、４０２、４０３が存在し、６つのエッジが検出されるので、スパン３−１、３−２、３−３、３−４、３−５、３−６、３−７が処理される。４スキャンライン目以降も同様である。
【００５３】
このような各スキャンラインのスパンは、図３（ｃ）に示されるように、エッジ処理、レベル処理、フィル処理、コンポジット処理の順でパイプライン処理される。
【００５４】
図３（ｂ）の例で言うと、図３（ｃ）に示されるように、まず１スキャンライン目の１番目のスパン１−１がエッジ処理で処理され、続いてレベル処理に渡される。次に２スキャンライン目の１番目のスパン２−１がエッジ処理され、レベル処理に渡されるのと同時にスパン１−１がレベル処理され、フィル処理に渡される。以下同様に図３（ｃ）で示すように各スパンが各処理で並列に処理される。
【００５５】
＜大量エッジが含まれているディスプレイリストのエッジ処理＞
図３ではオブジェクト４０１、４０２、４０３が１つずつだった場合のレンダリング処理について説明した。ここではオブジェクト４０２、４０３がそれぞれ１０００個ずつ重なった場合の、エッジ処理におけるエッジソート処理について図４を用いて説明する。図４（ａ）は、見た目上、図３（ｂ）と同じ画像を示す画像データである。しかし図４（ａ）では、１０００個のオブジェクト４０２が同じ位置に重なっており、また１０００個のオブジェクト４０３が同じ位置に重なっている。
【００５６】
図４（ｂ）は、図４（ａ）のスパン３−２付近の破線で表される円内のオブジェクトの配置を拡大した図である。図４（ｂ）中の縦線で表された部分がオブジェクト４０１の領域である。また、Ｘ０は、４スキャンライン目のオブジェクト４０１の左側のエッジのＸ座標である。Ｘ１は、オブジェクト４０２の左側のエッジのＸ座標である。Ｘ２は、オブジェクト４０３の左側のエッジのＸ座標である。Ｘ３は、３スキャンライン目のオブジェクト４０１の左側のエッジのＸ座標である。すなわち、３スキャンライン目から４スキャンライン目へとスキャンラインが変わると、オブジェクト４０１の左側のエッジが１０００個のオブジェクト４０２及び１０００個のオブジェクト４０３を横切ることになる。したがって、図４（ｃ）に示されるように、エッジソート処理によって、３スキャンライン目のエッジリスト上のオブジェクト４０１のエッジデータは、１０００個のオブジェクト４０２のエッジデータ及び１０００個のオブジェクト４０３のエッジデータを辿る。そして、４スキャンライン目のエッジリストの状態になるように、エッジリストの先頭へオブジェクト４０１のエッジデータが移される。
【００５７】
つまり、図４（ｃ）では、前述したように、処理中に現れるエッジデータはＡＥＬとしてＸ座標昇順でリンクされている。３スキャンライン目ではオブジェクト４０２の左側のエッジが１０００個分リンクで繋がっており、次にオブジェクト４０３の左側のエッジが１０００個分リンクで繋がっており、最後にオブジェクト４０１の左側のエッジがリンクされている。
【００５８】
スキャンラインが３スキャンライン目から４スキャンライン目に移る際、オブジェクト４０１の左側のエッジはＸ座標がＸ３からＸ０に変化する。Ｘ０＜Ｘ１＜Ｘ２＜Ｘ３であるから、オブジェクト４０１の左側のエッジは、エッジソート処理でオブジェクト４０２の左側のエッジ及びオブジェクト４０３の左側のエッジをそれぞれ１０００個ずつ辿って所定の位置にリンクされることになる。
【００５９】
リンクを辿る際は、メインメモリ上のエッジデータに順次アクセスして、各エッジのＸ座標と、ソート対象エッジのＸ座標とを比較する。エッジ数が少ない場合は、エッジデータへのアクセスの際、全スキャンラインを通して１回以上アクセスされるエッジデータの全てがＣＰＵキャッシュに格納された状態となるので高速に処理できる。
【００６０】
しかし、図４で示した例のようにエッジリストに含まれるエッジデータ数が大量だった場合、全てのエッジデータはＣＰＵキャッシュに収まりきらない。そのため、ＣＰＵキャッシュに存在しないエッジデータへのアクセスのために、メインメモリに直接アクセスしなければならず、処理時間が極端に遅くなることがある。特にこの例で挙げたように局所的にエッジが密集した場合（オブジェクト４０２の左側のエッジのＸ座標近傍に２０００エッジが集中する場合）、少しのエッジの移動でも大量のエッジにアクセスしてエッジソート処理を行わなければならない。これにより、処理時間が極端に遅くなるという問題が生じる。
【００６１】
＜エッジのグループ分割処理＞
図５を用いて、本実施例におけるエッジのグループ分割処理について説明する。ここでも、＜大量エッジが含まれているディスプレイリストのエッジ処理＞の項目で説明した場合、すなわちオブジェクト４０２、４０３がそれぞれ１０００個ずつ同一箇所に重なっている場合を例に挙げて説明する。
【００６２】
入力されたディスプレイリストには、レベル番号１〜１０００が振られた１０００個のオブジェクト４０３、レベル番号１００１〜２０００が振られた１０００個のオブジェクト４０２、及びレベル番号２００１が振られた１個のオブジェクト４０１が含まれる。一つのオブジェクトは、左側のエッジと、右側のエッジとからなっている。このディスプレイリストには２００１個のオブジェクトが含まれるので、エッジデータ数は４００２個となる。
【００６３】
ここでＣＰＵキャッシュのメモリが、２０００エッジ分のエッジデータまではＣＰＵキャッシュ内に保持でき、エッジデータ数が２００１個以上の場合はＣＰＵキャッシュから溢れてしまうとする。この場合、１つのグループには１０００個のオブジェクト（２０００個のエッジデータに相当）まで含まれるようにすればよいことになる。なお、この「エッジデータ数」はＣＰＵキャッシュのメモリサイズ及びエッジデータのデータサイズによって異なるので、画像処理装置１００が異なれば、ＣＰＵキャッシュに保持できるエッジデータ数も異なることになる。
【００６４】
まず、コントローラ１０１は、入力されたディスプレイリストに含まれるオブジェクトのエッジと、このエッジのレベル番号とを確認することで、各々のエッジ（エッジデータ）がどのグループに属するべきか判定する。図５の例では、レベル番号１〜１０００のオブジェクト４０３を形成するエッジがグループ１に、レベル番号１００１〜２０００のオブジェクト４０２を形成するエッジがグループ２に、オブジェクト４０１を形成するエッジがグループ３に属する。
【００６５】
各グループに対して生成されることになるビットマップは、背面のグループから重ね合わせる必要があるので必ず下位のグループ（本例ではグループ１）から順番にレンダリングしていく必要がある。しかし、各グループ内のオブジェクトに関してはレベル処理が行われるので、オブジェクトのレベル番号の小さい順に処理する必要はなくエッジが現れる順に処理すればよい。
【００６６】
各グループでの処理はに対し、＜ディスプレイリストのレンダリング処理方法について＞の項目に記載したレンダリング処理方法を行うがが実行される、。ディスプレイリストを解釈する際、処理中のグループに属するエッジデータのみをメインメモリＣＰＵキャッシュにロードして処理を行う実行する点が、本発明の特徴の一つである。
【００６７】
図５の１グループ目のページ画像の生成で示すように１グループ目のレンダリング処理によってビットマップ画像が生成された後（図５上段）に、２グループ目の処理に取り掛かる。２グループ目も１グループ目と同様、２グループ目に属するエッジのみをＣＰＵキャッシュにロードしてレンダリング処理を行い、２グループ目のビットマップ画像を生成する。その後、１グループ目のビットマップ画像と、２グループ目のビットマップ画像との重ね合わせを行い、１グループ目のビットマップ画像と、２グループ目のビットマップ画像とが重ねあわされた画像が生成される（図５中段）。以下同様に、最上位グループまでレンダリング処理と、重ね合わせ処理とを繰り返し、最終的に、オブジェクト４０３の上位にオブジェクト４０２が重なり、オブジェクト４０２の上位にオブジェクト４０１が重なったビットマップ画像を生成する（図５下段）。
【００６８】
＜エッジのグループ分割後のコンポジット処理についての検討＞
図６を用いて、図５を用いて説明したエッジのグループ分割後のコンポジット処理について検討する。コンポジット処理には、グループ内のコンポジット処理と、グループ間のコンポジット処理とがある。グループ内のコンポジット処理に関しては、エッジが一度にロードされレベル処理まで行われ、描画に必要のないレベルは削除されるため、必要最低限のコンポジットですむ。一方、グループ間のコンポジット処理は、図６に示すように、グループ間の全面ピクセル同士でコンポジット処理が行われることになり、また、グループが多ければその分グループ間のコンポジット処理回数も多くなる。したがって、グループが多い場合に処理速度のボトルネックになる可能性がある。よって、さらなる処理速度の向上のためには、グループ間のピクセルのコンポジット処理を効率良く行うことが求められる。
【００６９】
＜エッジのグループ分割後のグループ間のコンポジットスキップ処理＞
図７を用いて、エッジのグループ分割後のグループ間のコンポジットスキップ処理について説明する。
【００７０】
図７を参照すると、例示されるページには、最下位に三角形のオブジェクトを含むグループが存在し、このグループの上には大きな四角形のオブジェクトを含むグループが存在し、最上位には不透過の小さな四角形のオブジェクトを含むグループが存在する。あるスキャンラインＡを処理する際、不透過の小さな四角形のオブジェクトがロードされる。
【００７１】
この不透過の小さな四角形のオブジェクトは、最終的な描画結果として他のオブジェクトに上書きされずに表示される。言い換えれば、この不透過の小さな四角形のオブジェクトによって上書きされるより下のオブジェクトは描画されないことになる。
【００７２】
本実施例では、不透過の小さな四角形のオブジェクトの左右のエッジのＸ座標（ｘ１、ｘ２）及びこのオブジェクトが属するグループのグループＮｏ（本例では３）を保持する（図７のステップＡ−１参照）。オブジェクトのグループＮｏは、オブジェクトをレベルに応じてグループ分けする際にオブジェクト毎に割り当てられる。また、グループＮｏは、下位から上位になるにつれて昇順に設定される。つまり、上位のグループＮｏのグループに属するオブジェクトは、下位のグループＮｏのグループに属するオブジェクトを覆うことがあるが、その逆はない。具体的には、例えば、グループＮｏ３のグループに属するオブジェクトは、グループＮｏ１のグループに属するオブジェクトを覆って、上書きすることがある。しかし、グループＮｏ１のグループに属するオブジェクトが、グループＮｏ３のグループに属するオブジェクトを覆って、上書きすることはない。
【００７３】
オブジェクトのエッジのＸ座標及びオブジェクトのグループＮｏを保持した後、スキャンラインＡに隣接する次のスキャンラインＢにおける処理を実行する。背面(白色)から生成されるＢＭＰと、三角形のオブジェクトを含む最下位グループから生成されるＢＭＰとをコンポジットする際、背面及び最下位グループは、ステップＡ−１における処理でグループＮｏを保持したグループより下位にある。したがって、Ｘ座標のｘ１からｘ２までの区間（ｘ１、ｘ２）ではグループ間のコンポジット処理は行わず、その他の所のみグループ間のコンポジット処理を行う（図７のステップＢ−１参照）。
【００７４】
次のステップＢ−２においても同様に、区間（ｘ１、ｘ２）ではグループ間のコンポジット処理を行う必要はなく、その他の所のみグループ間のコンポジット処理を行う。
【００７５】
最終的にステップＢ−３において、区間（ｘ１、ｘ２）は最上位グループから生成されるＢＭＰにより上書きされ、最終的に出力されるＢＭＰが生成される。
【００７６】
＜コンポジットスキップ処理フロー＞
図８を用いて、図７に例示したコンポジットスキップ処理について詳細に説明する。図８に示す一連の処理は、図２のＲＩＰ２１６内のＲＡＭにプログラムがロードされ、ＲＩＰ２１６内のＣＰＵ上で動作することで実行される。
【００７７】
ステップＳ８００において、処理は開始される。次いで、処理は、ステップＳ８０２に進む。
【００７８】
ステップＳ８０２において、ＲＩＰ２１６内のＣＰＵは、レンダリングを行うディスプレイリスト及びこのディスプレイリストに含まれるエッジ数を受信し、ＲＩＰ２１６内のＲＡＭに格納する。ディスプレイリストに含まれるエッジ数は、ＤＬ生成部がＰＤＬからＤＬを生成しながらカウントすることによって得られる。合わせて、ステップＳ８０２において、キャッシュサイズ及びエッジデータのデータサイズから、エッジ処理においてキャッシュミスヒットが発生しないエッジ数（１個のグループが含み得る最大のエッジ数）を算出する。キャッシュミスヒットが発生しないエッジ数の算出方法は、下記＜エッジ数算出方法＞の項目に記載する。ディスプレイリストに含まれるエッジ数を、キャッシュミスヒットが発生しないエッジ数で割ることによって、グループ数を算出する。次いで、処理は、ステップＳ８０３に進む。
【００７９】
ステップＳ８０３において、ＲＩＰ２１６内のＣＰＵは、エッジをグループ毎に分割する必要があるか否かを判定する。具体的には、ステップＳ８０２で算出したグループ数が１より多い場合は、グループ分割の必要があると判定し、処理は、ステップＳ８０９に進む。ステップＳ８０２で算出したグループ数が１以下の場合は、グループ分割の必要がないと判定し、処理は、ステップＳ８０４に進む。
【００８０】
ステップＳ８０４において、ＲＩＰ２１６内のＣＰＵは、グループ分割を伴わない通常のＲＩＰ処理を実行する。次いで、処理は、ステップＳ８２０に進む。
【００８１】
ステップＳ８０９において、ＲＩＰ２１６内のＣＰＵは、ディスプレイリストの解釈及びオブジェクトのロードを行う。次いで、処理は、ステップＳ８１０に進む。
【００８２】
ステップＳ８１０において、ＲＩＰ２１６内のＣＰＵは、ロードしたオブジェクトより下の領域でコンポジット処理が省略可能かを判定するために、ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であるか否かを判定する。オブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であると判定された場合、処理は、ステップＳ８１１に進む。オブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位ではないと判定された場合、処理は、ステップＳ８１２に進む。
【００８３】
ステップＳ８１１において、ＲＩＰ２１６内のＣＰＵは、オブジェクトが属するグループのグループＮｏ及びオブジェクトの左右のエッジのＸ座標を更新する。この更新処理は、ＲＩＰ２１６内のＣＰＵが、オブジェクトが属するグループのグループＮｏ及びオブジェクトの左右のエッジのＸ座標をＲＩＰ２１６内のＲＡＭに記憶することで行われる。次いで、処理は、ステップＳ８１２に進む。
【００８４】
ステップＳ８１２において、ＲＩＰ２１６内のＣＰＵは、エッジ処理、レベル処理、及びフィル処理を行う。次いで、処理は、ステップＳ８１３に進む。
【００８５】
ステップＳ８１３において、ＲＩＰ２１６内のＣＰＵは、行われるコンポジット処理がグループ間のコンポジット処理であるか否かを、コンポジット処理を行うオブジェクトの属するグループに基づいて判定する。行われるコンポジット処理がグループ間のコンポジット処理であると判定された場合、処理は、ステップＳ８１５に進み、行われるコンポジット処理がグループ間のコンポジット処理ではないと判定された場合、処理は、ステップＳ８１４に進む。
【００８６】
ステップＳ８１４において、ＲＩＰ２１６内のＣＰＵは、＜コンポジット処理＞の項目で説明したコンポジット処理を行う。次いで、処理は、ステップＳ８１８に進む。
【００８７】
ステップＳ８１５において、ＲＩＰ２１６内のＣＰＵは、ステップＳ８１１で把握しているオブジェクトが属するグループより下位のグループ同士のコンポジット処理が行われるか否かを判定する。この判定は、ステップＳ８１１における更新により記憶されたグループＮｏと、ＲＩＰ２１６内のＲＡＭが保持するグループＮｏとを比較することで実行される。例えば、ステップＳ８１１における更新により記憶されたグループＮｏよりも処理されるオブジェクトのグループＮｏが小さい場合、ステップＳ８１１で把握しているオブジェクトが属するグループより下位のグループ同士のコンポジット処理が行われると判定する。一方、ステップＳ８１１における更新により記憶されたグループＮｏよりも処理されるオブジェクトのグループＮｏが大きい場合、ステップＳ８１１で把握しているオブジェクトが属するグループより上位のグループ同士のコンポジット処理が行われると判定する。ステップＳ８１１で把握しているオブジェクトが属するグループより下位のグループ同士のコンポジット処理が行われると判定された場合、処理は、ステップＳ８１６に進む。ステップＳ８１１で把握しているオブジェクトが属するグループより下位のグループ同士のコンポジット処理が行われないと判定された場合、処理は、ステップＳ８１４に進む。
【００８８】
ステップＳ８１６において、ＲＩＰ２１６内のＣＰＵは、ステップＳ８１１で更新したX座標間でグループ間のコンポジット処理が行われているか否かを判定する。具体的には、この判定は、現在処理中のグループ間のコンポジット処理が実行される区間と、ステップＳ８１１で更新された区間とを比較することにより実行される。例えば、ステップＳ８１１で把握しているオブジェクトの左側のエッジのＸ座標が１００、右側のエッジのＸ座標が５００だとする。そして、現在処理中のコンポジット処理がX＝１５０〜３００の区間で実行される場合、コンポジット処理が実行される区間はステップＳ８１１で把握している区間内に含まれるので、この部分のコンポジット処理は省略できると判定される。ステップＳ８１１で更新したX座標間でグループ間のコンポジット処理が行われると判定された場合、処理は、ステップＳ８１８に進む。ステップＳ８１１で更新したX座標間でグループ間のコンポジット処理が行われないと判定された場合、処理は、ステップＳ８１７に進む。
【００８９】
ステップＳ８１７において、ＲＩＰ２１６内のＣＰＵは、グループ間のコンポジット処理を行う。次いで、処理は、ステップＳ８１８に進む。
【００９０】
ステップＳ８１８は、オブジェクト毎の処理のループ端である。ステップＳ８１８において、ＲＩＰ２１６内のＣＰＵは、処理中のスキャンラインにおけるオブジェクトの処理が全て終了したか否かを判定する。処理中のスキャンラインにおけるオブジェクトの処理が全て終了したと判定された場合、処理は、ステップＳ８１９に進む。処理中のスキャンラインにおけるオブジェクトの処理が全て終了していないと判定された場合、処理は、ループ端であるステップＳ８０８に飛ぶ。
【００９１】
ステップＳ８１９は、スキャンライン毎の処理のループ端である。ステップＳ８１９において、ＲＩＰ２１６内のＣＰＵは、処理中のページにおけるスキャンラインの処理が全て終了したか否かを判定する。処理中のページにおけるスキャンラインの処理が全て終了したと判定された場合、処理は、ステップＳ８２０に進み、処理中のページにおけるスキャンラインの処理が全て終了していないと判定された場合、処理は、ループ端であるステップＳ８０７に飛ぶ。
【００９２】
ステップＳ８２０において、一連の処理は、終了する。
【００９３】
＜エッジ数算出方法＞
ここで、キャッシュミスヒットが発生しないエッジ数の算出方法を、具体例を挙げて説明する。例えば、ＣＰＵキャッシュサイズが３２Ｋｂｙｔｅで、１つのエッジデータのデータサイズが６４ｂｙｔｅだった場合、ＣＰＵキャッシュサイズを１つのエッジデータのデータサイズで割った値、５１２個がキャッシュミスヒットが発生しないエッジ数となる。
【実施例２】
【００９４】
＜複数の区間におけるグループ間のコンポジットスキップ処理＞
実施例１では１スキャンラインにおいてコンポジットスキップする区間は一つだけだったが、１スキャンラインにおいて複数の区間に対してコンポジットスキップ処理を実行しても構わない。
【００９５】
図９を用いて、複数の区間におけるグループ間のコンポジットスキップ処理について説明する。
【００９６】
図９に例示するページには、最下位に三角形のオブジェクトを含むグループが存在し、このグループの上には大きな四角形のオブジェクトを含むグループが存在する。また、当該グループの一つ上のグループとして中くらいの四角形のオブジェクトを含むグループが存在する。さらに、最上位には不透過の小さな四角形のオブジェクトを２つ含むグループが存在する。
【００９７】
スキャンラインＡを処理する際、不透過の小さな四角形のオブジェクトが２つロードされる。この２つの不透過の小さな四角形のオブジェクトによって最終的に上書きされるので、この２つの不透過の小さな四角形のオブジェクトによって上書きされるそれより下のオブジェクトは描画されないことになる。
【００９８】
本実施例では、不透過の小さな四角形のオブジェクトのそれぞれについて、左右のエッジのＸ座標及びグループＮｏを保持する。具体的には、１つ目の不透過の小さな四角形のオブジェクトについて、左右のエッジのX座標として（ｘ１、ｘ２）、グループＮｏとして４が保持される。また、２つ目の不透過の小さな四角形のオブジェクトについて、左右のエッジのX座標として（ｘ３、ｘ４）、グループＮｏとして４が保持される（図９のステップＡ−１参照）。
【００９９】
オブジェクトのエッジのＸ座標及びオブジェクトのグループＮｏを保持した後、スキャンラインＡに隣接する次のスキャンラインＢにおける処理を実行する。ステップＢ−１において、背面(白色)から生成されるＢＭＰと、三角形のオブジェクトを含む最下位グループから生成されるＢＭＰとをコンポジットする。このとき、背面及び最下位グループは、ステップＡ−１における処理でグループＮｏを保持したグループより下位にある。したがって、区間（ｘ１、ｘ２）及び区間（ｘ３、ｘ４）ではグループ間のコンポジット処理は行わず、その他の所のみグループ間のコンポジット処理を行う。
【０１００】
続くステップＢ−２、Ｂ−３においても同様に、区間（ｘ１、ｘ２）及び区間（ｘ３、ｘ４）ではグループ間のコンポジット処理を行う必要はなく、その他の所のみグループ間のコンポジット処理を行う。
【０１０１】
最終的にステップＢ−４において、区間（ｘ１、ｘ２）及び区間（ｘ３、ｘ４）は最上位グループから生成されるＢＭＰにより上書きされる。
【０１０２】
＜複数の区間におけるグループ間のコンポジットスキップ処理フロー＞
図１０を用いて、図９に例示した複数の区間におけるコンポジットスキップ処理について詳細に説明する。図１０に示す一連の処理は、図２のＲＩＰ２１６内のＲＡＭにプログラムがロードされ、ＲＩＰ２１６内のＣＰＵ上で動作することで実行される。なお、本実施例に係る一連の処理は、実施例１に係る処理と一部同一である。具体的には、図８のステップＳ８００〜Ｓ８０９の処理及びステップＳ８１２〜Ｓ８２０の処理に関して、本実施例の処理は、実施例１の処理と同一である。したがって、以下の説明では、実施例１と同一の処理については説明を省略し、ステップＳ１０００（図８のＳ８０９）の後のステップＳ１００１以降の処理について説明する。
【０１０３】
ステップＳ１００１において、ＲＩＰ２１６内のＣＰＵは、ロードしたオブジェクトより下の領域でコンポジット処理が省略可能かを判定するために、ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であるか否かを判定する。オブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であると判定された場合、処理は、ステップＳ１００２に進む。オブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位ではないと判定された場合、処理は、ステップＳ１００５に進む。
【０１０４】
ステップＳ１００２において、ＲＩＰ２１６内のＣＰＵは、グループ間のコンポジットスキップ処理の対象となる区間の数が保持できる個数以内か否かを判定する。保持可能な、グループ間のコンポジットスキップ処理の対象となる区間の数は、予め設定されている。グループ間のコンポジットスキップ処理の対象となる区間の数が保持できる個数以内である場合、処理は、ステップＳ１００３に進む。グループ間のコンポジットスキップ処理の対象となる区間の数が保持できる個数より多い場合、処理は、ステップＳ１００４に進む。
【０１０５】
ステップＳ１００３において、ＲＩＰ２１６内のＣＰＵは、エッジのロード時に取得したオブジェクトが属するグループＮｏと、当該オブジェクトの左右のエッジのＸ座標とを追加登録する。次いで、処理は、ステップＳ１００５（図８のＳ８１２）に進む。
【０１０６】
ステップＳ１００４において、ＲＩＰ２１６内のＣＰＵは、保持しているオブジェクトの中で最も背面に近いオブジェクトに関するデータを削除して、ステップＳ１００１でロードしたオブジェクトに関するデータを追加登録する。具体的には、エッジのロード時に取得したオブジェクトが属するグループＮｏと、当該オブジェクトの左右のエッジのＸ座標とを追加登録する。次いで、処理は、ステップＳ１００５（図８のＳ８１２）に進む。
【実施例３】
【０１０７】
＜最適オブジェクトの選択を伴うコンポジットスキップ処理＞
上述した実施例では、最上位のグループに属する不透過オブジェクトのスパンにおいて、グループ間のコンポジットスキップ処理を実行した。しかし、オブジェクトの形状によっては、最上位グループより低位のグループに属する不透過オブジェクトのスパンにおいて、グループ間のコンポジットスキップ処理を実行しても構わない。
【０１０８】
図１１を用いて、最適オブジェクトの選択を伴うグループ間のコンポジットスキップ処理について説明する。
【０１０９】
図１１に例示するページには、最下位に三角形のオブジェクトを含むグループが存在し、このグループの上には大きな四角形のオブジェクトを含むグループが存在する。また、当該グループの一つ上のグループとして不透過の中くらいの四角形のオブジェクトを含むグループが存在する。さらに、最上位には不透過の小さな四角形のオブジェクトを含むグループが存在する。
【０１１０】
スキャンラインＡを処理する際、最上位グループに属する不透過の小さな四角形のオブジェクトがロードされる。しかし、このオブジェクトによって描画される四角形は所定の大きさより小さいので、本実施例では、当該オブジェクトを、コンポジットスキップを実行する際の基準にセットしない。本実施例では、コンポジットスキップを実行する際の基準に、最上位グループの下位のグループに属する不透過の中くらいの四角形のオブジェクトをセットする。この不透過の中くらいの四角形のオブジェクトによって上書きされる、それより下のオブジェクトは描画されないことになる。
【０１１１】
本実施例では、中くらいの四角形のオブジェクトについて、左右のエッジのＸ座標及びグループＮｏを保持する。具体的には、左右のエッジのX座標として（ｘ１、ｘ２）、グループＮｏとして３が保持される。
【０１１２】
オブジェクトのエッジのＸ座標及びオブジェクトのグループＮｏを保持した後、スキャンラインＡに隣接する次のスキャンラインＢにおける処理を実行する。ステップＢ−１において、背面(白色)から生成されるＢＭＰと、三角形のオブジェクトを含む最下位グループから生成されるＢＭＰとをコンポジットする。このとき、背面及び最下位グループは、ステップＡ−１における処理でグループＮｏを保持したグループより下位にある。したがって、区間（ｘ１、ｘ２）ではグループ間のコンポジット処理は行わず、その他の所のみグループ間のコンポジット処理を行う。
【０１１３】
続くステップＢ−２においても同様に、区間（ｘ１、ｘ２）ではグループ間のコンポジット処理を行う必要はなく、その他の所のみグループ間のコンポジット処理を行う。
【０１１４】
続くステップＢ−３においても同様に、区間（ｘ１、ｘ２）ではグループ間のコンポジット処理を行うことなく上書きされる。
【０１１５】
最終的にステップＢ−４において、小さな四角形が上書きされる。このとき、グループ間のコンポジット処理が行われるが、小さな四角形のオブジェクトのスパンは短いので、エッジ処理にそれほど時間を要さない。
【０１１６】
＜最適オブジェクトの選択を伴うコンポジットスキップ処理フロー＞
図１２を用いて、図１１に例示した最適オブジェクトの選択を伴うコンポジットスキップ処理について詳細に説明する。図１２に示す一連の処理は、図２のＲＩＰ２１６内のＲＡＭにプログラムがロードされ、ＲＩＰ２１６内のＣＰＵ上で動作することで実行される。なお、本実施例に係る一連の処理は、実施例１に係る処理と一部同一である。具体的には、図８のステップＳ８００〜Ｓ８０９の処理及びステップＳ８１２〜Ｓ８２０の処理に関して、本実施例の処理は、実施例１の処理と同一である。したがって、以下の説明では、実施例１と同一の処理については説明を省略し、ステップＳ１２００（図８のＳ８０９）の後のステップＳ１２０１以降の処理について説明する。
【０１１７】
ステップＳ１２０１において、ＲＩＰ２１６内のＣＰＵは、ロードしたオブジェクトより下の領域でコンポジット処理が省略可能かを判定するために、ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であるか否かを判定する。ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位であると判定された場合、処理は、ステップＳ１２０２に進む。ロードしたオブジェクトが不透過且つ矩形であり現在把握しているオブジェクトより上位ではないと判定された場合、処理は、ステップＳ１２０４に進む。
【０１１８】
ステップＳ１２０２において、ＲＩＰ２１６内のＣＰＵは、ロードされたオブジェクトの大きさが所定の大きさより大きいか否か（ロードされたオブジェクトのスパンの長さが所定の長さより長いか否か）を判定する。ロードされたオブジェクトの大きさが所定の大きさより大きいと判定された場合、処理は、ステップＳ１２０３に進み、ロードされたオブジェクトの大きさが所定の大きさ以下であると判定された場合、処理は、ステップＳ１２０４（図８のＳ８１２）に進む。
【０１１９】
ステップＳ１２０３において、ＲＩＰ２１６内のＣＰＵは、オブジェクトが属するグループのグループＮｏ及びオブジェクトの左右のエッジのＸ座標を更新する。次いで、処理は、ステップＳ１２０４（図８のＳ８１２）に進む。
【実施例４】
【０１２０】
＜矩形以外のオブジェクトのスパンにおけるグループ間のコンポジットスキップ処理＞
上述した実施例では、矩形のオブジェクトのスパンにおいて、グループ間のコンポジットスキップ処理を実行した。しかし、矩形以外のオブジェクトのスパンにおいて、グループ間のコンポジットスキップ処理を実行しても構わない。
【０１２１】
図１３を用いて、矩形以外のオブジェクトのスパンにおけるグループ間のコンポジットスキップ処理について説明する。
【０１２２】
図１３に例示するページには、最下位に三角形のオブジェクトを含むグループが存在し、このグループの上には大きな四角形のオブジェクトを含むグループが存在する。また、最上位には不透過の台形のオブジェクトを含むグループが存在する。
【０１２３】
スキャンラインＡを処理する際、最上位グループに属する不透過の台形のオブジェクトがロードされる。この不透過の台形のオブジェクトにより最終的に上書きされるので、この上書き部より下のオブジェクトは描画されないことになる。
【０１２４】
本実施例では、不透過の台形のオブジェクトについて、左右のエッジのＸ座標及びグループＮｏを保持する。具体的には、左右のエッジのX座標として（ｘ１、ｘ２）、グループＮｏとして３が保持される。合わせて、台形のオブジェクトのエッジ処理を行う際、スキャンラインＡに隣接する次のスキャンラインＢにおけるスパン（ｘ１’、ｘ２’）も保持する（図１３のステップＡ−１参照）。
【０１２５】
次いで、スキャンラインＢにおける処理が実行される。ステップＢ−１において、背面(白色)から生成されるＢＭＰと、三角形のオブジェクトを含む最下位グループから生成されるＢＭＰとをコンポジットする。このとき、背面及び最下位グループは、ステップＡ−１における処理でグループＮｏを保持したグループより下位にある。したがって、区間（ｘ１’、ｘ２’）ではグループ間のコンポジット処理は行わず、その他の所のみグループ間のコンポジット処理を行う。
【０１２６】
続くステップＢ−２においても同様に、区間（ｘ１’、ｘ２’）ではグループ間のコンポジット処理を行う必要はなく、その他の所のみグループ間のコンポジット処理を行う。
【０１２７】
最終的にステップＢ−３において、区間（ｘ１’、ｘ２’）は最上位グループから生成されるＢＭＰにより上書きされる。
【０１２８】
＜矩形以外のオブジェクトのスパンにおけるコンポジットスキップ処理フロー＞
図１４を用いて、図１３に例示した矩形以外のオブジェクトのスパンにおけるコンポジットスキップ処理について詳細に説明する。図１４に示す一連の処理は、図２のＲＩＰ２１６内のＲＡＭにプログラムがロードされ、ＲＩＰ２１６内のＣＰＵ上で動作することで実行される。なお、本実施例に係る一連の処理は、実施例１に係る処理と一部同一である。具体的には、図８のステップＳ８００〜Ｓ８０９の処理及びステップＳ８１３〜Ｓ８２０の処理に関して、本実施例の処理は、実施例１の処理と同一である。したがって、以下の説明では、実施例１と同一の処理については説明を省略し、ステップＳ１４００（図８のＳ８０９）の後のステップＳ１４０１以降の処理について説明する。
【０１２９】
ステップＳ１４０１において、ＲＩＰ２１６内のＣＰＵは、ロードしたオブジェクトより下の領域でコンポジット処理が省略可能かを判定するために、ロードしたオブジェクトが不透過且つ現在把握しているオブジェクトより上位であるか否かを判定する。ロードしたオブジェクトが不透過且つ現在把握しているオブジェクトより上位であると判定された場合、処理は、ステップＳ１４０２に進む。ロードしたオブジェクトが不透過且つ現在把握しているオブジェクトより上位ではないと判定された場合、処理は、ステップＳ１４０３に進む。
【０１３０】
ステップＳ１４０２において、ＲＩＰ２１６内のＣＰＵは、オブジェクトが属するグループのグループＮｏ及びオブジェクトの左右のエッジのＸ座標を更新する。次いで、処理は、ステップＳ１４０３に進む。
【０１３１】
ステップＳ１４０３において、ＲＩＰ２１６内のＣＰＵは、保持しているオブジェクトのエッジ処理か否かを判定する。保持しているオブジェクトのエッジ処理と判定された場合、処理は、ステップＳ１４０４に進み、保持しているオブジェクトのエッジ処理ではないと判定された場合、処理は、ステップＳ１４０５に進む。
【０１３２】
ステップＳ１４０４において、ＲＩＰ２１６内のＣＰＵは、次のスキャンラインにおけるオブジェクトのエッジのＸ座標を算出し保持する。次いで、処理は、ステップＳ１４０５に進む。
【０１３３】
ステップＳ１４０５において、ＲＩＰ２１６内のＣＰＵは、エッジ処理、レベル処理、及びフィル処理を行う。次いで、処理は、ステップＳ１４０６（図８のＳ８１３）に進む。
【実施例５】
【０１３４】
＜矩形以外のオブジェクトのスパンにおける簡易コンポジットスキップ処理＞
実施例４では次のラインでスキップする区間（ｘ１’、ｘ２’）を現在処理中のラインにおける処理でライン毎に算出した。しかし、本実施例では、一旦ロードしたオブジェクトの左右のエッジによるスパン（ｘ１、ｘ２）を常にコンポジットスキップできる区間としてコンポジット処理を実行する。なお、本実施例は、あるスキャンラインから次のスキャンラインに処理が進む際にオブジェクトの左側のエッジがｘ軸マイナス方向に伸張し、右側のエッジがｘ軸プラス方向に伸張する場合を想定している。
【０１３５】
図１５を用いて、矩形以外のオブジェクトのスパンにおけるグループ間の簡易コンポジットスキップ処理について説明する。
【０１３６】
図１５に例示するページには、最下位に三角形のオブジェクトを含むグループが存在し、このグループの上には大きな四角形のオブジェクトを含むグループが存在する。また、最上位には不透過の小さな台形のオブジェクトを含むグループが存在する。
【０１３７】
スキャンラインＡを処理する際、最上位グループに属する不透過の台形のオブジェクトがロードされる。スキャンラインＡの処理からスキャンラインＢの処理に進む際、不透過の台形の左側のエッジは、ｘ軸マイナス方向に進み、右側のエッジは、ｘ軸プラス方向に進む。本実施例では、この不透過の台形のオブジェクトにより最終的に上書きされるので、この上書き部より下のオブジェクトは描画されないことになる。
【０１３８】
本実施例では、ロードされた台形のオブジェクトについて、左右のエッジによるスパンのうち最も上部のスパン及びグループＮｏを保持する。具体的には、スパンとして（ｘ１、ｘ２）、グループＮｏとして３が保持される。図１５から分かるように、スパン（ｘ１、ｘ２）は、台形の上底を表す。
【０１３９】
次いで、スキャンラインＢにおける処理が実行される。ステップＢ−１において、背面(白色)から生成されるＢＭＰと、三角形のオブジェクトを含む最下位グループから生成されるＢＭＰとをコンポジットする。このとき、背面及び最下位グループは、ステップＡ−１における処理でグループＮｏを保持したグループより下位にある。したがって、ステップＡ−１で保持した区間（ｘ１、ｘ２）ではグループ間のコンポジット処理は行わず、その他の所のみグループ間のコンポジット処理を行う。
【０１４０】
続くステップＢ−２においても同様に、区間（ｘ１、ｘ２）ではグループ間のコンポジット処理を行う必要はなく、その他の所のみグループ間のコンポジット処理を行う。
【０１４１】
最終的にステップＢ−３において、不透過の台形のオブジェクトにより上書きされる。
【０１４２】
＜矩形以外のオブジェクトのスパンにおける簡易コンポジットスキップ処理フロー＞
図１６を用いて、図１５に例示した矩形以外のオブジェクトのスパンにおける簡易コンポジットスキップ処理について詳細に説明する。図１６に示す一連の処理は、図２のＲＩＰ２１６内のＲＡＭにプログラムがロードされ、ＲＩＰ２１６内のＣＰＵ上で動作することで実行される。なお、本実施例に係る一連の処理は、実施例１に係る処理と一部同一である。具体的には、図８のステップＳ８００〜Ｓ８０９の処理及びステップＳ８１２〜Ｓ８２０の処理に関して、本実施例の処理は、実施例１の処理と同一である。したがって、以下の説明では、実施例１と同一の処理については説明を省略し、ステップＳ１６００（図８のＳ８０９）の後のステップＳ１６０１以降の処理について説明する。
【０１４３】
ステップＳ１６０１において、ＲＩＰ２１６内のＣＰＵは、ロードしたオブジェクトが不透過且つ現在把握しているオブジェクトより上位であるか否か判定する。また、ＲＩＰ２１６内のＣＰＵは、ロードしたオブジェクトに関して、カレントスキャンラインが次のスキャンラインに進む際、左側のエッジがｘ軸マイナス方向に伸張し、右側のエッジがｘ軸プラス方向に伸張する台形か否かを、エッジの傾きに基づいて判定する。これらの条件を全て満たす場合、処理は、ステップＳ１６０２に進み、これらの条件を一つでも満たさない場合、処理は、ステップＳ１６０３（図８のＳ８１２）に進む。
【０１４４】
ステップＳ１６０２において、ＲＩＰ２１６内のＣＰＵは、オブジェクトが属するグループのグループＮｏ及びロードしたオブジェクトの左右のエッジのＸ座標を保持する。次いで、処理は、ステップＳ１６０３（図８のＳ８１２）に進む。
【０１４５】
＜エッジのグループ分割処理と、先行技術との関連について＞
図１７を用いて、本発明に係るエッジのグループ分割処理と、先行技術との関連について説明する。図１７に示す一連の処理は、図２のＲＩＰ２１６内のＲＡＭにプログラムがロードされ、ＲＩＰ２１６内のＣＰＵ上で動作することで実行される。
【０１４６】
エッジのグループ分割処理とは、実施例１で説明したように、ディスプレイリストを入力としビットマップを出力とした処理であり、ＣＰＵキャッシュサイズと、ディスプレイリストに含まれるエッジとに基づいて、エッジをグループに分割して行う処理である。
【０１４７】
また、本説明で登場する「フォールバック」とは背景技術で述べた処理のことである。入力されたＰＤＬデータのデータサイズが大きい場合、ディスプレイリストを生成するためのメモリサイズが不足する場合がある。この場合、メモリサイズに収まるサイズのディスプレイリストをＰＤＬデータから生成しレンダリングを行う。一度にディスプレイリストが生成できなかった残りのＰＤＬデータも同様にメモリサイズに収まるようなディスプレイリストを生成し、既にレンダリングしたデータがある場合、重ね合わせを行う。
【０１４８】
ＰＤＬのレンダリング処理は、ステップＳ１７０１で開始される。次いで、処理は、ステップＳ１７０３に進む。
【０１４９】
ステップＳ１７０３において、ＲＩＰ２１６内のＣＰＵは、レンダリングを行うＰＤＬを受信し、ＲＩＰ２１６内のＲＡＭに格納する。次いで、処理は、ステップＳ１７０４に進む。
【０１５０】
ステップＳ１７０４において、ＲＩＰ２１６内のＣＰＵは、ＰＤＬを解釈しディスプレイリストを生成する。次いで、処理は、ステップＳ１７０５に進む。
【０１５１】
ステップＳ１７０５において、ＲＩＰ２１６内のＣＰＵは、処理中のページにおいてフォールバックが発生したか否かを判定する。フォールバックが発生したと判定された場合、処理は、ステップＳ１７０６に進み、フォールバックが発生していないと判定された場合、処理は、Ｓ１７０９に進む。
【０１５２】
ステップＳ１７０６において、ＲＩＰ２１６内のＣＰＵは、エッジをグループに分割した上でレンダリング処理を行う。次いで、処理は、ステップＳ１７０７に進む。
【０１５３】
ステップＳ１７０７において、ＲＩＰ２１６内のＣＰＵは、ページの重ね合わせ処理を行う。ページの重ね合わせ処理については、＜フォールバックにおける重ね合わせ処理＞の項目で詳細を記載する。次いで、処理は、ステップＳ１７０８に進む。
【０１５４】
ステップＳ１７０８において、ＲＩＰ２１６内のＣＰＵは、入力された１ページ分のＰＤＬ処理が全て完了したか否かを判定する。入力された１ページ分のＰＤＬ処理が全て完了したと判定された場合、処理は、ステップＳ１７１１に進み、入力された１ページ分のＰＤＬ処理が全て完了していないと判定された場合、処理は、ステップＳ１７０４に戻る。
【０１５５】
ステップＳ１７０９において、ＲＩＰ２１６内のＣＰＵは、エッジをグループに分割した上でレンダリング処理を行う。次いで、処理は、ステップＳ１７１１に進む。
【０１５６】
ステップＳ１７１１において、ＲＩＰ２１６内のＣＰＵは、入力された全ページ分のＰＤＬ処理が全て完了したか否かを判定する。入力された全ページ分のＰＤＬ処理が全て完了したと判定された場合、処理は、ステップＳ１７１２に進み、入力された全ページ分のＰＤＬ処理が全て完了していないと判定された場合、処理は、ステップＳ１７０４に戻る。
【０１５７】
ＰＤＬのレンダリング処理は、ステップＳ１７１２で終了する。
【０１５８】
＜フォールバックにおける重ね合わせ処理＞
ここで、図１７のステップＳ１７０７のページ重ね合わせ処理について説明する。フォールバックにおけるページ重ね合わせ処理では、１ページ分のレンダリング画像が生成される際、レンダリング処理部は、生成したビットマップを圧縮してデータサイズを小さくし、圧縮後のビットマップを背景イメージのＤＬとして、ＤＬメモリに格納する。換言すると、領域情報が送られたディスプレイリスト生成部は、圧縮されたビットマップが背景として含まれるように次のディスプレイリストを生成する。ディスプレイリストに背景画像が含まれている場合、レンダリング処理部は、圧縮画像を展開して背景画像として現在処理中のディスプレイリストのレンダリング時に重ね合わせ処理を行う。
【０１５９】
一方、上述した図８のステップＳ８１４やステップＳ８１７では、生成されたレンダリング画像はレンダリング処理部で圧縮されず保持され、次のグループのレンダリング時に下位グループのレンダリング画像と重ね合わせを行う。したがって、この点において、フォールバックにおける重ね合わせ処理と、上述した図８のステップＳ８１４やステップＳ８１７におけるコンポジット処理とは異なる。
【０１６０】
＜他の実施形態＞
以上、様々な実施形態を詳述したが、本発明は、複数の装置から構成されるシステムに適用してもよいし、また、一つの装置に適用してもよい。例えば、スキャナ、プリンタ、ＰＣ、複写機、複合機、及びファクシミリ装置並びにこれらを組み合わせたシステムに対して、本発明を適用することができる。
【０１６１】
本発明は、前述した実施形態の各機能を実現するソフトウェアプログラムを、システム若しくは装置に対して直接又は遠隔から供給し、そのシステム等に含まれるコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。
【０１６２】
従って、本発明の機能・処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、上記機能・処理を実現するためのコンピュータプログラム自体も本発明の一つの態様である。
【０１６３】
その場合、コンピュータプログラムはプログラムの機能を有してさえいればよく、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。
【０１６４】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等がある。また、記録媒体としては、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ）等もある。
【０１６５】
また、プログラムは、クライアントコンピュータのブラウザを用いてインターネット／イントラネットのウェブサイトからダウンロードしてもよい。すなわち、該ウェブサイトから本発明のコンピュータプログラムそのものを若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードしてもよい。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるウェブサイトからダウンロードすることによっても、本発明を実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明の構成要件となる場合がある。
【０１６６】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布してもよい。この場合、所定条件をクリアしたユーザにのみ、インターネット／イントラネットを介してウェブサイトから暗号化を解く鍵情報をダウンロードさせ、その鍵情報で暗号化されたプログラムを復号して実行し、プログラムをコンピュータにインストールしてもよい。
【０１６７】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現されてもよい。なお、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部又は全部を行ってもよい。もちろん、この場合も、前述した実施形態の機能が実現され得る。
【０１６８】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれてもよい。そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行ってもよい。このようにして、前述した実施形態の機能が実現されることもある。
【図１】
2015075839.tif 000003
【図２】
2015075839.tif 000004
【図３】
2015075839.tif 000005
【図４】
2015075839.tif 000006
【図５】
2015075839.tif 000007
【図６】
2015075839.tif 000008
【図７】
2015075839.tif 000009
【図８】
2015075839.tif 000010
【図９】
2015075839.tif 000011
【図１０】
2015075839.tif 000012
【図１１】
2015075839.tif 000013
【図１２】
2015075839.tif 000014
【図１３】
2015075839.tif 000015
【図１４】
2015075839.tif 000016
【図１５】
2015075839.tif 000017
【図１６】
2015075839.tif 000018
【図１７】
2015075839.tif 000019