(57)【要約】【課題】  描画効率を向上すること。結果としてデグレード処理を回避する可能性が高くなり、高画質な印字を維持すること。【解決手段】  ページ単位及びバンド単位の印刷データをオブジェクトに分解し、前記各オブジェクトに対するオブジェクトを展開する場合の描画方法、メモリ上に格納されているオブジェクトの先頭アドレス、サイズ、またはバンド内の位置を含む情報をリスト化し、前記リストに、さらに次のリストの格納される先頭アドレス情報を付加することにより線形リスト構造として保持し、前記線形リスト構造であるアプリケーション・リストを順次取得して、各オブジェクトを展開することを特徴とする。【選択図】  図７
2006095957.tif 000002
【特許請求の範囲】
【請求項１】
1ページを幾つかのバンドに分割して印刷するバンディング処理手段と、
ページ単位及びバンド単位の印刷データをオブジェクトに分解する手段と、
前記各オブジェクトに対するオブジェクトを展開する場合の描画方法、メモリ上に格納されているオブジェクトの先頭アドレス、サイズ、またはバンド内の位置を含む情報をリスト化する手段と、
前記リストに、さらに次のリストの格納される先頭アドレス情報を付加することにより線形リスト構造として保持する保持手段と、
前記線形リスト構造であるアプリケーション・リストを順次取得して、各オブジェクトを展開する手段とを有することを特徴とする印刷装置。
【請求項２】
前記バンド単位でオブジェクトを展開した印刷データを印字部へ転送する手段と、
前記転送部が、すでに印字部へ転送したライン数を保持する手段と、
現在転送中のバンドに対して、新たなオブジェクトを展開する場合に、前記その時点でのライン数と新たに展開しようとしているオブジェクトの縦サイズを比較して、描画可能かどうかを判定する第１判定手段と、
前記第１判定手段により、描画不可能と判定された場合に、そのオブジェクトの先頭アドレス及び縦サイズを保持する手段とを有し、
前記第１判定手段により、描画可能オブジェクトが見つかるまで判定処理を繰り返し、見つかったオブジェクトから展開し、また、それまでの描画不可能なオブジェクトの先頭アドレス及び縦サイズは、全て保持されることを特徴とする請求項１記載の印刷装置。
【請求項３】
前記描画不能と判定され保持されたオブジェクトの縦サイズと新たに更新されたライン数とを比較して、描画可能かどうかを判定する第２判定手段を有し、前記保持された描画不可能なオブジェクトが全て描画可能となるまで判定処理を繰り返し、最終的に全てのオブジェクトが展開されることを特徴とする請求項１に記載の印刷装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタ、FAX、コピー機などの印刷装置の分野に利用可能で、特に1ページを複数のバンドに分割して印刷するバンディング処理における印刷データの描画(展開)方法に関するものである。
【背景技術】
【０００２】
ホストより入力された１ページ分の印刷データを、複数のバンドに分割して、さらにバンド単位でCPUによって任意サイズの小領域単位に分解・圧縮されてオブジェクトと言う中間データ形式に変換した形で元データを保持し、各オブジェクトを展開する情報を線形リスト構造にして、印刷時にバンド単位で、前記線形リスト化された各オブジェクトの情報を追跡することにより、逐次展開して印刷するバンディング処理方式において、例えば2バンドを用いて、一方のバンドの印刷データを印字部へ転送している間に、もう片方のバンドに印刷データを展開する場合に、描画回路が展開中のバンドの処理を完了すると、現在転送中のバンドの転送処理が全て完了するまで待たされるか、現在転送中のバンドに新たなオブジェクトを描画しようとしても、先頭のオブジェクトの縦サイズがそのバンドにおけるすでに転送完了したライン数よりも大きければ描画することができない。最悪先頭オブジェクトの縦サイズがバンド高さと同じぐらいであると、やはり前記と同様に転送が完全に終了しなければ、そのバンドに描画することができず、その間描画回路は待たされることになり、描画効率が落ちる不具合があった。その場合、次のバンドの展開処理が重い（すなわち、展開時間が大きい）場合、転送速度に展開速度が追いつかずオーバーランを起こす可能性が高くなるか、このオーバーランの可能性を事前に計算するシステムにおいては、画質を落として予め１ページ分の展開を終了してから印刷する、デグレード処理に入る可能性が高くなる欠点があった。
【特許文献１】特開平09-030060号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明では、上記の問題点を改善するために、転送中のバンドに描画回路が待ち時間なしで、展開処理を開始できるように前記展開するオブジェクトの線形リストのチェーンを繋ぎかえて行く事により、現在すでに転送完了しているライン数より小さなオブジェクトを探し出し、展開可能なオブジェクトから先に逐次描画する方法を提案する。
【課題を解決するための手段】
【０００４】
上記課題を解決するために本発明の印刷装置は、1ページを幾つかのバンドに分割して印刷するバンディング処理手段と、ページ単位及びバンド単位の印刷データをオブジェクトに分解する手段と、前記各オブジェクトに対するオブジェクトを展開する場合の描画方法、メモリ上に格納されているオブジェクトの先頭アドレス、サイズ、またはバンド内の位置を含む情報をリスト化する手段と、前記リストに、さらに次のリストの格納される先頭アドレス情報を付加することにより線形リスト構造として保持する保持手段と、前記線形リスト構造であるアプリケーション・リストを順次取得して、各オブジェクトを展開する手段とを有することを特徴とする。
【発明の効果】
【０００５】
本発明により、描画効率が向上する。結果としてデグレード処理を回避する可能性が高くなり、高画質な印字を維持することができる効果がある。
【発明を実施するための最良の形態】
【０００６】
以下、図を参照して本発明の実施例を説明する。
【０００７】
図１は、本発明のシステム構成を示すものである。101はホストより印字データを取り込む入力部である。102は演算処理を行うCPU（中央処理演算子）である。103は、CPUのプログラム及びフォントデータ等を格納するROM(リード・オンリーメモリ)である。104は前記入力部より取り込まれた印字データの保存やCPUのワーク領域、ビットマップデータの描画領域として使われるRAM1（ランダムアクセスメモリ）である。106はホストからの印字データをもとにCPUがRAM上に作成したオブジェクトデータ(詳細は後述)を読み出して、展開処理及び各種描画処理を施して、印刷データであるビットマップデータを前記RAM上に作成する描画部である。112は各種制御バス1及びデータバス1を表している。105は前記112のバスに接続される全てのブロックのRAM1及びROMへのアクセスの調停及び読み込み、書き込みを制御しているメモリ制御部1である。109は通常ビットマップデータの描画領域専用として使用されるRAM2である。108はRAM1及びRAM2に描画された印刷データを、最終的な紙に印刷する111の印字部へ転送する転送部である。113は各種制御バス2及びデータバス2を表している。110は前記113のバスに接続される全てのブロックのRAM2へのアクセスの調停及び読み込み、書き込みを制御しているメモリ制御部2である。
【０００８】
本発明は、描画部がRAM1上に生成されたオブジェクトデータからRAM２上に印刷データであるビットマップデータを作成する方法に関係する。まず、本発明が想定している描画システムについて図２及び図３を用いて説明する。ホストより入力された１ページ分の印刷データは、CPUによって任意サイズの領域単位に分解・圧縮されてオブジェクトと言う中間データ形式に変換されRAM1上に保持される。印刷時には、これらのオブジェクトデータを描画部が逐次読み出して、RAM2上に描画演算等の処理を施して部分的なビットマップデータを描画して行く。ここで、RAM２上に展開された部分的なビットマップデータもひとつのオブジェクトである。RAM２上に展開される各オブジェクトは、中間データである複数のオブジェクトから生成れる場合もある。1ページをバンド単位でオブジェクトに分解することによって、バンディング処理を行う省メモリシステムを構築することが可能となる。図２はあるバンドの生成されるオブジェクトの主な情報を示している。生成される各オブジェクトの開始アドレスは、バンドの先頭アドレスからバンド内のライン位置及び水平方向のオフセット値から求められ、そのオブジェクトのサイズ(幅、高さ)分を描画回路が展開する。図３は、オブジェクトを生成するためのRAM1内に保持されるデータ構造のフォーマットを示したものである。図３の上から、バンド単位でのオブジェクト情報は、バンドヘッダとアプリケーション・リストから成る。2つ目の示されるように、バンドヘッダは、バンド開始アドレスとバンド幅から構成される。３つ目に示されるように、アプリケーション・リストは幾つかのコマンドとオブジェクトID及び前記図２で説明したオブジェクトの基本的な情報が記載されている。最後に次のオブジェクトに対するアプリケーション・リストのポインタ（先頭アドレス）が基本セットとして必ず記載されている。それ以後の情報は拡張データとして、コマンドの種類に対応するさらに詳細な情報が記載されている。（例えば、そのオブジェクトの圧縮方法や描画論理、バックグラウンド情報など）すなわち、アプリケーション・リストは、線形リスト構造でRAM１上の任意の場所に保持される。
【０００９】
図４は、RAM１内のアプリケーション・リスト及びオブジェクトテーブル、オブジェクトボディ(オブジェクトの実体)の関係を示した図である。401はアプリケーション・リストであり、任意のバンドのオブジェクト情報では、バンドヘッダに続いて前記図３で説明した情報が線形リスト構造で格納されている。アプリケーション・リストのオブジェクトIDから402のオブジェクトテーブルに格納されるオブジェクト・ポインタを取得して、そのポインタを元に403のオブジェクト・ボディ(実体)までたどり着き、コマンドの処理内容に基づいて展開を行う。オブジェクトテーブル及びオブジェクトボディもRAM1内に格納されている。
【００１０】
実際の印字部へのビットマップデータの転送(以下シッピングと呼ぶ)・印刷処理は、例えば２バンドを用いて、片方のバンドがシッピング中に、もう片方のバンドにオブジェクトを展開してビットマップデータを生成する。ここで重要なことは、オブジェクトへの展開時間がシッピング時間に対してオーバーランしないことである。一般的にレーザービームプリンタは、1ページの印刷処理に入ったら途中で止めることはできない。従って、1ページ分のバンド展開時間を計算して、オーバーランする可能性が高い場合には、画質の品質を落として（デグレード処理と呼ぶことにする。例えば、諧調処理を４ビット処理から２ビット処理切り替える等）、予め1ページ分のオブジェクトを展開した後に印刷を開始する。オブジェクトの中には、一端RAM2上に描画したデータを何度も読み出して、複数回の描画演算処理を施して最終的なオブジェクトが展開される、展開時間が非常に重い性質のオブジェクトも存在する。このようなオブジェクトが多数存在する場合には前記デグレード処理に入る可能性が高くなり、印字品質が劣化する。
【００１１】
このデグレード処理をなるべく回避する方法のひとつとして、効率的に描画回路を働かせることである。すなわち、描画回路を極力待機状態にしないことである。
【００１２】
図５は、２個のバンドを用いたバンディング処理例である。図のバンド１は現在シッピング中のバンド、バンド２はすでに描画済みのバンドである。通常、前記説明したように重いオブジェクトの展開時間も考慮して、シッピング速度に対して、描画速度は２倍以上マージンを持たせる場合が多い。従って、図５に示すような状態で、描画バンド（この場合バンド２）の処理が軽ければ、描画回路はかなりの時間をバンド１のシッピングが完了するのを待っていることになる。当然ながら、次の最初のオブジェクトの先読みは行なって、処理準備はある程度行なうことは可能であるが、図５のバンド１に示すように次に展開すべきオブジェクトの縦サイズが、現在シッピングしているライン数より大きければ、そのオブジェクトをバンド１内に描画することはできない。図のバンド１に描かれているA〜Fまでのブロックは、次に描画回路が展開する最初の６個のオブジェクト例を示している。ここでは、先頭のAとCのオブジェクトがシッピング完了ライン数よりも縦サイズが大きく、しかもオブジェクトAは、先頭に位置するために描画回路は、すぐに展開処理に入れず、少なくともシッピング完了ライン数がオブジェクトAの縦サイズよりも大きくなるまで待機するしかない。オブジェクトAがバンド高さにほぼ等しい高さを持つ場合は、描画回路は完全にバンド１のシッピングが完了するまで動けないことになり、次のバンド１展開処理が非常に重い処理である場合は、デグレード処理を行う可能性が高くなる。そこで本発明では、前記各オブジェクトのアプリケーション・リストが線形リスト構造であることを利用して、アプリケーション・リストとアプリケーション・リスト間をつなぐポインタのチェーンをつなぎ替えていくことにより、効率的な展開処理を行なうものである。チェーンの繋ぎ替えの様子を図５の状況を想定して、図６を用いて説明する。開始点では、図５でバンド２の展開が終了して、バンド１を描画する場面で、まずシッピングの完了しているライン数をL１(図５の転送済みを示す矢印)とする所から説明する。図６の(1)では、先頭のオブジェクトAについて展開可能かどうかをオブジェクト生成可能判定部(以下、判定部と略す。)により判定した結果、描画不能と判定、(２)に進み、オブジェクトAとBのチェーンを入れ替える。その後、判定部でオブジェクトBについて判定した結果、描画可能と判定、オブジェクトBを描画開始。オブジェクトBを描画完了後に、（３）に進み、次のオブジェクトAを再び判定した結果、引き続き描画不能と判定、オブジェクトAとCのチェーンを入れ替える。その後、判定部でオブジェクトCについて判定した結果、描画不能と判定、さらにオブジェクトCとDのチェーンを入れ替える。（4）に進み、判定部によりオブジェクトDを判定した結果、描画可能と判定、オブジェクトDを描画開始。オブジェクトDを描画完了後に、(5)に進み、再びオブジェクトC及びAの順に判定するが、いづれも描画不能と判定、オブジェクトCとEを入れ替える。オブジェクトEは、描画可能と判定、オブジェクトEの描画開始。オブジェクトEを描画完了後に、(6)に進み、まずオブジェクトCを判定、この時点でやっと描画可能と判定、オブジェクトCの描画開始。オブジェクトCを描画完了後に、(7)に進みオブジェク��Aを再び判定、引き続き描画不能と判定、(7)に進み、オブジェクトAとFのチェーンを入れ替える。その後、オブジェクトFについて判定した結果、描画可能と判定、オブジェクトFを描画開始。・・・・とチェーンを入れ替えながら、描画回路を待たせることなく、描画可能のオブジェクトから逐次展開して行く。さらに、図７及び図８を用いて本発明の詳細を説明する。図８は、描画部内部のブロック図である。描画部が３つのブロックから構成される。802はアプリケーション・リスト解析部（以下、解析部と略す）である。CPUよりバンドの描画開始の起動レジスタがキックされるとリストを解析して、その結果のパラメータを必要なレジスタに設定する。803では、前記解析部が読み取ったオブジェクトの高さと805の転送部(ビデオ回路)からのライン情報から、そのオブジェクトが描画可能かどうかを判定して、その結果描画可能であれば判定OK信号（Judge信号＝'1'でOK。後述）を解析部に出力する。この場合、解析部は804のオブジェクト生成部に必要なパラメータを設定した後に、オブジェクトの展開開始を連絡する。ここで、描画不能と判定された場合（ある決められたタイミングでJudge信号が'1'に立たない場合）は、解析部は次のリストを読み出しに行く。また、この時判定部では描画不能オブジェクトのアドレスを保持する。その他、図８の801と802は前記説明したRAM1とRAM2のメモリ制御部である。図７は、本発明1バンドのオブジェクトを展開する処理の流れを示したフローチャートである。701では、CPUから描画部へ起動がかけられると解析部は逐次アプリケーション・リストを読み込み、702で解析する。703では、コマンドを解析して‘Halt’(描画終了。最後のアプリケーション・リストまでたどり着いたことを示す信号)でなければ、704に進み、判定部がそのオブジェクトのラインサイズ（高さ）と現在シッピングが完了しているライン数(正確にはライン数＋１の値)とを比較して、描画可能かどうかを判定する。判定で描画不能であれば、717に進み、ここでこのオブジェクトのアドレス及びラインサイズを保持する分けであるが、保持するための空きレジスタがあるかどうかを判定する。保持可能であれば、718に進み、現リストのアドレスとラインサイズを保持して、再び701に戻り、次のアプリケーション・リストを読み込む。保持が不可能であれば719に進み、保持レジスタのリードポインタを先頭に戻し、保持レジスタの先頭からラインサイズを読み出して、720で再び現在のシッピング完了ライン数（ラインレジスタの値）と比較する。判定が描画可能であれば721に進み、オブジェクトを生成する。オブジェクトを描画完了したら又は前記判定が描画不能であった場合は722に進み、次の保持情報があるかどうかを判定する。次が存在すればリードポインタをN→N＋１進めて、再び次のオブジェクトのラインサイズと比較する。このループ１を一回りして、一通り全ての保持情報をスキャンしたら724に進み、次にラインレジスタが更新されるまで待機する。ラインレジスタが更新されると、再び717に戻り保持可能かどうかを判定、可能であれば最後に描画不能で、尚且つ保持レジスタに保存できなかったオブジェクトの情報を保持して、701に戻る。717で前回と同様に保持レジスタに空きがなければ（すなわち、前回にラインレジスタ���との比較で保持情報のどれも描画不能であった）、再び先ほどの保持情報と更新されたラインレジスタとを比較して、描画判定を行なう。はじめの704に戻って、描画が可能であれば705に進み、オブジェクトを生成する。その後に706に進み、保持レジスタに保持情報があるかどうかを判定する。保持情報があれば708へ進み、保持レジスタのリードポインタを先頭に戻し、先頭から描画判定を行なう。ここからの動作（709−711−712−713−709）は、前記ループ１と同じ操作なので説明を省略する。（これをループ２とする）712において、このループ２を抜けて714に進んだら、この時点でHaltフラグがON（アクティブ）となっているかどうかを判定する。すなわち、703でHaltコマンドであって、且つこのループ２に入ったのかどうかの判定である。NOであれば再び701へ、YESであれば715に進み、全ての保持レジスタの処理が完了したかどうかを判定する。本発明のようにオブジェクトのチェーンを繋ぎ替えると、Haltコマンドが来てもそれで描画が終了している保証がないからである。ここで、まだ保持情報が存在すれば716でラインレジスタの更新を待つ。更新されれば再び708に戻りループ２を一回りする。この一連の流れを全ての保持情報がなくなるまで繰り返す。715で全ての保持情報が処理完了すれば描画終了となる。また、703及び705から706にたどり着いた場合、保持する情報がなければ707に進み、HaltフラグがONかどうかを判定する。Haltコマンドでなければ701に戻り、再びリストの読み込みを、ここでHaltコマンドであれば、前回と同様に描画終了となる。
【００１３】
最後に図９及び図１０を用いて、オブジェクト生成可能判定部の回路構成及び具体的な動作例について説明する。図９は、オブジェクト生成可能判定部内部の回路構成図である。901はLeft-Right方向及びマスク付きシフトレジスタである。このレジスタに描画不能なオブジェクトのアドレス及びラインサイズ情報を保持する。このシフトレジスタの動作原理は後ほど説明するが、ここではこのシフトレジスタの機能について説明する。ここでLeftとは図の下へのシフト、Rightとは図の上へのシフトであるとする。解析部からのパラメータセットバスからこのレジスタに描画不能オブジェクトの情報（そのオブジェクトの先頭アドレス及び縦サイズ）が逐次送られてくる。最新の保持情報は常に保持レジスタ０に保持され、以降は1個Left-シフトして行く。読み出し時は、全ての保持レジスタの出力が906にセレクタに入力され、リードポインタ信号によって1個のレジスタが選択される。また、保持されたレジスタの中でどれかのレジスタに空きができると、それを埋めるためにその空きレジスタ以降（保持レジスタの数値が大きいもの）のレジスタのみ1個だけRight-シフトされる。すなわち、その空きレジスタより下位（保持レジスタの数値が小さい）のレジスタにはシフトマスクがかかり、Right-シフトされない。902はライトポインタ用のUP-DOWNカウンタであり、常に保持されるレジスタの最後尾を指している。すなわち、リードポインタがこのライトポインタと一致すれば全ての保持情報をスキャンしたことになる。908はシフトマスク・レジスタで、前記Left-Right方向及びマスク付きシフトレジスタのRight-シフト時のマスク信号生成に使用される。（詳細は後述）905はオブジェクト生成可能判定部コントローラである。全ての回路ブロックに制御はここで行なう。特に点線矢印は、このコントローラからの制御信号を示す。903はビデオラインレジスタである。905のコントローラは、ビデオ回路(転送部)からライン割り込み信号を受信すると、ビデオ回路からのラインカウント値を904のレジスタに保持する。(更新する)904は比較器で、解析部からのオブジェクトの縦サイズと現行のビデオラインレジスタ値とを比較して、その大小を905のコントローラに対して出力する。ここで、ビデオラインレジスタ値よりもオブジェクトの縦サイズが小さければ描画可能なので、コントローラは解析部に対してJudge信号をアクティブにして、描画可能であることを連絡する。同様に907の比較器は、ビデオラインレジスタ値と保持レジスタ値との大小比較を行なう。動作は前記907の比較器と同じであるので省略する。
【００１４】
図９の一点斜線で区切られた部分は、解析部の一部で、特にリストを読み込むアドレス回路である。909は、解析部で読み込んだアドレスか、保持レジスタのアドレスを910の開始アドレスレジスタに保持するかを選択するセレクタである。911は開始アドレスをロードして、リスト読み込み時のアドレスを生成するアドレスカウンタである。
【００１５】
図１０は、前記Left-Right方向及びマスク付きシフトレジスタとシフトマスク・レジスタの動作関係を示す図である。1001では、保持レジスタに4個の情報がある場合を示している。レジスタに5個目(保持レジスタ４)以降は空きである。このときライトポインタは保持レジスタ３を指している。ここで、リードポインタは保持レジスタ１を指しており、ここまでは描画不能であったとする。一方、シフトマスク・レジスタは、1005の初期状態ではオール'１'である。1006では1001の保持レジスタのリードポインタの移動に連動して逐次左にシフトして‘0'を埋める。この場合は、ビット０と１が'0'である。1002ではさらにリードポインタがひとつ進み、保持レジスタ2を指している。今、このレジスタ値がヒット（すなわち、描画可能であった）すれば、このレジスタは空きとなる。この時、シフトマスク・レジスタは1007の状態で、保持レジスタにリードポインタがヒットした場合には、まだシフトしていない。保持レジスタ２がヒットしたので、1003ではその空きを埋めるために右にひとつシフトするわけであるが、ここでシフトマスク・レジスタのビット０及び１が‘0'であるためシフトマスクがかかり、保持レジスタ２以降は右シフトされるが、保持レジスタ０及び１の値はそのまま維持される。（書き換わらない）また、保持レジスタが右シフトすると同時にライトポインタもひとつだけダウンカウントされる。この時点で新たな保持レジスタ2が描画不能であれば、シフトマスク・レジスタは1008のようにさらに左にひとつシフトされビット２まで’0'となる。ここで、1003に示すようにライトポインタ位置とリードポインタ位置が一致するので、保持レジスタに全てが判定終了とみなされる。シフトマスク・レジスタは再び１005の初期状態に戻される。後は保持レジスタを判定する度に、同じ一連の動作を繰り返ことになる。
【図面の簡単な説明】
【００１６】
【図１】本発明のシステム構成例である。
【図２】バンド内でのオブジェクトの位置関係を示す図である。
【図３】バンドヘッダ及びアプリケーション・リストの構造を示す図である。
【図４】アプリケーション・リストからオブジェクトの実体を得るまでの関係を図示しったものである。
【図５】転送中のバンドとそこに新たに展開するオブジェクトとの関係を示した図である。
【図６】アプリケーション・リストのチェーンを繋ぎ替える過程を示した図である。
【図７】1バンドの展開を終了するまでのフローチャート図である。
【図８】描画部内のブロック図である。
【図９】オブジェクト生成可能判定部内のブロック図である。
【図１０】保持レジスタとシフトマスク・レジスタとの関係を表した図である。
【図１】
2006095957.tif 000003
【図２】
2006095957.tif 000004
【図３】
2006095957.tif 000005
【図４】
2006095957.tif 000006
【図５】
2006095957.tif 000007
【図６】
2006095957.tif 000008
【図７】
2006095957.tif 000009
【図８】
2006095957.tif 000010
【図９】
2006095957.tif 000011
【図１０】
2006095957.tif 000012