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