(57)【要約】【課題】  少ないメモリ容量でも仮想フレームを展開し描画することができるシステム、方法およびプログラムを提供する。【解決手段】  このシステムは、印刷データに含まれる複数の描画命令により複数の仮想フレームを描画して描画データを生成する印刷処理システムである。このシステムは、複数の描画命令を中間データメモリ４１０に記憶した順に読み出し、読み出した描画命令につき、当該描画命令により描画される仮想フレームとは別の仮想フレームを参照または描画するように指定されているかを調査する仮想フレーム調査部４６０と、調査した結果を基に、規定されたルールに従って、描画する仮想フレームの順序および描画済みの仮想フレームが削除可能か否かを判断し、仮想フレームの描画および削除を指示する仮想フレーム処理部４３０とを備える。【選択図】  図９
2010214746.tif 000002
【特許請求の範囲】
【請求項１】
印刷データに含まれる複数の描画命令により複数の仮想フレームを描画して描画データを生成する印刷処理システムであって、
前記複数の描画命令を命令記憶部に記憶した順に読み出し、読み出した描画命令につき、当該描画命令により描画される仮想フレームとは別の仮想フレームを参照または描画するように指定されているかを調査する仮想フレーム調査部と、
調査した結果を基に、規定されたルールに従って、描画する仮想フレームの順序および描画済みの仮想フレームが削除可能か否かを判断し、前記仮想フレームの描画および削除を指示する仮想フレーム処理部とを備える、印刷処理システム。
【請求項２】
前記印刷データに含まれる前記描画命令を１つずつ解析し、前記描画命令を解析した順に前記命令記憶部に記憶させる解析部を備える、請求項１に記載の印刷処理システム。
【請求項３】
前記仮想フレーム調査部は、２つ以上の前記別の仮想フレームを参照または描画するように指定されている描画命令を、分岐をもつ描画命令と判断し、前記仮想フレーム処理部は、前記調査した結果を基に、前記命令記憶部に記憶した順に調査して最初の分岐をもつ描画命令を探し、分岐をもつ描画命令を辿り、最後の分岐をもつ描画命令を探し、前記規定されたルールに従って、前記最後の分岐をもつ描画命令から仮想フレームを描画するように指示する、請求項１または２に記載の印刷処理システム。
【請求項４】
前記仮想フレーム調査部は、前記規定されたルールに従って、辿ってきた前記分岐をもつ描画命令を遡りながら、前記分岐をもつ描画命令により描画される仮想フレームを親フレームとして描画し、当該親フレームに描画するように指定されている描画命令により描画される仮想フレームを子フレームとして当該親フレーム上に描画することを繰り返すように指示する、請求項３に記載の印刷処理システム。
【請求項５】
前記仮想フレーム処理部は、前記仮想フレームを描画する前に、当該仮想フレームを描画するために必要とされるメモリ領域を確保するように指示する、請求項１〜４のいずれか１項に記載の印刷処理システム。
【請求項６】
前記仮想フレーム処理部は、前記仮想フレームの削除に伴い、削除した前記仮想フレームのために確保していたメモリ領域を解放するように指示する、請求項５に記載の印刷処理システム。
【請求項７】
前記仮想フレーム処理部からの指示を受け付け、前記指示に従ってメモリ領域を確保し、前記仮想フレームを描画し、前記描画済みの仮想フレームを削除し、前記描画済みの仮想フレームのために確保していたメモリ領域を解放するソフト図形描画処理部を備える、請求項６に記載の印刷処理システム。
【請求項８】
前記ソフト図形描画処理部は、描画した仮想フレーム上に別の仮想フレームを描画し、最終的に作成された仮想フレームを描画して、描画データを生成する、請求項７に記載の印刷処理システム。
【請求項９】
前記仮想フレーム処理部は、前記描画命令が、透明描画する命令、座標またはクリップを指定する命令である場合、仮想フレームを描画しないように指示する、請求項１〜８のいずれか１項に記載の印刷処理システム。
【請求項１０】
前記仮想フレーム処理部は、前記描画命令が、上書きを指定する命令である場合、仮想フレームを描画せず、前記別の仮想フレームを参照または描画するように指定されている描画命令により描画される親フレームに直接描画するように指示する、請求項１〜９のいずれか１項に記載の印刷処理システム。
【請求項１１】
前記解析部は、透明描画する命令、座標またはクリップを指定する命令である場合、前記命令を解釈し、前記命令記憶部に記憶させないようにする、請求項２に記載の印刷処理システム。
【請求項１２】
印刷データに含まれる複数の描画命令により複数の仮想フレームを描画して描画データを生成する印刷処理方法であって、
前記複数の描画命令を命令記憶部に記憶した順に読み出し、読み出した描画命令につき、当該描画命令により描画される仮想フレームとは別の仮想フレームを参照または描画するように指定されているかを調査するステップと、
調査した結果を基に、規定されたルールに従って、描画する仮想フレームの順序および描画済みの仮想フレームが削除可能か否かを判断し、前記仮想フレームの描画および削除を指示するステップとを含む、印刷処理方法。
【請求項１３】
前記印刷データに含まれる前記描画命令を１つずつ解析し、前記描画命令を解析した順に前記命令記憶部に記憶させるステップを含む、請求項１２に記載の印刷処理方法。
【請求項１４】
前記調査するステップでは、２つ以上の前記別の仮想フレームを参照または描画するように指定されている描画命令を、分岐をもつ描画命令と判断し、前記指示するステップでは、前記調査した結果を基に、前記命令記憶部に記憶した順に調査して最初の分岐をもつ描画命令を探し、分岐をもつ描画命令を辿り、最後の分岐をもつ描画命令を探し、前記規定されたルールに従って、前記最後の分岐をもつ描画命令から仮想フレームを描画するように指示する、請求項１２または１３に記載の印刷処理方法。
【請求項１５】
前記指示するステップでは、前記規定されたルールに従って、辿ってきた前記分岐をもつ描画命令を遡りながら、前記分岐をもつ描画命令により描画される仮想フレームを親フレームとして描画し、当該親フレームに描画するように指定されている描画命令により描画される仮想フレームを子フレームとして当該親フレーム上に描画することを繰り返すように指示する、請求項１４に記載の印刷処理方法。
【請求項１６】
前記指示するステップでは、前記仮想フレームを描画する前に、当該仮想フレームを描画するために必要とされるメモリ領域を確保するように指示する、請求項１２〜１５のいずれか１項に記載の印刷処理方法。
【請求項１７】
前記指示するステップでは、前記仮想フレームの削除に伴い、削除した前記仮想フレームのために確保していたメモリ領域を解放するように指示する、請求項１６に記載の印刷処理方法。
【請求項１８】
前記指示に従って、メモリ領域を確保するステップ、前記仮想フレームを描画するステップ、前記描画済みの仮想フレームを削除するステップ、前記描画済みの仮想フレームのために確保していたメモリ領域を解放するステップのいずれかを実行するステップを含む、請求項１７に記載の印刷処理方法。
【請求項１９】
描画した仮想フレーム上に別の仮想フレームを描画し、最終的に作成された仮想フレームを描画して、描画データを生成するステップを含む、請求項１８に記載の印刷処理方法。
【請求項２０】
前記指示するステップでは、前記描画命令が、透明描画する命令、座標またはクリップを指定する命令である場合、仮想フレームを描画しないように指示する、請求項１２〜１９のいずれか１項に記載の印刷処理方法。
【請求項２１】
前記指示するステップは、前記描画命令が、上書きを指定する命令である場合、仮想フレームを描画せず、前記別の仮想フレームを参照または描画するように指定されている描画命令により描画される親フレームに直接描画するように指示する、請求項１２〜２０のいずれか１項に記載の印刷処理方法。
【請求項２２】
透明描画する命令、座標またはクリップを指定する命令である場合、前記命令を解釈し、前記命令記憶部に記憶させないようにするステップを含む、請求項１２〜１９に記載の印刷処理方法。
【請求項２３】
請求項１２〜２２のいずれか１項に記載の印刷処理方法を実行するためのコンピュータにより読み取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、言語仕様として仮想フレーム機能を有するシステムに関し、当該仮想フレーム機能により使用されるメモリを削減することができるシステム、その方法およびその方法を実現するためのコンピュータ可読なプログラムに関する。
【背景技術】
【０００２】
従来、PC等で作成した画像等を印刷する場合には、まず、ユーザが印刷指示を発行し、アプリケーションプログラムがその印刷指示を受け付け、印刷処理を開始する。具体的には、出力先のプリンタの解像度情報等を取得し、それに基づきそのページの展開処理（ラスタライズ処理）に必要なイメージサイズを決定し、メモリ容量を計算する。ここで、ラスタライズとは、コンピュータグラフィックスにおいて、ラスタ形式以外のデータをラスタ形式に変換して画像化する、ピクセルデータに変換する作業をいう。ラスタとは、点が線上に並んだものをいい、ラスタの集まりがビットマップ画像である。
【０００３】
次に、現在利用可能な物理メモリ量を取得し、その物理メモリ量に応じてデータを処理できる分割数に分割し、分割されたデータに対してラスタライズ処理を行い、その結果をプリンタへ送信する。このように分割するのは、フルカラーのページ全体を一度にラスタライズすると、大量のメモリを消費するからである。
【０００４】
このようにして、全てのデータをラスタライズ処理してプリンタへ送信したところで、ページ終了指示を送り、最後に、メモリ上のイメージを削除し、印刷処理を終了する（特許文献１参照）。
【０００５】
近年、コンピュータの機種や環境によらず、画像等を正確に表現することができる電子文書のためのフォーマットとして、PDF(Portable Document Format)やXML(eXtensible Markup Language)ベースのフォーマットであるXPS(XML Paper Specification)が採用されている。XMLは、個々のデータの属性や論理構造をタグに入れてデータ交換を容易にしたマークアップ言語である。
【０００６】
これらのフォーマットで作成された電子文書をページプリンタで印刷する際にも、PDL(Page Description Language)が使用されるが、PDFやXPS等のPDLでは、言語仕様として仮想フレーム機能をサポートしているものが多い。仮想フレーム機能とは、描画コマンドと描画状態の一群をまとめて描画したり、加工したりすることができる機能で、ある仮想フレームが他の仮想フレームやページに繰り返し描画することができる機能である。図１に示すように、仮想フレーム１は、最終の描画結果であるページ（フレーム）２と別の領域に、描画オブジェクトの組み合わせを描画しておき、その別の領域に描画した結果を一つの描画オブジェクトとして利用することができるものである。すなわち、仮想フレームは、描画オブジェクトであり、描画オブジェクトは、イメージ、テキスト、ベジエ曲線の描画(PolyBezier)等を任意に組み合わせたものを一つの描画単位としてまとめたものである。
【０００７】
仮想フレームは、PDFではGroupと呼ばれ、XPSではCanvasやVisual Brushと呼ばれ、より高度な表現を可能にしている。これらのうち、マークアップ言語で記述されているXPSのCanvasやVisual Brushは、ツリー構造をもち、多分木形式で表現することができるデータとされている。
【０００８】
仮想フレームを、図２を参照して説明すると、Canvasはツリー構造とされ、最終的に印刷される物理ページであるFixed Pageを根元とし、そのFixed Pageを親として３つの子であるCanvasA〜Cに分岐され、CanvasCを親として２つの子であるCanvasD、Eに分岐され、CanvasEを親として２つの子であるCanvasF、Gに分岐され、CanvasFを親として３つの子であるCanvasH〜Jに分岐されている。このような構造である場合において、印刷する際に、全てを同時に展開すると、Fixed Pageを描画するためのページメモリと、CanvasA〜Jをビットマップに展開するための仮想フレームメモリを１０ページ分展開することになる。
【０００９】
ここで、従来の仮想フレームを描画する場合の装置構成を、図３に例示する。この装置は、印刷データを出力するホストPC１０と、印刷データを描画処理するプリンタコントローラ２０と、描画されたページを印刷出力するプリンタエンジン３０とから構成される。
【００１０】
プリンタコントローラ２０のインタプリタ２１は、ホストPC１０から印刷データを受信し、印刷データに含まれる描画命令を１つずつ解釈し、それらの描画命令を中間データメモリ２２に記憶する。ソフト図形描画処理部２３は、仮想フレームを構成する描画命令、その他の描画命令を全て中間データメモリ２２上から順次読み込む。読み込んだ描画命令が、仮想フレームを構成する描画コマンドである場合、仮想フレーム処理部２４へその旨を通知する。仮想フレーム処理部２４は、仮想フレームメモリ２５のどのメモリアドレスに仮想フレームを作成するかを決定し、そのメモリアドレスを記憶する。
【００１１】
ソフト図形描画処理部２３は、仮想フレームを他の仮想フレームあるいはページに印刷することを指定する描画命令を読み込み、その書き出す仮想フレームと書き出し先の仮想フレームのアドレスを、仮想フレーム処理部２４から教えてもらい描画処理を実施する。ソフト図形描画処理部２３が仮想フレームを書き出すと、その仮想フレームは仮想フレームメモリ２５上から削除することができるため、仮想フレーム処理部２４が削除するよう指示する。
【００１２】
描画されたページは、ページメモリ２６に生成される。プリンタエンジン３０は、描画されたページをページメモリ２６から読み出して印刷出力する。
【００１３】
上記のように、Canvasは入れ子にすることができ、多分木で表現することができる。Fixed Pageに対しては０以上の任意のCanvasが中間データメモリ２２に登録可能で、登録順が保存される。図４に示すように、親のCanvasAには登録されたCanvasBを描画する描画命令が保持されている。Fixed PageやCanvasAを描画するためには、そのFixed PageやCanvasAに登録された全てのCanvasが必要であり、描画が終わり、もう参照されないことがわかれば、そのCanvasの内容は不要となるため、上記のように、削除することができる。
【００１４】
XPSでの仮想フレームを処理するためには、全ての仮想フレームを一度は展開し、その親に描画していく必要がある。全ての仮想フレームを同時に展開することができれば、容易にこの描画処理を実現することができるが、必要なメモリ量が多くなってしまい、コントローラによっては、搭載されているメモリ容量が少なく、その処理を実現することができない場合がある。
【００１５】
そこで、親への描画が終了し、展開しておく必要がない仮想フレームを閉じ、その仮想フレームが占有していたメモリを解放することにより、メモリ消費量を削減する方法がある。これまでに知られている方法としては、行きがけ順探索や幅優先探索等があるが、これらの方法では、それほどメモリ量を削減することができない。
【００１６】
ここで、行きがけ順探索とは、あるノードがもつ子の数が２である二分木であるツリー構造において、根を調べてからそれにぶら下がる、二分木を構成する子孫である部分木を調べる方法で、幅優先探索とは、未だに訪れていないノードを根に近い方から探索する方法である。
【発明の概要】
【発明が解決しようとする課題】
【００１７】
XPSのPDLでサポートされている仮想フレーム機能では、仮想フレームであるCanvasを単純にビットマップに展開してしまうと、全てをメモリ上に同時に展開してしまうことになりやすく、１つのCanvas毎に最終結果であるページメモリと同じ領域が必要となる場合があり、搭載メモリの容量が少ないプリンタでは印刷することができなくなるという問題がある。
【００１８】
また、最もメモリを消費するのは、全ての仮想フレームを展開する方式で、図２に示す例では、Fixed Pageと１０個のCanvasを展開する場合であるが、二分木検索で代表的な前順走査で処理し、描画が終わった仮想フレームを即座に削除した場合において、最もメモリを消費するのは、Fixed PageとCanvasC、E、F、Hの４つを展開するときである。ここで、前順走査とは、まず、根ノードを調査し、次に、左の部分木を走査し、その次に右の部分木を走査するという調査処理である。このような方法でも、Canvasを展開するために、４ページ分の仮想フレームメモリ２５が必要である。
【００１９】
また、Canvasは、場合によって、Fixed Pageと同じ描画範囲をもつ必要があり、このようなCanvasがFixed Pageにいくつも登録され、Canvasを描画するために仮想フレームを全て展開した場合、Fixed Pageの何倍ものメモリが必要となってしまい、コントローラに搭載されたメモリ容量では展開しきれないという問題もある。
【００２０】
そこで、少ないメモリ容量でも仮想フレームを展開し描画することができるシステムおよび方法の提供が望まれていた。
【課題を解決するための手段】
【００２１】
従来の前順走査では、根ノードから前順に走査を行い、Canvasを展開しているため、上記の例では最大４ページ分の仮想フレームメモリを要している。そこで、本発明では、Canvasを調査し、描画を始める仮想フレームを適切に選択するように構成する。これにより、同時に展開する仮想フレームを最小限に抑え、展開に必要とされるメモリ量を削減することができる。
【００２２】
その結果、より少ないメモリ量が搭載されたコントローラであっても、XPSダイレクト印刷やPDFダイレクト印刷が可能になる。また、ダイレクト印刷でなくても、XPSデータやPDFデータをより少ないメモリで印刷可能になる。
【００２３】
具体的には、印刷データに含まれる複数の描画命令を命令記憶部に記憶した順に読み出し、読み出した描画命令につき、当該描画命令により描画される仮想フレームとは別の仮想フレームを参照または描画するように指定されているかを調査する仮想フレーム調査部と、調査した結果を基に、規定されたルールに従って、描画する仮想フレームの順序および描画した仮想フレームが削除可能か否かを判断し、仮想フレームの描画および削除を指示する仮想フレーム処理部とを備えるシステムとされる。
【００２４】
印刷データは、ホストPC等から送信され、解析部により受信され、印刷データに含まれる描画命令が１つずつ解析され、順に命令記憶部に記憶される。
【００２５】
仮想フレーム調査部は、２つ以上の上記別の仮想フレームを参照または描画するように指定されている描画命令を、分岐をもつ描画命令と判断する。仮想フレーム処理部は、調査した結果を基に、命令記憶部に記憶した順に調査して最初の分岐をもつ描画命令を探し、分岐をもつ描画命令を辿り、最後の分岐をもつ描画命令を探す。仮想フレーム処理部は、規定されたルールに従って、最後の分岐をもつ描画命令から仮想フレームを描画するように指示する。そして、規定されたルールに従って、辿ってきた分岐をもつ描画命令を遡りながら、分岐をもつ描画命令により描画される仮想フレームを親フレームとして描画し、当該親フレームに描画するように指定されている描画命令により描画される仮想フレームを子フレームとして当該親フレーム上に描画することを繰り返すように指示する。
【００２６】
また、仮想フレーム処理部は、仮想フレームを描画する前に、当該仮想フレームを描画するために必要とされるメモリ領域を確保し、仮想フレームの削除に伴い、削除した仮想フレームのために確保していたメモリ領域を解放するように指示する。
【００２７】
仮想フレーム処理部からの指示は、ソフト図形描画処理部が受け付け、ソフト図形描画処理部は、その指示に従ってメモリ領域を確保し、仮想フレームを描画し、また、不要となった仮想フレームを削除し、その仮想フレームのために確保していたメモリ領域を解放する。これにより、メモリ消費量を削減することができる。
【００２８】
ソフト図形描画処理部は、最終的に作成された仮想フレームを描画して、描画データを生成する。生成された描画データは、エンジンが読み出し、印刷出力が行われる。
【００２９】
仮想フレーム処理部は、描画命令が、透明描画する命令、座標またはクリップを指定する命令である場合、仮想フレームを描画しないように指示することができる。また、描画命令が、上書きを指定する命令である場合、仮想フレームを描画せず、直接、親フレームに描画するように指示することができる。
【００３０】
上記の透明描画する命令、座標またはクリップを指定する命令である場合、解析部がそれらを解釈し、命令記憶部に記憶させないようにすることも可能である。
【００３１】
本発明では、上記印刷処理システムのほか、このシステムで行われる処理を処理ステップとして含む印刷処理方法として提供することもできる。また、この方法は、印刷処理システムを構成する各部により行われる各処理ステップを含むが、これらの処理ステップは、コンピュータ可読なプログラムを実行させることにより実現することができる。このため、本発明では、印刷処理方法を実現するためのコンピュータ可読なプログラムを提供することもできる。
【００３２】
このプログラムは、記録媒体に記録して提供することができ、本発明では、このプログラムが記録された記録媒体を提供することもできる。
【図面の簡単な説明】
【００３３】
【図１】ページと仮想フレームとの関係を示した図。
【図２】仮想フレームの構造を例示した図。
【図３】従来の仮想フレームを描画する場合の装置構成を示した図。
【図４】描画命令の構成を示した図。
【図５】本発明の印刷処理システムとして機能するコントローラを含む画像形成装置のハードウェア構成を例示した図。
【図６】コントローラに実装されるPDL部の構成を例示した図。
【図７】描画命令の記述例を示した図。
【図８】中間データのデータ構造を例示した図。
【図９】コントローラの構成を例示した図。
【図１０】画像形成装置が備えるプリンタコントローラが行う全体の処理の流れを示した図。
【図１１】仮想フレーム調査部で行われる処理の流れを示した図。
【図１２】ツリー構造の一例を示した図。
【図１３】ツリー構造の別の例を示した図。
【図１４】仮想フレーム処理部の指示に従ってソフト図形描画処理部が行う処理の流れを示した図。
【発明を実施するための形態】
【００３４】
図５は、画像形成装置のハードウェア構成を例示した図である。図５に示す画像形成装置は、この画像形成装置の制御を行うコントローラ１００と、用紙に画像を印刷するエンジン１１０と、ユーザが入力を行い、装置の状態を表示するパネル装置１２０とを含んで構成されている。図５では、印刷データをこの画像形成装置へ送信するホストPC２００も示されている。
【００３５】
コントローラ１００は、プログラムを実行するCPU１０１と、コントローラ１００上で動作するBIOSやファームウェア等のプログラムを格納するROM１０２と、ソフトウェアが動作するために必要とされるワークメモリとして利用され、作成された描画ページを格納するためのRAM１０３と、カラー／モノクロ設定、集約印刷設定、両面印刷設定、ステープル設定等の印刷条件設定を格納する不揮発性メモリであるNVRAM１０４と、ネットワーク上に接続されたホストPC２００とデータをやり取りするためのネットワークI/F１０５と、エンジン１１０との間で印刷指示等を行うエンジンI/F１０６と、パネル装置１２０との間で入出力を行うためのパネルI/F１０７とを含んで構成されている。
【００３６】
コントローラ１００は、コントローラ１００を制御するための制御プリンタコントロールシステムと、印刷データを受け取り、印刷画像を作成するためのPDL部とを実装する。RAM１０３に格納されたソフトウェアをCPU１０１が読み出し実行することにより、これらとして機能させることができる。
【００３７】
このPDL部を、図６を参照して詳細に説明する。PDL部３００は、PDLの種類毎に構文解析を行うPDLパーサ３０１と、PDLの画像形成を行う描画コアモジュール３０２とから構成される。描画コアモジュール３０２は、テキスト、イメージ、ベクターグラフィックス、描画設定情報を受け取るためのインタフェースである描画モジュールI/F３０３と、テキスト、イメージ、ベクターグラフィックス等の描画データおよび色や透過設定等をもつ描画設定情報を格納する中間データ保存部３０４と、中間データ保存部３０４から指定されたカラースペースで描画する多値描画部３０５と、多値で描画されたデータからデバイスカラーへ変換するカラー変換部３０６と、デバイスカラーをCMYK2値でハーフトンニングを実施するCMYK2値変換部３０７とを含んで構成されている。さらに、後述する仮想フレームメモリを初期化するためのフレームメモリ初期化部３０８も備えている。
【００３８】
PDLパーサ３０１は、構文解析に必要となるツリー構造に変換する機能を備える。構文解析では、ソースコードに記述されたステートメントや構造が言語仕様に沿って記述されているかを確認する。
【００３９】
多値描画部３０５のカラースペースは、印刷において再現できる色の範囲であるので、ページの初めに描画カラースペースとして指定されたものに従う。RGBカラースペースが指定された場合は、RGB各色８ビットで描画する。
【００４０】
図６を参照して、全体の動作の流れを説明する。PDLパーサ３０１は、ページ記述言語であるPostScript、PDF、PCL、XPSを解析する。PDLパーサ３０１は、言語毎に構文が違うにも関わらず、描画コアモジュール３０２の描画モジュールI/F３０３をコールすることで、どのPDLでも描画することが可能である。
【００４１】
描画モジュールI/F３０３は、イメージ、グラフィックス、文字等の描画データや色、ブラシ、半透明指定、線形状等を設定するインタフェースをもつため、全てのPDLの描画に対応することができる。半透明は、２つの色を重ね合わせる割合を指定することで実現することができる。
【００４２】
例えば、図７（ａ）に示すPostScriptで記述された描画命令があったとする。これは、RGBカラースペースで(R,G,B)=(0.5,0,0)の色でページの向かって左下を原点として、左下の座標を(100,100)とし、右上の座標を(200,200)として指定し、矩形を描画する命令である。
【００４３】
描画モジュールI/F３０３では、この描画命令を受け取ると、色設定するインタフェースを呼び出し、その後、座標設定するインタフェースと塗りつぶしを指定するインタフェースを呼び出して、矩形を描画する。図７（ｂ）に、描画モジュールI/F３０３で関数シーケンスに変換された描画命令を示す。
【００４４】
setcolorの第１引数は、RGBカラースペースを指定し、第２引数から第４引数によりRGB各色の色値を0.0から1.0の範囲で指定する。Rectangleは、矩形描画関数で、向かって左下座標と右上座標とが指定される。
【００４５】
描画モジュールI/F３０３がコールされた後、中間データ保存部３０４によりデータをメモリ上またはファイル上に保存する。このデータは、setcolor関数で設定されたRGBカラースペース、色値、Rectangleで設定された座標データを含む。RGBカラースペースおよび色値は、グラフィック状態としてメモリ上に保存される。
【００４６】
グラフィック状態には、半透明値、Raster Operation値、線幅等がある。グラフィック状態は、図形、イメージ、文字等の描画データに共通なデータとして保存される。これらのデータは、中間データとして中間データ保存部３０４に保存されるが、例えば、図８（ａ）に示すデータ構造の中間データとして保存することができる。
【００４７】
中間データは、固定長サイズのGStatusレコード、描画データのID番号、０が入れられるパッディングバイト、描画命令の属性として使用されるflag、左、上、右、下の座標とされる。
【００４８】
GStatusレコードは、色、線幅、半透明値、Raster Operation値等の描画に共通な設定情報が格納される。ID番号は、図８（ｂ）に示す対応表で表される番号が格納される。図８（ｂ）では、ID=0x00がRectangleを示し、0x01が直線の描画(LineDraw)を示し、0x02が直線で囲まれた領域の塗りつぶし(LineFill)を示し、0x03がイメージの描画(Image)を示し、0x04が文字の描画(Text)を示している。
【００４９】
flagの属性の例として、Rectangleを切り抜き(Clip)とする場合、Clipであることを示すビットをONにする。
【００５０】
図９は、画像形成装置が備えるコントローラの構成を示した図である。コントローラの構成は、インタプリタ４００、中間データメモリ４１０、ソフト図形描画処理部４２０、仮想フレーム処理部４３０、仮想フレームメモリ４４０、ページメモリ４５０を備える点で同じであるが、さらに仮想フレーム調査部４６０を備えている。
【００５１】
インタプリタ４００は、上記PDLパーサ３０１に相当し、ホストPCから印刷データを受信し、PDLの種類毎に構文解析を行い、中間データとして中間データメモリ４１０に格納する。ソフト図形描画処理部４２０は、描画を行う上記描画コアモジュール３０２に相当し、中間データメモリ４１０に格納された中間データ、すなわちテキスト、イメージ、ベクタグラフフィックス、描画設定情報を読み出し、展開されたイメージをページメモリ４５０に描画する。
【００５２】
仮想フレーム調査部４６０は、中間データメモリ４１０に格納されている描画命令を調査し、仮想フレームデータがどのような構造で存在し、どのような描画条件を持っているかを調べる。すなわち、どのような形のツリー構造で、どの仮想フレームがどの仮想フレームを参照し、描画するように指定されているかを調べる。
【００５３】
仮想フレーム処理部４３０は、仮想フレーム調査部４６０から得られた情報を基に、描画命令を仮想フレームメモリ４４０のどの仮想フレームまたはページメモリ４５０に描画するか、どの仮想フレームをどの仮想フレームやページメモリ４５０に描画するかをソフト図形描画処理部４２０に指示する。具体的には、仮想フレーム処理部４３０は、仮想フレーム調査部４６０が調査した結果を基に、後述する規定されたルールに従って、描画する仮想フレームの順序、描画済みの仮想フレームが削除可能か否かを判断し、どの時点でどの仮想フレームを描画するか、描画済みの仮想フレームをどの時点で削除するかを、ソフト図形描画処理部４２０に対して指示する。
【００５４】
ソフト図形描画処理部４２０は、その指示を受け付けて、ある仮想フレームを描画し、さらに指示を受け付けて、描画した仮想フレーム上に仮想フレームを描画し、最終的に作成された仮想フレームをページメモリ４５０に描画して、描画データを生成する。
【００５５】
仮想フレームメモリ４４０は、仮想フレームを展開する際に使用され、ソフト図形描画処理部４２０が描画命令の描画先として使用するほか、ここに展開された仮想フレームを他の仮想フレームやページメモリ４５０に描画する際の読み出し先として参照される。
【００５６】
ページメモリ４５０は、エンジン１１０に送信される実際に印刷される描画結果、すなわち出力すべき描画データを格納する。このページメモリ４５０は、１ページ分の描画が完了するとエンジン１１０により読み出され、エンジン１１０により用紙に印刷される。描画は、ページ単位ではなく、バンド単位で行われることもあるが、エンジン１１０による読み出しはページ単位で行われる。
【００５７】
まず、図１０を参照して、画像形成装置が備えるコントローラが行う全体の処理の流れについて説明する。ステップ１０００からこの処理を開始し、ステップ１００５において、インタプリタ４００がホストPCから印刷データを受信し、描画命令を１つずつ構文解析し、ステップ１０１０で、中間データメモリ４１０に解析後の描画命令を１つずつ中間データとして格納する。仮想フレームメモリ４４０上に仮想フレームを展開し、ソフト図形描画処理部４２０が中間データメモリ４１０から描画命令を読み出し、描画命令に従って描画を行うが、仮想フレーム調査部４６０は、ステップ１０１５で、仮想フレームを描画する描画命令があるかを判断し、ある場合、ステップ１０２０へ進み、その描画命令を調査する。
【００５８】
ここで、仮想フレームを描画する描画命令か否かは、図４に示すCanvas Aデータといった仮想フレームデータの有無により判断することができる。このデータは、仮想フレームメモリ４４０上に描画するためのデータである。
【００５９】
その後、ステップ１０２５で、仮想フレーム処理部４３０が、仮想フレームメモリ４４０上のどの位置に、どの時点で仮想フレームを展開するか、描画する仮想フレームの順序を判断し、それをソフト図形描画処理部４２０に指示し、ステップ１０３０で、ソフト図形描画処理部４２０が、仮想フレームメモリ４４０にその指示に従って仮想フレームの描画を行う。ステップ１０３５で、全ての仮想フレームを描画し終えたかを判断し、まだ終えていない場合は、ステップ１０２０へ戻り、終えた場合は、ステップ１０４０へ進む。
【００６０】
一方、ステップ１０１５で仮想フレームを描画する描画命令がない場合は、ステップ１０４０へ進み、ソフト図形描画処理部４２０がページメモリ４５０へ描画を行う。その後、ステップ１０４５で、ページメモリ４５０に描画されたページをエンジン１１０が読み出し、ステップ１０５０でこの処理を終了する。
【００６１】
図１１は、図１０に示すステップ１０２０の仮想フレーム調査部４６０で行われる処理を詳細に示した図である。ステップ１１００から処理を開始し、ステップ１１０５で、ツリー構造で表現された仮想フレームにおいて、親の仮想フレームが仮想フレームメモリ４４０上に展開されているかを判断する。展開されている場合、ステップ１１１０へ進み、最も早くその親に登録された子を調べる。最も早くその親に登録された子とは、中間ページメモリ４１０に最初に格納される描画命令が親の描画命令であり、その親の描画命令により描画される仮想フレームとは別の仮想フレームを参照または描画するように最初に指定されている描画命令である。そして、ステップ１１１５で、その子にさらに孫があるかを調べる。孫がある場合は、ステップ１１２０へ進み、その子を新たな親として移動し、ステップ１１０５へ戻り、同様の処理を行う。
【００６２】
一方、ステップ１１０５において、親の仮想フレームが展開されていない場合は、ステップ１１２５へ進み、分岐をもつ子が存在するかを調べる。ステップ１１３０で、分岐をもつ子が存在するかを判断し、ある場合は、ステップ１１２０へ進み、その子を新たな親として移動し、ステップ１１０５へ戻り、同様の処理を行う。
【００６３】
ない場合は、子に孫がない場合と同様、ステップ１１３５へ進み、この処理を終了する。このときの親を、仮想フレーム処理部４３０が描画指定する。
【００６４】
仮想フレーム調査部４６０で行う調査は、注目している仮想フレームを構成する描画命令群を、中間データメモリ４１０上に登録された順番に読み出し、別の仮想フレームを参照または描画するように指定している命令が存在するかを確認するものである。そして、仮想フレーム調査部４６０は、２つ以上の別の仮想フレームを参照または描画するように指定されている描画命令を、分岐をもつ描画命令と判断する。分岐は、別の仮想フレームを参照または描画する命令を２つ以上もつことを示す。親は、注目している仮想フレームのことで、親が参照または親に対して描画指定されている仮想フレームを子という。子から参照され、子に対して描画指定されている仮想フレームを孫という。
【００６５】
仮想フレーム調査部４６０が行う調査のルールをまとめると以下のようになる。
１．親の仮想フレームが仮想フレームメモリ４４０上に展開されていれば、最も早くその親に登録されている子を調べる。
２．親の仮想フレームが展開されていなければ、最も早くその親に登録されている子に分岐が存在するかを確認し、存在していれば、その子から、存在していなければ、その親に次に登録された子を調べる。
３．親の仮想フレームに子がない、あるいは全ての子に分岐がない場合、親を描画する。
【００６６】
図２に示すツリー構造を参照して説明すると、親であるFixed Pageが描画されていれば、上記ルール１に従い、最も早くその親に登録されている子を調べるので、中間データメモリ４１０にFixed Pageの次に登録されたCanvasAを調べる。ちなみに、中間データメモリ４１０への登録は、CanvasA、B、C・・・の順に行われている。
【００６７】
Fixed Pageが描画されていなければ、上記ルール２に従い、最も早くその親に登録されている子に分岐が存在するかを確認する。図２では、CanvasCに分岐が存在するので、CanvasCから調べる。
【００６８】
次に、CanvasCを親として、ルール２に従い、同様に分岐が存在する子があるかを確認すると、CanvasEがあるので、CanvasEから調べる。
【００６９】
そして、CanvasEを親として、ルール２に従い、同様に分岐が存在する子があるかを確認すると、CanvasFがあるので、CanvasFから調べる。
【００７０】
CanvasFを親として、ルール２に従い、同様に分岐が存在する子があるかを確認すると、そのような子は存在しない。このため、ルール３に従い、最終の分岐をもつ親であるCanvasFを描画する。ここで、最終の分岐は、ツリー構造における末端の分岐である。
【００７１】
実際の描画は、ソフト図形描画処理部４２０が行うが、どの仮想フレームを描画するか、Fixed Pageへ描画するか、不要な仮想フレームを削除するかは、仮想フレーム調査部４６０が調査した結果を基に、仮想フレーム処理部４３０が行う。このとき、仮想フレーム処理部４３０は、上記の規定されたルールに従って、描画する仮想フレームの順序、描画した仮想フレームが削除可能か否かを判断し、ソフト図形描画処理部４２０に対して仮想フレームの描画を指示し、描画済みの仮想フレームの削除を指示する。
【００７２】
仮想フレーム処理部４３０は、仮想フレーム調査部４６０が調査した結果を基に、中間ページメモリ４１０に格納した順に調査して最初の分岐をもつ描画命令を探し、分岐をもつ描画命令を辿り、最後の分岐をもつ描画命令を探す。仮想フレーム処理部４３０は、上記の規定されたルールに従って、最後の分岐をもつ描画命令から仮想フレームを描画するように指示する。そして、規定されたルールに従って、辿ってきた分岐をもつ描画命令を遡りながら、分岐をもつ描画命令により描画される仮想フレームを親フレームとして描画し、その親フレームに描画するように指定されている描画命令により描画される仮想フレームを子フレームとして親フレーム上に描画することを繰り返すように、ソフト図形描画処理部４２０に指示する。
【００７３】
仮想フレーム処理部４３０が行う処理の一例を、図１２を参照して説明する。図１２に示すツリー構造では、分岐がないため、連続して描画を行うことができる。したがって、CanvasBから描画する場合、Bを展開するために必要なメモリ領域を仮想フレームメモリ４４０から必要なサイズ分だけ確保し、仮想フレーム管理用の情報に登録する。この情報は、一時的に保持するテンポラリのメモリに格納される。登録された仮想フレームメモリ４４０上のメモリ領域に注目している仮想フレームを構成している描画命令群を描画する。Bの描画が終了したところで、CanvasAの展開に必要なメモリ領域を同様に確保し、描画する。
【００７４】
すなわち、AがBを参照したら描画済みのBをAに描画し、Bのために確保していた仮想フレーム描画用のメモリ領域を仮想フレームメモリ４４０上から解放する。これを繰り返すことで描画を実現することができるため、Fixed Pageを除くと、仮想フレームを描画するのに必要とされるメモリ領域は１ページ分で済むことになる。
【００７５】
仮想フレームを描画するために必要とされるメモリ領域は、ページメモリ４５０と同様、１ピクセルにつき１ビットの点順、KCMY面順である場合や、RGB２４ビット等の仮想フレームを構成する描画命令によって決定されている場合がある。縦横の描画範囲は、最大で、ページメモリ４５０と同じとなるが、CLIP等の描画条件によってはそれより小さくなることがある。
【００７６】
図１３に示すツリー構造であって、Fixed Pageから描画する場合は、Fixed PageがCanvasAを参照したらAの描画に必要なメモリ領域を確保して描画し、AをFixed Pageへ描画してAのために確保していたメモリ領域を解放し、Bも同様に処理する。この場合において、親がFixed Pageであれば、Fixed Pageを除き、仮想フレームに必要なメモリ領域は１ページ分でよい。
【００７７】
CanvasAから描画する場合は、Aの描画に必要なメモリ領域を確保して描画し、その後、Fixed Pageを描画し、Aを参照したらAの描画結果をFixed Pageに描画してAのメモリ領域を解放し、Fixed Pageの描画を続ける。Fixed PageがCanvasBを参照したらBを描画するためのメモリ領域を確保して描画し、BをFixed Pageへ描画した後にBのために確保したメモリ領域を解放する。
【００７８】
上記では、調査と描画を繰り返しているので、CanvasBが描画済みの場合がある。この場合も、Fixed Pageが参照する順番に描画を行うため、CanvasAの次にCanvasBをFixed Pageに描画する。この例では、仮想フレームメモリ４４０を２ページ分確保する必要がある。
【００７９】
この処理を、図１４を参照して説明する。ステップ１４００から処理を開始し、ステップ１４０５において、親を描画し終えたかを判断する。親を描画し終えている場合は、ステップ１４４０へ進み、処理を終了する。
【００８０】
親を描画し終えていない場合は、ステップ１４１０へ進み、親を描画する。親を描画しているとき、ステップ１４１５で、子を参照したかを判断する。参照していない場合、ステップ１４０５へ戻り、同様の処理を繰り返す。
【００８１】
子を参照している場合、ステップ１４２０へ進み、子の展開領域を確保する。その後、ステップ１４２５で、子を描画する。そして、ステップ１４３０で、描画した子を親に描画する。ステップ１４３５で、子の展開領域を解放し、ステップ１４０５へ戻る。
【００８２】
図２に示すツリー構造であって、親であるFixed Pageがまだ描画されていない場合は、以下のような処理となる。
【００８３】
親であるFixed Pageの子のうち分岐をもったものが存在するかを探し、CanvasCが最初に分岐をもつので、CanvasCを調べる。分岐は、２つ以上のノードを指し示すポインタを有するので、容易に探し出すことができる。このようにして、分岐をもったものを辿ると、CanvasFに辿りつく。そこで、ルール３に従い、Fから描画が行われる。Fの描画は、Fの展開領域を確保し、その後に行われる。
【００８４】
Fの描画中、子を参照したかを判断し、まず、最も早く登録されたHの展開領域を確保し、Hを描画した後、親に描画し、Hの展開領域を解放する。次に、Iの展開領域を確保し、Iを描画した後、親に描画し、Iの展開領域を解放する。そして、Jの展開領域を確保し、Jを描画した後、親に描画し、Jの展開領域を解放する。Fの描画が終わったかを判断し、終わっていれば、次に、Eを親として、Eの展開領域を確保して描画し、子を参照したかを判断する。まず、最も早く登録されたFを親に描画し、Fの展開領域を解放する。そして、Gの展開領域を確保し、Gを描画した後、親に描画し、Gの展開領域を解放する。
【００８５】
Eの描画が終わったかを判断し、終わっていれば、次に、Cを親として、Cの展開領域を確保して描画し、子を参照したかを判断する。まず、最も早く登録されたDの展開領域を確保して描画を行う。このとき、展開領域として、C、D、Eの３つの領域が確保され、Fixed Pageを除き、最大が３ページ分のメモリ消費量となっている。上述した従来の前順走査では、Fixed Pageを除き、４ページ分のメモリ消費量であるため、メモリ消費量を削減できることがわかる。
【００８６】
Dを親に描画し、Dの展開領域を解放する。そして、Eを親に描画し、Eの展開領域を解放する。Cの描画が終わったかを判断し、終わっていれば、次に、Fixed Pageを親として、子を参照したかを判断する。
【００８７】
登録順に、Aの展開領域を確保し、Aを描画した後、親に描画し、Aの展開領域を解放する。次に、Bの展開領域を確保し、Bを描画した後、親に描画し、Bの展開領域を解放する。そして、Cを親に描画し、Cの展開領域を解放する。Fixed Pageの描画が終了したところで、全ての処理を終了する。
【００８８】
Canvas処理時に省メモリ化を図る方法として、完全透過の指定があればCanvasの描画を省略することができる。また、完全上書きであれば、そのCanvasは仮想フレームではなく、親に対して直接描画しても描画結果が同じとなる。
【００８９】
これを実現するために、インタプリタ４００が、印刷データを受信すると、それを解釈し、完全透過であれば中間データに変換せず、中間データメモリ４１０に保持しないようにすることができる。完全上書きの場合、新しいCanvasとしてではなく、それまで登録処理していたFixed PageもしくはCanvasの通常のコマンド群として登録することができる。このようにして、不要な中間データ領域と仮想フレーム領域を確保せずに済み、より少ないメモリで同等の描画結果を得ることができる。
【００９０】
Canvas処理時に省メモリ化を図る方法として、CLIPによるものがある。これは、あるCanvasを親に描画するときに有効なCLIPが存在しなければ、そのCanvasを描画する必要がないというものである。したがって、上記の完全透過の場合と同様、CLIP状態を記憶しておき、Canvasの登録時に親に対して有効なCLIPがない場合、そのCanvasを中間データに変換せず、中間データメモリ４１０にも保持しないようにする。
【００９１】
HDDが使用可能なコントローラである場合、搭載メモリ以上のメモリ空間を使用することができる。この場合、メモリ不足は激減するが、HDDを使用した場合、描画速度が大幅に低下する。しかしながら、上述したコントローラでは、HDDにアクセスしなくても処理することができるので、描画速度を低下させることなく、描画処理することができる。
【００９２】
これまで、仮想フレームとしてCanvasについて説明してきたが、XPSのVisual Brush、PDFのGroup等の類似の技術にも適用可能である。また、例示したプリンタコントローラに限られるものではなく、プリンタドライバ、プリンタドライバとプリンタコントローラの組み合わせにおいても実現可能である。
【００９３】
また、本発明は、上述した実施の形態に限定されるものではなく、他の実施の形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【符号の説明】
【００９４】
１…仮想フレーム、２…ページ、１０…ホストPC、２０…プリンタコントローラ、２１…インタプリタ、２２…中間データメモリ、２３…ソフト図形描画処理部、２４…仮想フレーム処理部、２５…仮想フレームメモリ、２６…ページメモリ、３０…プリンタエンジン、１００…コントローラ、１０１…CPU、１０２…ROM、１０３…RAM、１０４…NVRAM、１０５…ネットワークI/F、１０６…エンジンI/F、１０７…パネルI/F、１１０…エンジン、１２０…パネル装置、２００…ホストPC、３００…PDL部、３０１…PDLパーサ、３０２…描画コアモジュール、３０３…描画モジュールI/F、３０４…中間データ保存部、３０５…多値描画部、３０６…カラー変換部、３０７…CMYK2値変換部、３０８…フレームメモリ初期化部、４００…インタプリタ、４１０…中間データメモリ、４２０…ソフト図形描画処理部、４３０…仮想フレーム処理部、４４０…仮想フレームメモリ、４５０…ページメモリ、４６０…仮想フレーム調査部
【先行技術文献】
【特許文献】
【００９５】
【特許文献１】特開２００７−０１１５７３号公報
【図１】
2010214746.tif 000003
【図２】
2010214746.tif 000004
【図３】
2010214746.tif 000005
【図４】
2010214746.tif 000006
【図５】
2010214746.tif 000007
【図６】
2010214746.tif 000008
【図７】
2010214746.tif 000009
【図８】
2010214746.tif 000010
【図９】
2010214746.tif 000011
【図１０】
2010214746.tif 000012
【図１１】
2010214746.tif 000013
【図１２】
2010214746.tif 000014
【図１３】
2010214746.tif 000015
【図１４】
2010214746.tif 000016