(57)【要約】【課題】必要なメモリ容量の増大を抑制するとともに、比較的簡単かつ効率よく印刷データを高速にビットマップ展開する。【解決手段】ビットマップデータ領域を３バンド分確保し、１つのバンドについて伸長、ラスタライズ及び圧縮の一連の処理を１つのスレッド内でシーケンシャルに行う。並列実行される３スレッドで共通の関数を用い、３バンド分について圧縮及び伸長のそれぞれをほぼ連続的に行うことにより、印刷データを高速にビットマップ展開する。ディスプレイリスト作成は、これら３スレッドと異なるスレッドで実行する。スレッド間で同期を取るため、サブ領域ＢＭＰｋ、ｋ＝０〜２のそれぞれについて、圧縮完了フラグＦｃ（ｋ）及び伸長完了フラグＦｄ（ｋ）を、共有メモリ内に備える。【選択図】図１３
2008290376.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、プログラムが格納されデータ領域が確保され該ＣＰＵに結合された記憶装置と、ビットマップデータの圧縮と圧縮されたビットマップデータの伸長とを並列に行うことができる圧縮・伸長プロセッサと、を備え、
ページ記述言語で記述された１頁分の印刷データを複数のバンドに分割し、各バンドの印刷データをブロック毎の中間コードに変換し、中間コードをビットマップ展開する画像形成装置であって、
該データ領域は、それぞれ１バンド分の第１〜３ビットマップデータ領域を有し、
該プログラムは該ＣＰＵに対し、第１〜３タスクの各々について３バンド毎のバンド順次ブロック順次に、
（ａ）各バンドの最初のブロックを除き、該データ領域内の１バンドの圧縮データを、該圧縮・伸長プロセッサを介し伸長させて該第ｉビットマップデータ領域に格納させ、
（ｂ）該データ領域内の１ブロックの中間コードをラスタライズさせて該第ｉビットマップデータ領域のデータと合成させ、
（ｃ）該第ｉビットマップデータ領域のデータを、該圧縮・伸長プロセッサを介し圧縮させて該データ領域に格納させ、
ｉ＝１〜３のそれぞれを該第１〜３タスクで並列に実行させるとともに、該第１〜３タスクで処理（ａ）及び（ｃ）のそれぞれが並列に実行されないようにすることを特徴とする画像形成装置。
【請求項２】
該プログラムは該ＣＰＵに対しさらに、第４タスクにおいて、
（ｄ）該印刷データをバンド毎にブロック毎の中間コードに変換させて該データ領域に格納させ、
該第４タスクを該第１〜３タスクと並列に実行させることを特徴とする請求項１に記載の画像形成装置。
【請求項３】
該データ領域にはさらに、該第１〜３ビットマップデータ領域の各々に関し、処理（ａ）及び（ｃ）のそれぞれを完了したか否かを示す情報が格納され、
該プログラムは該ＣＰＵに対しさらに、該第１〜３ビットマップデータ領域の各々に関し処理（ａ）及び（ｃ）の完了時に該情報を更新させ、該情報に基づいて、該第１〜３タスクで処理（ａ）及び（ｃ）のそれぞれが並列に実行されないように制御させる、
ことを特徴とする請求項２に記載の画像形成装置。
【請求項４】
該データ領域は、該バンド毎かつブロック毎の中間コードが格納される領域と、該バンド毎の圧縮データが格納される領域とを有することを特徴とする請求項１乃至３のいずれか１つに記載の画像形成装置。
【請求項５】
該圧縮・伸長プロセッサは、該ＣＰＵに結合されたＡＳＩＣであることを特徴とする請求項１乃至４のいずれか１つに記載の画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、中間コード（ディスプレイリスト）をビットマップ展開し圧縮する画像形成装置に係り、特に、圧縮・伸長プロセッサを用いて、圧縮されたビットマップデータの伸張と、ディスプレイリストのラスタライズ及びそのデータと伸張されたビットマップデータとの合成と、合成されたビットマップデータの圧縮とを３バンド分並列処理する画像形成装置に関する。
【背景技術】
【０００２】
ページプリンタでは、解像度向上に伴い、必要なメモリ容量が増加するとともに、処理時間が長くなる。一方、高速なページプリンタを安価に提供するとともに、製品開発期間を短縮することが要求されており、メモリ容量の増大を抑制し、ソフトウェア構成の複雑化を避けるとともに、処理を高速化させる必要がある。
【０００３】
下記特許文献１では、所要メモリ容量を低減するために、ページ記述言語で記述された印刷データの１頁分を、例えば５１２ブロックに分割するとともにブロック毎に中間コードに変換し、ブロック毎にラスタライズしてビットマップデータに変換し、次いで圧縮した後に、メモリに格納している。また、描画対象の重なりを処理するために、圧縮したデータを伸長し、これとラスタライズしたビットマップデータとを合成し、次いで圧縮してメモリに格納している。
【０００４】
しかしながら、下記特許文献２にも記載されているように、ＲＩＰ（Raster Image Processor）部が新たなブロックのデータをビップマップ展開する場合、合成済データを圧縮してメモリに格納し、次いでこのブロックに対応した圧縮データを伸長させてしまうまで待たなければならないので、処理が遅延する。
【０００５】
そこで、この特許文献２では、ＲＩＰ部でブロックを順次連続的にラスタライズし、そのビットマップデータを圧縮して、メモリの代わりにハードディスクに格納し、１頁分についてビットマップ展開処理が終わった後に、各ブロックについて、合成すべき複数の圧縮データをハードディスクから読み出して伸長させ、これらを順次合成させてメモリに格納させている。
【０００６】
一方、下記特許文献３では、複数のハードウェアＲＩＰを並列動作させて処理の高速化を図っている。
【特許文献１】特開平４−８８７４９号公報
【特許文献２】特開平９−２１４７０９号公報
【特許文献３】特開平１０−２８９０６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、上記特許文献２では、圧縮データを一時記憶させるために、ハードディスクを用いており、また、圧縮と伸長とを直列処理しているので、処理の高速化が妨げられる。
【０００８】
また、上記特許文献３では、所用記憶容量低減のためのバンド単位の処理について開示がなく、ビットマップデータの圧縮や伸長についても開示がない。
【０００９】
本発明の目的は、このような問題点に鑑み、必要なメモリ容量の増大を抑制するとともに、比較的簡単に印刷データを高速にビットマップ展開することが可能な画像形成装置を提供することにある。
【００１０】
本発明の他の目的は、必要なメモリ容量の増大を抑制するとともに、比較的簡単且つ効率よく、印刷データを高速にビットマップ展開することが可能な画像形成装置を提供することにある。
【課題を解決するための手段】
【００１１】
本発明による画像形成装置の第１態様では、ＣＰＵと、プログラムが格納されデータ領域が確保され該ＣＰＵに結合された記憶装置と、ビットマップデータの圧縮と圧縮されたビットマップデータの伸長とを並列に行うことができる圧縮・伸長プロセッサと、を備え、
ページ記述言語で記述された１頁分の印刷データを複数のバンドに分割し、各バンドの印刷データをブロック毎の中間コードに変換し、中間コードをビットマップ展開する画像形成装置であって、
該データ領域は、それぞれ１バンド分の第１〜３ビットマップデータ領域を有し、
該プログラムは該ＣＰＵに対し、第１〜３タスクの各々について３バンド毎のバンド順次ブロック順次に、
（ａ）各バンドの最初のブロックを除き、該データ領域内の１バンドの圧縮データを、該圧縮・伸長プロセッサを介し伸長させて該第ｉビットマップデータ領域に格納させ、
（ｂ）該データ領域内の１ブロックの中間コードをラスタライズさせて該第ｉビットマップデータ領域のデータと合成させ、
（ｃ）該第ｉビットマップデータ領域のデータを、該圧縮・伸長プロセッサを介し圧縮させて該データ領域に格納させ、
ｉ＝１〜３のそれぞれを該第１〜３タスクで並列に実行させるとともに、該第１〜３タスクで処理（ａ）及び（ｃ）のそれぞれが並列に実行されないようにする。
【００１２】
本発明による画像形成装置の第２態様では、第１態様において、該プログラムは該ＣＰＵに対しさらに、第４タスクにおいて、
（ｄ）該印刷データをバンド毎にブロック毎の中間コードに変換させて該データ領域に格納させ、
該第４タスクを該第１〜３タスクと並列に実行させる。
【００１３】
本発明による画像形成装置の第３態様では、第２態様において、該データ領域にはさらに、該第１〜３ビットマップデータ領域の各々に関し、処理（ａ）及び（ｃ）のそれぞれを完了したか否かを示す情報が格納され、
該プログラムは該ＣＰＵに対しさらに、該第１〜３ビットマップデータ領域の各々に関し処理（ａ）及び（ｃ）の完了時に該情報を更新させ、該情報に基づいて、該第１〜３タスクで処理（ａ）及び（ｃ）のそれぞれが並列に実行されないように制御させる。
【発明の効果】
【００１４】
上記第１態様の構成によれば、ビットマップデータ領域が３バンド分で足りるので、必要なメモリ容量の増大を抑制することができ、また、１つのバンドについて伸長、ラスタライズ及び圧縮の一連の処理が１つのタスク内でシーケンシャルに行われるので、その同期をタスク間で取る必要がなく、しかも３バンド分について圧縮及び伸長のそれぞれをほぼ連続的に行うことができるので、比較的簡単に印刷データを高速にビットマップ展開することができるという効果を奏する。その上、第１〜３タスクで共通の関数を用いることができるので、メモリ使用量を削減することができるという効果を奏する。この簡単化は、開発期間短縮及び設計変更容易化に寄与する。
【００１５】
上記第２態様の構成によれば、第１〜３タスクのラスタライズに関係したディスプレイリスト作成が第４タスクで第１〜３タスクと並列に行われるので、第１〜３タスクのそれぞれでディスプレイリストを作成する場合よりもオーバヘッドが少なくなり、処理効率がよいという効果を奏する。
【００１６】
上記第３態様の構成によれば、比較的簡単に第１〜３タスク間の同期をとることができるという効果を奏する。
【００１７】
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
【実施例１】
【００１８】
以下、図面を参照して本発明の実施例を説明する。
【００１９】
図１７は、本発明の実施例１に係る画像形成装置１０のハードウェア構成を示す概略ブロック図である。
【００２０】
この画像形成装置１０では、ＣＰＵ１１、ＥＥＰＲＯＭ１２、ＲＡＭ１３、圧縮・伸長プロセッサ１４、通信インターフェイス１５、パネルインターフェイス１６、エンジンコントローラ１７及び搬送コントローラ１８がバス１９で結合され、インターフェイス１６、インターフェイスを含むエンジンコントローラ１７並びに搬送コントローラ１８にそれぞれ操作パネル２０、プリントエンジン２１及び用紙搬送装置２２が結合されている。通信インターフェイス１５には、不図示のホストコンピュータが結合される。
【００２１】
ＥＥＰＲＯＭ１２には、ＯＳ（Operating System）、ドライバ及びアプリケーションが格納される。ＲＡＭ１３には、一時的なデータが格納される。
【００２２】
圧縮・伸長プロセッサ１４は、例えばＡＳＩＣ（Application Specific Integrated Circuit）で構成され、圧縮処理と伸長処理とを同時に行うことができる。圧縮・伸長プロセッサ１４は、互いに並列処理可能な圧縮部１４１、伸長部１４２及び伸長部１４３（図図１参照）と、ＤＭＡＣ（Direct Memory Access Controller）とを備え、ＲＡＭ１３内のデータを圧縮部１４１、伸長部１４２又は伸長部１４３にＤＭＡでブロック転送させて圧縮又は伸長を行い、その結果をＲＡＭ１３又はエンジンコントローラ１７へＤＭＡでブロック転送させることが可能である。ＤＭＡＣは、圧縮・伸長プロセッサ１４と別体であってもよい。
【００２３】
操作パネル２０は、キー及び表示パネルを供えている。エンジンコントローラ１７は、ＣＰＵと、プリントエンジン制御用プログラムが格納されたメモリと、受信したビットマップデータを格納するバッファメモリとを備えている。
【００２４】
図１は、ホストコンピュータから受信した印刷データをビットマップ展開する部分の機能ブロック図である。
【００２５】
この印刷データは、頁記述言語（ＰＤＬ）で記述されており、通信インターフェイス１５を介してバッファメモリ１３１に格納される。図１において、バッファメモリ１３１、ヒープメモリ１３２及び共有メモリ１３３はＲＡＭ１３中の記憶領域である。インタープリタ１２１、ＲＩＰ１２２及び制御部１２３はいずれも、上記アプリケーションプログラムの一部に対応しており、ＣＰＵ１１により実行される。
【００２６】
制御部１２３は、ホストコンピュータからの印刷要求に対し、ホストコンピュータからの印刷データを、通信インターフェイス１５を介してバッファメモリ１３１に格納させる。制御部１２３は、インタープリタ１２１を起動させることにより、この印刷データを、各頁について、バンドごとのディスプレイリスト（中間コード）に変換させ、ヒープメモリ１３２に格納させる。制御部１２３は、ＲＩＰ１２２及び圧縮・伸長プロセッサ１４を起動させることにより、それぞれ後述の処理をさせる。
【００２７】
図１０（Ａ）〜（Ｃ）は、ディスプレイリスト概略説明図である。
【００２８】
図１０（Ａ）に示す如く、１頁分の印刷データ３０には、図形オブジェクト３１〜３４がこの順にＰＤＬで記述されており、これらを記述順にラスタライズすることにより、ビットマップデータ領域上で、図形オブジェクト３１に図形オブジェクト３３が上書きされ、図形オブジェクト３３に図形オブジェクト３４が上書きされて、図１０（Ａ）に示すような画像が得られる。必要なメモリ容量を低減するために、図１０（Ｂ）に示すように、印刷データ３０をバンド４０〜４３に分割するとともに、ラスタライズを高速処理するために、分割されたオブジェクトを中間コードに変換する。一般に、オブジェクトには図形オブジェクト以外に文字オブジェクト及びイメージオブジェクトが含まれる。オブジェクトの中間コード化において、ベクトルデータの文字オブジェクトは、イメージデータに変換される。
【００２９】
図１０（Ｃ）は、印刷データ３０に含まれる各図形オブジェクトがバンド毎の中間コードデータに変換されている状態をイメージ的に示す。図中の中間コードブロックＬｉｊは、バンドｉのディスプレイリストを構成するｊ番目のブロックであることを示している。図形の合成が適正に行われるようにするために、各バンドでのブロック記述順は、図形オブジェクトの記述順に従っている。例えばバンド４１のディスプレイリストでのブロック記述順は、中間コードブロックＬ１０、Ｌ１１、Ｌ１２、Ｌ２１となっている。
【００３０】
バンド数が多いほど、所要メモリ容量を低減することができるが、トータル処理時間が増加するので、ＲＡＭ１３の容量に応じてバンド数が決定され、この値は例えば３６である。また、メモリ管理を容易にするために、１ブロックの最大記憶容量が決定され、この容量の各ブロックＬｉｊに、できるだけ多くの中間コードが詰め込まれる。
【００３１】
図２は、ヒープメモリ１３２に格納されるディスプレイリストのデータ構造を示している。このデータ構造は、リスト構造である。
【００３２】
Ｌバンド配列１３２０は、その要素数がバンド数に等しく、要素ｉ（ｉは０〜ｎのいずれか）はディスプレイリストＬｉのポインタである。各ディスプレイリストＬｉのブロック数は一定ではない。図１では簡単化のために、各ディスプレイリストＬｉのブロック数が３である場合を示している。ブロックＬｉｊの中間コードは、イメージデータの場合、イメージデータ格納先を示すポインタとデータのバイト数とを含むコードであり、イメージデータ自体はブロックＬｉｊ内に含まれない。
【００３３】
一方、共有メモリ１３３には、ビットマップデータ領域１３３Ｂと圧縮データ領域１３３Ｃとが確保される。また、圧縮・伸長プロセッサ１４は互いに並列処理可能な圧縮部１４１と伸長部１４２とを備えている。
【００３４】
次に、ＲＩＰ１２２、圧縮・伸長プロセッサ１４及びこれらを制御する制御部１２３によるバンドｉの処理について説明する。ブロック識別変数ｊの初期値は０である。制御部１２３は、ＲＩＰ１２２を頁毎に開始制御し、制御圧縮・伸長プロセッサ１４をバンド毎に開始制御する。
【００３５】
（１）ｊ＝０の場合は、ステップ（２）へ進む。ｊ＞０の場合、伸長部１４２は、圧縮バンド領域Ｃｉに格納されている圧縮データを呼び出し、元のビットマップデータに伸長させて、サブ領域ＢＭＰｋに格納する。
【００３６】
（２）ＲＩＰ１２２は、ヒープメモリ１３２内の中間コードブロックＬｉｊをビップマップデータに変換して、サブ領域ＢＭＰｋに格納させることにより、（１）で伸長されたビットマップデータに上書きする。
【００３７】
（３）圧縮部１４１は、サブ領域ＢＭＰｋに格納されたビットマップデータを圧縮して、圧縮データ領域１３３Ｃ内の圧縮バンド領域Ｃｉに格納する。
【００３８】
（４）ＲＩＰ１２２は、ｊを１だけインクリメントし、中間コードブロックＬｉｊがヒープメモリ１３２内に存在すれば、上記ステップ（１）へ戻る。
【００３９】
圧縮部１４１と伸長部１４２とを並列に動作させることができ、かつ、圧縮・伸長プロセッサ１４での処理とディスプレイリスト作成及びラスタライズのソフトウェア処理とを並列に行うことが可能である。一方、同一バンドについて圧縮処理と伸長処理とソフトウェア処理とのうちの任意の２つを同時に行うことができない。そこで、図４に示す如く、同時に３バンドの処理を行う。そして、例えば、バンド０の伸長を行っているときにバンド１の圧縮を行うとともに、バンド２のディスプレイリスト作成とラスタライズとを直列処理する。これら圧縮、伸長及びラスタライズはいずれも、ビップマップデータを取り扱うので、図１に示す如く、ビットマップデータ領域１３３Ｂは、ＢＭＰ０〜ＢＭＰ２に分割された３バンド分の領域を有している。
【００４０】
圧縮部１４１の平均圧縮率を１／ｃ（ｃ＝圧縮後のサイズ／圧縮前のサイズ）、１頁のバンド数をｎ＋１とすると、１頁分のビットマップデータに対する圧縮データと３バンド分ビットマップ領域との合計の圧縮率は、３／（ｎ＋１）＋１／ｃとなる。例えば、ｎ＝３５、ｃ＝１０の場合、圧縮率は３／３６＋１／１０＝１１／６０となる。
【００４１】
図３は、共有メモリ１３３に格納される、ラスタライズ、圧縮及び伸張に関係したデータの構造を示す。
【００４２】
Ｃバンド配列１３３０は、その要素数がバンド数に等しく、要素ｉ（ｉは０〜ｎのいずれか）は圧縮バンド領域Ｃｉのポインタである。ブロック最大番号配列１３３１は、その要素数がバンド数に等しく、要素ｉにはバンドｉのブロック番号最大値ｊｅ（ｉ）が格納されている。Ｂバンド配列１３３２は、その要素数が３であり、要素ｋ（ｋは０〜２のいずれか）はサブ領域ＢＭＰｋのポインタである。
【００４３】
バンド・ブロック番号変数群１３３３には、変数Ｒ、Ｃ及びＤについてそれぞれ、現在の処理対象のバンド番号とブロック番号との組（ｉ，ｊ）、（ｐ，ｑ）及び（ｒ，ｓ）が格納される。変数Ｒ、Ｃ及びＤは、スレッド間でブロックの処理完了を通知して（図５のステップＳ５、図６（Ａ）のステップＳ１６及び図６（Ｂ）のステップＳ２４）、次のブロックの処理開始時点を適正にするために、すなわち、同一バンドに関し、伸張が完了してからラスタライズし、ラスタライズが完了してから圧縮し、圧縮が完了してから伸張を行うために用いられる。以下の例では、バンド・ブロック番号変数群１３３３には次の又は処理中の処理対象のバンド番号とブロック番号とが格納されるが、このデータは、１つ前の処理対象の処理完了も意味している。
【００４４】
図７は、ソフトウェアと圧縮部１４１と伸長部１４２との並列処理を示す概略タイミングチャートである。図７は、バンド０〜２のそれぞれが３ブロックのディスプレイリストを有する場合を示す。図８は、バンドＢＮＤ０〜ＢＮＤ２毎に図７の処理を再配列したものを示している。
【００４５】
Ｌｉｊ、Ｒｉｊ、Ｃｉｊ及びＤｉｊはそれぞれ、バンドｉ及びブロックｊに関するディスプレイリスト作成、ラスタライズ、圧縮及び伸長の処理を示す。
【００４６】
図１及び図７において、制御部１２３のソフトウェア構成を簡単にするために、圧縮部１４１及び伸長部１４２に対する処理開始制御はそれぞれ、制御部１２３でのスレッドＴｈ１及びＴｈ２で行われる。インタープリタ１２１及びＲＩＰ１２２の処理は、スレッドＴｈ０での処理である。すなわち、３スレッドによる並列処理が行われる。
【００４７】
スレッドＴｈ０は、制御部１２３により生成されて開始される。スレッドＴｈ０において、中間コードブロックＬ００の作成処理が行われ、次いでラスタライズＲ００の処理が行われ、ラスタライズＲ００が完了すると、スレッドＴｈ０によりスレッドＴｈ１が生成されて開始される。スレッドＴｈ１により、圧縮部１４１を介して圧縮Ｃ００の処理が行われ、圧縮Ｃ００の処理が完了すると、スレッドＴｈ１により、Ｔｈ２が生成されて開始される。スレッドＴｈ１及びＴｈ２によりそれぞれ、圧縮部１４１及び伸長部１４２を介して圧縮Ｃ１０及び伸長Ｄ００の処理が行われる。
【００４８】
一般に、スレッドＴｈ０では、中間コードブロックＬｉｊの作成及びラスタライズＲｉｊの処理がバンド順次ブロック順次に行われ、通常、圧縮Ｃｉｊを開始する時点では、ラスタライズＲｉｊの処理が完了している。ここにバンド順次ブロック順次とは、ブロックｊ及びバンドｉ０の初期値を共に０とし、バンドｉ及びブロックｊを次のように変化させることを意味する。
【００４９】
（ａ）ブロックｊを一定にしてバンドｉをｉ０、ｉ０＋１、ｉ０＋２と順次変化させ、
（ｂ）ｊがブロック番号最大値ｊｅ（ｉ）より小さければブロックｊを１だけインクリメントさせて、（ａ）へ戻り、そうでなければ（ｄ）へ進む。
【００５０】
（ｄ）ｉ０＋２がバンド番号最大値ｎより小さければｊ＝０とし且つｉ０を３だけインクリメントさせて、（ａ）へ戻る。
【００５１】
スレッドＴｈ１では、１ブロックに対する圧縮部１４１の処理完了通知に応答してバンド順次ブロック順次になるようにバンドｐ及びブロックｑが更新され、対応するラスタライズＲｐｑの処理が完了していることを条件に、圧縮部１４１に対し圧縮Ｃｐｑの処理を開始させる。試験例では、図７に示すように、圧縮Ｃｐｑを間断なく連続的に行うことができた。
【００５２】
スレッドＴｈ２では、１ブロックに対する伸長部１４２の完了通知に応答してバンド順次ブロック順次になるようにバンドｒ及びブロックｓが更新され、伸長部１４２に対し伸長Ｄｒｓの処理を開始させる。ただし、各バンドｒについて、最後のブロックｊｅ（ｒ）に関しては、伸長Ｄｒｓの処理を開始させない。
【００５３】
図５は、スレッドＴｈ０の処理を示すフローチャートである。ｉ０の初期値は０である。以下、カッコ内は図中のステップ識別符号を示す。
【００５４】
（Ｓ０）ブロック最大番号配列１３３１の要素ｉに格納されている値ｊｅ（ｉ）を読み出し、ステップＳ１〜ＳＡの処理を、ブロックｊが０からｊｅ（ｉ）までについて順次繰り返す。
【００５５】
（Ｓ１）ｉ＝ｉ０からｉ０＋２までについて順次、ステップＳ２からＳ９までの処理を繰り返す。
【００５６】
（Ｓ２）ヒープメモリ１３２内に中間コードブロックＬｉｊを作成する。
【００５７】
（Ｓ３、Ｓ４）ｊ＝０であれば、サブ領域ＢＭＰｋをゼロクリアする。ここにｋはｉ＝ｉ０＋ｋを満たす値である。
【００５８】
（Ｓ５）バンド・ブロック番号変数群１３３３の変数Ｄの内容ｒｓを見て伸張Ｄｉ（ｊ−１）の処理が完了しているか否か（ただし、ｊ＝０の場合には伸張Ｄ（ｉ−１）ｊの処理が完了しているか否か）を判定し、すなわち、ｒ＝ｉ且つｓ＝ｊであるか否かを判定し、肯定判定した場合にはステップＳ６へ進む。
【００５９】
（Ｓ６）ヒープメモリ１３２からこの中間コードブロックＬｉｊを読出し、ラスタライズしてビットマップデータ領域１３３Ｂのサブ領域ＢＭＰｋに上書きする。
【００６０】
（Ｓ７、Ｓ８）ｉ０＝０かつｊ＝０であれば、スレッドＴｈ１を生成し開始させる。
【００６１】
（Ｓ９）バンド・ブロック番号変数群１３３３の変数Ｒの内容（ｉ，ｊ）を上記のように更新する。すなわち、（ｉ，ｊ）をバンド順次ブロック順次の次の値にする。
【００６２】
（ＳＣ）ｉ０を３だけインクリメントする。
【００６３】
（ＳＤ）ｉ０＞ｎであれば処理を終了し、そうでなければステップＳ０へ戻る。
【００６４】
図６（Ａ）は、スレッドＴｈ１での処理を示すフローチャートである。
【００６５】
（Ｓ１０）バンド・ブロック番号変数群１３３３の変数Ｃの内容（ｐ，ｑ）を読み出し、圧縮部１４１に対し圧縮Ｃｐｑの処理を開始させる。この際、圧縮部１４１には、圧縮データ格納先先頭アドレスとしてＣバンド配列１３３０の要素ｉの内容と、圧縮対象データ先頭アドレスとしてＢバンド配列１３３２の要素ｋの内容が供給される。ここにｋは、ｐを３で割ったときの剰余である。
【００６６】
（Ｓ１１）圧縮部１４１の処理完了イベント発生を待つ。このイベント発生により、ウエイト状態が解除されてステップＳ１２へ進む。ウエイト状態解除前は、ＯＳにより直ぐに次のスレッドに切り替えられるので、図５の処理遅延が防止される。
【００６７】
（Ｓ１２、Ｓ１３）ｐ＝０かつｑ＝０であれば、スレッドＴｈ２を生成し開始させる。
【００６８】
（Ｓ１４）ｐ＝ｎであり、かつ、ｑ＝ｊｅ（ｎ）であれば処理を終了し、そうでなければステップＳ１５へ進む。
【００６９】
（Ｓ１５）バンド・ブロック番号変数群１３３３の変数Ｃの内容（ｐ，ｑ）を上記のように更新する。
【００７０】
（Ｓ１６）バンド・ブロック番号変数群１３３３の変数Ｒの内容ｉｊを見てＲｐｑの処理が完了しているか否かを判定し、すなわち、０≦ｑ≦ｊｅ（ｐ）−１のときはｉ＝ｐ且つｊ＝ｑ＋１であるか否かを判定しｑ＝ｊｅ（ｐ）のときはｉ＝ｐ＋１且つｊ＝０であるか否かを判定し、肯定判定した場合にはステップＳ１０へ戻る。
【００７１】
図６（Ｂ）は、スレッドＴｈ３での処理を示すフローチャートである。
【００７２】
（Ｓ２０）バンド・ブロック番号変数群１３３３の変数Ｄの内容（ｒ，ｓ）を読み出し、伸長部１４２に対し伸張Ｄｐｑの処理を開始させる。この際、伸長部１４２には、伸張対象先頭アドレスとしてＣバンド配列１３３０の要素ｉの内容と、伸張データ格納先先頭アドレスとしてＢバンド配列１３３２の要素ｋの内容が供給される。ここにｋは、ｒを３で割ったときの剰余である。
【００７３】
（Ｓ２１）伸長部１４２の処理完了イベント発生を待つ。このイベント発生により、ウエイト状態が解除されてステップＳ２２へ進む。ウエイト状態解除前は、ＯＳにより直ぐに次のスレッドに切り替えられる。
【００７４】
（Ｓ２２）ｒ＝ｎであり、かつ、ｓ＝ｊｅ（ｎ）−１であれば処理を終了し、そうでなければステップＳ２３へ進む。
【００７５】
（Ｓ２３）バンド・ブロック番号変数群１３３３の変数Ｄの内容（ｒ，ｓ）を上記のように更新する。
【００７６】
（Ｓ２４）バンド・ブロック番号変数群１３３３の変数Ｃの内容ｐｑを見てＣｒｓの処理が完了しているか否かを判定し、すなわち、０≦ｓ≦ｊｅ（ｒ）−１のときはｐ＝ｒ且つｑ＝ｓ＋１であるか否かを判定しｓ＝ｊｅ（ｒ）のときはｐ＝ｒ＋１且つｑ＝０であるか否かを判定し、肯定判定した場合にはステップＳ２０へ戻る。
【００７７】
以上のような処理により、１頁分の圧縮データ（ページデータ）が圧縮データ領域１３３Ｃ上に生成される。制御部１２３はこれに応答して、上記３スレッドとは別の、制御部１２３に含まれるスレッドＴｈＰを生成し開始させる。
【００７８】
スレッドＴｈＰでは、エンジンコントローラ１７のデータ入力がレディ状態であることを確認して、このページデータをバンド順次に、伸長部１４３を介し、伸長させエンジンコントローラ１７へ転送させる。この際、バンドｉに関しては、伸長部１４３に、伸長対象データ先頭アドレスとしてＣバンド配列１３３０の要素ｉの内容と、転送先アドレスとしてエンジンコントローラ１７のアドレスとが供給される。
【００７９】
エンジンコントローラ１７は、転送されたビットマップデータを受け取ってそのバッファメモリに格納した後、直列データに変換しさらにビデオ信号に変換してプリントエンジン２１へ供給する。プリントエンジン２１は、この信号とエンジンコントローラ１７からの制御信号とに基づき、感光ドラムに静電潜像を形成させ、これにトナーを付着させて現像し、そのトナー像を用紙に転写させ、加熱及び加圧によりトナー像を用紙に定着させる。一方、ＣＰＵ１１は、プログラムに従って、搬送コントローラ１８を介し用紙搬送装置２２に対し用紙をプリントエンジン２１へ搬送させ、印刷された用紙を搬送させてトレイ上に排紙させる。
【００８０】
図９は、圧縮されたページデータの伸長・転送処理と他の処理とを示す概略タイムチャートである。
【００８１】
このような処理により、スレッドＴｈ０〜Ｔｈ２による２頁目の各バンドの伸長・ラスタライズ・圧縮処理と、スレッドＴｈＰによる１頁目のページデータ伸長・転送処理とが並列に実行され、３頁目についても同様である。
【００８２】
本実施例１によれば、ビットマップデータ領域１３３Ｂが３バンド分で足りるので、必要なメモリ容量の増大を抑制することができ、また、３バンド分が伸長、ラスタライズ及び圧縮に関し互いにずれて並列処理されるので、圧縮及び伸長のそれぞれを殆ど連続的に行うことができ、印刷データを高速にビットマップ展開することができるという効果を奏する。さらに、伸長、ラスタライズ及び圧縮のそれぞれが異なるタスクで並列処理されるので、比較的簡単に圧縮及び伸長のそれぞれを殆ど連続的に行うことができるという効果を奏する。
【００８３】
また、圧縮１チャンネル伸長２チャンネルのハードウェア圧縮伸長プロセッサ１４を用いるとともに、圧縮・伸長プロセッサ１４に対する伸長及び圧縮の開始制御を上記のようなスレッドＴｈ１、Ｔｈ２及びＴｈＰで実行しているので、これらの処理のＣＰＵ負荷が比較的小さい。このため、これらスレッドによるスレッドＴｈ０の処理遅延が比較的小さく、また、並列処理により、全体として効率よく高速処理することが可能となる。さらに、多スレッド化によりプログラム構造が簡単化されるので、開発期間を短縮して製造コストを削減することが可能となる。
【００８４】
なお、伸長部１４３をエンジンコントローラ１７に備えてエンジンコントローラ１７側で伸長させることにより、ページデータ転送効率を高めてもよい。
【実施例２】
【００８５】
上記実施例１では、ディスプレイリスト作成とラスタライズの処理を直列に行っていたが、両者を別スレッドにして並列処理することも可能であり、これを本発明の実施例２として以下に説明する。
【００８６】
図１２に示すように、ディスプレイリストのみの処理を行うスレッドＴｈ３を、スレッドＴｈ０よりも前に生成して開始させ、バンド順次ブロック順次に（ｉ，ｊ）を更新して中間コードブロックＬｉｊの作成処理を行う。
【００８７】
図１１は、この場合のスレッドＴｈ０での処理を示すフローチャートである。図５の処理と異なるのは、ステップＳ２及びＳ５の替わりにステップＳ３ａにおいて、伸張Ｄｉ（ｊ−１）のみならず中間コードブロックＬｉｊの作成完了も待つ点である。中間コードブロックＬｉｊの作成完了を通知するために、１３３３に変数Ｌを追加し、スレッドＴｈ３で１ブロックの中間コード作成処理を完了する毎に、バンド番号及びブロック番号を更新する。
【００８８】
図１３は、バンドＢＮＤ０〜ＢＮ２毎に図１２の処理を再配列したものを示す図である。
【００８９】
他の点は、実施例１と同じである。
【００９０】
本実施例２によれば、ディスプレイリスト作成とラスタライズとが並列処理させるので、それぞれの処理が簡単になり、また、ラスタライズの休止期間に対するラスタライズ実行時間が比較的小さいので、時分割並列処理におけるディスプレイリスト作成とラスタライズとの間の切り替えのオーバヘッドが比較的小さくなり、全体として効果的である。
【実施例３】
【００９１】
上記実施例１及び２では、伸長開始制御とラスタライズと圧縮開始制御とをそれぞれ異なるスレッドで実行するとともに、各スレッドで３バンド分をバンド順次に処理する場合を説明したが、各スレッドで１バンド分の伸長開始制御とラスタライズと圧縮開始制御とを実行することもできる。この場合、３スレッドのそれぞれは、変数領域のみ互いに異なる同一関数を用いることができる。
【００９２】
圧縮及び伸長のそれぞれについては同時に１バンド分しか処理できないので、スレッド間で同期を取る必要がある。このため、図１５に示す如く、サブ領域ＢＭＰｋ、ｋ＝０〜２のそれぞれについて、圧縮完了フラグＦｃ（ｋ）及び伸長完了フラグＦｄ（ｋ）を、共有メモリ１３３内に備える。共有メモリ１３３内にはまた、図３のバンド・ブロック番号変数群１３３３の替わりに、中間コードブロックの作成がどこまで完了しているかを示すバンド・ブロック番号変数１３３３ａが備えられている。図１５の他の点は図３と同一である。
【００９３】
図１６は、スレッドＴｈ０Ａ、Ｔｈ１Ａ、Ｔｈ２Ａ及びＴｈ３と、圧縮部１４１及び伸長部１４２の処理との概略タイミングチャートである。図１６では複雑化を避けるため、圧縮及び伸長とスレッドとの間の関係を示す点線はスレッドＴｈ０Ａについてのみ記載している。
【００９４】
スレッドＴｈ３は図１２のそれと同じであり、スレッドＴｈ０Ａ〜Ｔｈ２Ａと並列に処理される。スレッドＴｈ０Ａ、Ｔｈ１Ａ及びＴｈ２Ａはそれぞれ、スレッドＴｈ３で中間コードブロックＬ００、Ｌ１０及びＬ２０の作成が完了したタイミングで生成され開始される。この生成及び開始は、スレッドＴｈ３で行っても、不図示の別スレッドで行ってもよい。
【００９５】
図１２では、圧縮Ｃｉｊ及び伸長Ｄｉｊの２番目のインデックスｊはブロック番号を表していたが、図１６での対応する２番目のインデックスはサブ領域ＢＭＰｋのｋを示している。そこで、図１４ではこれらをＣｉｋ及びＤｉｋと表している。すなわち、圧縮Ｃｉｋは、サブ領域ＢＭＰｋのビットマップデータを圧縮してバンドｉの圧縮データ領域に格納することを意味し、伸長Ｄｉｋは、バンドｉの圧縮データ領域に格納されているデータを伸長してサブ領域ＢＭＰｋに格納することを意味する。
【００９６】
図１４は、スレッドＴｈ０Ａ〜Ｔｈ２Ａのうちの任意のスレッドＴｈｋで実行される処理を示すフローチャートである。
【００９７】
（Ｓ３０）バンド識別変数ｉにｋを代入し、このバンドのブロック識別変数ｊに初期値０を代入する。
【００９８】
（Ｓ３１）サブ領域ＢＭＰｋをゼロクリアする。
【００９９】
（Ｓ３２）中間コードブロックＬｉｊの作成が完了していれば、ステップＳ３３へ進む。
【０１００】
（Ｓ３３）ラスタライズＲｉｊの処理を行う。
【０１０１】
（Ｓ３４）圧縮Ｃｉ（ｋ−１）が完了するのを待つ。すなわち、スレッドＴｈ（ｋ−１）Ａで開始制御された圧縮部１４１の処理完了イベントが発生すると、そのイベントハンドラにおいて、図１５の圧縮完了フラグＦｃ（ｋ−１）の値が１であれば、この値を０にしてステップＳ３５へ進み、そうでなければこのイベントハンドラを抜け、ＯＳにより次のスレッドに切り替えられる。ただし、Ｃｉ（ｋ−１）及びＦｃ（ｋ−１）において、ｋ＝０の場合にはｋ＝３とみなす。圧縮部１４１の処理完了イベントが発生していないウエイト状態解除前は、ＯＳにより直ぐに次のスレッドに切り替えられるので、図１４の処理遅延が防止される。この点は、他のウエイト状態についても同様である。
【０１０２】
（Ｓ３５）圧縮部１４１に対し圧縮Ｃｉｋの処理を開始させる。この際、圧縮部１４１には、圧縮データ格納先先頭アドレスとしてＣバンド配列１３３０の要素ｉの内容と、圧縮対象データ先頭アドレスとしてＢバンド配列１３３２の要素ｋの内容とが供給される。
【０１０３】
（Ｓ３６）ステップＳ３５で開始制御された圧縮部１４１の処理完了イベントが発生すると、そのイベントハンドラにおいて、図１５の圧縮完了フラグＦｃ（ｋ）の値を１にして、ステップＳ３７へ進む。
【０１０４】
（Ｓ３７）（ｉ，ｊ）を実施例１で述べたようにバンド順次ブロック順次の次の値にする。
【０１０５】
（Ｓ３８）ｊ＝ｊｅ（ｉ）であればステップＳ３Ｃへ進み、そうでなければステップＳ３９へ進む。
【０１０６】
（Ｓ３９）伸長Ｄｉ（ｋ−１）が完了するのを待つ。すなわち、図１５の伸長完了フラグＦｄ（ｋ−１）の値が１であれば、この値を０にしてステップＳ３Ａへ進む。ただし、Ｄｉ（ｋ−１）及びＦｄ（ｋ−１）において、ｋ＝０の場合にはｋ＝３とみなす。
【０１０７】
（Ｓ３Ａ）伸長部１４２に対し伸張Ｄｉｋの処理を開始させる。この際、伸長部１４２には、伸張対象先頭アドレスとしてＣバンド配列１３３０の要素ｉの内容と、伸張データ格納先先頭アドレスとしてＢバンド配列１３３２の要素ｋの内容が供給される。
【０１０８】
（Ｓ３Ｂ）ステップＳ３Ａで開始制御された伸長部１４２の処理完了イベントが発生すると、そのイベントハンドラにおいて、図１５の伸長完了フラグＦｄ（ｋ）の値を１にしてステップＳ３２へ進む。
【０１０９】
（Ｓ３Ｃ）ｉを３だけインクリメントし、また、ｊを０に初期化する。
【０１１０】
（Ｓ３Ｄ）ｉ＞ｎであれば処理を終了し、そうでなければステップＳ３１へ戻る。
【０１１１】
他の点は、実施例１と同じである。
【０１１２】
本実施例３によれば、３バンド分について圧縮及び伸長のそれぞれをほぼ連続的に行うことができるので、印刷データを高速にビットマップ展開することができる。
【０１１３】
また、１つのバンドについて伸長、ラスタライズ及び圧縮の一連の処理が１つのスレッド内でシーケンシャルに行われるので、その同期をスレッド間で取る必要がない。
【０１１４】
また、スレッドＴｈ０Ａ〜Ｔｈ２Ａで共通の関数を用いることができるので、実施例１及び２の場合よりもメモリ使用量を削減することができる。
【０１１５】
さらに、ディスプレイリスト作成がスレッドＴｈ０Ａ〜Ｔｈ２Ａと異なるスレッドで実行されるので、スレッドＴｈ０Ａ〜Ｔｈ２Ａの各々でディスプレイリストを作成する場合よりもオーバヘッドが少なくなり、処理効率がよい。
【０１１６】
同様に、スレッドＴｈ０Ａ〜Ｔｈ２Ａの各々でページデータ伸長・転送制御する場合よりも別スレッドＴｈＰでページデータ伸長・転送制御した方が、オーバヘッドが少なくなり、処理効率がよい。
【０１１７】
なお、本発明には外にも種々の変形例が含まれる。
【０１１８】
例えば、バンド・ブロック番号変数群１３３３のデータ更新は、ラスタライズ等の処理開始前であってもよいことは勿論である。
【０１１９】
また、上記実施例では、２つのビットマップデータの合成が、一方のビットマップデータに対する他方のビットマップデータの上書きである場合を説明したが、ビットマップデータ間の論理演算を行うことによる合成であってもよい。
【０１２０】
さらに、マルチタスクとして、マルチスレッドの替わりにマルチプロセスを用いてもよい。
【０１２１】
さらにまた、ＣＰＵ１１としてダブルコアＣＰＵを用い、一方のコアと圧縮・伸張プログラムとの組を圧縮・伸長プロセッサとして用いる構成であってもよい。この場合、圧縮処理と伸張処理とをマルチタスク処理する。
【図面の簡単な説明】
【０１２２】
【図１】本発明の実施例に係る、ホストコンピュータから受信した印刷データをビットマップ展開する部分の機能ブロック図である。
【図２】ディスプレイリストのデータ構造説明図である。
【図３】ラスタライズ、圧縮及び伸張に関係したデータ構造説明図である。
【図４】バンド処理順説明図である。
【図５】スレッドＴｈ０で行われるディスプレイリスト作成及びラスタライズの処理を示すフローチャートである。
【図６】（Ａ）はスレッドＴｈ１で行われる圧縮処理のフローチャートであり、（Ｂ）はスレッドＴｈ２で行われる伸張処理のフローチャートである。
【図７】図５、図６（Ａ）及び図６（Ｂ）での処理結果の一部を示す概略タイミングチャートである。
【図８】バンドＢＮＤ０〜ＢＮ２毎に図７の処理を再配列したものを示す図である。
【図９】圧縮されたページデータの伸長・転送処理と他の処理とを示す概略タイムチャートである。
【図１０】（Ａ）〜（Ｃ）は、ディスプレイリスト概略説明図である。
【図１１】本発明の実施例２に係るディスプレイリスト作成及びラスタライズの処理を示すフローチャートである。
【図１２】実施例２での処理結果の一部を示す概略タイミングチャートである。
【図１３】バンドＢＮＤ０〜ＢＮ２毎に図１２の処理を再配列したものを示す図である。
【図１４】本発明の実施例３に係るスレッドＴｈ０Ａ〜Ｔｈ２Ａの任意の１つで実行される処理を示すフローチャートである。
【図１５】本発明の実施例３に係るラスタライズ、圧縮及び伸張に関係したデータ構造説明図である。
【図１６】実施例３での処理結果の一部を示す概略タイミングチャートである。
【図１７】本発明の実施例に係る画像形成装置のハードウェア構成を示す概略ブロック図である。
【符号の説明】
【０１２３】
１０  画像形成装置
１１  ＣＰＵ
１２  ＥＥＰＲＯＭ
１２１  インタープリタ
１２２  ＲＩＰ
１２３  制御部
１３  ＲＡＭ
１３１  バッファメモリ
１３２  ヒープメモリ
１３３  共有メモリ
１３３Ｃ  圧縮データ領域
１３３Ｂ  ビットマップデータ領域
１３２０  Ｌバンド配列
１３３０  Ｃバンド配列
１３３１  ブロック最大番号配列
１３３２  Ｂバンド配列
１３３３  バンド・ブロック番号変数群
１４  圧縮・伸長プロセッサ
１４１  圧縮部
１４２、１４３  伸長部
１５  通信インターフェイス
１６  パネルインターフェイス
１７  エンジンコントローラ
１８  搬送コントローラ
１９  バス
２０  操作パネル
２１  プリントエンジン
２２  用紙搬送装置
３０  印刷データ
３１〜３４  図形オブジェクト
４０〜４３  バンド
Ｔｈ０〜Ｔｈ３、Ｔｈ０Ａ、Ｔｈ１Ａ、Ｔｈ２Ａ、ＴｈＰ  スレッド
Ｌ０〜Ｌｎ  ディスプレイリスト
Ｌｉｊ  中間コードブロック
Ｒｉｊ  ラスタライズ
Ｃｐｑ  圧縮
Ｄｒｓ  伸長
ＢＮＤ０〜ＢＮＤ２  バンド
ＢＭＰ０〜ＢＭＰ２  サブ領域
【図１】
2008290376.tif 000003
【図２】
2008290376.tif 000004
【図３】
2008290376.tif 000005
【図４】
2008290376.tif 000006
【図５】
2008290376.tif 000007
【図６】
2008290376.tif 000008
【図７】
2008290376.tif 000009
【図８】
2008290376.tif 000010
【図９】
2008290376.tif 000011
【図１０】
2008290376.tif 000012
【図１１】
2008290376.tif 000013
【図１２】
2008290376.tif 000014
【図１３】
2008290376.tif 000015
【図１４】
2008290376.tif 000016
【図１５】
2008290376.tif 000017
【図１６】
2008290376.tif 000018
【図１７】
2008290376.tif 000019