(57)【要約】      （修正有）【課題】データを分割するブロックの数を低減するために有利な画像処理装置を提供する。【解決手段】ページ記述言語で記述された印刷データに基づいて画像を処理する画像処理装置は、印刷データから中間データを生成する生成手段と、中間データにおける複数のバンドの各々について、オブジェクトのエッジに対応する位置を第１分割位置に設定する第１設定手段と、第１分割位置で区切られた複数の領域のうち、レンダリング可能なブロック幅の範囲を超える領域に対して第２分割位置を設定する第２設定手段と、第１分割位置および第２分割位置に基づいて、中間データを複数のブロックに分割する分割手段と、を含み、第２設定手段は、ブロック幅についての複数の候補を範囲を満たすように決定し、決定した複数の候補のうちブロック幅の広いものから優先的に適用されるように第２分割位置を設定する。【選択図】図４
2017087514.tif 000002
【特許請求の範囲】
【請求項１】
ページ記述言語で記述された印刷データに基づいて画像を処理する画像処理装置であって、
前記印刷データから中間データを生成する生成手段と、
前記中間データにおける複数のバンドの各々について、オブジェクトのエッジに対応する位置を第１分割位置に設定する第１設定手段と、
前記第１分割位置で区切られた複数の領域のうち、レンダリング可能なブロック幅の範囲を超える領域に対して第２分割位置を設定する第２設定手段と、
前記第１分割位置および前記第２分割位置に基づいて、前記中間データを複数のブロックに分割する分割手段と、
前記複数のブロックの各々に対してレンダリングを行うレンダリング手段と、
を含み、
前記第２設定手段は、ブロック幅についての複数の候補を前記範囲を満たすように決定し、決定した前記複数の候補のうちブロック幅の広いものから優先的に適用されるように前記第２分割位置を設定する、ことを特徴とする画像処理装置。
【請求項２】
前記第２設定手段は、第１幅と、前記第１幅の整数倍の幅を有する第２幅とを含むように前記複数の候補を決定する、ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記第１幅は、前記中間データを分割するために予め設定されたブロック幅である、ことを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記複数のバンドの各々は、複数のスキャンラインを含む、ことを特徴とする請求項１乃至３のうちいずれか１項に記載の画像処理装置。
【請求項５】
前記第１設定手段は、スキャンラインに沿って設定された複数の位置の各々について、１つのバンドの各スキャンラインにおける前記エッジが位置する数をカウントし、前記複数の位置のうちカウントされた数が閾値以上である位置を前記１つのバンドについての前記第１分割位置に設定する、ことを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記第２設定手段は、スキャンラインに沿って設定された複数の位置の各々について色データのデータサイズをカウントし、前記複数の位置のうち、色データのデータサイズのカウント値が変化する位置を前記第２分割位置に決定する、ことを特徴とする請求項４又は５に記載の画像処理装置。
【請求項７】
前記複数の位置は、それらのピッチが、前記中間データを分割するために予め設定されたブロック幅になるように設定されている、ことを特徴とする請求項５又は６に記載の画像処理装置。
【請求項８】
前記複数の位置は、それらのピッチが前記範囲における最小値になるように設定されている、ことを特徴とする請求項５又は６に記載の画像処理装置。
【請求項９】
前記生成手段は、前記印刷データからベクタ形式の前記中間データを生成する、ことを特徴とする請求項１乃至８のうちいずれか１項に記載の画像処理装置。
【請求項１０】
ページ記述言語で記述された印刷データに基づいて画像を処理する画像処理方法であって、
生成手段が、前記印刷データから中間データを生成する生成工程と、
第１設定手段が、前記中間データにおける複数のバンドの各々について、オブジェクトのエッジに対応する位置を第１分割位置に設定する第１設定工程と、
第２設定手段が、前記第１分割位置で区切られた複数の領域のうち、レンダリング可能なブロック幅の範囲を超える領域に対して第２分割位置を設定する第２設定工程と、
分割手段が、前記第１分割位置および前記第２分割位置に基づいて、前記中間データを複数のブロックに分割する分割工程と、
レンダリング手段が、前記複数のブロックの各々に対してレンダリングを行うレンダリング工程と、
を含み、
前記第２設定工程では、ブロック幅についての複数の候補を前記範囲を満たすように決定し、決定した前記複数の候補のうちブロック幅の広いものから優先的に適用されるように前記第２分割位置を設定する、ことを特徴とする画像処理方法。
【請求項１１】
請求項１０に記載の画像処理方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法、およびプログラムに関する。
【背景技術】
【０００２】
ページ記述言語等のベクタ形式のデータをレンダリングすることによって得られたラスタ画像をスプールし、プリンタエンジンで印刷を行う複合機などの画像処理装置が知られている。画像処理装置では、データを複数のブロックに分割し、以降の画像処理をブロック単位で並列に行うことで、画像の印刷を高速に行う方法がある。この方法では、分割された各ブロックのデータをワークバッファに一時的に格納することが必要である。特許文献１には、ラスタライズ後のラスタ形式のデータではなく、当該ラスタ形式のデータよりデータ量が少ないラスタライズ前のベクタ形式のデータを複数のブロックに分割することで、ワークバッファのバッファサイズを低減する方法が提案されている。特許文献１に記載された方法では、ベクタ形式のデータが一定のサイズで複数のブロックに分割される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２６９３５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記のような画像処理装置では、分割されたブロックごとに、ワークバッファにデータを格納したり読み出したりする処理（ワークバッファへのリード・ライト）が行われる。したがって、画像の印刷をより高速に行うためには、ベクタ形式のデータを分割するブロックの数を減らし、ワークバッファへのリード・ライトに要する時間を低減することが好ましい。
【０００５】
そこで、本発明は、データを分割するブロックの数を低減するために有利な技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明の一側面としての画像処理装置は、ページ記述言語で記述された印刷データに基づいて画像を処理する画像処理装置であって、前記印刷データから中間データを生成する生成手段と、前記中間データにおける複数のバンドの各々について、オブジェクトのエッジに対応する位置を第１分割位置に設定する第１設定手段と、前記第１分割位置で区切られた複数の領域のうち、レンダリング可能なブロック幅の範囲を超える領域に対して第２分割位置を設定する第２設定手段と、前記第１分割位置および前記第２分割位置に基づいて、前記中間データを複数のブロックに分割する分割手段と、前記複数のブロックの各々に対してレンダリングを行うレンダリング手段と、を含み、前記第２設定手段は、ブロック幅についての複数の候補を前記範囲を満たすように決定し、決定した前記複数の候補のうちブロック幅の広いものから優先的に適用されるように前記第２分割位置を設定する、ことを特徴とする。
【０００７】
本発明の更なる目的又はその他の側面は、以下、添付図面を参照して説明される好ましい実施形態によって明らかにされるであろう。
【発明の効果】
【０００８】
本発明によれば、例えば、データを分割するブロックの数を低減するために有利な技術を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】画像処理装置におけるシステム構成例およびハードウェア構成例を示す図である。
【図２】画像処理装置におけるソフトウェア構成例を示す図である。
【図３】画像処理装置における画像形成処理のフローを示す図である。
【図４】画像処理装置におけるレンダリング処理のフローを示す図である。
【図５】１ページ分の画像に対してレンダリング処理を行っている様子を示す図である。
【図６】配列情報を生成する処理のフローを示す図である。
【図７】スキャンライン数情報を示す図である。
【図８】ブロック幅を決定する処理のフローを示す図である。
【図９】ブロック順変換処理後にスプールされたスパンデータの一例を示す図である。
【図１０】スキャンライン数情報に、フィルのデータサイズをカウントした情報を加えた情報を示す図である。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して、本発明の好適な実施の形態について説明する。なお、各図において、同一の部材ないし要素については同一の参照番号を付し、重複する説明は省略する。
【００１１】
＜第１実施形態＞
本発明に係る第１実施形態の画像処理装置について説明する。図１（ａ）は、第１実施形態のシステム構成の例を示す図である。本システムでは、ホストコンピュータ１０１と画像処理装置１１０とがＬＡＮ１０２を介して接続されている。ユーザは、印刷するページ情報を示すＰＤＬ（Page Description Language）データをホストコンピュータ１０１において生成し、ホストコンピュータ１０１からＬＡＮ１０２を介して画像処理装置１１０に送信する。本実施形態における画像処理装置１１０は、ＭＦＰ（Multi Function Printer）であっても、ＳＦＰ（SingleFunction Printer）のうちいずれのプリンタであってもよい。また、画像処理装置１１０は、ＭＦＰやＳＦＰ以外のプリンタであってもよい。
【００１２】
［画像処理装置におけるハードウェア構成について］
図１（ｂ）は、第１実施形態の画像処理装置１１０におけるハードウェア構成例を示す図である。画像処理装置１１０は、例えば、画像出力デバイスであるプリンタ部１１１を含む。また、画像処理装置１１０は、ホストコンピュータ１０１からＬＡＮを介してＰＤＬデータ（ページ記述言語で記述された印刷データ）を取得する。
【００１３】
プリンタ部１１１は、デバイスＩ／Ｆ２３２と接続され、ＣＰＵ２２０で生成された画像データをシート（紙）に出力する処理を行う。ＣＰＵ２２０は、画像処理装置の全体（各部）を制御するための中央処理部である。ＲＡＭ２２２は、ＣＰＵ２２０が動作するためのシステムワークメモリである。また、ＲＡＭ２２２は、取得したＰＤＬデータや、画像形成処理のために生成される中間データ、レンダリング処理を行う際の作業領域であるワーク領域や、入力された画像データを一時的に格納するためのメモリでもある。ＲＯＭ２２１は、例えばブートＲＯＭであり、システムのブートプログラムが格納されている。記憶部２２３は、例えばハードディスクドライブであり、各種処理のためのシステムソフトウェアおよび取得したＰＤＬデータを格納する。
【００１４】
操作部Ｉ／Ｆ２２５は、各種メニューや印刷データ情報等を表示するための表示部を有する操作部１１３に対するインターフェース部であり、操作部１１３に対して操作画面データを出力する。また、操作部Ｉ／Ｆ２２５は、操作部１１３を介してユーザが入力した情報をＣＰＵ２２０に伝える。ネットワークＩ／Ｆは、ＬＡＮ１０２を介して外部装置（例えばホストコンピュータ１０１）との間で情報のやり取りを行うためのインターフェースである。これらＣＰＵ２２０、ＲＯＭ２２１、ＲＡＭ２２２、記憶部２２３、操作部Ｉ／Ｆ２２５およびネットワークＩ／Ｆは、システムバス２２７に接続されている。
【００１５】
イメージバスＩ／Ｆ２２８は、システムバス２２７と画像データを高速に転送する画像バス２３０とを接続するためのインターフェースであり、データ構造を変換するバスブリッジである。画像バス２３０には、ＲＩＰ（ラスタイメージプロセッサ）２３１、およびデバイスＩ／Ｆ２３２が接続されている。ＲＩＰ２３１は、ＣＰＵ２２０からの指示に基づき、ＰＤＬデータコードや中間データ（ディスプレイリスト）を解析し、イメージ展開する。デバイスＩ／Ｆ２３２は、プリンタ部１１１にデータを送信するためのインターフェースである。
【００１６】
［画像処理装置におけるソフトウェア構成について］
次に、画像処理装置１１０におけるソフトウェア構成について、図２を参照しながら説明する。図２は、第１実施形態の画像処理装置１１０におけるソフトウェア構成例を示す図である。図２に示すソフトウェアモジュールの各々は、例えば、ＣＰＵ２２０がＲＯＭ２２１または記憶部２２３に格納されたプログラムをＲＡＭ２２２に展開して実行することにより実現されうる。
【００１７】
ＰＤＬデータ処理部２０１は、ＰＤＬデータから、ページ情報と、ページ情報に含まれるオブジェクト情報とを取得する処理を行い、取得した情報を中間データ生成部２０２に供給する。中間データ生成部２０２は、ＰＤＬデータ処理部で取得されたページ情報およびオブジェクト情報に基づいて、画像形成に利用するための中間データを生成する。また、画像形成部２０３は、ブロック順のビットマップ画像を生成するため、ブロック幅算出部２０６が算出したブロック幅に基づいて、ブロック順変換部２０５にデータをブロック順に変換させる。そして、画像形成部２０３は、ブロック順変換メモリ２１０に、画像形成部２０３によって利用されるベクタデータ（スパンデータ）を格納する。ブロック画像圧縮・伸長部２０４は、画像形成部２０３が生成したブロック単位のビットマップ画像を圧縮する。ブロック順変換部２０５は、ブロック順変換メモリ２１０に格納されたベクタデータを、ブロック順のベクタデータに変換し（複数のブロックに分割し）、画像形成部２０３に供給する。画像形成部２０３は、ブロック順変換部２０５で変換されたブロック順のベクタデータに基づいてビットマップ画像を生成することにより、ブロック順のビットマップ画像を生成する。ブロック幅算出部２０６は、ブロック順変換メモリに格納されたベクタデータに基づいて、ブロック順変換部２０５で用いられるブロック幅を決定する。
【００１８】
［本実施形態における用語の定義］
ここで、本実施形態で用いられる用語の定義について説明する。
・エッジとは、ページ内に描画されるオブジェクト同士の境界、またはオブジェクトと背景との境界を示す。即ち、オブジェクトのアウトラインである。
・スパンとは、単一のスキャンラインにおいて、エッジ間で囲まれる閉領域を示す。
・レベルとは、ページ内に描画されるオブジェクト同士の上下関係を示す。各オブジェクトには、互いに異なるレベル番号が割り振られている。
・フィルとは、スパンに対する塗り情報（色データ）を示し、ビットマップデータやシェーディングのように１ピクセルごとに異なる色値をもつフィルや、ベタ塗りのようにスパン内で色値が同じであるフィルがある。つまり、スパンは、スパンに対応するオブジェクトの数だけレベルが存在し、レベルの数だけ互いに異なるフィルが存在する。
・スキャンラインとは、画像形成処理において画像データが連続的にメモリ走査される主走査方向のラインであり、スキャンラインの高さは例えば１ピクセルである。また、複数のスキャンラインを束ねたものを「バンド」という。
【００１９】
また、後述されるフォールバック処理についても説明する。例えば、ＰＤＬデータから中間データを生成する際、取得したＰＤＬデータのデータサイズが大きすぎると、全ての中間データを格納するにはメモリ容量が不足する場合がある。このようなメモリ容量の不足を防止するために、フォールバック処理が行われる。
【００２０】
フォールバック処理では、まずＣＰＵ２２０は、ＰＤＬデータに含まれる複数のオブジェクトの一部に対応する中間データを作成してメモリに格納し、その中間データに対してビットマップ画像を生成する。次に、ＣＰＵ２２０は、このビットマップ画像を生成する際に用いられた中間データをメモリから削除する。また、ＣＰＵ２２０は、生成したビットマップ画像に対し、ブロック画像圧縮・伸長部２０４によりＪＰＥＧ圧縮などの圧縮処理を行いデータサイズを小さくする。
【００２１】
ＣＰＵ２２０は、ＰＤＬデータに含まれる残りのオブジェクトから、圧縮後のビットマップ画像を背景画像として含む中間データを生成し、生成した中間データをメモリに格納する。そして、ＣＰＵ２２０は、メモリに格納された圧縮後のビットマップ画像を背景画像として含む中間データから新たなビットマップ画像を生成する。
【００２２】
このようなフォールバック処理を行うか否かは、メモリに格納されている中間データの総量が所定の閾値を超えたか否かによって決定される。即ち、本実施形態では、フォールバック処理は、ＰＤＬデータから中間データを生成する際に、メモリに格納された中間データの総サイズが所定の閾値を超えた場合に実行されうる。フォールバック処理は、中間データを格納するメモリ容量の不足に応じて実行されるため、１ページ分のＰＤＬデータからビットマップ画像を生成する場合であっても、複数回実行されうる。このとき、ブロック画像圧縮・伸長部２０４は、画像形成部２０３が生成したブロック単位のビットマップ画像を受け取って圧縮するとともに、フォールバック処理で圧縮されたブロック単位の画像を伸長して画像形成部２０３に受け渡すこととなる。
【００２３】
［画像形成処理について］
次に、第１実施形態の画像処理装置１１０における画像形成処理について、図３を参照しながら説明する。図３は、第１実施形態の画像処理装置における画像形成処理のフローを示す図である。なお、以下で説明する処理は、ＣＰＵ２２０がＲＯＭ２２１や記憶部２２３等に予め格納された制御プログラムをＲＡＭ２２２に読み出して実行することにより実現される。また、以下のフローにおける各工程は、ＣＰＵ２２０によって制御されうる。
【００２４】
Ｓ３０１では、ＣＰＵ２２０は、ホストコンピュータ１０１から送信されたＰＤＬデータを記憶部２２３に格納し、送信されたＰＤＬデータの解析を行う。Ｓ３０２では、ＣＰＵ２２０は、解析したＰＤＬデータの情報をもとに、ビットマップ画像の生成のために必要な中間データの生成を行う。Ｓ３０２における中間データの生成は、公知技術が用いられうる。Ｓ３０３では、ＣＰＵ２２０は、生成した中間データに基づいて、後述するブロック順変換処理を伴うレンダリング処理を行い、ページ画像を表すビットマップ画像の生成を行う。生成されたビットマップ画像は、ページ画像をブロック順にしたブロック画像データであり、このブロック画像データは、ブロック単位での画像処理が行われうる。
【００２５】
［レンダリング処理について］
次に、図３のＳ３０３の工程における詳細について、図４および図５を参照しながら説明する。図４は、第１実施形態の画像処理装置１１０におけるレンダリング処理のフローを示す図である。また、図５は、幅３８４［ｐｉｘｅｌ］、高さ５１２［ｐｉｘｅｌ］の１ページ分の画像に対してレンダリング処理を行っている様子を示す図である。図５では、３種類のオブジェクト５０１〜５０３を描画エリアに含むデータ（ＰＤＬデータ５００）がホストコンピュータ１０１から送信された場合を想定する。この場合、ＰＤＬデータ５００に基づいてＳ３０２で生成された中間データ５１０が、Ｓ３０３のレンダリング処理で扱われる。中間データ５１０は、データ５００の描画エリアに含まれるオブジェクト５０１〜５０３のエッジの情報と、エッジ内のフィル情報とを有する。
【００２６】
ここで、第１実施形態の画像処理装置１１０におけるレンダリング処理には、上述したように、Ｓ３０２で生成された中間データを複数のブロックに分割するブロック順変換処理が含まれる。なお、以下で説明する処理は、ＣＰＵ２２０がＲＯＭ２２１や記憶部２２３等に予め格納された制御プログラムをＲＡＭ２２２に読み出して実行することにより実現されうる。ここで、本実施形態では、中間データを分割するブロックの幅および高さの初期値が、６４［ｐｉｘｅｌ］×６４［ｐｉｘｅｌ］に予め設定されているものとする。そして、１つのバンドの高さは６４［ｐｉｘｅｌ］であるものとする。
【００２７】
Ｓ４０１では、ＣＰＵ２２０は、Ｓ３０２で生成された中間データに基づいて、スパンデータを生成する。図５では、データ５２０が、中間データ５１０に基づいて生成されたスパンデータに対応する。スパンデータは、オブジェクトのエッジで区切られた閉領域（スパン）を示す情報と、スパン内のフィル情報とで構成されうる。ここで、スパンの長さは、例えばピクセル数によって表現される。Ｓ４０１では、先頭スキャンラインから順に、１つのスキャンラインに対応するスパンデータが生成されうる。
【００２８】
Ｓ４０２では、ＣＰＵ２２０は、Ｓ４０１で生成したスパンデータをブロック順変換メモリ２１０にスプールする。このとき、ＣＰＵ２２０は、スパンデータを、各スパンがノードとなる連結リスト形式にしてスプールする。例えば、ＣＰＵ２２０が、図５のデータ５２０（スパンデータ）における４バンド目の先頭スキャンデータをスプールしたとすると、スプールされたスパンデータは、図９（ａ）に示すようになる。
【００２９】
Ｓ４０３では、ＣＰＵ２２０は、１つのバンド高分のスパンデータをブロック順変換メモリ２１０にスプールしたか否かを判断する。１つのバンド高分のスパンデータをスプールした場合はＳ４０４に進み、１つのバンド高分のスパンデータをスプールしていない場合はＳ４０１に戻り、Ｓ４０１〜Ｓ４０３の工程を繰り返す。
【００３０】
Ｓ４０４では、ＣＰＵ２２０は、Ｓ４０１で生成したスパンデータに基づいて、中間データを複数のブロックに分割するために用いられる配列情報を、バンドごとに生成する。配列情報とは、オブジェクトのエッジに対応する位置を示す情報のことである。即ち、Ｓ４０４は、中間データにおける複数のバンドの各々について、オブジェクトのエッジに対応する位置を、中間データを分割するための分割位置（第１分割位置）として設定した情報を生成する工程である。ＣＰＵ２２０は、例えば、バンド内のスキャンラインごとにスパンのエッジの位置（Ｘ座標）を算出し、予め設定された複数の位置（Ｘ座標）の各々について、スパンのエッジが配置されるスキャンラインの数をカウントすることにより配列情報を生成する。ここで、バンドは、初期値として予め設定されたブロック高分のスキャンラインを束ねたものであり、複数の位置（Ｘ座標）はそれぞれ、例えば、初期値として予め設定されたブロックの幅の倍数である。
【００３１】
以下に、Ｓ４０４における配列情報を生成する工程の詳細について、図６を参照しながら説明する。図６は、配列情報を生成する処理のフローを示す図である。なお、以下で説明する処理は、ＣＰＵ２２０がＲＯＭ２２１や記憶部２２３等に予め格納された制御プログラムをＲＡＭ２２２に読み出して実行することにより実現されうる。
【００３２】
Ｓ６０１では、ＣＰＵ２２０は、スキャンラインにおいて予め設定された複数の位置（座標）と、当該複数の位置にスパンのエッジが配置されるスキャンラインの数との関係を示す情報（以下、スキャンライン数情報と称する）を初期化する。図７（ａ）は、図５に示すスパンデータ５２０における２バンド目の初期化されたスキャンライン数情報を示す図である。スキャンライン数情報における複数の位置（座標）は、ページ幅（３８４［ｐｉｘｅｌ］）と、初期値として予め設定されたブロック幅（６４［ｐｉｘｅｌ］）とに基づいて設定されうる。即ち、当該複数の位置は、それらのピッチが、初期値として予め設定されたブロック幅になるように設定されている。ここで、第１実施形態では、初期値として予め設定されたブロック幅に基づいて当該複数の位置が設定されているが、それに限られるものではない。例えば、レンダリング可能なブロック幅の範囲における最小値に基づいて当該複数の位置が設定されてもよい。即ち、当該複数の位置は、それらのピッチが、レンダリング可能なブロック幅の範囲における最小値になるように設定されてもよい。
【００３３】
Ｓ６０２では、ＣＰＵ２２０は、カレントＹ座標を示す変数の値を「０」に初期化する。カレントＹ座標とは、ページの高さ方向におけるバンド内でのスキャンラインの位置を示す座標である。Ｓ６０３では、ＣＰＵ２２０は、カレントＸ座標を示す変数の値を「０」に初期化する。カレントＸ座標とは、スキャンラインに沿った方向におけるスキャンライン上の位置を示す座標である。Ｓ６０４では、ＣＰＵ２２０は、Ｓ４０１で生成したスパンデータを解析する。具体的には、ＣＰＵ２２０は、生成したスパンデータにおけるスパン長を取得する。
【００３４】
Ｓ６０５では、ＣＰＵ２２０は、Ｓ６０４で取得したスパン長をカレントＸ座標に加算し、当該カレントＸ座標を更新する。Ｓ６０６では、ＣＰＵ２２０は、スキャンライン数情報における複数の位置のうち、Ｓ６０５で更新したカレントＸ座標に対応する位置において、スキャンラインの数に「１」を加算する（スキャンラインの数をインクリメントする）。Ｓ６０７では、ＣＰＵ２２０は、カレントＸ座標がページ幅以上であるか否かを判断する。カレントＸ座標がページ幅より小さい場合はＳ６０４に戻り、カレントＸ座標がページ幅以上である場合はＳ６０８に進む。Ｓ６０８では、ＣＰＵ２２０は、カレントＹ座標に「１」を加算（カレントＹ座標をインクリメントする）し、カレントＹ座標を更新する。Ｓ６０９では、ＣＰＵ２２０は、カレントＹ座標がバンド高（即ち、初期値として予め設定されたブロックの高さ）以上であるか否かを判断する。カレントＹ座標がバンド高より小さい場合はＳ６０３に戻り、次のスキャンラインについてＳ６０３〜Ｓ６０８の工程を行う。一方、カレントＹ座標がバンド高以上である場合は終了する。
【００３５】
図６に示す処理を行うことにより、ＣＰＵ２２０は、図７（ｂ）に示すスキャンライン数情報を得ることができる。図７（ｂ）は、図５に示すスパンデータ５２０における２バンド目のスキャンライン数情報を示している。ＣＰＵ２２０は、例えば、スキャンラインの数が閾値以上になるときの所定の位置を、中間データを分割するための分割位置（第１分割位置）として設定することにより、配列情報を得ることができる。即ち、ＣＰＵ２２０は、Ｘ座標が６４、３２０、３８４［ｐｉｘｅｌ］の位置が第１分割位置に設定された配列情報を得ることができる。ここで、閾値は、任意に設定されうるが、例えば、エッジが配置されるスキャンラインの数が１つでもある位置（座標）を第１分割位置とする場合には、「１」に設定されうる。
【００３６】
図４に戻り、Ｓ４０５では、ＣＰＵ２２０は、Ｓ４０４で生成された配列情報に基づいて、１つのバンドに対して分割するブロックの幅を決定する。例えば、ＣＰＵ２２０は、配列情報に基づいて、第１分割位置で区切られた複数の領域のうち、レンダリング可能なブロック幅の範囲を超える領域を分割するための第２分割位置を決定する。このとき、ＣＰＵ２２０は、当該範囲を満たすブロック幅についての複数の候補を決定し、決定した前記複数の候補のうちブロック幅の広いものから優先的に適用されるように第２分割位置を決定する。
【００３７】
以下に、Ｓ４０５におけるブロック幅を決定する工程の詳細について、図８を参照しながら説明する。図８は、ブロック幅を決定する処理のフローを示す図である。なお、以下で説明する処理は、ＣＰＵ２２０がＲＯＭ２２１や記憶部２２３等に予め格納された制御プログラムをＲＡＭ２２２に読み出して実行することにより実現されうる。
【００３８】
Ｓ８０１では、ＣＰＵ２２０は、レンダリング可能なブロック幅の範囲を満たすブロック幅についての複数の候補を決定する。このとき、ＣＰＵ２２０は、第１幅と、第１幅の整数倍である第２幅とを含むように、ブロック幅についての複数の候補を決定するとよい。
【００３９】
レンダリング可能なブロック幅の範囲における最小値は、例えば、ブロック画像圧縮・伸長部２０４が処理可能な最小値である。ブロック画像圧縮・伸長部２０４によりＪＰＥＧ（Joint Photographic Experts Group）圧縮が実行される場合、画像が８［ｐｉｘｅｌ］×８［ｐｉｘｅｌ］のブロックに分割され、ブロックごとに変換処理が実行される。即ち、この場合、レンダリング可能なブロック幅の範囲における最小値は８［ｐｉｘｅｌ］となる。
【００４０】
また、レンダリング可能なブロック幅の範囲における最大値は、例えば、ブロック画像圧縮・伸長部２０４が処理可能な最大値であり、ブロック画像圧縮・伸長部２０４での処理負荷と内部メモリの総量および空き容量とから決定されうる。例えば、ブロック画像圧縮・伸長部２０４の内部メモリの総量が３２ＫＢｙｔｅ（１２８［ｐｉｘｅｌ］×６４［ｐｉｘｅｌ］の非圧縮ＣＭＹＫ画像に相当）であるとする。この場合、前述のフォールバック処理が発生しない時、レンダリング可能なブロック幅の範囲における最大値は１２８［ｐｉｘｅｌ］となる。したがって、レンダリング可能なブロック幅の範囲は８〜１２８［ｐｉｘｅｌ］の範囲となり、ＣＰＵ２２０は、初期値とした予め設定されたブロック幅の整数倍である６４［ｐｉｘｅｌ］および１２８［ｐｉｘｅｌ］をブロック幅についての候補として決定する。
【００４１】
Ｓ８０２では、ＣＰＵ２２０は、カレントＸ座標を示す変数の値を「０」に初期化する。Ｓ８０３では、ＣＰＵ２２０は、ブロック幅を決定する対象のバンド（以下、対象バンドと称する）について、Ｓ４０４で生成された配列情報を取得する（読み込む）。
【００４２】
Ｓ８０４では、ＣＰＵ２２０は、Ｓ８０３で取得した配列情報とＳ８０１で決定したブロック幅の候補とに基づいて、中間データを複数のブロックに分割するための分割位置を決定する。例えば、ＣＰＵ２２０は、対象バンドをスキャンしていき、第１分割位置が現れた場合にはＳ８０５に進む。一方、ＣＰＵ２２０は、対象バンドをスキャンしていき、レンダリング可能なブロック幅の範囲を超えても第１分割位置が現れない場合、Ｓ８０１で決定された複数の候補のうちブロック幅の広いものから優先的に適用されるように第２分割位置を決定する。即ち、ＣＰＵ２２０は、第１分割位置で区切られた複数の領域のうち、レンダリング可能なブロック幅の範囲を超える領域に対し、Ｓ８０１で決定された複数の候補のうちブロック幅の広いものから優先的に適用されるように第２分割位置を決定する。ＣＰＵ２２０は、第２分割位置を決定したらＳ８０５に進む。
【００４３】
Ｓ８０５では、ＣＰＵ２２０は、カレントＸ座標を更新する。Ｓ８０６では、ＣＰＵ２２０は、カレントＸ座標がページ幅以上であるか否かを判断する。カレントＸ座標がページ幅より小さい場合はＳ８０３に戻り、カレントＸ座標がページ幅以上である場合は終了する。このような処理を経て分割位置をバンドごとに決定することにより、図５のデータ５５０に示すように、初期値として予め設定されたブロック幅のみで中間データを分割すること（データ５０３）に比べて分割ブロック数を低減することができる。図５のデータ５５０は、第１実施形態の画像処理装置１１０において決定された中間データにおける分割位置を示す図であり、図５のデータ５５０において、白丸（○）が分割位置（第１分割位置または第２分割位置）に対応する。
【００４４】
図４に戻り、Ｓ４０６では、ＣＰＵ２２０は、Ｓ４０２でスプールされた１つのバンド高分のスパンデータを読み込む。Ｓ４０７では、ＣＰＵ２２０は、第１分割位置および第２分割位置に基づいて、Ｓ４０６で読み込まれたスパンデータ（中間データ）を複数のブロックに分割する、いわゆるブロック順変換処理を行う。ブロック順変換処理後にスプールされたスパンデータの一例を図５および図９を参照しながら説明する。図５におけるデータ５２０における４バンド目（図９（ａ））のスプールされたスパンデータは、ブロック順変換処理後、図９（ａ）のＳｐａｎ３が、図９（ｃ）のＳｐａｎ３とＳｐａｎ４とに分割されてスプールされる。そして、Ｓ４０３までの処理はページ内のスキャンラインごとに行われるが、Ｓ４０８以降の処理はブロック内のスキャンラインごとに行われる。
【００４５】
Ｓ４０８では、ＣＰＵ２２０は、Ｓ４０７で分割された各ブロックに対してレンダリング処理を行う。レンダリング処理は、例えば、Ｓ４０８−１のフィル処理と、Ｓ４０８−２のコンポジット処理を含みうる。フィル処理（Ｓ４０８−１）では、ＣＰＵ２２０は、分割された各ブロックにおけるスパンに対し、スパン内に存在するフィル情報が指定する色を生成する。コンポジット処理（Ｓ４０８−２）では、ＣＰＵ２２０は、フィル処理で生成した色の合成処理を行う。
【００４６】
Ｓ４０９では、ＣＰＵ２２０は、ブロック内における全てのスパンに対してレンダリング処理を行ったか否かを判断する。ブロック内における全てのスパンに対してレンダリング処理を行った場合はＳ４１０に進み、レンダリング処理を行っていないスパンがある場合はＳ４０６に戻る。Ｓ４１０では、ＣＰＵ２２０は、バンド内における全てのブロックに対してレンダリング処理を行ったか否かを判断する。バンド内における全てのブロックに対してレンダリング処理を行った場合はＳ４１１に進み、レンダリング処理を行っていないブロックがある場合はＳ４０５に戻る。Ｓ４１１では、ＣＰＵ２２０は、ページ内における全てのバンドに対してレンダリング処理を行ったか否かを判断する。ページ内における全てのバンドに対してレンダリング処理を行った場合は終了し、レンダリング処理を行っていないバンドがある場合はＳ４０１に戻る。
【００４７】
上述したような処理を行うことにより、第１実施形態の画像処理装置１１０は、分割ブロック数が低減されるように分割位置を決定することができる。これにより、第１実施形態の画像処理装置１１０は、従来の処理に比べて、分割されるブロック数を低減することができる。即ち、レンダリング処理を各ブロックに対して行う際、分割されたブロックごとに行われるワークバッファへのリード・ライトに要するトータルの時間を低減し、画像をより高速に印刷することが可能となる。
【００４８】
ここで、上述した処理を行ったときの効果について、図５および図９を参照しながら説明する。図５におけるスパンデータ５２０の分岐のうち左側は、従来の処理を行うことにより複数のブロックに分割されたスパンデータ５３０およびランレングスデータ５４０を示している。また、当該分岐のうち右側は、本実施形態の処理を行うことにより複数のブロックに分割されたスパンデータ５５０およびランレングスデータ５６０を示している。従来の処理では、ブロック幅を一定として中間データが複数のブロックに分割されているのに対し、本実施形態の処理では、複数のブロックにおけるブロック幅が互いに異なり、ブロック数が低減されている。例えば、４バンド目のスパンデータ（図９（ａ））は、従来の処理では、図９（ｂ）に示すように６個のブロックに分割されるのに対し、本実施形態の処理では、図９（ｃ）に示すように４個のブロックに分割される。
【００４９】
例えば、１つのスパンにつき描画範囲（ピクセル数）の指定に８［ｂｙｔｅ］、色値（色合成やグラデーションの指定も含む）に８［ｂｙｔｅ］が必要であるとする。この場合、１つのスパンの分割につき少なくとも１６［ｂｙｔｅ］の読み出し（リード）と書き出し（ライト）がブロックごとに発生することになる。これを、印刷解像度が１２００ｄｐｉのＡ４サイズ（幅２１０ｍｍ、高さ２９７ｍｍ）の画像（９９２１［ｐｉｘｅｌ］×１４０４８［ｐｉｘｅｌ］）に対してレンダリング処理を行うこととする。そして、従来の処理では、１つのバンドにつき１５５個のブロックに分割されるのに対し、本実施形態の処理では、７８個のブロックに分割されるものとする。この場合、従来の処理ではページ全体で約３．５［Ｍｂｙｔｅ］必要であったデータのリード・ライトを、本実施形態の処理を適用することにより、約１．８「Ｍｂｙｔｅ」に低減することができる。画像処理装置１１０が１００ｐｐｍ（page/minutes）の処理速度を要求される場合、従来の処理ではデータのリード・ライトに少なくとも約３．５［Ｍｂｙｔｅ／ｓｅｃ］の転送帯域が必要になる。それ対し、本実施形態の処理では約１．８［Ｍｂｙｔｅ／ｓｅｃ］となり、大幅に転送帯域を低減することができる。
【００５０】
＜第２実施形態＞
第１実施形態では、スパンのエッジが配置されるスキャンラインの数の情報に基づいてブロック幅を決定する方法について説明した。第２実施形態では、スパンのエッジが配置されるスキャンラインの数の情報だけでなく、スパンデータに含まれるフィル（色データ）の情報にも基づいて、ブロック幅を決定する方法について説明する。ここで、第２実施形態の画像処理装置およびソフトウェア構成は、第１実施形態の画像処理装置１１０およびソフトウェア構成と同様であるため、ここでは説明を省略する。また、第２実施形態の画像処理装置は、図３、図４、図６、図８に示すフローチャートに従って画像形成処理を行う。以下では、第１実施形態の画像処理装置１１０における処理と異なる工程（図６のＳ６０４、Ｓ６０６、および図８のＳ８０４）について説明する。
【００５１】
図６のＳ６０４では、ＣＰＵ２２０は、Ｓ４０１で生成したスパンデータを解析する。具体的には、ＣＰＵ２２０は、生成したスパンデータにおけるスパン長に加えて、フィルのデータサイズの情報も取得する。図６のＳ６０６では、ＣＰＵ２２０は、スキャンライン数情報において設定された複数の位置のうち、Ｓ６０５で更新したカレントＸ座標に対応する位置において、スキャンラインの数に「１」を加算する（スキャンラインの数をインクリメントする）。また、ＣＰＵ２２０は、スキャンライン数情報において設定された複数の位置の間において、フィルのデータサイズをカウントする。図１０は、図５に示すスパンデータ５２０における５バンド目のスキャンライン数情報に、フィルのデータサイズをカウントした情報を加えた情報を示す図である。図１０に示す情報では、１２８［ｐｉｘｅｌ］、１９２［ｐｉｘｅｌ］および２５６［ｐｉｘｅｌ］の位置に対して、分割するフィルデータサイズが「８」にカウントされている。即ち、図１０に示す情報は、６４から１２８［ｐｉｘｅｌ］の間、１２８から１９２［ｐｉｃｅｌ］の間、および１９２から２５６［ｐｉｘｅｌ］の間をそれぞれ８つに分割する必要があることを示している。
【００５２】
図８のＳ８０４では、ＣＰＵ２２０は、Ｓ８０３で取得した配列情報とＳ８０１で決定したブロック幅の候補とに基づいて、中間データを複数のブロックに分割するための分割位置を決定する。例えば、図１０に示す情報において、６４［ｐｉｘｅｌ］の位置と１２８［ｐｉｘｅｌ］の位置とでは、スキャンラインの数がともに６４である。しかしながら、６４［ｐｉｘｅｌ］の位置では、分割するフィルデータサイズのカウント値が「０」であり、１２８［ｐｉｘｅｌ］の位置では、分割するフィルデータサイズのカウント値が「８」である。即ち、スパンデータを複数のブロックに分割する工程（Ｓ４０７）の後に、６４から１２８［ｐｉｘｅｌ］の間を更に８つに分割する必要がある。そのため、フィルデータに基づいた分割での処理負荷を低減させるには、フィルのデータサイズのカウント値が変化する６４［ｐｉｘｅｌ］の位置を分割位置に設定することが好ましい（６４［ｐｉｘｅｌ］の位置では、第１分割位置として既に設定されている）。また、２５６［ｐｉｘｅｌ］の位置では、分割するフィルデータサイズのカウント値が「８」であり、３２０［ｐｉｃｅｌ］の位置では、分割するフィルデータサイズのカウント値が「０」である。したがって、フィルのデータサイズのカウント値が変化する２５６［ｐｉｘｅｌ］の位置を分割位置（第２分割位置）に設定することが好ましい。
【００５３】
＜その他の実施例＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００５４】
以上、本発明の好ましい実施形態について説明したが、本発明はこれらの実施形態に限定されないことはいうまでもなく、その要旨の範囲内で種々の変形および変更が可能である。
【符号の説明】
【００５５】
１０１：ホストコンピュータ、１１０：画像処理装置、２２０：ＣＰＵ、２２１：ＲＯＭ、２２２：ＲＡＭ、２２３：記憶部
【図１】
2017087514.tif 000003
【図２】
2017087514.tif 000004
【図３】
2017087514.tif 000005
【図４】
2017087514.tif 000006
【図５】
2017087514.tif 000007
【図６】
2017087514.tif 000008
【図７】
2017087514.tif 000009
【図８】
2017087514.tif 000010
【図９】
2017087514.tif 000011
【図１０】
2017087514.tif 000012