(57)【特許請求の範囲】
【請求項１】
画像を描画するための描画データを受け取ると当該描画データを所定形式の第一の中間コードに変換する中間コード生成手段と、
前記中間コード生成手段が変換した第一の中間コードを順次保持蓄積する中間コード蓄積手段と、
前記中間コード蓄積手段に蓄積された第一の中間コードを用いて、スキャンライン単位で重ねあわせを行い、圧縮可能な形式の第二の中間コードに展開する展開手段と、
前記展開手段によって展開されたスキャンライン単位の第二の中間コードを圧縮する圧縮手段と、
前記圧縮手段による圧縮後データを伸長して第二の中間コードに戻す伸長処理手段と、
前記圧縮手段による圧縮後データを保持蓄積する圧縮データ蓄積手段と、
前記中間コード蓄積手段が使用し得るメモリ容量が不足する状態となるメモリあふれが生じるか否かを判断するメモリ管理手段と、
前記メモリ管理手段によりメモリあふれが生じると判断されると、前記展開手段によって展開された第二の中間コードを、前記圧縮手段によって圧縮させるフォールバック処理手段と、
前記中間コード蓄積手段および前記圧縮データ蓄積手段が合わせて所定画像量に相当する第一の中間コードまたは圧縮後データを保持蓄積すると当該所定画像量に相当する分の第一の中間コードまたは圧縮後データについての出力処理を行う出力転送手段とを有し、
前記メモリ管理手段によりメモリあふれが生じると判断されなければ、前記中間コード生成手段が変換した第一の中間コードを前記中間コード蓄積手段に順次保持蓄積させ、
前記メモリ管理手段によりメモリあふれが生じると判断されると、前記フォールバック処理手段は、
フォールバック処理が二度目以降の場合には、既に行われているフォールバック処理で得られた圧縮後データを前記伸長処理手段により伸長させ、その伸長された第二の中間コードと前記二度目以降のフォールバック処理の要因となる第一の中間コードとについて、前記展開手段によりスキャンライン単位で重ね合わせを行って第二の中間コードに展開し、その展開後の第二の中間コードを前記圧縮手段によって圧縮させ、
フォールバック処理が一度目の場合には、前記展開手段によって新たなフォールバック処理の要因となった第一の中間コードを用いて展開された第二の中間コードを、前記圧縮手段によって圧縮させる
ことを特徴とする描画処理装置。
【請求項２】
前記展開手段が展開する第二の中間コードは、当該第二の中間コードによって表される画像の属性に関するオブジェクト情報を含んでおり、
前記伸長処理手段は、圧縮後データを伸長して第二の中間コードに戻す際に、前記オブジェクト情報も復元するものであり、
前記フォールバック処理手段は、
フォールバック処理が二度目以降の場合には、既に行われているフォールバック処理で得られた圧縮後データを前記伸長処理手段により伸長させ、その伸長された第二の中間コードと前記二度目以降のフォールバック処理の要因となる第一の中間コードとについて、前記オブジェクト情報を用いて、前記展開手段によりスキャンライン単位で重ね合わせを行って第二の中間コードに展開し、その展開後の第二の中間コードを前記圧縮手段によって圧縮させる
ことを特徴とする請求項１記載の描画処理装置。
【請求項３】
前記フォールバック処理手段は、
フォールバック処理が二度目以降の場合には、
前記展開手段により、前記伸張処理手段により伸張された第二の中間コードを下側に配置して、前記二度目以降のフォールバック処理の要因となる第一の中間コードをスキャンライン単位で重ね合わせて、第二の中間コードに展開し、その展開後の第二の中間コードを前記圧縮手段によって圧縮させる
ことを特徴とする請求項１または２に記載の描画処理装置。
【請求項４】
前記フォールバック処理手段は、前記オブジェクト情報に基づいて、有損失圧縮を施しても画質劣化が目立たない属性の部分に対してのみ、前記圧縮手段による有損失圧縮処理を適用する
ことを特徴とする請求項２記載の描画処理装置。
【請求項５】
前記伸長処理手段は、前記圧縮手段による有損失圧縮処理が適用された圧縮後データについてはラスタ表現により、それ以外の無損失圧縮処理が適用された圧縮後データについてはランレングス表現により、それぞれ復号するものである
ことを特徴とする請求項４記載の描画処理装置。
【請求項６】
限られた容量のメモリで描画処理を行う際に用いられる描画処理方法であって、
画像を描画するための描画データを受け取ると当該描画データを所定形式の第一の中間コードに変換する中間コード生成ステップと、
前記中間コード生成ステップで変換した第一の中間コードを前記メモリに順次保持蓄積させる中間コード蓄積ステップと、
前記中間コード蓄積ステップで蓄積された第一の中間コードを用いて、スキャンライン単位で重ねあわせを行い、圧縮可能な形式の第二の中間コードに展開する展開ステップと、
前記展開ステップによって展開されたスキャンライン単位の第二の中間コードを圧縮する圧縮ステップと、
前記圧縮ステップによる圧縮後データを伸長して第二の中間コードに戻す伸長処理ステップと、
前記圧縮ステップによる圧縮後データを保持蓄積する圧縮データ蓄積ステップと、
前記メモリの容量が不足する状態となるメモリあふれが生じるか否かを判断するメモリ管理ステップと、
前記メモリ管理ステップによりメモリあふれが生じると判断されると、前記展開ステップによって展開された第二の中間コードを、前記圧縮ステップによって圧縮させるフォールバック処理ステップと、
前記中間コード蓄積ステップおよび前記圧縮データ蓄積ステップで合わせて所定画像量に相当する第一の中間コードまたは圧縮後データを保持蓄積すると当該所定画像量に相当する分の第一の中間コードまたは圧縮後データについての出力処理を行う出力転送ステップとを有し、
前記メモリ管理ステップによりメモリあふれが生じると判断されなければ、前記中間コード生成ステップで変換した第一の中間コードを前記中間コード蓄積ステップにて順次保持蓄積させ、
前記メモリ管理ステップによりメモリあふれが生じると判断されると、前記フォールバック処理ステップでは、
フォールバック処理が二度目以降の場合には、既に行われているフォールバック処理で得られた圧縮後データを前記伸長処理ステップにより伸長させ、その伸長された第二の中間コードと前記二度目以降のフォールバック処理の要因となる第一の中間コードとについて、前記展開ステップによりスキャンライン単位で重ね合わせを行って第二の中間コードに展開し、その展開後の第二の中間コードを前記圧縮ステップによって圧縮させ、
フォールバック処理が一度目の場合には、前記展開ステップによって新たなフォールバック処理の要因となった第一の中間コードを用いて展開された第二の中間コードを、前記圧縮ステップによって圧縮させる
ことを特徴とする描画処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プリンタ等に搭載されて用いられ、いわゆるイメージ・レンダリングを行うための描画処理装置および描画処理方法に関する。
【０００２】
【従来の技術】
近年、パーソナルコンピュータ（ＰＣ）の高性能化により、手軽にカラー文書を作成することが可能になっており、これによりプリンタから出力される文書も高度化しつつある。そのため、文書の高度化に対応すべくプリンタ自身の能力も向上させる必要が生じているが、その一方ではＰＣの低価格化によりプリンタに対しても低価格化が強く求められている。つまり、プリンタについては、高性能化と低価格化とを両立させることが要求されている。
【０００３】
プリンタの能力は、一般に、処理速度、解像度、階調で表現される。例えば、２０ＰＰＭ（Page Per Minutes）、１２００ＤＰＩ（Dot Per Inch）、８ビット／コンポーネントといった数字で表現される。これらの数値が大きい方がプリンタの能力が高いと評価できる。一方で、プリンタのコストを決定する要因は複数あるが、特に画像を形成する上で不可欠なＣＰＵ（Central Processing Unit）およびメモリは、その中でも価格構成比率が比較的高い方に分類される。ところが、ＣＰＵの高性能化は高速な処理速度の実現には必要不可欠なので、プリンタの高性能化と低価格化とを両立させるためには、必然的に搭載するメモリ容量を削減せざるを得ない。さらに、解像度や階調が向上すると処理に必要なデータ量も増える。したがって、高性能化と低価格化との両立にあたっては、限られた容量のメモリでどのように高品位な画像を形成するか（イメージ・レンダリングを行うか）という技術的な問題が顕著になる。
【０００４】
このようなイメージ・レンダリングを行う際の技術的な問題を解決する処理として、例えば特開平１０−１１６１６０号公報には、いわゆるフォールバック処理が提案されている。すなわち、当該公報においては、フォールバック処理を行うことで、（１）画像を出力する際の実時間性を確保しつつ、（２）限られた容量のメモリ内で描画するデータを表現することを可能にしている。
【０００５】
ここで、このフォールバック処理について、さらに詳しく説明する。ただし、フォールバック処理は、本来、上記（１）および（２）という二つの目的のために適用されるものであるが、ここでは上記（２）の目的のために適用した場合を中心に説明する。
【０００６】
図２２は、フォールバック処理を行う場合におけるイメージ・レンダリング処理全体の手順を示すフローチャートである。イメージ・レンダリング処理は、例えば出力画像の１ページ分毎に行われる。すなわち、イメージ・レンダリングすべき描画データの入力があると（ステップ６０１、以下ステップを「Ｓ」と略す）、その描画データを順次所定形式の中間コード（グラフィックスオーダとも呼ばれる）に変換する（Ｓ６０２）。そして、中間コードのデータ量がこれを保持蓄積するメモリ容量よりも大きくなる、いわゆるメモリあふれが生じるか否かをチェックし（Ｓ６０３）、メモリあふれが無ければ中間コードをそのままメモリ内に保持蓄積する（Ｓ６０４）。ただし、メモリあふれが生じる場合には、フォールバック処理を起動する（Ｓ６０５）。この一連の処理を出力画像の１ページ分について終了するまで繰り返す（Ｓ６０６）。
【０００７】
図２３は、従来におけるフォールバック処理の手順を示すフローチャートである。従来のフォールバック処理は、以下に述べる五つの処理ステップからなる。すなわち、フォールバック処理が起動された場合には、先ず、処理対象となる中間コード（バンド単位に管理している）内にラスタ状のイメージ部分があると、そのラスタ部分を無損失圧縮（可逆圧縮）する（Ｓ７０１）。これにより十分なメモリ容量を確保できなかった場合には、そのラスタ部分を有損失圧縮（非可逆圧縮）する（Ｓ７０２）。これによっても十分なメモリ容量を確保できなかった場合（中間コードがバンドバッファより大きい場合）には、バンド全体をプレレンダリングする（Ｓ７０３）。これによっても十分なメモリ容量を確保できなかった場合には、バンド全体を無損失圧縮する（Ｓ７０４）。これによっても十分なメモリ容量を確保できなかった場合には、バンド全体を有損失圧縮する（Ｓ７０５）。これら五つの処理ステップ（Ｓ７０１〜Ｓ７０５）を順に経ることで、限られた容量のメモリであっても、出力画像の１ページ分に相当する中間コードまたはその圧縮後データの保持蓄積を可能にする。しかも、ラスタ部分以外の文字・図形部分については、四番目のステップ（Ｓ７０４）までは無損失のまま保たれるので、高品質な画像を生成することが期待できる。
【０００８】
このようなフォールバック処理によって、またはフォールバック処理に依らずに、出力画像１ページ分の中間コード（フォールバック処理を行った場合は圧縮後データを含む）の蓄積が行われると、その後は、図２２のように、ページの出力処理を行って（Ｓ６０７）、プリンタエンジン等に出力画像を形成させることになる。なお、このときに、出力処理の対象となるページ内で有損失圧縮されたバンドが一つでもあった場合には、当該バンドを含むページ全体を有損失圧縮してから出力する。これは、有損失圧縮されたバンドと無損失圧縮されたバンドとの境界で、画像の質が変化することによるディフェクトが発生するのを防止するためである。
【０００９】
【発明が解決しようとする課題】
しかしながら、上述した従来のフォールバック処理では、限られた容量のメモリを有効活用する上では非常に有用であるが、以下に述べるように高画質化を妨げる要因となり得る問題点が存在するため、結果としてプリンタ等における高性能化と低価格化との両立が困難になってしまうおそれがある。
【００１０】
例えば、従来のフォールバック処理では、五つの処理ステップ（Ｓ７０１〜Ｓ７０５）のうちの四番目のステップ（Ｓ７０４）で無損失圧縮を行うが、その処理対象となる中間コード等が画像の属性に関するオブジェクト情報（文字、図形、イメージ等を識別可能にする情報）を含んでいても、そのオブジェクト情報が無損失圧縮した段階で全て消えてしまう、といった問題点がある。一般に、画像出力を行う場合には、オブジェクト情報に応じた出力処理を行うことが多く、例えば文字や図形のエッジ部分は強調したり、ラスタ状のイメージ部分は階調を豊かに表現したりする。ところが、オブジェクト情報が消えてしまうと、このような処理を行うことができないため、高品質な画像を実現することが困難になると考えられる。
【００１１】
また、例えば、従来のフォールバック処理では、ページ内に一つでも有損失圧縮されたバンドが存在すると、ページ全体を有損失圧縮してしまう、といった問題点がある。ページ全体に処理を及ぼすことは、バンド単位で処理を行う場合においては一般的な問題であり、ページ全体での一貫性を保つためには避けられない。ところが、ページ全体を有損失圧縮すると、本来、十分な画質と少ないデータ量で表現できている領域にまで、画質劣化の発生する有損失圧縮を適用することになるので、高品質な画像を実現する上での大きな妨げとなってしまう。
【００１２】
そこで、本発明は、従来よりも高画質なフォールバック処理を可能にすることで、限られた容量のメモリを使用しつつも高品位の画像出力を実現することのできる描画処理装置および描画処理方法を提供することを目的とする。
【００１３】
【課題を解決するための手段】
本発明は、上記目的を達成するために案出された描画処理装置で、画像を描画するための描画データを受け取ると当該描画データを所定形式の第一の中間コードに変換する中間コード生成手段と、前記中間コード生成手段が変換した第一の中間コードを順次保持蓄積する中間コード蓄積手段と、前記中間コード蓄積手段に蓄積された第一の中間コードを用いて、スキャンライン単位で重ねあわせを行い、圧縮可能な形式の第二の中間コードに展開する展開手段と、前記展開手段によって展開されたスキャンライン単位の第二の中間コードを圧縮する圧縮手段と、前記圧縮手段による圧縮後データを伸長して第二の中間コードに戻す伸長処理手段と、前記圧縮手段による圧縮後データを保持蓄積する圧縮データ蓄積手段と、前記中間コード蓄積手段が使用し得るメモリ容量が不足する状態となるメモリあふれが生じるか否かを判断するメモリ管理手段と、前記メモリ管理手段によりメモリあふれが生じると判断されると、前記展開手段によって展開された第二の中間コードを、前記圧縮手段によって圧縮させるフォールバック処理手段と、前記中間コード蓄積手段および前記圧縮データ蓄積手段が合わせて所定画像量に相当する第一の中間コードまたは圧縮後データを保持蓄積すると当該所定画像量に相当する分の第一の中間コードまたは圧縮後データについての出力処理を行う出力転送手段とを有し、前記メモリ管理手段によりメモリあふれが生じると判断されなければ、前記中間コード生成手段が変換した第一の中間コードを前記中間コード蓄積手段に順次保持蓄積させ、前記メモリ管理手段によりメモリあふれが生じると判断されると、前記フォールバック処理手段は、フォールバック処理が二度目以降の場合には、既に行われているフォールバック処理で得られた圧縮後データを前記伸長処理手段により伸長させ、その伸長された第二の中間コードと前記二度目以降のフォールバック処理の要因となる第一の中間コードとについて、前記展開手段によりスキャンライン単位で重ね合わせを行って第二の中間コードに展開し、その展開後の第二の中間コードを前記圧縮手段によって圧縮させ、フォールバック処理が一度目の場合には、前記展開手段によって新たなフォールバック処理の要因となった第一の中間コードを用いて展開された第二の中間コードを、前記圧縮手段によって圧縮させることを特徴とするものである。
【００１４】
また、本発明は、上記目的を達成するために案出された描画処理方法である。すなわち、限られた容量のメモリで描画処理を行う際に用いられる描画処理方法であって、画像を描画するための描画データを受け取ると当該描画データを所定形式の第一の中間コードに変換する中間コード生成ステップと、前記中間コード生成ステップで変換した第一の中間コードを前記メモリに順次保持蓄積させる中間コード蓄積ステップと、前記中間コード蓄積ステップで蓄積された第一の中間コードを用いて、スキャンライン単位で重ねあわせを行い、圧縮可能な形式の第二の中間コードに展開する展開ステップと、前記展開ステップによって展開されたスキャンライン単位の第二の中間コードを圧縮する圧縮ステップと、前記圧縮ステップによる圧縮後データを伸長して第二の中間コードに戻す伸長処理ステップと、前記圧縮ステップによる圧縮後データを保持蓄積する圧縮データ蓄積ステップと、前記メモリの容量が不足する状態となるメモリあふれが生じるか否かを判断するメモリ管理ステップと、前記メモリ管理ステップによりメモリあふれが生じると判断されると、前記展開ステップによって展開された第二の中間コードを、前記圧縮ステップによって圧縮させるフォールバック処理ステップと、前記中間コード蓄積ステップおよび前記圧縮データ蓄積ステップで合わせて所定画像量に相当する第一の中間コードまたは圧縮後データを保持蓄積すると当該所定画像量に相当する分の第一の中間コードまたは圧縮後データについての出力処理を行う出力転送ステップとを有し、前記メモリ管理ステップによりメモリあふれが生じると判断されなければ、前記中間コード生成ステップで変換した第一の中間コードを前記中間コード蓄積ステップにて順次保持蓄積させ、前記メモリ管理ステップによりメモリあふれが生じると判断されると、前記フォールバック処理ステップでは、フォールバック処理が二度目以降の場合には、既に行われているフォールバック処理で得られた圧縮後データを前記伸長処理ステップにより伸長させ、その伸長された第二の中間コードと前記二度目以降のフォールバック処理の要因となる第一の中間コードとについて、前記展開ステップによりスキャンライン単位で重ね合わせを行って第二の中間コードに展開し、その展開後の第二の中間コードを前記圧縮ステップによって圧縮させ、フォールバック処理が一度目の場合には、前記展開ステップによって新たなフォールバック処理の要因となった第一の中間コードを用いて展開された第二の中間コードを、前記圧縮ステップによって圧縮させることを特徴とする。
【００１５】
上記構成の描画処理装置および上記手順の描画処理方法によれば、メモリあふれが生じると、メモリに保持蓄積させるべき第二の中間コードに対して圧縮処理を行う。ただし、圧縮処理を行っても、その圧縮処理後の圧縮データに対して伸長処理を施すことで、その圧縮データを第二の中間コードに戻し得る。つまり、展開手段（展開ステップ）で中間コードの重ね合わせ処理を行っており、二度目以降のフォールバック処理の場合には、圧縮済みの第二の中間コードを伸張して、伸張したデータと新たな中間コードとを重ね合わせた上で、圧縮することで、限られた容量のメモリを使用しながら高品位の画像出力が得られる。さらに、圧縮処理によって第二の中間コードに付随する特定の情報（例えば、画像の属性に関するオブジェクト情報）が失われてしまったり、第二の中間コードの全てが圧縮処理によって全く異なる形式のデータ（例えば、ラスタ状のビットマップデータ）に変換されてしまったりすることがない。したがって、例えば、圧縮処理を行ってもメモリあふれが解消しない場合には、その圧縮処理後の圧縮データを第二の中間コードに戻した圧縮前データを用いて、その圧縮前データの特定部分（例えばイメージ部分）のみにさらに圧縮率の高い有損失圧縮を施す、といったことが行えるようになる。
【００１６】
【発明の実施の形態】
以下、図面に基づき本発明に係る描画処理装置および描画処理方法について説明する。
【００１７】
〔描画処理装置の概略構成の説明〕
はじめに、描画処理装置の概略構成について説明する。図１は本発明に係る描画処理装置の概略構成の一例を示すブロック図であり、図２はその描画処理装置が用いられるシステムの構成例を示す概略図である。
【００１８】
本実施形態で説明する描画処理装置は、例えば図２（ａ）に示すように、クライアント１とプリンタ２とがネットワーク回線３を介して互いに接続されてなるシステムにおいて用いられる。ここで、描画処理装置は、クライアント１内に搭載しても、プリンタ２内に搭載しても、あるいはクライアント１とプリンタ２に分散して搭載してもよい。また、例えば図２（ｂ）に示すように、ネットワーク回線３上にプリントサーバ４が設けられている場合には、そのプリントサーバ４内に搭載したり、あるいはプリントサーバ４を含む各装置１，２に分散して搭載しても良い。
【００１９】
このようなシステムにおいて用いられる描画処理装置は、例えばクライアント１にインストールされたアプリケーションソフトウエア（例えば、文書作成ソフトウエア）により作成された描画データを受け取ると、その描画データに基づいてイメージ・レンダリング処理を行って出力し、プリンタ２のプリンタエンジンに画像出力を行わせるものである。なお、このイメージ・レンダリング処理を行う際の概略手順については、従来と同様であるため（図２２参照）、ここではその詳細な説明を省く。
【００２０】
このようなイメージ・レンダリング処理およびこれに付随する処理を行うために、描画処理装置は、例えば図１に示すように構成されている。すなわち、描画処理装置は、中間コード生成部１１と、中間コード蓄積部１２と、メモリ管理部１３と、フォールバック処理部１４と、中間コード展開部１５と、圧縮処理部１６と、伸長処理部１７と、圧縮データ蓄積部１８と、出力転送部１９と、を備えて構成されている。
【００２１】
中間コード生成部１１は、画像を描画するための描画データを受け取ると、その描画データを後述するような所定形式の中間コードに変換するものである。すなわち、中間コード生成部１１は、図２２におけるＳ６０２の処理を行うものである。
【００２２】
中間コード蓄積部１２は、中間コード生成部１１によって変換された中間コードを順次保持蓄積するものである。すなわち、中間コード蓄積部１２は、図２２におけるＳ６０４の処理を行うものである。
【００２３】
メモリ管理部１３は、中間コード蓄積部１２が使用し得るメモリ容量が不足する状態となるメモリあふれが生じるか否かを判断するものである。すなわち、メモリ管理部１３は、図２２におけるＳ６０３の処理を行うものである。
【００２４】
フォールバック処理部１４は、メモリ管理部１３によりメモリあふれが生じると判断されると、圧縮処理部１６を動作させるとともに、必要に応じて伸長処理部１７を動作させた後に再度圧縮処理部１６を動作させるものである。すなわち、フォールバック処理部１４は、図２２におけるＳ６０５の処理を行うものである。ただし、本実施形態で説明する描画処理装置においては、このフォールバック処理部１４が従来と大きく異なる。
【００２５】
中間コード展開部１５は、中間コード生成部１１によって変換された中間コードを、後述するような圧縮可能な形式に展開するものである。
【００２６】
圧縮処理部１６は、中間コード展開部１５による展開結果に対する圧縮処理を行い、そのデータ量を削減するものである。
【００２７】
伸長処理部１７は、必要に応じて、圧縮処理部１６が圧縮処理を行った後のデータ（以下「圧縮後データ」という）に対する伸長処理を行い、その圧縮後データを圧縮前の形式に戻すものである。
【００２８】
圧縮データ蓄積部１８は、フォールバック処理部１４からの指示によって圧縮処理部１６が圧縮処理した圧縮後データを保持蓄積するものである。
【００２９】
出力転送部１９は、中間コード蓄積部１２および圧縮データ蓄積部１８が、合わせて所定画像量に相当する分、例えば出力画像の１ページ分だけ、中間コードまたは圧縮後データを保持蓄積すると、その中間コードまたは圧縮後データについての出力処理を行うものである。すなわち、出力転送部１９は、図２２におけるＳ６０７の処理を行うものである。
【００３０】
なお、出力転送部１９による出力処理には、フォールバック処理部１４からの指示による圧縮処理等とは全く別に、中間コード展開部１５および圧縮処理部１６を動作させ、中間コードを圧縮可能な形式に展開して圧縮する処理が含まれるものとする。これは、中間コードを直接プリンタエンジン等に出力しても、そのプリンタエンジン等を同期駆動することが難しいからである。すなわち、中間コードの複雑さ（特に重なりの度合いや描画面積等）が均一でなく、また中間コードの展開処理の所要時間を予測することが難しい（そのため予め間に合わない部分だけ展開してしまいたいがどこを展開知ればよいか分からない）ので、プリンタエンジン等における動作の実時間性を保証するためには、中間コードの圧縮が有効（伸長時間は一般に実時間性を保証しやすい）と考えられるからである。ただし、実時間性が保証できれば、中間コードを編集して別の中間コード形式に変換するようにしても、あるいはページメモリを持ってラスタ展開してから出力するようにしてもよい。
【００３１】
〔中間コードの説明〕
次に、以上のように構成された描画処理装置において、中間コード生成部１１が変換する中間コードの形式および中間コード展開部１５による中間コードの展開方式について説明する。
【００３２】
中間コード生成部１１が受け取る描画データは、通常、その描画データによって特定される画像の属性に関するオブジェクト情報（文字、図形、イメージ等を識別可能にする情報）を含んでいる。また、中間コードを圧縮可能な形式に展開する際の展開方式としては、多種多様のものが知られている。ところが、例えば中間コードをラスタ展開してしまうと、圧縮可能とはなるが、データ量が増加してしまい、しかもその時点でオブジェクト情報が消えてしまうため、望ましくない。
【００３３】
そこで、本実施形態の描画処理装置においては、中間コードの展開結果を第二の中間コードとして出力する形態を採用し、中間コード生成部１１が描画データを中間コードに変換し、さらに中間コード展開部１５が中間コードを圧縮可能な形式に展開しても、オブジェクト情報が維持されたまま消えてしまうことがないようにしている。つまり、本実施形態の描画処理装置では、中間コード生成部１１が描画データを第一の中間コードに変換し、さらに中間コード展開部１５がその第一の中間コードを圧縮可能な形式の第二の中間コードに展開するようになっている。
【００３４】
このときの第一の中間コードの形式は、スキャンライン単位で取得できる形式であれば、ベクタ形式、台形形式、ランレングス形式等、どのような形式であっても良い。スキャンライン単位で取得できる形式である必要があるのは、中間コード展開部１５が以下のような手順で展開処理を行うからである。図３は、中間コードの展開処理の手順の一例を示すフローチャートである。
【００３５】
すなわち、中間コード展開部１５では、先ず、最上部の（最下部でも可能）スキャンライン上のデータを全て取得する（Ｓ１０１）。そして、そのうちの最も左側の描画点（左から右に描画する場合。右から左に描画する場合には最も右側の描画）を取得して（Ｓ１０２）、その描画点が描画開始点であるかどうかを判断する（Ｓ１０３）。
【００３６】
描画開始点の場合、中間コード展開部１５は、この描画データが描画開始になったことを登録しておく（Ｓ１０４）。そして、描画開始している描画データ内で最も上側（描画順で後に描画された）データであるかどうか判断し（Ｓ１０５）、最も上側である場合には、さらにこの描画データより下（描画順で前に描画されたデータ）があるかどうか判断し（Ｓ１０６）、ある場合には下側の描画データの色で塗り開始点から注目点（描画開始になった描画データの座標点）の左側の点まで塗り（Ｓ１０７）、塗り開始点を注目点に変更する（Ｓ１０８）。ただし、描画開始しているデータ内で最も上側でない場合、または下側で描画開始している描画データが無い場合には、塗り開始点の変更までの処理をスキップする。
【００３７】
一方、描画開始点でない場合（描画終了点）、中間コード展開部１５は、描画開始している描画データ内で最も上側であるかどうか判断し（Ｓ１０９）、最も上側である場合この描画データの色で塗り開始点から注目点の左側の点まで塗り（Ｓ１１０）、塗り開始点を注目点に変更する（Ｓ１０８）。ただし、描画開始している描画データ内で最も上側ではない場合、塗り開始点の変更までの処理をスキップする。
【００３８】
その後、中間コード展開部１５は、スキャンライン上のデータを全て処理したかどうかを判断し（Ｓ１１１）、まだ残っている場合には、最左の描画点の取得まで戻って上述した処理（Ｓ１０２〜Ｓ１１０）を繰り返す。全て処理した場合には、まだ所定の処理単位であるバンド内に処理していないスキャンラインがあるかどうか判断し（Ｓ１１２）、まだ残っている場合には、スキャンライン上のデータ取得まで戻って上述した処理（Ｓ１０１〜Ｓ１１１）を繰り返す。そして、全て処理した場合には、一つのバンド内の処理を終了する。
【００３９】
ここで、以上のような手順の展開処理にて扱われる第一の中間コードの形式について説明する。ここでは、第一の中間コードとしてベクタ形式を例に挙げる。
【００４０】
図４は、ベクタによるデータ表現形式の一例を示す説明図である。図中において、「順序」は、描画コマンドの描画順序である。「Ｘ」は、現在のスキャンラインを横切るベクタのＸ切片の値を示す。「Ｘ変位」は、次のスキャンラインに処理が移動した場合のＸ切片の変化量を示している。「Ｙ変位」は、当該ベクタに影響を受ける残りのスキャンライン数を示している。「向き」は、当該ベクタの向きを示す。
【００４１】
このような構成のベクタをさらに詳しく説明する。図５は、ベクタにより表現されるデータの一具体例を示す説明図である。図中において、座標系は左上方を原点とし、したがって図中の水平右方向にＸ座標値は増加し、図面の垂直下方向にＹ座標値は増加するものとする。図例では、Ｐ１（０，３００）、Ｐ２（６００，０）、Ｐ３（３００，６００）の３点で表現される三角形を示している。この３点から、ベクタの向きを考慮して、Ｐ１Ｐ２、Ｐ２Ｐ３、Ｐ３Ｐ１の３つのベクタが生成される。Ｐ１Ｐ２は、「Ｘ」が６００、「Ｘ変位」が−２、「Ｙ変位」が３００、「向き」が−１となる。他のベクタも同様に図例の如くなる。
【００４２】
ところで、ベクタ形式の場合、図形の内部／外部判定が必要となる。図６は、図形の内部／外部判定に用いる規則の一具体例を示す説明図である。判定規則には、図６（ａ）に示す非ゼロ巻き規則と、図６（ｂ）に示す奇偶規則との２種類がある。これらはいずれも複数の外形（パス）で形成された一つの図形の内部を判定する際に用いられる規則である。
【００４３】
図６（ａ）に示す非ゼロ巻き規則は、図形を構成する外形がスキャンラインと交差する際の向きを考慮したものである。すなわち、外形がスキャンラインを上向きに交差する場合を正、下向きに交差する場合を負としている。走査方向に向かって正の交差であれば１を加算し、負の交差であれば１を減算することにし、合計値が０でなくなった点から０に戻った点までが内部であると判定する。一方、図７（ｂ）に示す奇偶規則は、スキャンラインと交差するパスの個数をカウントして、奇数の点から偶数の点までを内部と判定することにしている。
【００４４】
このような判定規則による内部判定処理は、図３を用いて説明した展開処理における描画開始点、描画終了点の判別のために使用される。ここで、内部判定処理について、さらに詳しく説明する。図７は、内部判定処理の手順の一例を示すフローチャートである。なお、描画図形に対応した属性領域（内部判定規則と内部判定値）が別途あり、これは描画順序を示す値から取得できるものとする。
【００４５】
内部判定処理を行う場合は、先ず、ベクタの順序から、このベクタで構成される図形の内部判定規則を取得する（Ｓ２０１）。内部判定規則の種類が非ゼロ巻き規則であれば（Ｓ２０２）、続けて内部判定値を取得し（Ｓ２０３）、その値が「０」であるか否かをチェックする（Ｓ２０４）。値が「０」の場合には、ベクタの向きを足し（Ｓ２０５）、「領域の開始」であると判断する（Ｓ２０６）。一方、値が「０」でなければ、ベクタの向きを足してから（Ｓ２０７）、再度値が「０」であるか否かをチェックする（Ｓ２０８）。そして、値が「０」であれば「領域の終了」であると判断し（Ｓ２０９）、値が「０」以外であれば領域が継続すると判断する（Ｓ２１０）。
【００４６】
また、内部判定規則の種類が奇偶規則であった場合には（Ｓ２０２）、続けて内部判定値を取得し、その値を「１」だけ増加させてから２の剰余を求める（Ｓ２１１）。そして、２の剰余の値が「１」であれば、判定結果は奇数となり（Ｓ２１２）、図形が内部になるので、「領域の開始」と判断する（Ｓ２１３）。一方、２の剰余が「０」であれば、判定結果は偶数となり、図形の外部となるので、「領域の終了」と判断する（Ｓ２１４）。
【００４７】
このような手順の内部判定処理における「領域の開始」は描画開始点に対応し、「領域の終了」は描画終了点に対応するものである。したがって、取得したベクタのそれぞれに対して、上述した内部判定処理を適用すれば、描画開始点と描画終了点を判別することができるようになる。
【００４８】
なお、ここでは、第一の中間コードとしてベクタ形式を例に挙げて説明したが、第一の中間コードの形式としては、他の形式（ランレングス形式等）が混在してもよいことはいうまでもない。
【００４９】
続いて、上述した第一の中間コードに対して、図３を用いて説明した展開処理を行った結果である、第二の中間コードの形式について説明する。ここでは、第二の中間コードとしてランレングス形式を例に挙げる。
【００５０】
図８は、ランレングスによるデータ表現形式の一例を示す説明図である。図例では、２種類のランレングス形式が示しているが、共通の構造として、オブジェクトの種類やデータ形式を表現するフィールド（種別）と、スキャンライン上の開始座標値を表わすフィールド（始点）と、スキャンライン上の終了座標を表わすフィールド（終点）とを持っている。ただし、一方の「種別１」においては色値がランレングスに埋め込まれているが、他方の「種別２」では色値がポインタで別領域に画素列が格納されている。通常、「種別１」の形式は文字、図形を表現するために用いられ、「種別２」の形式はラスタを表現するために用いられる。
【００５１】
以上のように、中間コード展開部１５は、中間コード生成部１１が変換した第一の中間コードを、圧縮可能な形式の第二の中間コードに展開するようになっているが、その展開処理の一環として、以下に述べるデータ重ね合わせ処理を行う機能をも有している。
【００５２】
図９は、中間コードの展開処理の一環として行われるデータ重ね合わせ処理の手順の一例を示すフローチャートである。ここでは、図中の上部に示すように、あるスキャンライン上で互いに重なり合う３つの描画データが入力され、その描画順序は下側が先に描画されるデータ、上側が後から描画されるデータであり、各描画データの内容は最下方が「青」の図形データ、中央が「緑」のラスタデータ、最上方が「赤」の文字データである場合を例に挙げる。
【００５３】
この場合、先ず、最初のステップ（Ｓ３０１）では、描画開始点を取得するが、これ以前にどの描画データも描画開始となっていないので、その描画開始点の座標値を塗り開始点として一時的に保持するに留める。その後、次のステップ（Ｓ３０２）では、「緑」の描画開始点を取得するが、既に緑より後に描画される「赤」が描画開始となっているので何もしない。さらに次のステップ（Ｓ３０３）では、「赤」の描画終了点を取得し、描画開始している描画データの中で一番上なので塗り開始点「０」からその座標値「５」まで「赤」で塗ることを決定し、「種別１、赤、０、５」といったランレングス形式のデータを出力し、塗り開始点を「６」に更新する。
【００５４】
次のステップ（Ｓ３０４）では、「青」の描画開始点を取得するが、既に「青」より後に描画される「緑」が描画開始となっているので何もしない。そして、次のステップ（Ｓ３０５）では、「緑」の描画終了点を取得し、描画開始している描画データの中で一番上なので、塗り開始点「６」からその座標値「９」まで「緑」を塗ることを決定し、「種別２、緑の画素列、６、９」といったランレングス形式のデータを出力し、塗り開始点を「１０」に更新する。さらに次のステップ（Ｓ３０６）では、「青」の描画終了点を取得し、描画開始している描画データの中で一番上なので、塗り開始点「１０」からその座標値「１３」まで「青」で塗ることを決定し、「種別１、青、１０、１３」といったランレングス形式のデータを出力し、塗り開始点を「１４」に更新する。
【００５５】
以上のようにして、中間コード展開部１５は、中間コード生成部１１が変換した第一の中間コードに対し、必要に応じてデータ重ね合わせ処理を行いつつ、圧縮可能な形式の一つであるランレングス形式の第二の中間コードに展開するようになっている。
【００５６】
〔圧縮処理の説明〕
次に、圧縮処理部１６が行う圧縮処理について説明する。圧縮可能な形式に展開された中間コードに対する圧縮方式としても多種多様のものが知られているが、ここでは以下に述べるカラー画像符号化方式を適用した場合を例に挙げる。
【００５７】
図１０は、圧縮処理部における機能構成の一例を示すブロック図である。図例のように、本実施形態における圧縮処理部１６は、参照領域生成手段１６ａと、同一画素値分布生成手段１６ｂと、予測情報符号化手段１６ｃと、誤差算出符号化手段１６ｄと、符号合成手段１６ｅと、を備えて構成されている。
【００５８】
参照領域生成手段１６ａは、ラスタ走査順に１画素ずつ入力されるデータから、符号化すべき画素データ、および、その周辺領域にある複数の画素データを抽出し、これらをそれぞれ注目画素データ、および参照領域データとするものである。
【００５９】
同一画素値分布生成手段１６ｂは、参照領域生成手段１６ａが特定した注目画素データおよび参照領域データに基づいて、注目画素の周辺にその注目画素と同じ画素値を持つ画素がどのように分布しているかを検出し、その結果を同一画素値分布として出力するものである。
【００６０】
予測情報符号化手段１６ｃは、注目画素データを同一画素値分布だけで符号化可能であるならば、同一画素値分布生成手段１６ｂが検出した同一画素値分布を基に注目画素値の符号化を行う一方、符号化不可能であるならば符号化不可能という符号を生成し、これらを選択的に予測情報符号データとして出力するものである。
【００６１】
誤差算出符号化手段１６ｄは、画素値データから予測画素値を算出し、さらに予測画素値と画素値データとの誤差を算出して符号化し、予測誤差符号データとして出力するものである。
【００６２】
符号合成手段１６ｅは、予測情報符号化手段１６ｃによる予測情報符号データと、誤差算出符号化手段１６ｄによる予測誤差符号データとを合成し、単一の符号ストリームとして出力するものである。
【００６３】
このような構成の圧縮処理部１６では、圧縮処理の対象となるデータを受け取ると、参照領域生成手段１６ａが、受け取ったデータ中における符号化すべき画素（注目画素）の画素値およびその周辺画素（例えば周辺四画素）の画素値を抽出し、これらをそれぞれ注目画素データおよび参照領域データとして特定する。注目画素およびその周辺画素の配置としては、例えば図１１に示す具体例のようなものが考えられる。なお、注目画素の位置は、画素の走査順と同様に、１ページ分の中で順に走査されるものとする。
【００６４】
注目画素データおよび参照領域データが特定されると、続いて、圧縮処理部１６では、同一画素値分布生成手段１６ｂが、参照領域データの中に注目画素データと同一の画素値があるか否かを比較し、その結果をまとめて同一画素値分布として出力する。例えば、同一画素値分布生成手段１６ｂは、注目画素の画素値と同一の画素値を持つ周辺画素を「１」に、そうでない周辺画素を「０」に置き換え、置き換えられた周辺四画素をまとめて同一画素値分布として出力する。したがって、例えば図１２に示す具体例の場合であれば、注目画素の真上および左側が「１」となり、他は「０」となる同一画素分布が生成される。
【００６５】
その後、圧縮処理部１６では、同一画素値分布生成手段１６ｂが生成した同一画素分布に対して、予測情報符号化手段１６ｃが符号化を行って、その結果を予測情報符号データとして出力する。このとき、予測情報符号化手段１６ｃは、同一画素分布に対する符号化を、予め設定されている参照画素ラベルおよび符号生成表に従って行う。参照画素ラベルおよび符号生成表としては、例えば図１３に示す具体例のようなものが挙げられる。
【００６６】
また、これと合わせて、圧縮処理部１６では、同一画素値分布生成手段１６ｂが生成した同一画素分布に対して、誤差算出符号化手段１６ｄが符号化を行って、その結果を予測誤差符号データとして出力する。このとき、誤差算出符号化手段１６ｄは、同一画素分布に対する符号化を、予め設定された演算式を用いた算術符号化方式によって行う。演算式としては、例えば図１４に示す具体例のようなものが挙げられる。
【００６７】
そして、予測情報符号化手段１６ｃおよび誤差算出符号化手段１６ｄから予測情報符号データおよび予測誤差符号データがそれぞれ出力されると、圧縮処理部１６では、符号合成手段１６ｅがこれらを合成して単一の符号ストリームとして出力する。ただし、この際に、例えば、符号合成手段１６ｅでは、予測情報符号化手段１６ｃにより出力される予測情報符号データとして同一のものが連続して出力される場合に、その連続する回数をカウントして、符号が同一でなくなった後にカウント結果と合わせて出力する。したがって、例えば図１５（ａ）に示す具体例のような予測情報符号データおよび予測誤差符号データがそれぞれ出力された場合であれば、符号合成手段１６ｅでは、図１５（ｂ）に示すような合成データを出力することになる。
【００６８】
〔伸長処理の説明〕
次に、伸長処理部１７が行う伸長処理について説明する。伸長処理部１７による伸長処理は、圧縮処理部１６による圧縮後データに対して行われる。したがって、ここでは、上述した圧縮処理の説明に対応して、伸長方式として以下に述べるカラー画像復号化方式を適用した場合を例に挙げる。
【００６９】
図１６は、伸長処理部における機能構成の一例を示すブロック図である。図例のように、本実施形態における伸長処理部１７は、符号判別手段１７ａと、予測情報復号化手段１７ｂと、誤差復号加算手段１７ｃと、中間コード生成手段１７ｄと、を備えて構成されている。
【００７０】
符号判別手段１７ａは、圧縮処理部１６による圧縮後データを読み込んで、その圧縮後データを構成する各符号が、予測情報符号データであるか、あるいは予測誤差符号データであるかを判別するものである。
【００７１】
予測情報復号化手段１７ｂは、圧縮後データを構成する符号が予測情報符号データである場合に、その予測情報符号データを復号して、符号化に対応付けて、例えば図１３に示した参照画素ラベルに関する情報にまで戻すものである。さらには同一の予測情報符号データが何回連続するかを示す情報（カウント結果）も併せて復号するようになっている。
【００７２】
誤差復号加算手段１７ｃは、圧縮後データを構成する符号が予測誤差符号データである場合に、その予測誤差符号データの誤差値に基づいて、注目画素の値を算出するものである。算出方法としては、符号化時に用いた演算式から注目画素値を算出する演算式を導き、その演算式を使用することが考えられる。例えば図１４に示した演算式によって符号化した場合であれば、注目画素＝（Ａ＋Ｂ）／２＋誤差といった演算式を用いればよい。
【００７３】
中間コード生成手段１７ｄは、予測情報復号化手段１７ｂによって復号された予測情報および誤差復号加算手段１７ｃによって復号された誤差情報を用いて、圧縮前の形式のデータ、例えばランレングス形式の中間コードを生成するものである。
【００７４】
ここで、この中間コード生成手段１７ｄによる中間コードを生成処理について、さらに詳しく説明する。図１７は、中間コード生成の手順の一例を示すフローチャートである。
【００７５】
図例のように、中間コード生成手段１７ｄは、先ず、復号されたデータを取得し（Ｓ４０１）、そのデータの画素値が直左の画素（または現在のランレングスの画素値）と等しいか否かをチェックする（Ｓ４０２）。その結果、これらが等しければ、現在のランレングスの長さに、取得したデータの長さ（予測情報の場合は同一画素値の連続する回数、誤差情報の場合は「１」）を加算する（Ｓ４０３）。また、等しくない場合には、現在のランレングスを出力するとともに、新しいランレングスを開始する（Ｓ４０４）。このとき、新しいランレングスは、取得したデータの画素値および長さを初期値として持つ。そして、以上の処理を復号データがなくなるまで繰り返して行うことで（Ｓ４０５）、中間コード生成手段１７ｄは、圧縮後データをランレングス形式の第二の中間データと同一状態に戻す。
【００７６】
〔フォールバック処理の説明〕
次に、本実施形態における描画処理装置において最も特徴的な処理である、フォールバック処理部１４によるフォールバック処理について説明する。フォールバック処理は、既に説明した図２２のフローチャートからも明らかなように、メモリあふれが生じる際に行う処理である。したがって、フォールバック処理では、メモリ内に保持蓄積すべきデータ量を削減する必要がある。
【００７７】
データ量を削減する方法としては様々なものがあるが、本実施形態の描画処理装置では、上述した圧縮処理部１６による符号化方式によって、文字図形およびＣＧ（Computer Graphics）画像については高い圧縮率を保証できる。したがって、フォールバック処理部１４は、文字図形およびＣＧ画像であれば、圧縮処理部１６を動作させることによって、そのデータ量を削減することができる。これに対して、ビットマップ状のラスタデータによって表現される自然画（イメージ）は、一般的に言われているように、高画質を保ったまま高い圧縮率で圧縮することは難しい。ところが、その反面、イメージは、画質を劣化させても人間の目には目立ち難い。そのため、本実施形態では、イメージを圧縮する際には、解像度を下げる処理を行って、高い圧縮率を確保する場合を例に挙げる。ただし、これは説明を簡単にするためであって、別の方式を用いて高い圧縮率を確保するようにしても何ら問題はない。別の方式としては、例えば、ＪＰＥＧ（Joint Photographic Experts Group）等のさらに別の符号化方式を組み合わせたものが挙げられる。
【００７８】
このように、文字図形やイメージといった画像のオブジェクト毎に異なる符号化方式を適用することは、オブジェクト情報を基にすることで実現できる。そのため、本実施形態の描画処理装置では、オブジェクト情報を画素値と同様に扱い、圧縮処理および伸長処理を経てもそのオブジェクト情報が復元されるようにする。具体的には、図１８に示すように、オブジェクト情報と画素情報とを一塊にして扱い、符号・復号化時の予測情報の判断に使用する。すなわち、画素値が同じでもオブジェクト情報が異なれば、異なるデータとして扱うようにする。
【００７９】
ここで、フォールバック処理部１４によるフォールバック処理について、具体例を挙げて詳細に説明する。図１９は、処理対象となるページのオブジェクトの構成の一具体例を示す説明図である。図１９（ａ）において、ハッチング（斜線）部は文字が記載された部分、塗りつぶし（黒塗り）部はイメージの部分であり、当該ページの右上四分の一をイメージが占めている。また、これらの描画順序としては、文字の領域を描いた後に、イメージの領域を描くものとする。さらに、当該ページは、図１９（ｂ）のように、４つのバンドに分割されて処理されるものとする。
【００８０】
図２０は、図１９に示したオブジェクト構成、特に最上部のバンドにおけるオブジェクト構成をさらに詳細に示した説明図である。図例のように、このバンドは、主に、ページの余白部分（下地）、文字、下地、イメージ、下地の順で構成されている。なお、より詳細には、文字の部分の中には文字部と下地部とが混在しているが、ここでは単に文字として扱い、説明を簡略化する。
【００８１】
このようなオブジェクト構成のページを描画するための描画データを受け取った場合に、本実施形態の描画処理装置では、先ず、中間コード生成部１１が文字に関する描画データを第一の中間コードに変換し、これを中間コード蓄積部１２が保持蓄積する。そして、その後に、中間コード生成部１１がイメージに関する描画データを第一の中間コードに変換し、これを中間コード蓄積部１２が保持蓄積するが、このとき（イメージの中間コード化の段階）にメモリ管理部１３によってメモリあふれが発生すると判断され、フォールバック処理部１４がフォールバック処理を行う場合を例に挙げて説明する。
【００８２】
図２１は、本実施形態におけるフォールバック処理の手順の一例を示すフローチャートである。フォールバック処理部１４では、メモリあふれが発生し、フォールバック処理を行う必要が生じた場合に、その処理対象となる同一ページに対して、既にフォールバック処理が行われたか否か、すなわち新たに行おうとするフォールバック処理が二度目以降のもの（以下、二度目以降に行う場合を「多重フォールバック処理」という）であるか否かを判断する（Ｓ５０１）。この判断は、圧縮後データの有無や処理履歴等に基づいて行えばよい。
【００８３】
この判断の結果、多重フォールバック処理である場合には、同一ページについての圧縮後データが存在するので、フォールバック処理部１４は、伸長処理部１７を動作させ、その圧縮後データに対する伸長処理を行い、その圧縮後データをランレングス形式の第二の中間データと同一状態に戻す（Ｓ５０２）。このときの伸長処理部１７による伸長処理は、既に説明した手順で行われる（図１６，１７参照）。
【００８４】
そして、フォールバック処理部１４は、伸長処理後の中間データを下地絵柄についてのランレングスデータとして扱い、そのランレングスデータに新たなフォールバック処理の要因となる中間コードを合成するデータ重ね合わせ処理を、中間コード展開部１５に行わせる（Ｓ５０３）。このときのデータ重ね合わせ処理は、既に説明した手順で行われる（図９参照）。ただし、上述したように描画データは上下関係を持っており、中間コードの生成は描画順に行われる。したがって、データ重ね合わせ処理にあたって、フォールバック処理部１４は、伸長処理後のランレングスデータを、新たなフォールバック処理の要因となる中間コードの下側に入れるよう指示を与える。これにより、中間コード展開部１５は、上下関係を持つデータ形式の最も下側に、前回までのフォールバック処理についての伸長結果を配置することになる。
【００８５】
一方、多重フォールバック処理でないと判断した場合には、これらの伸長処理（Ｓ５０２）およびデータ重ね合わせ処理（Ｓ５０３）をスキップする。
【００８６】
その後は、データ重ね合わせ処理後の中間コードまたは新たなフォールバック処理の要因となる中間コードについて、中間コード展開部１５に展開処理を行わせ、ランレングス形式の第二の中間コードを作成させる（Ｓ５０４）。このときの展開処理は、既に説明した手順で行われる（図３〜９参照）。そして、フォールバック処理部１４は、圧縮処理部１６を動作させ、中間コード展開部１５が生成した中間コードに対する圧縮処理を行わせる（Ｓ５０５）。このときの圧縮処理も、展開処理と同様、既に説明した手順で行われる（図１０〜１５参照）。
【００８７】
ここで、フォールバック処理部１４は、上述した一連の処理（Ｓ５０１〜Ｓ５０５）によって、メモリ容量に十分な空きができたか否かをメモリ管理部１３に問い合わせる（Ｓ５０６）。その結果、十分な空きができていれば、フォールバック処理部１４は、ページの終わりであるかどうかチェックし（Ｓ５０７）、まだ終わりでなければ一連の処理（Ｓ５０１〜Ｓ５０７）を繰り返す。そして、出力画像１ページ分についてのメモリ容量を確保して、中間コード蓄積部１２または圧縮データ蓄積部１８に中間コードまたは圧縮後データを保持蓄積させる。
【００８８】
ただし、圧縮処理部１６が圧縮処理を行ってもメモリ容量に十分な空きができない場合には、フォールバック処理部１４は、伸長処理部１７を動作させ、その圧縮処理によって得られた圧縮後データに対する伸長処理を行う（Ｓ５０８）。このときの伸長処理も、既に説明した手順で行われる（図１６，１７参照）。よって、圧縮後データは、ランレングス形式の第二の中間コードと同一状態に戻ることになる。しかも、このとき、オブジェクト情報と画素値とが同様に扱われるので、圧縮後データが中間コードに戻るのと同様に、その中間コードについてのオブジェクト情報も復元される。
【００８９】
そこで、フォールバック処理部１４は、そのオブジェクト情報に基づいて、イメージの部分のみを抽出し、そのイメージの属性を持つ部分だけにデータ量削減処理を行う（Ｓ５０９）。このときのデータ量削減処理としては、上述したように、解像度変換処理が挙げられるが、ＪＰＥＧ等の符号化方式を利用してもよい。そして、イメージ部分のデータ削減後、再び圧縮処理部１６を動作させ、上述した一連の処理（Ｓ５０５〜Ｓ５０９）を繰り返し、出力画像１ページ分についてのメモリ容量を確保して、フォールバック処理を終了する。
【００９０】
以上のように、本実施形態における描画処理装置およびその描画処理装置が実施する描画処理方法によれば、フォールバック処理時に必要に応じて圧縮処理または伸長処理を行うが、その際に圧縮後データを圧縮前の形式に戻し得るようになっている。つまり、従来とは異なり、圧縮処理によって中間データに付随する特定の情報（例えば、画像の属性に関するオブジェクト情報）が失われてしまったり、中間データの全てが圧縮処理によって全く異なる形式のデータ（例えば、ラスタ状のビットマップデータ）に変換されてしまったりすることがない。
【００９１】
そのため、本実施形態の描画処理装置および描画処理方法によれば、フォールバック処理を行う場合であっても、そのフォールバック処理およびその後に行う処理をオブジェクト情報に応じて行うことが可能となり、フォールバック処理にあたってイメージ部分のみに圧縮率の高い圧縮処理（例えば有損失圧縮）を施すといったことが行えるようになる。また、オブジェクトに応じて異なる圧縮処理を行えるので、ページ内に一つでも有損失圧縮された部分が存在しても、ページ全体の有損失圧縮を必要とすることがない。さらには、フォールバック処理後においても、例えば文字や図形のエッジ部分は強調したり、ラスタ状のイメージ部分は階調を豊かに表現したりする、といったことが可能になる。
【００９２】
特に、本実施形態の描画処理装置および描画処理方法では、無損失圧縮のみではメモリあふれが解消しない場合に、イメージ部分のみに圧縮率の高い有損失圧縮を施すようになっている。したがって、有損失圧縮を施しても画質劣化が目立たない属性部分であるイメージ部分に対してのみ有損失圧縮が適用され、他の部分（文字や図形等）については無損失圧縮が適用されることになる。
【００９３】
これらのことから、本実施形態の描画処理装置および描画処理方法によれば、限られた容量のメモリを有効に活用しつつも、出力画像の画質劣化を極力抑えて高品位の画像出力を実現し得るようになるので、結果としてプリンタ等における高性能化と低価格化との両立に寄与し得るようになる。
【００９４】
このことは、圧縮後データを伸長して圧縮前の形式に戻し得るようにしたことによって実現されるものである。すなわち、圧縮後データを圧縮前の形式に戻し得るので、オブジェクト情報と画素情報とを一塊にして扱えば、伸長処理後にオブジェクト情報が失われてしまうこともなくなり、上述したようなフォールバック処理が実現可能となる。
【００９５】
なお、本実施形態では、圧縮後データを伸長処理によってランレングス形式の第二の中間コードに戻す場合を例に挙げて説明したが、本発明はこれに限定されないことは勿論である。すなわち、中間コードはベクタ形式、台形形式、ランレングス形式、ラスタ形式等といった各種形式のものが混在していることが考えられるので、圧縮後データを圧縮前の形式に戻し得れば、その形式は特定のものに限定されるわけではない。ただし、フォールバック処理の一環として行われる圧縮処理においてはオブジェクトに応じて有損失圧縮と無損失圧縮とが選択的に施されるので、伸長処理後に行われる再圧縮処理を考慮すれば、伸長処理にあたって、有損失圧縮が適用された圧縮後データについてはラスタ表現により、それ以外の無損失圧縮が適用された圧縮後データについてはランレングス表現により、それぞれ復号することが好ましい。
【００９６】
【発明の効果】
以上に説明したように、本発明の描画処理装置および描画処理方法によれば、従来よりも高画質なフォールバック処理を可能にすることで、限られた容量のメモリを使用しつつも高品位の画像出力を実現することができる。
【図面の簡単な説明】
【図１】  本発明に係る描画処理装置の概略構成の一例を示すブロック図である。
【図２】  本発明に係る描画処理装置が用いられるシステムの構成例を示す概略図であり、（ａ）はその一例を示す図、（ｂ）は他の例を示す図である。
【図３】  中間コードの展開処理の手順の一例を示すフローチャートである。
【図４】  ベクタによるデータ表現形式の一例を示す説明図である。
【図５】  ベクタにより表現されるデータの一具体例を示す説明図である。
【図６】  図形の内部／外部判定に用いる規則の一具体例を示す説明図であり、（ａ）は非ゼロ巻き規則を示す図、（ｂ）は奇偶規則を示す図である。
【図７】  内部判定処理の手順の一例を示すフローチャートである。
【図８】  ランレングスによるデータ表現形式の一例を示す説明図である。
【図９】  中間コードの展開処理の一環として行われるデータ重ね合わせ処理の手順の一例を示すフローチャートである。
【図１０】  本発明に係る描画処理装置の圧縮処理部における機能構成の一例を示すブロック図である。
【図１１】  圧縮処理の際に用いられる参照領域データの一具体例を示す説明図である。
【図１２】  圧縮処理の際に用いられる同一画素値分布の一具体例を示す説明図である。
【図１３】  圧縮処理の際に用いられる参照画素ラベルおよび符号生成表の一具体例を示す説明図である。
【図１４】  圧縮処理の際に用いられる誤差算出符号化の演算式の一具体例を示す説明図である。
【図１５】  符号化フォーマットの一具体例を示す説明図であり、（ａ）は予測情報符号データおよび予測誤差符号データを示す図、（ｂ）はこれらの合成データを示す図である。
【図１６】  本発明に係る描画処理装置の伸長処理部における機能構成の一例を示すブロック図である。
【図１７】  中間コード生成の手順の一例を示すフローチャートである。
【図１８】  オブジェクト情報と画素情報との扱いの概要を示す説明図である。
【図１９】  処理対象となるページのオブジェクトの構成の一具体例を示す説明図である、（ａ）はページ全体の様子を示す図、（ｂ）はバンド分割状態を示す図である。
【図２０】  図１９に示したオブジェクト構成、特に最上部のバンドにおけるオブジェクト構成をさらに詳細に示した説明図である。
【図２１】  本発明におけるフォールバック処理の手順の一例を示すフローチャートである。
【図２２】  フォールバック処理を行う場合におけるイメージ・レンダリング処理全体の手順を示すフローチャートである。
【図２３】  従来におけるフォールバック処理の手順の一例を示すフローチャートである。
【符号の説明】
１１…中間コード生成部、１２…中間コード蓄積部、１３…メモリ管理部、１４…フォールバック処理部、１５…中間コード展開部、１６…圧縮処理部、１７…伸長処理部、１８…圧縮データ蓄積部、１９…出力転送部
【図１】
0004423812.tif 000002
【図２】
0004423812.tif 000003
【図３】
0004423812.tif 000004
【図４】
0004423812.tif 000005
【図５】
0004423812.tif 000006
【図６】
0004423812.tif 000007
【図７】
0004423812.tif 000008
【図８】
0004423812.tif 000009
【図９】
0004423812.tif 000010
【図１０】
0004423812.tif 000011
【図１１】
0004423812.tif 000012
【図１２】
0004423812.tif 000013
【図１３】
0004423812.tif 000014
【図１４】
0004423812.tif 000015
【図１５】
0004423812.tif 000016
【図１６】
0004423812.tif 000017
【図１７】
0004423812.tif 000018
【図１８】
0004423812.tif 000019
【図１９】
0004423812.tif 000020
【図２０】
0004423812.tif 000021
【図２１】
0004423812.tif 000022
【図２２】
0004423812.tif 000023
【図２３】
0004423812.tif 000024