(57)【特許請求の範囲】
【請求項１】
１ページの描画データを複数の領域に分割した描画データの集まりとして扱う描画制御手段と、
前記描画制御手段の指示に従って、分割された領域の描画データをレンダリングするレンダリング手段とを有し、
前記描画制御手段は、分割された領域内の描画オブジェクトに対応づけてレンダリングの解像度を決定するための、描画オブジェクトの種類を表わす情報を保持し、前記描画オブジェクトの種類を表わす情報に基づいて、分割された領域単位で、レンダリングする解像度を第１の解像度または前記第１の解像度よりも低い第２の解像度に決定し、
前記レンダリング手段は、前記第１の解像度でのレンダリングが決定された領域においてレンダリングを行う際に、前記第１の解像度でのレンダリングを決定する条件となった小文字オブジェクトと細線オブジェクトとを含む特定の種類の描画オブジェクトに対しては描画のエッジの位置を１画素単位で決定して前記特定の種類の描画オブジェクトをレンダリングし、前記特定の種類の描画オブジェクト以外の描画オブジェクトに対しては描画のエッジの位置を複数画素単位で決定して前記特定の種類の描画オブジェクト以外の描画オブジェクトをレンダリングする、ことを特徴とする画像処理装置。
【請求項２】
前記レンダリング手段は、前記第２の解像度でのレンダリングが決定された領域において描画オブジェクトの種類がイメージオブジェクトである描画オブジェクトをレンダリングする際に、前記イメージオブジェクトである描画オブジェクトに対応する画像データから複数画素ごとに画素値を取得することによりレンダリングを行うことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記レンダリング手段は、前記分割された領域ごとにレンダリング結果と前記レンダリングを行う解像度に関する情報を保持し、
前記描画制御手段は、保持された前記レンダリング結果をページメモリに展開する際に、前記第１の解像度に関する情報が保持された領域はそのままの解像度で前記ページメモリに転送し、前記第２の解像度に関する情報が保持された領域は画素拡大処理をしながら前記ページメモリに転送を行う、ことを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
前記レンダリング手段は、前記分割された領域のスキャンラインごとにレンダリングを行うことを特徴とする請求項１乃至３のいずれか１項に記載の画像処理装置。
【請求項５】
１ページの描画データを複数の領域に分割した描画データの集まりとして扱う描画制御工程と、
前記描画制御工程での指示に従って、分割された領域の描画データをレンダリングするレンダリング工程とを有し、
前記描画制御工程では、分割された領域内の描画オブジェクトに対応づけてレンダリングの解像度を決定するための、描画オブジェクトの種類を表わす情報を保持し、前記描画オブジェクトの種類を表わす情報に基づいて、分割された領域単位で、レンダリングする解像度を第１の解像度または前記第１の解像度よりも低い第２の解像度に決定し、
前記レンダリング工程では、前記第１の解像度でのレンダリングが決定された領域においてレンダリングを行う際に、前記第１の解像度でのレンダリングを決定する条件となった小文字オブジェクトと細線オブジェクトとを含む特定の種類の描画オブジェクトに対しては描画のエッジの位置を１画素単位で決定して前記特定の種類の描画オブジェクトをレンダリングし、前記特定の種類の描画オブジェクト以外の描画オブジェクトに対しては描画のエッジの位置を複数画素単位で決定して前記特定の種類の描画オブジェクト以外の描画オブジェクトをレンダリングする、ことを特徴とする画像処理装置の制御方法。
【請求項６】
前記レンダリング工程では、前記第２の解像度でのレンダリングが決定された領域において描画オブジェクトの種類がイメージオブジェクトである描画オブジェクトをレンダリングする際に、前記イメージオブジェクトである描画オブジェクトに対応する画像データから複数画素ごとに画素値を取得することによりレンダリングを行うことを特徴とする請求項５に記載の画像処理装置の制御方法。
【請求項７】
前記レンダリング工程では、前記分割された領域ごとにレンダリング結果と前記レンダリングを行う解像度に関する情報を保持し、
前記描画制御工程では、保持された前記レンダリング結果をページメモリに展開する際に、前記第１の解像度に関する情報が保持された領域はそのままの解像度で前記ページメモリに転送し、前記第２の解像度に関する情報が保持された領域は画素拡大処理をしながら前記ページメモリに転送を行う、ことを特徴とする請求項５又は６に記載の画像処理装置の制御方法。
【請求項８】
前記レンダリング工程は、前記分割された領域のスキャンラインごとにレンダリングを行うことを特徴とする請求項５乃至７のいずれか１項に記載の画像処理装置の制御方法。
【請求項９】
請求項５乃至８のいずれか１項に記載の画像処理装置の制御方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理方法及び画像処理装置とその制御方法に関する。特に、画像データを受信し印刷するための画像処理方法、及びその機能を有する画像処理装置とその制御方法に関するものである。
【背景技術】
【０００２】
プリンタ技術が進歩するに従い、紙などの媒体に出力する解像度は高くなってきている。プリンタ解像度が上がることにより、線の滑らかさや擬似階調表現される色の階調性が向上するなどのメリットがある。しかし、デジタル画像を生成する処理(所謂、レンダリング処理)は、解像度があがるほど処理時間や必要メモリ量が増え、画質と処理コストとはトレードオフの関係にある。
【０００３】
従来、高解像度のレンダリング処理を高速に行う技術として、特許文献１および特許文献２で開示されている、オブジェクトの辺交差の効率的なソートを実現する技術がある。
【０００４】
また、ページ中の特定部分のみ高解像度でレンダリングすることによってレンダリング処理のコストを低下させる技術としては、特許文献３で開示されている技術がある。
【０００５】
さらに、一般的に知られる技術として、低解像度のレンダリング済み画像に対してピクセル補間やエッジ形状パターンマッチングの手法を適用して出力解像度を上げる、スムージング技術が広く用いられている。
【特許文献１】特開２０００―１３７８２５
【特許文献２】特開２０００―１４９０３５
【特許文献３】特開平１０−２０２９６０
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１や特許文献２のような技術を用いても、高解像度のレンダリングでは処理時間や消費メモリ量が十分に小さく出来ない場合も多い。その場合は、画質に影響を与えない範囲で低解像度のレンダリングを部分的に用いることが有効であると考えられる。
【０００７】
処理コストを抑えつつ効果的に印刷画質を向上させる方法として、小さな文字や細い線だけに限定して高解像度のレンダリング処理を行うことが考えられる。しかし、スムージング技術では、数ポイント以下の小さな文字のプロポーション改善や、高解像度の１ドットラインの表現は不可能である。
【０００８】
一方、特許文献３の技術では、領域ごとに解像度を決定してしまうため、高解像度領域内では小さな文字や細い線以外の描画オブジェクトも高解像度でレンダリングされてしまう。そのため、隣接する低解像度領域との境目で、ドット幅が変化したり画像品位が変化することによる見た目の違和感が生じてしまう。
【０００９】
本発明は、上記問題点を解決するためになされ、レンダリング処理において、小さな文字や細線の描画のみを高解像度とし、その他の描画オブジェクトを低解像度でレンダリングすることにより、高画質化と処理コストの低減を両立させる。
【００１０】
すなわち、高解像度領域において、高解像度でレンダリングすることが効果的な特定の描画オブジェクトのみを高解像度レンダリング処理し、その他の描画オブジェクトは低解像度にあわせた品位でレンダリングする。これにより、レンダリング処理コストを抑えつつ違和感のない描画結果を得る。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明の文書画像処理装置は、以下の構成をとる。
【００１２】
１ページの描画データを複数の領域に分割した描画データの集まりとして扱う描画制御手段と、前記描画制御手段の指示に従って、分割された領域の描画データをレンダリングするレンダリング手段とを有し、前記描画制御手段は、分割された領域内の描画オブジェクトに対応づけてレンダリングの解像度を決定するための、描画オブジェクトの種類を表わす情報を保持し、前記描画オブジェクトの種類を表わす情報に基づいて、分割された領域単位で、レンダリングする解像度を第１の解像度または前記第１の解像度よりも低い第２の解像度に決定し、前記レンダリング手段は、前記第１の解像度でのレンダリングが決定された領域においてレンダリングを行う際に、前記第１の解像度でのレンダリングを決定する条件となった小文字オブジェクトと細線オブジェクトとを含む特定の種類の描画オブジェクトに対しては描画のエッジの位置を１画素単位で決定して前記特定の種類の描画オブジェクトをレンダリングし、前記特定の種類の描画オブジェクト以外の描画オブジェクトに対しては描画のエッジの位置を複数画素単位で決定して前記特定の種類の描画オブジェクト以外の描画オブジェクトをレンダリングする、ことを特徴とする。
【発明の効果】
【００１７】
本発明によれば、小さな文字や細線などの特定の描画オブジェクトのみを高解像度レンダリングし、それ以外の描画オブジェクトを低解像度でレンダリングする。これにより、特定の描画オブジェクトを含まない小領域は低解像度レンダリングとなり、省メモリと省演算コストでのレンダリングが可能になる。
【００１８】
すなわち、特定の描画オブジェクトを含む小領域では、高解像度レンダリングとなる。ただし、小領域内で高解像度品位でレンダリングされるのは特定の描画オブジェクトだけであり、それ以外の描画オブジェクトのレンダリング品位は、周囲の低解像度でレンダリングされた小領域と同等品位とすることが可能である。
【発明を実施するための最良の形態】
【００１９】
以下、本発明を実施するための実施形態について、図面を参照して詳細に説明する。なお、以下の実施形態では、本発明を実現する画像処理装置としてデジタル複合機を例に説明するが、かかる装置に限定されない。本発明は全体の画像の描画を分割した小領域毎に行う技術に広く適用可能であり、例えば、画像の表示にも適用可能である。更に、ワープロ（ワードプロセッサ）系ソフトウェア、表計算系ソフトウェア、作図系ソフトウェア等にも幅広く応用可能である。これらも本発明に含まれる。
【００２０】
＜本実施形態の画像処理装置であるデジタル複合機の構成例＞
本実施形態のデジタル複合機の全体構成例を、図１を参照しながら説明する。
【００２１】
画像入力装置としても参照されるリーダ部２００は、原稿画像を光学的に読み取って画像データに変換する。リーダ部２００は、原稿を読取るための機能を持つスキャナユニット２１０と、原稿用紙を搬送するための機能を持つ原稿給紙ユニット250とで構成される。
【００２２】
画像出力装置としても参照されるプリンタ部３００は、記録紙を搬送し、その上に画像データを可視画像として印字して装置外に排紙する。プリンタ部３００は、複数種類の記録紙カセットを持つ給紙ユニット３１０と、画像データを記録紙に転写、定着させる機能を持つマーキングユニット３２０とを有する。また、印字された記録紙を機外へ出力する機能を持つ排紙ユニット３３０と、ステイプル処理やソート処理を行うフィニッシャ部３４０とを有する。
【００２３】
制御装置であるコントローラ部１００は、リーダ部２００及びプリンタ部３００と電気的に接続され、さらに、ネットワーク（ＬＡＮ）４０を介して、ホストコンピュータ４１，４２やインターネット上の各種サーバと接続される。コントローラ部１００は、リーダ部２００を制御して原稿の画像データを読込み、プリンタ部３００を制御して画像データを記録用紙に出力して、コピー機能を提供する。また、リーダ部２００から読取った画像データをコードデータに変換し、ネットワーク400を介してホストコンピュータへ送信するスキャナ機能を提供する。また、ホストコンピュータからネットワーク４００を介して受信したプリントジョブデータを画像データに変換し、プリンタ部３００に出力するプリンタ機能を提供する。また、リーダ部２００から読み取った画像データおよびホストコンピュータから受信したプリントジョブデータから変換した画像データを、コントローラ部内の二次記憶装置に保存するボックス機能を提供する。さらには、受信したプリントジョブデータに対するジョブ制御機能を提供する。
【００２４】
操作部150は、液晶タッチパネルで構成され、コントローラ部１００に接続されて本デジタル複合機を操作するためのユーザI/Fを提供する。
【００２５】
＜コントローラ部のハードウエア構成例＞
図２は、本実施形態におけるデジタル複合機のコントローラ部１００のハードウエア構成例を示すブロック図である。
【００２６】
図２において、コントローラ部１００は、画像入力デバイスであるリーダ部（スキャナ）２００や画像出力デバイスであるプリンタ部（プリンタエンジン）３００と接続し、画像データの読み取りやプリント出力のための制御を行う。また、コントローラ部１００は、ＬＡＮ４０と接続することで画像情報やデバイス情報をＬＡＮ４０経由で入出力するための制御を行う。
【００２７】
ＣＰＵ１０１は、デジタル複合機全体を制御するための中央処理装置であり、本実施形態のＲＩＰ１１１に対する描画制御を司っている。ＲＡＭ１０２は、ＣＰＵ１０１が動作するためのシステムワークメモリであり、入力された文書画像データを一時記憶するためのメモリでもある。さらに、ＲＯＭ１０３はブートＲＯＭであり、システムのブートプログラムが格納されている。ＨＤＤ１０４はハードディスクドライブであり、各種処理のためのシステムソフトウェアや、入力された画像データや中間コードなどを格納する。操作部Ｉ／Ｆ１０５は、画像データ等を表示可能な表示画面を有する操作部１５０に対するインタフェース部であり、操作部１５０に対して操作画面データを出力する。また、操作部インタフェース（Ｉ／Ｆ）１０５は、操作部１５０から操作者が入力した情報をＣＰＵ１０１に伝える役割をする。ネットワークインタフェース（Ｉ／Ｆ）１０７は、例えばＬＡＮカード等で実現され、ＬＡＮ４０に接続して外部装置との間で情報の入出力を行う。以上のユニットが、システムバス１０６上に配置されている。
【００２８】
イメージバスＩ／Ｆ１０９は、システムバス１０６と画像データを高速で転送する画像バス１１０とを接続するためのインタフェースであり、データ構造を変換するバスブリッジである。画像バス１１０上には、ラスタイメージプロセッサ（ＲＩＰ）１１１、デバイスＩ／Ｆ１１２、スキャナ画像処理部１１３、プリンタ画像処理部１１４、画像編集用画像処理１１５が接続される。
【００２９】
ラスタイメージプロセッサ（ＲＩＰ）１１１は、ページ記述言語（ＰＤＬ）コードやディスプレイリスト（ＤＬ）をイメージに展開して描画データを生成する。デバイスＩ／Ｆ部１１２は、リーダ部２００やプリンタ部３００とコントローラ部１００とを接続し、画像データの同期系／非同期系の変換を行う。また、スキャナ画像処理部１１３は、リーダ部２００から入力した画像データに対して、補正、加工、編集等の各種処理を行う。プリンタ画像処理部１１４は、プリント出力する画像データに対して、プリンタ部３００に応じた補正、解像度変換等の処理を行う。画像編集用画像処理１１５は、画像データの回転や画像データの圧縮伸長処理等の各種画像処理を行う。画像メモリ１１６は、ＲＩＰ１１１により展開された画像データやリーダ部２００から読込まれた画像データ、あるいは処理中の一次記憶として使用してもよい。
【００３０】
＜コントローラ部のソフトウェアによる機能構成例＞
図３は、デジタル複合機の動作を制御する図２の構成のコントローラ部１００が、ソフトウェアにより実現する機能構成例を示すブロック図である。かかる各機能構成部は、図２のハードウエアを使用しながら、ＨＤＤ１０４からＲＡＭ１０２にロードされたプログラムをＣＰＵ１０１が実行することにより、実現される。なお、データ描画部３３については、図２のＲＩＰ１１１内のＣＰＵによっても、その機能が実現される。
【００３１】
ネットワークインタフェイス（Ｉ／Ｆ）３０は、図２のネットワークＩ／Ｆ１０７を含む外部との入出力のための機能構成部である。プロトコル制御部３１は、ネットワークプロトコルを解析したり送信したりすることによって外部との通信を行う機能構成部である。
【００３２】
ＰＤＬ解析部３２は、文書画像データとして受信したＰＤＬデータを解析し、より処理しやすい形式の中間コード（例えば、以下で説明するディスプレイリストなど）に変換する機能構成部である。ＰＤＬ解析部３２において生成された中間コードは、データ描画部３５に渡されて処理される。なお、中間コードのディスプレイリストは、ホストコンピュータ４０１，４０２において生成され、ネットワークＩ／Ｆ３０において受信される場合もある。
【００３３】
データ描画部３３は、図２のＲＩＰ１１１を含み、上記中間コードのディスプレイリストを描画データであるビットマップデータに本実施形態では領域単位に展開する機能構成部であり、展開されたビットマップデータはページメモリ３４に逐次描画されて行く。ページメモリ３４は、データ描画部３３が展開するビットマップデータを一次的に保持する揮発性のメモリである。
【００３４】
パネル入出力制御部３５は、図２の操作部Ｉ／Ｆ１０５を含み操作部１５０からの入出力を制御する機能構成部である。中間データ記憶部３６は、中間コードのディスプレイリストの一部もしくは全部を記憶する記憶部であり、ハードディスク等の二次記憶装置によって実現される。スキャン制御部３７は、図２のスキャナ画像処理部１１３を含み、リーダ部２００から入力した画像データに対して補正、加工、編集などの各種処理を行う。印刷制御部３８は、図２のプリンタ画像処理部１１４を含みページメモリ３４の内容をビデオ信号に変換処理し、プリンタ部３００へ画像転送を行なう。プリンタ部３００は、受け取ったビデオ信号を記録紙に永久可視画像形成するための印刷機構部である。
【００３５】
＜本実施形態のディスプレイリストの構成例＞
次に、図４から図７を参照して、コントローラ部１００内でデータ描画の元として使用されるディスプレイリストの構成例を説明する。なお、かかるディスプレイリストは、ＰＤＬ解析部３２によって文書画像データとして受信したＰＤＬデータを解析し、より処理しやすい形式に変換された中間コードである。本発明は、ディスプレイリスト以降の処理に特徴があり、ＰＤＬ解析部３２による変換については詳説しない。ここで、本実施形態におけるデータ描画部３３（ＲＩＰ１１１）によるページのレンダリング処理は、１ドットを単位とし左上を原点とした座標系が用いられる。
【００３６】
（ディスプレイリストの全体構成例）
図４は、本実施形態におけるディスプレイリストの全体のデータ構造の一例を示す図である。また、図５から図７は、図４のディスプレイリストの構成要素の詳細を示す図である。
【００３７】
ディスプレイリスト４００には、１ページに相当する領域をレンダリングするために必要な情報が入っている。図４中の４０１〜４０９は、レンダリング処理の各段階の処理開始を指示するインストラクションである。個々のインストラクションは、必要に応じて付加情報とペアを成している。
【００３８】
インストラクション４０１は＜SET_LEVELLIST＞であり、付加情報としてレベルリストアドレス(LevelList Address)４０２とペアを成す。かかるインストラクション４０１は図７で後述のレベルリスト(LevelList)７００の設定を指示する。すなわち、レベルリストアドレス４０２がＲＩＰ１１１内のメモリに記憶され、レベルリスト７００の先頭アドレスとしてＲＩＰ１１１の処理において参照される。
【００３９】
インストラクション４０３は＜SET_FILLTABLE＞であり、付加情報としてフィルテーブルアドレス(FillTable Address)４０４とペアを成す。かかるインストラクション４０１は後述のフィルテーブル(FillTable)４３０の設定を指示する。すなわち、フィルテーブルアドレス４０４がＲＩＰ１１１内のメモリに記憶され、フィルテーブル４３０の先頭アドレスとしてＲＩＰ１１１の処理において参照される。
【００４０】
インストラクション４０５は＜DECOMPRESS_IMAGE＞であり、付加情報として圧縮イメージデータへのイメージアドレス(Image Address)４０６とペアを成す。かかるインストラクション４０５は、後述の圧縮イメージデータ(Compressed Image Data)４１０の展開を指示する。すなわち、イメージアドレス４０６にて参照される圧縮イメージデータ４１０を、イメージ展開バッファ(Decompression image buffer)４２０に展開する。ここで、圧縮イメージデータ４１０の圧縮形式には、JEPGやJBIGが用いられる。
【００４１】
インストラクション４０７は＜RENDER_PACKET＞であり、付加情報としてパケットＤＬアドレス(PacketDL Address)４０８とペアを成す。かかるインストラクション４０７は、展開された１ページのイメージを複数の矩形領域（小領域とも言う）に分割した、各矩形領域のレンダリングを指示する。すなわち、ディスプレイリスト４００内から、パケットＤＬアドレス４０８にて参照される領域単位のパケットＤＬ(PacketDL)５００を取得する。また、パケットＤＬアドレス４０８はＲＩＰ１１１内のメモリに記憶され、パケットＤＬ５００の先頭アドレスとしてＲＩＰ１１１で参照される。かかる、＜RENDER_PACKET＞とパケットＤＬ５００は分割された矩形領域の数だけ準備される。
【００４２】
インストラクション４０９は＜END_PAGE＞であり、付加情報はない。
【００４３】
４１０は圧縮イメージデータであり、圧縮イメージデータのイメージアドレス４０６でメモリ中での位置が示される。４２０はイメージ展開バッファであり、圧縮イメージデータ４１０の展開先として使用される。
【００４４】
（パケットＤＬの構成例）
図５に、パケットＤＬアドレス４０８で参照されるパケットＤＬ５００の構成例を示す図である。
【００４５】
５００は１ページ中の特定の矩形領域を描画するために必要なデータ構造であり、これをパケットＤＬと呼ぶ。パケットＤＬは、２種類のインストラクションを含むことが出来る。
【００４６】
インストラクション５０１は＜SET_PACKET＞であり、パケットＤＬを描画する際に必要な各種情報を付加情報として持つ。５０２，５０３は、矩形領域の左上座標値を示す。これをパケットＤＬの原点と呼ぶ。５０４，５０５は、矩形領域の高さと幅である。５０６〜５１０は、パケットＤＬ内に含まれる各種エッジの数を示す。パケットＤＬ内に含まれるエッジには、TEXT、Small_text、Graphics、thin_Line、Imageの５種類がある。後述の文章中で、それぞれエッジ判別子として、Ｔ，Ｓ，Ｇ，Ｌ，Ｉと略される場合もある。ここで、Ｔは文字オブジェクトのエッジ、Ｓは小文字オブジェクトのエッジ、Ｇはグラフィック・オブジェクトのエッジ、Ｌは細線オブジェクトのエッジ、Ｉはイメージオブジェクトのエッジである。
【００４７】
インストラクション５１１は＜LOAD_EDGES＞であり、エッジの描画を指示するものである。付加情報として、追加エッジ数５１２と、NextY座標５１３を持つ。さらに、付加情報として描画対象となるベクタエッジに関する３つの情報、ベクタセグメントアドレス５１４、エッジ判別子５１５、レベル番号５１６がセットとなり、ひとつのベクタエッジ描画に用いられる。
【００４８】
（ベクタセグメントの構成例）
図６は、ベクタセグメントアドレス５１４により参照されるベクタセグメント６００の構成例を示す図である。
【００４９】
６００は、描画するベクタエッジの座標情報を保持し、ベクタセグメントと呼ばれる。ベクタエッジは、複数の連続した線分の集合で表現されている。
【００５０】
６０１，６０２は、ベクタエッジの開始点を示す絶対座標値ｙ0，x0である。６０３，６０４は、ここから始まる線分の終点を示す相対座標値Dy1，Dx1である。さらに、これに続く線分も相対座標値として表される。６０５，６０６のベクタエッジの最終線分を表す相対座標値Dyn，Dxnに続くのは、エッジ終点を示すNULL値６０７である。
【００５１】
（レベルリストの構成例）
図７は、レベル番号５１６により参照されるレベルリスト７００の構成例を示す図である。
【００５２】
７００は、レベルリストである。レベルとは、描画されるオブジェクトの重なりを示す概念であり、大きいレベル値をもつ描画オブジェクトは、小さなレベル値を持つ描画オブジェクトを覆い隠す。そのため、同一座標上に複数の描画オブジェクトが重なり合って存在する場合には、もっともレベル値の大きな描画オブジェクトのみがレンダリングされる。
【００５３】
７０１はレベル値を示す番号である。７０２はレベル値７０１に対応するFillが格納されているフィルアドレスを示す。Fillとは、画素の色値を決定するために必要な情報であり、FillTable４３０に収められている。
【００５４】
＜本実施形態の描画手順の概念例＞
（本実施形態の１ページの描画例）
図８は、パケットＤＬによるレンダリング処理の全体の動作を模式的に説明する概要図である。
【００５５】
図８において、上段に示すのは図４〜図７で前述したディスプレイリスト４００である。ディスプレイリスト４００は、前述のように、１ページを分割した矩形領域の数のパケットＤＬ５００を有している。本例では、１ページを主走査方向の３分割、副走査方向の３分割して、９個の矩形領域の場合が示されている。
【００５６】
図８の中段の図は、上記９個のパケットＤＬ５００によりそれぞれレンダリングした矩形領域ごとの結果が、ページスプールバッファ１３０１内に格納された状態を示している。各レンダリング結果の画像データには、矩形領域の座標値情報（矩形領域左上の始点座標と高さ及び幅）と解像度品位情報が付加される。本例では、以下で詳説されるが、ＳエッジもしくはＬエッジがある場合の解像度品位は1200dpiもしくは600dpiであり、ＳエッジもしくはＬエッジがない場合の解像度品位は600dpiと記録される。
【００５７】
図８の例では、"字"の文字が含まれる矩形領域の解像度品位は1200dpiもしくは600dpiであり、他の８個の矩形領域の解像度品位は600dpiである。
【００５８】
図８の下段の図は、中段のページスプールバッファ１３０１内に格納された矩形領域ごとの結果をページメモリ３４に転送した、１ページのレンダリング結果である。その際、600dpi品位でレンダリングされた矩形領域は、ページメモリ上に拡大率２倍で画像展開される。1200もしくは600dpi品位でレンダリングされた矩形は、等倍で画像展開される。
【００５９】
（本実施形態の矩形領域内の１ラインの描画例）
図９及び図１０は、本実施形態における矩形領域内の１スキャンラインのレンダリングを実行した場合の内部動作を模式的に説明する概要図である。
【００６０】
１１００は、描画しようとする矩形領域に配置されるオブジェクトの関係を表している。描画オブジェクトの重なり順に下から、イメージオブジェクト１１０２、円形グラフィックスオブジェクト１１０３、三角形グラフィックスオブジェクト１１０４、文字オブジェクト１１０５が配置されている。この矩形領域内のひとつのスキャンライン１１０１に対するレンダリングを行うことを考える。
【００６１】
スキャンライン１１０１での各描画オブジェクトの重なり状態を示すのが、１１１０である。重なり順の上位に配置されるオブジェクトほどレベル値が大きい。
【００６２】
図４のディスプレイリスト４００のパケットＤＬ(PacketDL)５００に基づいて、１本のスキャンライン１１０１上でのアクティブエッジリスト(ActiveEdge List)９００（図１５で後述）をメモリ上に作成する。かかる処理は、後述の図２１で示す処理ルールにしたがって実現される。すなわち、まず、全てのベクタエッジ（VectorEdge:図５のエッジ識別子(T/S/G/L/I)５１５とレベル番号(Level)５１６で示される）をエントリする。そして、注目するキャンラインと交差するベクタエッジのみをアクティブエッジリスト９００として残す。アクティブエッジリスト９００内のアクティブエッジをスキャンラインとベクタエッジとの交点のＸ座標（整数：図９にはＸ1, Ｘ2,...で示す）に基づいてソートする。その結果が、図９の１１２０に相当する。図９で、ｘ1, 2,...は実数の交点のｘ座標、(1)〜(4)はレベル番号(Level)を表わす。
【００６３】
次に、交点のＸ座標順に並べ替えられたアクティブエッジリスト９００内のアクティブエッジをレベルソートして、スパンリスト(Span List)１０００（図１７で後述）をメモリ上に作成する。１１３０は、レベルソート中のメモリ上のレベルソートスタック(Level Sort Stack)８００（図１８で後述）の動作を示している。図２１で後述する処理ルールにしたがって、レベルソートスタックは操作される。１１３０で、"push"はレベルソートスタック８００への押し込み、"pop"はレベルソートスタック８００からの引き上げ、"remove"は削除、"sort"はレベルの大きい順のソートを示す。
【００６４】
レベルソートの結果、生成されたスパンリスト１０００を示すのが、図９の１１４０である。
【００６５】
次ぎに、図１０を参照すると、上述の図２２および図２５にて示される処理ルールに従って、スパンリスト１１４０に基づいて図８のページスプールバッファ１３０１のひとつのスキャンライン分の画素１１７０への書込みが実施される。そして、ひとつのスキャンラインの全画素の色値と像域フラグが決定される。その際に使用されるレベルリスト７００とフィルテーブル４３０の例が、それぞれ１１５０と１１６０である。
【００６６】
（本実施形態の矩形領域内での解像度制御例）
図１１及び図１２は、矩形領域の描画処理における、整数座標値への変換処理の概念を説明する図である。
【００６７】
図１１は、後述の図１９および図２０の処理の流れの中で描画を行った結果、ＳエッジおよびＬエッジに対して１画素単位で1200dpi品位を実現し、その他のエッジに対して複数画素単位で600dpi品位を実現する様子の概念を示す。
【００６８】
図１２は、後述の図２３および図２４の処理の流れの中で描画を行った結果、ＳエッジもＬエッジを含まないパケットＤＬの処理において、複数画素単位で600dpi品位を実現する様子の概念を示す。
【００６９】
（本実施形態の解像度制御の模式図）
図１３及び図１４は、本実施形態の解像度制御の模式図である。
【００７０】
図１３では、1200dpi品位での描画を実現するためにすべての画素位置に対して処理を実施して高解像度を実現している。
【００７１】
一方、図１４では、600dpi品位での描画のために、Ｘ座標およびＹ座標において偶数値をとる画素位置に対する処理のみを実施して、画素拡大処理を行い低解像度を実現している。
【００７２】
＜本実施形態のコントローラ部の処理手順例＞
以下に、上記本実施形態の描画を実現するコントローラ部１００の処理手順例をフローチャートに従って詳細に説明する。なお、本実施形態の描画を実現する主要な機能構成部はＲＩＰ１１１を含むデータ描画部３３である。
【００７３】
（ＲＩＰが使用するワークメモリのデータ構造例）
図１５から図１７は、ＲＩＰ１１１が描画を実行する際に使用するワークメモリのデータ構造例である。かかるワークメモリはＲＩＰ１１１の内部にあっても、画像メモリ１１６を使用しても、あるいはＲＡＭ１０２を使用してもよい。
【００７４】
図１５は、図４のディスプレイリスト４００の１つのパケットＤＬ５００（図５参照）に基づいて生成される、１矩形領域内の注目するスキャンラインと交点を有するアクティブエッジリスト９００を示す図である。
【００７５】
アクティブエッジリスト９００には、注目するスキャンラインと交点を有するアクティブエッジが含まれる。各アクティブエッジは、ベクタエッジ（VectorEdge:図５のエッジ識別子(T/S/G/L/I)５１５とレベル番号(Level)５１６で示される）を参照するベクタエッジ(VectorEdge)アドレス９０１を有する。また、注目するスキャンラインと交点を実数で表わしたScanline交点ｘ座標９０２と、Scanline交点ｘ座標９０２の整数部分を表わす整数Ｘ座標９０３とを有する。
【００７６】
図１６は、Ｘ座標でソートされたアクティブエッジリスト９００を順に、レベルソートするために使用されるレベルソートスタック８００の例を示す
レベルソートスタック８００の各スタックには、レベル番号８０１と、エッジ判別子８０２と、"remove"されたことを示すremoveフラグ８０３とが記憶される。removeフラグ８０３のセットされたスタックは、前述の図９のレベルソートスタック１１３０において、網掛けで示されている。
【００７７】
図１７は、図１６のレベルソートスタック８００を使用したレベルソートの結果の、最上位のスタックデータからなるスパンリスト１０００を示す図である。
【００７８】
スパンリスト１０００の各スパンは、スパン開始Ｘ座標値１００１と、エッジ判別子１００２と、レベル番号１００３とからなる。図９及び図１０のスパンリスト１１４０に相当する。
【００７９】
＜本実施形態におけるパケットＤＬレンダリングの全体の処理手順例＞
図１８は、本実施形態におけるパケットＤＬレンダリングの処理の流れを示すフローチャートの一例である。なお、図１８中の処理のうち、ステップＳ１４０５およびステップＳ１４０６は、それぞれＲＩＰ１１１内にて実行される処理である。ＲＩＰ１１１は内部にプロセッサとメモリを有し、メモリに予め記録されたプログラムを実行するものである。本実施例ではステップＳ１４０５およびステップＳ１４０６の処理を行うプログラムが記録されている。また、前記図１５から図１７に示すデータを一次記憶するワークメモリをＲＩＰ１１１の内部に設けてもよい。
【００８０】
図１８中のその他のステップは、コントローラ部１００内のＨＤＤ１０４に格納されたデータ描画部３３を実現するプログラムが、ＲＡＭ１０２に読み込まれた後、ＣＰＵ１０１にて実行される。かかる図１８の実行による全体の処理例は、図８のパケットＤＬレンダリング処理の全体の動作の概要図に従って、既に概説した。
【００８１】
まず、ステップＳ１４０１において、ＣＰＵ１０１は、ネットワークＩ／Ｆ３０より受信したディスプレイリスト４００の解釈を開始する。本実施形態の説明においては、ディスプレイリスト４００はホストコンピュータ４０１上で生成されているものとする。
【００８２】
ステップＳ１４０２において、ＣＰＵ１０１は、ディスプレイリスト４００中のインストラクションごとに処理を切り替える（図１８中の"Switch"）。
【００８３】
＜SET_LEVELLIST＞４０１の場合、ＣＰＵ１０１は、ステップＳ１４０８にて、ディスプレイリスト４００中のレベルリストアドレス４０２をＲＩＰ１１１内のメモリに記憶させる。これはレベルリスト７００の先頭アドレスとしてＲＩＰ１１１の処理内で参照される。
【００８４】
＜SET_FILLTABLE＞４０３の場合、ＣＰＵ１０１は、ステップＳ１４０９にて、ディスプレイリスト４００中のフィルテーブルアドレス４０４をＲＩＰ１１１内のメモリに記憶させる。これはフィルテーブル４３０の先頭アドレスとしてＲＩＰ１１１で参照される。
【００８５】
＜DECOMPRESS_IMAGE＞４０５の場合、ＣＰＵ１０１は、ステップＳ１４０７にて、圧縮イメージデータのイメージアドレス４０６にて参照される圧縮イメージデータ４１０を、イメージ展開バッファ４２０に展開する。ここで、圧縮イメージデータ４１０の圧縮形式にはJEPGやJBEGが用いられる。
【００８６】
＜RENDER_PACKET＞４０７の場合、ＣＰＵ１０１は、ステップＳ１４０３にてディスプレイリスト４００内から、パケットＤＬアドレス４０８にて参照されるパケットＤＬ５００を取得する。また、パケットＤＬアドレス４０８はＲＩＰ１１１内のメモリに記憶され、パケットＤＬ５００の先頭アドレスとしてＲＩＰ１１１で参照される。さらに、パケットＤＬ５００中に含まれる各種エッジの数５０６〜５１０を調べ、ＳエッジもしくはＬエッジの有無を確認する。
【００８７】
ＳエッジもしくはＬエッジがある場合には、ＣＰＵ１０１はＲＩＰ１１１に指示して、ＲＩＰ１１１内の処理のうちステップＳ１４０５にて、ＳエッジとＬエッジで表される描画オブジェクトが解像度1200dpiでレンダリングされる。その他のエッジで表される描画オブジェクトは、解像度600dpiに相当する品位でレンダリングされる。
【００８８】
ＳエッジでもＬエッジでもない場合には、ＣＰＵ１０１はＲＩＰ１１１に指示して、ＲＩＰ１１１内の処理のうちステップＳ１４０６にて、すべての描画オブジェクトが解像度600dpiに相当する品位でレンダリングされる。
【００８９】
レンダリングされた１画素には、図１０の１１７０で前述したように、r,g,bの各色値情報と像域フラグとが含まれる。
【００９０】
上記レンダリング結果は、図８のように、ページスプールバッファ１３０１内に、パケットＤＬ５００で定められた矩形領域ごとに格納され、矩形領域の座標値情報（始点座標と高さ及び幅で表わされる）と解像度品位情報が付加される。ＳエッジもしくはＬエッジがある場合の解像度品位は1200dpiもしくは600dpiであり、ＳエッジでもＬエッジでもない場合の解像度品位は600dpiと記録される。
【００９１】
＜END_PAGE＞４０９の場合、ＣＰＵ１０１は、ディスプレイリスト４００のレンダリング処理が終了することを検知し、ディスプレイリスト４００の解釈処理を終了する。そして、ステップＳ１４１０にて、ＣＰＵ１０１は、ページスプールバッファ１３０１内の画像をページメモリ３４上に転送する。その際、図１１〜図１４で前述したように、600dpi品位でレンダリングされた矩形領域は、ページメモリ上に拡大率２倍で画像展開される。一方、1200もしくは600dpi品位でレンダリングされた矩形領域は、等倍で画像展開される。
【００９２】
＜ＲＩＰ１１１による解像度混在のレンダリングＳ１４０５の処理手順例＞
図１９は、図８のステップＳ１４０５におけるＲＩＰ１１１の解像度を混在させた描画の詳細処理の流れを示すフローチャートの一例である。かかる処理は、ＲＩＰ１１１中のＣＰＵによって実行される。
【００９３】
ステップＳ１５０１にて、ＲＩＰ１１１は、パケットＤＬ５００中のパケット領域高さ５０４およびパケット領域幅５０５の情報から、必要とするページスプールバッファ１３０１（図８参照）のサイズを決定する。幅ｘ高さｘ（色値bit深度＋像域フラグbit数）で、ひとつの矩形領域の画像サイズが決まる。続いて、注目するスキャンラインのレンダリング処理を開始する（図９及び図１０参照）。
【００９４】
まず、ステップＳ１５０２で、ＲＩＰ１１１は、レンダリング処理対象となるスキャンラインのＹ座標を、パケットＤＬ５００の原点Ｙ座標値５０２として設定する。
【００９５】
次に、ステップＳ１５０３にて、ＲＩＰ１１１は、パケットＤＬ５００中のインストラクション＜LOAD_EDGES＞５１１を読み、インストラクションとセットで記録されている追加エッジ数５１２を変数Ｎに書き込む。また、NextY座標５１３を変数NextYに書き込む。続いて、ステップＳ１５０４にて、ＲＩＰ１１１は、処理すべきエッジの情報を管理する領域である、アクティブエッジリスト９００の領域を確保する（図１５参照）。アクティブエッジリスト９００は、スキャンラインのレンダリング中にベクタエッジを描画するために必要な情報を保持するデータ構造のリストであり、追加エッジの数Ｎに相当するメモリ領域がステップＳ１５０４にて追加される。さらに、追加したメモリ領域に対して、ベクタエッジアドレス９０１を書き込む。ベクタエッジアドレス９０１は、パケットＤＬ中のベクタセグメントアドレス５１４、エッジ判別子５１５、レベル番号５１６のセットを参照するためのアドレスである（図５参照）。
【００９６】
この段階で、Ｙ座標で特定されるスキャンラインと交差するベクタエッジの情報は、すべてアクティブエッジリスト９００に格納されていることになる。
【００９７】
続いて、ステップＳ１５０５にて、ＲＩＰ１１１は、注目するスキャンラインとベクタエッジとの論理的な交点x座標(実数値)９０２をすべて計算してアクティブエッジリスト９００の各ベクタエッジアドレス９０１に対応して格納する。さらに、レンダリング結果として描画されるＸ座標値(整数値)９０３も計算して各ベクタエッジアドレス９０１に対応して格納される。交点座標算出の処理詳細については、図２０を用いて後述する。
【００９８】
上記座標値算出処理の結果から、ステップＳ１５０６にて、ＲＩＰ１１１は、スキャンラインと交差しないと判断されたベクタエッジに関する情報をアクティブエッジリスト９００から削除する。さらに、ＲＩＰ１１１は、ステップＳ１５０７にて、整数Ｘ座標値を用いて、アクティブエッジリスト９００内のベクタエッジ情報のセットをＸ座標の昇順にソートする。
【００９９】
続いて、ステップＳ１５０８にて、ＲＩＰ１１１は、スパンリスト１０００の生成を行う（図９及び図１０の１１２０〜１１４０参照）。スパンリスト１０００内に複数のスパン情報が格納される。それぞれのスパン情報は、図１７で前述したように、スパン始点Ｘ座標値１００１、エッジ判別子１００２、レベル番号１００３の３つの情報から構成される。スパンリスト生成の処理詳細については、図２１を用いて後述する。
【０１００】
続いて、ステップＳ１５０９にて、ＲＩＰ１１１は、上記スパンリスト１０００を用いてページスプールバッファ１３０１に対して、１スキャンラインの描画を実施する（図１０の１１４０〜１１７０参照）。ステップＳ１５０９の処理詳細については、図２２を用いて後述する。
【０１０１】
ここまでで、パケットＤＬが定義する矩形領域内のひとつのスキャンラインに関する描画処理が完了している。ＲＩＰ１１１は、ステップＳ１５１０で処理すべき注目のスキャンラインのＹ座標値をインクリメントし、さらに、ステップＳ１５１１にて変数NextYと比較する。スキャンラインＹ座標と変数NextYとが一致しない場合はステップＳ１５０５に戻り、ＲＩＰ１１１は、次のスキャンラインの処理を続ける。
【０１０２】
スキャンラインＹ座標と変数NextYとが一致した場合は、ステップＳ１５０３から始まる＜LOAD_EDGES＞インストラクションが終了したことを示す。ステップＳ１５１２にて、未処理の＜LOAD_EDGES＞インストラクションがあった場合、ＲＩＰ１１１は、ステップＳ１５０３に戻って、新たなベクタエッジの追加処理を続ける。すべての＜LOAD_EDGES＞インストラクションの処理を終了すると、ＲＩＰ１１１は、ステップＳ１４０５のパケットＤＬのレンダリング処理を終了して、処理をＣＰＵ１０１に戻す。
【０１０３】
（スキャンラインとベクタエッジの交点算出Ｓ１５０５の手順例）
図２０は、図１９のステップＳ１５０５における、アクティブエッジリスト９００のためのスキャンラインとベクタエッジの交点算出の詳細処理を説明するフローチャートである。
【０１０４】
まず、ステップＳ１７０１で、ＲＩＰ１１１は、アクティブエッジリスト９００中の先頭に位置するエッジ情報のセットを読み込む。次に、ＲＩＰ１１１は、ステップＳ１７０２にてベクタエッジアドレス９０１を読み込み、ステップＳ１７０３でそのベクタエッジアドレス９０１で参照されるベクタエッジ情報からエッジ判別子５１５を読み込む。
【０１０５】
ステップＳ１７０４で、ＲＩＰ１１１は、上記エッジ判別子がＳエッジもしくはＬエッジであるか否かを判断する。
【０１０６】
ＳエッジもしくはＬエッジである場合には、そのエッジは1200dpi品位でレンダリングするための処理を行う。ＲＩＰ１１１は、ステップＳ１７０５にて、ベクタセグメントアドレス５１４にて参照されるベクタセグメントを読み込む。次に、ＲＩＰ１１１は、ステップＳ１７０６にてベクタセグメントとスキャンラインＹ座標との交点x座標を求める。このとき、x座標の値は実数で算出し、アクティブエッジリスト９００中のスキャンライン交点x座標値９０２を更新する。さらに、ＲＩＰ１１１は、ステップＳ１７０７にて上記x座標値(実数)を整数に変換し、整数Ｘ座標９０３を更新する。整数への変換は、以下のように少数点以下を切り捨てることでおこなう。
【０１０７】
Ｘ = floor(ｘ)
ＳエッジでもＬエッジでもない場合は、そのエッジは600dpi品位でレンダリングするための処理を行う。ＲＩＰ１１１は、ステップＳ１７０８にて現在処理中のスキャンラインＹ座標値が偶数であるか奇数であるかを判断する。奇数だった場合、ＲＩＰ１１１は、交点座標計算は実施せずステップＳ１７１２の処理に移る。偶数だった場合、ＲＩＰ１１１は、ステップＳ１７０９にて、ベクタセグメントアドレス５１４にて参照されるベクタセグメントを読み込む。次に、ＲＩＰ１１１は、ステップＳ１７１０にてベクタセグメントとスキャンラインＹ座標との交点x座標を求める。このとき、x座標の値は実数で算出し、アクティブエッジリスト９００中のスキャンライン交点x座標値９０２を更新する。さらに、ＲＩＰ１１１は、ステップＳ１７１１にて上記x座標値(実数)を整数に変換し、整数Ｘ座標９０３を更新する。整数への変換は、以下のようにより小さい偶数に丸めることで行う。
【０１０８】
Ｘ = floor(ｘ／２)×２
上記Ｘ座標値算出の後、ＲＩＰ１１１は、ステップＳ１７１２にて、アクティブエッジリスト９００中の次のエッジ情報のセットを読み込む。もし読み込んだ値がNULL値となっている場合は、ＲＩＰ１１１は、ステップＳ１７１３にて次のエッジが存在しないと判断し、処理を終了してリターンする。次のエッジ情報が存在する場合は、ＲＩＰ１１１は、ステップＳ１７０２の処理に戻る。
【０１０９】
（スパンリスト生成Ｓ１５０８／Ｓ１６０８の手順例）
図２１は、図１９のステップＳ１５０８および後述の図２３のステップＳ１６０８のアクティブエッジリスト９００に基づくスパンリスト生成の詳細処理を説明するフローチャートである。なお、前述の図９の１１２０〜１１４０を参照されたい。
【０１１０】
まず、ＲＩＰ１１１は、ステップＳ１９０１で図１５のアクティブエッジリスト９００中の先頭に位置するエッジ情報のセットを読み込む。次に、ＲＩＰ１１１は、ステップＳ１９０２にて、アクティブエッジリスト９００からベクタエッジアドレス９０１と整数Ｘ座標９０３とを読み込む。ステップＳ１９０３で、ＲＩＰ１１１は、スパンリスト１０００に新規スパンためのエントリを追加し、スパン始点Ｘ座標値１００１に対して、整数Ｘ座標値９０３を書き込む。ステップＳ１９０４ではベクタエッジアドレス９０１にて参照されるベクタエッジのエッジ判別子５１５とレベル番号５１６とを読み込む。
【０１１１】
ステップＳ１９０５以降では、ＲＩＰ１１１は、レベル情報を管理するワークメモリ領域に対する処理を行う。このワークメモリ領域を、レベルソートスタックと呼ぶ（図１６及び、図９の１１３０参照）。レベルソートスタック８００のひとつのエントリは、図１６で前述したように、レベル番号８０１、エッジ判別子８０２、リムーブ(remove)フラグ８０３の３つの情報から構成される。
【０１１２】
ステップＳ１９０５では、ＲＩＰ１１１は、ステップＳ１９０４で読み込んだレベル番号と同一のレベル番号のエントリがレベルソートスタック８００に存在するかを確認する。
【０１１３】
同じレベル番号のエントリがない場合は、そのエッジは注目するスキャンライン中でのあるオブジェクトの左端位置であることを示す。ＲＩＰ１１１は、ステップＳ１９０６にてレベルソートスタック８００の新規エントリにレベル番号８０１とエッジ判別子８０２を書き込み、さらにリムーブフラグの値を０に初期化したうえで、レベルソートスタック８００に"push"する。続いて、ＲＩＰ１１１は、ステップＳ１９０７にて、レベルソートスタック８００内をレベル番号の大きなエントリが上位に来るようにソート("sort")を行う。
【０１１４】
ステップＳ１９０５の判断で同じレベル番号のエントリがある場合は、そのエッジは注目のスキャンライン中でのあるオブジェクトの右端位置であることを示す。ＲＩＰ１１１は、ステップＳ１９０８にてレベルソートスタック８００中の同一レベル番号のエントリに対して、リムーブフラグの値を１に変更する("remove")。
【０１１５】
ステップＳ１９０９では、ＲＩＰ１１１は、レベルソートスタック８００の最上位のエントリのリムーブフラグの値を確認する。リムーブフラグの値が１の場合、ＲＩＰ１１１は、ステップＳ１９１０にてレベルソートスタック８００の最上位のエントリを"pop"し、ステップＳ１９０９に戻る。
【０１１６】
リムーブフラグの値が０の場合、ＲＩＰ１１１は、ステップＳ１９１１にてレベルソートスタック８００の最上位エントリのレベル番号８０１とエッジ判別子８０２の値を、スパンリスト１０００のエッジ判別子１００２とレベル番号１００３に書き込む。
【０１１７】
ＲＩＰ１１１は、ステップＳ１９１２にてアクティブエッジリスト９００の次のエントリを読み込む。このエントリ内の情報がNULL値であった場合には、ＲＩＰ１１１は、ステップＳ１９１３にてアクティブエッジリスト中の全エントリの処理が完了したと判断して、スパンリスト生成処理を終了してリターンする。NULL値以外の場合には、ステップＳ１９０２に戻り、次のエッジ処理を続ける。
【０１１８】
（ページスプールバッファへの１ライン書込みＳ１５０９の手順例））
図２２は、図１９のステップＳ１５０９における、作成されたスパンリスト１０００に基づくページスプールバッファ１３０１への１ライン書込みの詳細処理を説明するフローチャートである。
【０１１９】
ステップＳ２００１において、ＲＩＰ１１１は、変数CurrentＸの値を０に初期化する。ステップS２００２で、ＲＩＰ１１１は、スパンリスト１０００の先頭エントリを読み込む。
【０１２０】
ステップＳ２００３にて、ＲＩＰ１１１は、スパン始点Ｘ座標値１００１を取得し、変数SpanLengthに対して、SpanLength＝Ｘ−CurrentＸの演算をおこない、SpanLengthを更新する。
【０１２１】
ステップＳ２００５にて、ＲＩＰ１１１は、エッジ判別子１００２がＩ(Image)であるか否かを確認する。Image以外である場合には、ＲＩＰ１１１は、ステップＳ２００６にてSpanLengthが０より大きな値であるかを確認する。
【０１２２】
SpanLengthが１以上の場合はスパン中に描画すべき画素があることを示す。ＲＩＰ１１１は、ステップＳ２００７にてページスプールバッファ１３０１中の該当する座標の画素に対して、像域フラグをエッジ判別子１００２の値で上書きする。さらに、ＲＩＰ１１１は、ステップＳ２００８にてレベル番号１００３の値を用いてレベルリスト７００内を検索する。ＲＩＰ１１１は、ステップＳ２００９で、レベル番号７０１が同一のフィルアドレス７０２で参照されるフィルテーブル４３０内のエントリから"r.g.b"の値を取得し、ページスプールバッファ１３０１中の画素の色値を上書きする。さらに、ＲＩＰ１１１は、ステップＳ２０１０で右となりの画素の処理を行うため、SpanLength値をデクリメントする。
【０１２３】
SpanLengthが０以下の場合は、スパン中のすべての画素の描画処理が完了したことを示し、ＲＩＰ１１１は、ステップＳ２０１１にて変数CurrentＸをスパン始点Ｘ座標値１００１で上書きし、ステップＳ２０２０に移る。
【０１２４】
ステップＳ２００５の判断にて、エッジ判別子１００２がImageだった場合は、ＲＩＰ１１１は、ステップＳ２０１２にてSpanLengthが０より大きな値であるかを確認する。
【０１２５】
SpanLengthが１以上の場合は、スパン中に描画すべき画素があることを示す。ＲＩＰ１１１は、ステップＳ２０１３にてページスプールバッファ１３０１中の該当する座標の画素に対して、像域フラグをエッジ判別子１００２の値で上書きする。さらに、ＲＩＰ１１１は、ステップＳ２０１４にてレベル番号１００３の値を用いてレベルリスト７００内を検索する。ＲＩＰ１１１は、ステップＳ２０１５でレベル番号７０１が同一のフィルアドレス７０２で参照されるフィルテーブル４３０内のエントリから、イメージ展開バッファ４２０のアドレスを取得する。ステップＳ２０１６で、ＲＩＰ１１１は、現在のScanlineＹ座標値およびCurrentＸの値をもちいて、イメージ展開バッファ４２０中の該当ソースイメージ画素を参照し、"r,g,b"の各値を取得する。次に、ステップＳ２０１７では、ＲＩＰ１１１は、取得したr.g.b値とページスプールバッファ１３０１中の画素の色値を上書きする。さらに、ＲＩＰ１１１は、ステップＳ２０１８で右となりの画素の処理を行うため、SpanLength値をデクリメントし、ステップＳ２０１９で変数CurrentＸをインクリメントしたのち、ステップＳ２０１２に戻る。
【０１２６】
ステップＳ２０１２で、SpanLengthが０以下の場合はスパン中のすべての画素の描画処理が完了したことを示し、ＲＩＰ１１１は、ステップＳ２０２０の処理に移る。
【０１２７】
ステップＳ２０２０で、ＲＩＰ１１１は、スパンリスト１０００の次のエントリを確認し、ステップＳ２０２１でエントリ内に有効な値がある場合には次のスパン描画が必要と判断し、ステップＳ２００３に戻る。次のスパンがない場合、ＲＩＰ１１１は、ステップＳ２０２２にて同一スキャンラインの残りの画素のr.g.b値を最大にして白埋めし、処理を終了してリターンする。
【０１２８】
＜ＲＩＰ１１１による低解像度のレンダリングＳ１４０６の処理手順例＞
図２３は、図１８のステップＳ１４０６におけるＲＩＰ１１１の解像度品位を低解像度のみにした描画の詳細処理の流れを示すフローチャートの一例である。
【０１２９】
なお、図２３の処理の図１９との違いは、ステップＳ１６０５の交点算出処理、ステップＳ１６０９の１ライン描画処理、ステップＳ１６１０のＹ座標更新処理およびステップＳ１６１１のＹ座標比較処理である。これらの違いは、処理解像度品位の違いに起因している。
【０１３０】
図１９に示したステップＳ１４０５では、1200dpiもしくは600dpi品位での描画を実現するために、すべての画素位置に対して処理を実施している。これに対して、図２３に示したステップＳ１４０６では、600dpi品位での描画のために、Ｘ座標およびＹ座標において偶数値をとる画素位置に対する処理のみを実施している点（Ｘ座標およびＹ座標に２を加算している点）がことなる。
【０１３１】
すなわち、ステップＳ１６１０の処理では、スキャンラインＹ座標を２加算する。そして、ステップＳ１６１１の処理では、スキャンラインＹ座標値と変数NextYを比較する際に、Ｙ座標値が変数NextYを越える場合があるので不等式を用いている。
【０１３２】
また、ステップＳ１６０５の処理の詳細は図２４にて後述し、ステップＳ１６０９の処理の詳細は図２５にて後述するので、図２３における他のステップの説明は重複を避けるために省略する。なお、ステップＳ１６０８のスパンリストの生成処理は、図２１を参照して既に説明された。
【０１３３】
（スキャンラインとベクタエッジの交点算出Ｓ１５０６の手順例）
図２４は、図２３のステップＳ１６０５での、解像度品位が低解像度のみの場合のスキャンラインとベクタエッジの交点算出の詳細処理を説明するフローチャートである。
【０１３４】
図２４の前述した図２０との違いは、処理解像度品位の違いに起因している。図２０では、1200dpiもしくは600dpi品位での描画を実現するために、ＳエッジおよびＬエッジの処理の際に、すべての画素位置に対して処理を実施している。これに対して、図２４では、600dpi品位での描画のために、Ｘ座標およびＹ座標において偶数値をとる画素位置に対する処理のみを実施している点がことなる。
【０１３５】
すなわち、図２４のステップＳ１８０１〜Ｓ１８０７は、図２０のステップＳ１７０１−Ｓ１７０２，Ｓ１７０９−Ｓ１７１１，Ｓ１７１２−Ｓ１７１３の処理に相当する。従って、図２４の各ステップの説明は、重複をさけるために省略する。
【０１３６】
上記で説明した処理のうち、整数座標値への変換処理の概念を説明する図が、前述の図１１および図１２である。ここで再掲すると、図１１は、図１９および図２０の処理の流れの中で、ＳエッジおよびＬエッジに対して１画素単位で1200dpi品位を実現し、その他のエッジに対して複数画素単位で600dpi品位を実現する様子の概念を示す。一方、図１２は、図２３および図２４の処理の流れの中で、ＳエッジもＬエッジも含まないパケットＤＬ処理において、複数画素単位で600dpi品位を実現する様子の概念を示している。
【０１３７】
（ページスプールバッファへの１ライン書込みＳ１６０９の手順例））
図２５は、図２３のステップＳ１６０９での、解像度品位が低解像度のみの場合のページスプールバッファ１３０１への１ライン書込みの詳細処理を説明するフローチャートである。
【０１３８】
図２５の図２２との違いは、ステップＳ２１０４およびステップＳ２１１９のみである。これらの違いは、処理解像度品位の違いに起因している。図２２では、1200dpiもしくは600dpi品位での描画を実現するためにすべての画素位置に対して処理を実施している。これにに対して、図２５では、600dpi品位での描画のために、Ｘ座標およびＹ座標において偶数値をとる画素位置に対する処理のみを実施している点（SpanLengthを半分にする点と、CurrentＸに２加算する点）がことなる。
【０１３９】
従って、重複をさけるために、他のステップの説明は省く。
【０１４０】
なお、上記処理の相違点に基づく、図２２のステップＳ２０１６および図２５のステップＳ２１１６におけるImageの画素値取得処理について、その差異を模式的の示したのが、前述の図１３および図１４である。すなわち、図１３では、1200dpi品位での描画を実現するためにすべての画素位置に対して１画素単位の処理を実施して高解像度を実現している。一方、図１４では、600dpi品位での描画のために、Ｘ座標およびＹ座標において偶数値をとる画素位置に対する複数画素単位の処理のみを実施して、画素拡大処理をして低解像度を実現している。
【０１４１】
＜他の実施形態＞
以上、実施形態のひとつについて詳述したが、本発明にかかる処理はＲＩＰにより実行される構成に限定されず、他のプロセッサ、例えば図２のＣＰＵ１０１が実行しても構わない。更に、本実施形態では、本発明を画像処理装置としてデジタル複合機に適用した例に説明するが、かかる装置に限定されない。本発明は全体の画像の再現を分割した領域毎に行う技術に広く適用可能であり、例えば、画像の表示にも適用可能である。更に、ワープロ（ワードプロセッサ）系ソフトウェア、表計算系ソフトウェア、作図系ソフトウェア等にも幅広く応用可能である。これらも本発明に含まれる。
【０１４２】
また、本発明は、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。例えば、スキャナ、プリンタ、ＰＣ、複写機、複合機及びファクシミリ装置の如くである。
【０１４３】
また、本発明は、前述した実施形態の各機能を実現するソフトウェアプログラムを、システム若しくは装置に対して直接または遠隔から供給することによっても達成される。そして、そのシステム等に含まれるコンピュータが該供給されたプログラムコードを読み出して実行する。
【０１４４】
従って、本発明の機能・処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、上記機能・処理を実現するためのコンピュータプログラム自体も本発明の１つである。
【０１４５】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷなどがある。また、記録媒体としては、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ）などもある。
【０１４６】
また、プログラムは、クライアントコンピュータのブラウザを用いてインターネット／イントラネットのウェブサイトからダウンロードしてもよい。すなわち、該ウェブサイトから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードしてもよいのである。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるウェブサイトからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明の構成要件となる場合がある。
【０１４７】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配付してもよい。この場合、所定条件をクリアしたユーザにのみ、インターネット／イントラネットを介してウェブサイトから暗号化を解く鍵情報をダウンロードさせる。そして、その鍵情報で暗号化されたプログラムを復号して実行し、プログラムをコンピュータにインストールしてもよい。
【０１４８】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現されてもよい。なお、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行ってもよい。もちろん、この場合も、前述した実施形態の機能が実現され得る。
【０１４９】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれてもよい。そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行ってもよい。このようにして、前述した実施形態の機能が実現されることもある。
【図面の簡単な説明】
【０１５０】
【図１】本実施形態におけるデジタル複合機を含むシステム構成の一例を示す図である。
【図２】本実施形態におけるデジタル複合機のコントロール部のハードウエア構成例を示すブロック図である。
【図３】本実施形態におけるコントロール部のソフトウェアにより実現される機能構成の一例を示すブロック図である。
【図４】本実施形態におけるディスプレイリストのデータ構成例を示す図である。
【図５】図４のディスプレイリスト中のパケットＤＬのデータ構成例を示す図である。
【図６】図４のディスプレイリスト中のベクタエッジセグメントのデータ構成例を示す図である。
【図７】図４のディスプレイリスト中のレベルリストのデータ構成例を示す図である。
【図８】本実施形態におけるパケットＤＬのレンダリング処理の全体の動作を模式的に説明する概要図である
【図９】本実施形態におけるスキャンラインのレンダリングを実行した場合の内部動作を模式的に説明する概要図である。
【図１０】本実施形態におけるスキャンラインのレンダリングを実行した場合の内部動作を模式的に説明する概要図である。
【図１１】高解像度と低解像度が混在した場合の描画処理の一部を模式的に示す図である。
【図１２】低解像度のみの描画処理の一部を模式的に示す図である。
【図１３】高解像度部分の描画処理の一部を模式的に示す図である。
【図１４】低解像度部分の描画処理の一部を模式的に示す図である。
【図１５】本実施形態におけるアクティブエッジリストのデータ構成例を示す図である。
【図１６】本実施形態におけるレベルソートスタックのデータ構成例を示す図である。
【図１７】本実施形態におけるスパンリストのエントリのデータ構成例を示す図である。
【図１８】本実施形態におけるパケットＤＬのレンダリングの処理全体の流れの例を示すフローチャートである。
【図１９】図１８中のＳ１４０５の詳細処理の流れの例を示すフローチャートである。
【図２０】図１９中のＳ１５０５の詳細処理の流れの例を示すフローチャートである。
【図２１】図１９中のＳ１５０８および図２３中のＳ１６０８の詳細処理の流れの例を示すフローチャートである。
【図２２】図１９中のＳ１５０９の詳細処理の流れの例を示すフローチャートである。
【図２３】図１８中のＳ１４０６の詳細処理の流れの例を示すフローチャートである。
【図２４】図２３中のＳ１６０５の詳細処理の流れの例を示すフローチャートである。
【図２５】図２３中のＳ１６０９の詳細処理の流れの例を示すフローチャートある。
【図１】
0005199727.tif 000002
【図２】
0005199727.tif 000003
【図３】
0005199727.tif 000004
【図４】
0005199727.tif 000005
【図５】
0005199727.tif 000006
【図６】
0005199727.tif 000007
【図７】
0005199727.tif 000008
【図８】
0005199727.tif 000009
【図９】
0005199727.tif 000010
【図１０】
0005199727.tif 000011
【図１１】
0005199727.tif 000012
【図１２】
0005199727.tif 000013
【図１３】
0005199727.tif 000014
【図１４】
0005199727.tif 000015
【図１５】
0005199727.tif 000016
【図１６】
0005199727.tif 000017
【図１７】
0005199727.tif 000018
【図１８】
0005199727.tif 000019
【図１９】
0005199727.tif 000020
【図２０】
0005199727.tif 000021
【図２１】
0005199727.tif 000022
【図２２】
0005199727.tif 000023
【図２３】
0005199727.tif 000024
【図２４】
0005199727.tif 000025
【図２５】
0005199727.tif 000026