(57)【特許請求の範囲】
【請求項１】
メモリシステムを有するコンピュータにおいて、グラフィックスプリミティブのセットを用いてグラフィックイメージを生成するための方法であって、
該グラフィックスプリミティブの各々は、グラフィックスプリミティブを起動するコマンドが受信されたときのグラフィックス環境の現在のステートに従って実行され、グラフィックス環境の現在のステートは複数のステート要素を含み、イメージソースによって随時変更されるものであり、
前記グラフィックス環境のステートの変化を記録する段階において、
グラフィックスプリミティブを起動する前回のコマンドの受信時からグラフィックスプリミティブを起動する現在のコマンドの受信時までの、前記複数のステート要素の少なくとも一つが変化する各時点において、
その変化したステート要素のみについてその内容を前記メモリシステムにセーブする工程と、
複数のレファレンスを含むグラフィックスステートオブジェクトを前記メモリシステムにセーブする工程と、ここで前記複数のレファレンスのそれぞれは、前記複数のステート要素の対応するステート要素に関して最も最近にセーブされた内容のセーブ位置を指しており、
グラフィックスプリミティブを用いてグラフィックイメージを描画する段階において、
前記グラフィックス環境の前回のステートに対応する前回のグラフィックスステートオブジェクトを維持する工程と、
前記グラフィックス環境の後続のステートに対応する後続のグラフィックスステートオブジェクトを前記メモリシステムから読み出す工程と、
前記後続のグラフィックスステートオブジェクトの複数のレファレンスの各々を前記前回のグラフィックスステートオブジェクトの対応するレファレンスと比較する工程と、
前記比較の各々において、レファレンスが一致せず、対応するステート要素が変化したことを示す場合に、変化したステート要素を反映するために前記グラフィックス環境の前回のステートのステート要素を変更する工程とを備えることを特徴とするグラフィックイメージ生成方法。
【請求項２】
前記複数のステート要素は、クリッピング領域、可視領域、ペンパターン、フィルパターン及び背景パターンを含むことを特徴とする請求項１に記載のグラフィックイメージ生成方法。
【発明の詳細な説明】
【０００１】
技術分野
本発明はプリンタドライバおよびコンピュータグラフィックスシステムにおけるコンピュータ、プリンタ間の通信方法に関する。さらに詳しくは、本発明は、グラフィックプリミティブのセットを用いてグラフィック機能を実現するプリンタドライバに関する。
【０００２】
背景技術
グラフィカルイメージを描画（レンダリング）することは、それがコンピュータディスプレイ上であれ、印刷ページ上であれ、比較的複雑である。そして、その複雑さのゆえに、複数種類の異なるグラフィカル言語が開発されている。これらの言語のいくつかは、たとえば、プリンタ制御言語（Printer Control Language）のように、ハードコピーを生成するのに基本的に適したものである。また、「ページ記述」言語はコンピュータ画面上におけるイメージの表示や印刷媒体上におけるイメージの印刷に適している。たとえば、マッキントッシュコンピュータにおいては、「ＱｕｉｃｋＤｒａｗ」として知られるグラフィックスライブラリがマッキントッシュオペレーティングシステムの一部として組み込まれており、画面上もしくは画面以外のイメージ形成に用いられる。同様に、ＰＣコンパチブルのコンピュータにおいては、ウィンドウズオペレーティングシステムはグラフィックスデバイスインタ−フェース（Graphics Device Interface）ライブラリという形態で描画ルーチンが提供される。このグラフィックスデバイスインターフェースライブラリは、画面上および画面以外におけるすべての複雑なグラフィック機能をイメージングするものである。なお、ここでは、本発明の説明を、ＱｕｉｃｋＤｒａｗを参照して行うこととする。しかしながら、本発明が他の広範な種々のグラフィカル言語に適用できるものであることは理解されるべきである。
【０００３】
図１に示されるように、ＱｕｉｃｋＤｒａｗは、映像画面上におけるプレゼンテーションや印刷媒体上における印刷のための高レベルアプリケーションプログラムよりのグラフィックスコマンド変換する。ＱｕｉｃｋＤｒａｗはあらゆるマッキントッシュコンピュータに組み込まれているグラフィックスライブラリを提供する。なお、ＱｕｉｃｋＤｒａｗについては、アップルコンピュータ社発行のInside Macintosh, Vol. 1, においてより完全に記述されており、これは本願明細書に参照のために組み込まれる。ＱｕｉｃｋＤｒａｗは、コンピュータ画面の大部分の内容を描画するのに用いられる上に、コンピュータプリンタとの通信にも用いられる。それゆえ、コンピュータの読み出し専用メモリ（ＲＯＭ）に格納されたＱｕｉｃｋＤｒａｗルーチンは、特定のプリンタに依存した制御関数とともにプリンタドライバを形成するための核を構成する。このプリンタドライバは、アプリケーションプログラムからのコマンドに応答して、ページ上の所望のイメージの印刷をプリンタに実行させる。
【０００４】
ＱｕｉｃｋＤｒａｗはいくつかの明らかな数学的な構造を定義する。これらの数学的な構造は、処理において、関数において、データタイプにおいて広く用いられる。もっとも基本的なＱｕｉｃｋＤｒａｗのタイプは点であり、これは座表面における水平、垂直位置を特定する２つの整数値からなる。他のタイプとしては、ライン、矩形、楕円、アーク、丸長方形、多角形および領域（region）があげられる。多くの描画操作は、これらのオブジェクトをパターンで満たしたり縁どりしたりすることで構成される。ＱｕｉｃｋＤｒａｗは、複数のフォントにおけるテキストの種々のサイズやスタイルによる描画をもサポートする。ＱｕｉｃｋＤｒａｗはメモリの領域におけるビットイメージを変更することによって描画を行う。ここで、メモリの領域とは、ディスプレイ画面の場合はフレームバッファであり、印刷出力の場合はプリントバッファである。
【０００５】
ＱｕｉｃｋＤｒａｗは、ＧｒａｆＰｏｒｔと呼ばれる分離した描画領域を複数定義することが可能である。各ＧｒａｆＰｏｒｔは自身の完全な描画環境を有し、その描画環境は、グラフィック機能が、どのように、そしてどこにおいて実行されるかを定義する。多くのＧｒａｆＰｏｒｔが一度にオープンされ得る。そして、それぞれのＧｒａｆＰｏｒｔは自身の座標系、描画パターン、背景パターン、ペンサイズ、配置位置、文字フォントおよびスタイル等を有する。ＧｒａｆＰｏｒｔはマッキントッシュの重なり合うウインドウユーザインターフェースの基礎である。一つのＧｒａｆＰｏｒｔが、印刷のための、ページの描画を行うためにプリンタＧｒａｆＰｏｒｔとして設計され得る。
【０００６】
各ＧｒａｆＰｏｒｔはｐｏｒｔＲｅｃｔと呼ばれる矩形を有し、それは当該ＧｒａｆＰｏｒｔによる使用領域を定義する。各ＧｒａｆＰｏｒｔは固有のクリッピング領域を有する。クリッピング領域は、ＧｒａｆＰｏｒｔのｐｏｒｔＲｅｃｔのすべてのサブセットに対して、さらに描画を制限するのに用いられる。各ＧｒａｆＰｏｒｔは、ライン、図形、テキストを描画するのに用いられる描画ペンを有する。ペンは４つの特徴値を有する。即ち、位置、サイズ、描画モード、描画パターンである。ペンモードとペンパターンは、線や形状を描画するためにペンを移動させた際に、ペンの下にあるビットがどのように影響を受けるかを決定する。各ＧｒａｆＰｏｒｔは、描画のための自身のテキストフォント、スタイル、モードおよびサイズを当該ＧｒａｆＰｏｒｔ内に有する。
【０００７】
異なるイメージ図形を描画するための５つの異なる描画操作がある。即ち、フレーム、ペイント、消去、反転およびフィルである。これらの図形描画操作のおのおのは、矩形、リージョン、長円弧、丸長方形、および多角形に適用され得る。加えて、ＱｕｉｃｋＤｒａｗはテキストの描画、ビットコピー操作の遂行のためのルーチンを提供する。
【０００８】
ＱｕｉｃｋＤｒａｗが生成し得る各図形のために、その図形を生成するための基本的なグラフィック操作を遂行する分離した処理過程がある。即ち、フレーム、ペイント、消去、反転、フィルである。これらの処理過程のおのおのは、その図形の描画を実際に遂行するべく、順番にＱｕｉｃｋＤｒａｗ内低レベルルーチンを呼び出す。たとえば、ＱｕｉｃｋＤｒａｗにおける楕円フレーム、楕円ペイント、楕円消去、楕円反転、楕円フィル処理は、実際には、これらのオペレーションを楕円に対して遂行するＱｕｉｃｋＤｒａｗ内の単一の低レベルルーチンを呼び出す。テキストおよび線の描画、ビットコピー操作の遂行のための低レベル処理も存在する。低レベルルーチンはボトルネックプロシージャとも呼ばれ、グラフィックプリミティブとみなしてもよい。主なＱｕｉｃｋＤｒａｗのボトルネックプロシージャは、ＳｔｄＴｅｘｔ、ＳｔｄＬｉｎｅ、ＳｔｄＢｉｔｓ、ＳｔｄＲｅｃｔ、ＳｔｄＯｖａｌ、ＳｔｄＰｏｌｙおよびＳｔｄＲｇｎである。
【０００９】
ページをイメージするために、ＱｕｉｃｋＤｒａｗプリンタドライバは、まず、オペレーションのキャプチャモードにおいて動作し、次に、オペレーションのプレイバックモードにおいて動作する。典型的には、キャプチャの間には、ＧｒａｆＰｏｒｔの設定変更や種々の図形を描画するためのコマンドが受信される。これらの変化を反映する情報は、ストリームの中へ、たとえばディスクファイルへセーブされる。ＣｌｏｓｅＰａｇｅコマンドが受信されると、プリンタドライバはアプリケーションプログラムをウエイトさせる。そして、プリンタドライバは、そのページを記述する図形やＧｒａｆＰｏｒｔの変更を呼び戻し（play back）、プリントバッファ内のビットを操作し、当該ページのイメージを描写する。グラフィック情報のメモリ依存的な性質のために、一般的にはページは一連のバンドとしてイメージされる。
【００１０】
大部分のＱｕｉｃｋＤｒａｗプリンタドライバは、印刷のために「ＤｒａｗＰｉｃｔｕｒｅ」という方法を用いている。この方法は、各々のそしてすべてのＧｒａｆＰｏｒｔの変化が各バンドに対して記録され、呼び戻されることを要求する。結果として、典型的なプリントジョブに要求されるディスクアクセスの回数とディスクストレージの量が大きくなる。ディスクの介在により、プリント時間はより長くなる。
【００１１】
一つの解決策としては、プリンタＧｒａｆＰｏｒｔに対する各々のそしてすべての変化をその発生した順序で記録することに代えて、図形を描画するためのコマンドが受信されるごとに（ＧｒａｆＰｏｒｔのステートが最後に書き込まれてから、次に変化がある毎に）、ＧｒａｆＰｏｒｔのステートのスナップショットをストリームに記録することがあげられる。こうして、ＧｒａｆＰｏｒｔの状態に関して、図形がストリームに格納される。加えて、その図形の矩形領域の境界を示す情報はその図形とともに格納される。プリンタドライバがイメージバンドを描写するとき、それはバンドの境界矩形をストリームマネージャへ送ることができ、図形の境界矩形がイメージングバンドによって横切られた図形のみのプレイバックを要求する。
【００１２】
この改良された構成において、プリンタドライバは、次に、本質的に、各図形がアプリケーションによって描画されるときに、ＧｒａｆＰｏｒｔの圧縮されたピクチャをステートオブジェクトに格納する。図形がイメージングバンドに描画されるに際して、描画に必要な特定のステートのみが読み戻されることを要求され、ＧｒａｆＰｏｒｔに対するあらゆる変化の順序は要求されない。
【００１３】
しかしながら、その様な構成は、ステートをセーブするのに比較的大きな量のデータを用いる。特に、各ステートにペンパターンおよびフィルパターンを格納することは、大量のデータの格納とリトリーブを招く結果となる。
【００１４】
そこで、必要なことは、描画アプリケーションによって特定されたそのままの描画環境を再生し、その能力を低下させることなく、より少ないディスクアクセスとディスク空間を用いてグラフィックイメージを生成する方法を提供することである。
【００１５】
発明の要約
本発明は、総合的には、上述の課題を解決するグラフィックイメージの生成方法を提供するものである。グラフィックイメージはグラフィックスプリミティブのセットを用いて生成される。各グラフィックスプリミティブは、グラフィックスプリミティブを起動するコマンドが受信されたときに、グラフィックス環境の現在の状態（ステート）にしたがって実行される（ＱｕｉｃｋＤｒａｗがそうであるように）。グラフィック環境の現在のステートは情報フィールドの収集によって特定され、画像ソース（たとえば、描画アプリケーション）によってその都度変更される。グラフィックス環境の以前のステートのレコードは維持され、グラフィックス環境の現在のステートが以前の状態と比較される。もし、何らかの情報フィールドが変化していれば、変化した情報フィールドの各々の現在値がユニークに特定できる位置に記録される。そして、ユニークに特定できる位置を参照することにより、変更された情報フィールドの各々の現在値を示すレコードを用いて、現在のステートが記録される。イメージキャプチャは以上のようにして遂行される。イメージのプレイバックの間、グラフィック環境の以前のステートが読み戻され、そのレコードが保持される。そして、続くグラフィックス環境のステートが以前の状態と比較される。もし、いずれかの情報フィールドが変化していれば、変化した情報フィールドの各々の値は、ユニークに特定できる位置から読み戻される。そして、グラフィック環境の以前のステートの記録が、変化した情報フィールドのすべてを反映するように修正される。
【００１６】
本発明は、添加の図面に関連した以下の記述からよりよく理解される。
【００１７】
発明を実施するための最良の形態
本発明は、特定の例に関して、以前の方法にしたがった場合にキャプチャとプレイバックにおいて要求されるステップと、本発明の好適な実施形態にしたがった場合にキャプチャとプレイバック（トランスレーション）において要求されるステップとを詳細に比較するという方法によって最もよく理解されるであろう。
【００１８】
まず図２に示されるように、プリンタドライバは基本的に、キャプチャモジュール（即ち、キャプタ）とプレイバックモジュール（即ち、トランスレータ）とストリームマネージャ（即ち、ストリーマオブジェクト）とを備える。キャプタは、アプリケーションプログラムによって発行された描画コマンド、および描画環境（ＧｒａｆＰｏｒｔ）の変化を記録させる。トランスレータはキャプタによって記録された情報をプレイバックし、ピクチャ情報のバンドをイメージするべくグラフィックスプリミティブを実行し、そのバンドをプリンタハードウエアに送信する。ストリーマオブジェクトはメモリとの通信インターフェースとして機能する。メモリは、たとえば、キャッシュメモリ、ディスクメモリ、あるいはこれらの組み合わせのいずれであってもよい。
【００１９】
非常に単純化された例を挙げるために、アプリケーションプログラムがプリンタドライバに対して図３に示すイメージをプリントするよう指示したと仮定する。図３のイメージは、ペンパターンとフィルパターンを有する第１および第２の矩形を含む。
【００２０】
従前の方法に従えば、ＧｒａｆＰｏｒｔは、ＧｒａｆＰｏｒｔにおいて何らかの変化があったかどうかを判断するために、前回セーブされたコピーと比較される。変化が発見されると、ＧｒａｆＰｏｒｔのあらゆる重要なフィールドがステートレコードにコピーされる。そして、ステートは、ストリーマオブジェクトへ送られ、ストリームにセーブされる。それゆえ、キャプチャの実行時に以下のステップが生じる。
【００２１】
１．アプリケーションは初期のＧｒａｆＰｏｒｔ設定をセットする。
２．アプリケーションは第１の矩形フレームを描画する。
３．キャプタは現在のＧｒａｆＰｏｒｔをセーブされた前回のステートと比較する。
４．ペンパターンの変化が発見される。
５．ＧｒａｆＰｏｒｔの各部がメモリにコピーされ、カラーマッチが行われ（カラーＱｕｉｃｋＤｒａｗの場合）、単一のステートとしてストリームにセーブされる。
６．今セーブされた新しいステートに関して、第１の矩形がストリームにセーブされる。
７．アプリケーションはフィルパターンを変更する。
８．アプリケーションは第２の矩形を描画する。
９．キャプタは現在のＧｒａｆＰｏｒｔを前回セーブされた状態と比較する。
１０．変化（フィルパターンにおける変化）が、ＧｒａｆＰｏｒｔの各部をコピーさせ、カラーマッチさせ、ストリームにセーブさせる。
【００２２】
続いて、トランスレーションの実行の間に、以下のステップが発生する。
１１．トランスレータは、第１の矩形を読み込ませる。
１２．トランスレータは、矩形とともにセーブされたステートレファレンスを前回のステートと比較し、違いを発見する。
１３．その矩形図形に関して参照された新しいステートが読み込まれる。
１４．その新しいステートの各フィールドはＧｒａｆＰｏｒｔと比較され、あらゆる異なるフィールドがＧｒａｆＰｏｒｔにおいて更新される。
１５．トランスレータは、その矩形フレームを描画するのに適切なグラフィックスプリミティブを実行する。
１６．トランスレータは、第２の矩形を読み込ませる。
１７．ステートの比較により、新しいステートをストリームより読み込ませる。
１８．新しいステートの各フィールドはＧｒａｆＰｏｒｔと比較され、あらゆる異なるフィールドがＧｒａｆＰｏｒｔにおいて更新される。
１９．トランスレータは、第２の矩形を描画するために、適切なグラフィックスプリミティブを実行する。
【００２３】
ＧｒａｆＰｏｒｔのあらゆる重要なフィールドがステートにセーブされ、かつステートは変化が発見されるたびにストリームにセーブされるので、メモリへの書き込みやメモリよりの読み出しに無視できないほどのオーバーヘッドを招く。これは、メモリがディスクメモリであれば、より顕著である。
【００２４】
これに対して、本方法によれば、各パターンやクリップリージョンの内容でステートを満たすのではなく、これらのメンバーの各々に対するレファレンスがステートに格納される。このレファレンスは、ステートの各コンポーネントが、別々にセーブされることを可能とするとともに、描画に際してはステートが正確に再現されることを可能とする。更に、レファレンスはステートの比較の間の有用な時間を節約することを可能とする。従前のドライバがトランスレーション時におけるＧｒａｆＰｏｒｔの比較にステートを要求したのに対して、本方法では、どのフィールドが変化したかを見るために、現在のステートの各レファレンスが前回のステートの各レファレンスと比較される。４バイトで格納され得るレファレンスを比較することは、大きなパターンや領域を比較するのに比べて非常に高速である。
【００２５】
本方法によれば、キャプチャの実行の間に、以下のステップが発生する。
１．アプリケーションは初期ＧｒａｆＰｏｒｔセットを設定する。
２．アプリケーションは第１の矩形フレームを描画する。
３．キャプタは現在のＧｒａｆＰｏｒｔと前回セーブされた状態のコンポーネントとを比較する。
４．ペンパターンの変化が発見される。
５．新しいペンパターンがストリームに書き込まれる。
６．現在のステートが新しいペンパターンに関して更新されるとともに、書き出される。
７．新しいステートに関して矩形図形がストリームにセーブされる。
８．アプリケーションがフィルパターンを変更する。
９．アプリケーションは第２の矩形を描画する。
１０．キャプタは現在のＧｒａｆＰｏｒｔと前回にセーブされた状態を比較する。
１１．新しいフィルパターンが発現される。
１２．新しいフィルパターンがストリームに書き込まれる。
１３．現在のステートが、新しいフィルパターンに関連して更新されるとともに、書き出される。
１４．第２の矩形図形が新しいステートに関連してストリームにセーブされる。
【００２６】
なお、キャプチャ実行中における、ステップ５及び６と、ステップ１１及び１２との間の重要な相違に注意すべきである。フィルパターンのペンパターンが変化するときには、完全なステートはもはや書き出されない。代わりに、新たなパターン自身が書き出され、それに対するレファレンスがステートにセーブされる。新しいステートとして書き出されるものは、それゆえ、レファレンスの集まりであり、パターン自体ではない。
【００２７】
続いて、本方法によれば、トランスレーションの実行の間、以下のステップが発生する。
１５．トランスレータは第１の矩形を読む。
１６．トランスレータは矩形図形とともに格納されたステートレファレンスと前回のステートとを比較し、ペンパターンのレファレンスが変更したことを発見する。
１７．新しいペンパターンが読み込まれ、ＧｒａｆＰｏｒｔにおいて更新される。
１８．トランスレータは矩形フレームを描画する。
１９．トランスレータは第２の矩形を読み込む。
２０．トランスレータは、ステートレファレンスが変化したことを発見し、新しいステートに読み込む。そして、新しいステートレファレンスを前回のステートレファレンスと比較し、フィルパターンのレファレンスが変化したことを発見する。
２１．新しいフィルパターンが読み込まれ、ＧｒａｆＰｏｒｔにおいて更新される。
２２．トランスレータは第２の矩形を描画する。
【００２８】
トランスレーションにおいて、ステップ１６及び１７と、ステップ２０及び２１に重要な相違があることに注意すべきである。新しいステートの全てのフィールドをＧｒａｆＰｏｒｔと比較する代わりに、トランスレータはＧｒａｆＰｏｒｔのフィールドが更新されなければならないことを示すステート内の新しいレファレンスを認知し、単にそのフィールドを更新する。
【００２９】
図４は、ステート情報の新しいフォーマットを示す図である。なお、クリッピング領域、可視領域、ペンパターン、フィルパターン、背景パターンの各項に関して、各項目は、現在の状態として格納されたレファレンスとともに、ストリームに別々にセーブされる。ただし、全項目ではない。与えられた描画操作の為のステートとしてストリームにセーブされる情報は、合計４０バイトの情報を含む。前述の項目がステート自体にセーブされる従前の方法においては、図５に示されるように、ステートとしてストリームにセーブされる情報は、合計でおよそ２００バイトの情報を含むことになる。ＧｒａｆＰｏｒｔの変更の回数と頻度に依存して、本方法はメモリアクセスのオーバーヘッドを半分、もしくはそれ以下に減らすことができる。クリッピング領域や可視領域が大きい（最大、３２０００バイト）極端な場合では、改善の度合は極めて大である。
【００３０】
図６は、ストリーマオブジェクトによって格納され、読み戻される結果ファイルを示す図である。例えば、矩形を示す「Ｒｅｃｔ」のような図形レコードは、ステートレコードにポインタとともに格納される。ステートレコードは、ペンパターンの様なアイテムを順次指定する。同じアイテムが、他のステートレコードから指定されうる。
【００３１】
本発明の精神や本質から離れることなく、本発明が他の特定の形態で当業者によって実施されうることは明らかである。ここに開示された実施形態は、それゆえ、全ての点において例証的なものとみなされるものであり、限定的なものではない。本発明の範囲は、添付の請求の範囲によって示されるものであり、前述の実施形態によって示されるものではない。そして、本発明の手段及び等価の範囲内で実施されうる全ての変更は本発明に包含されるものである。
【図面の簡単な説明】
【図１】  プリンタドライバをコンピュータグラフィックスシステムの他の要素と関連づけて示すブロック図である。
【図２】  図１のプリンタドライバの基本的なモジュールのより詳細な構成を示すブロック図である。
【図３】  プリンタドライバによって描画されるイメージの例を示す図である。
【図４】  本発明による新しいステートフォーマットを示す図である。
【図５】  旧タイプのステートフォーマットを示す図である。
【図６】  図４に示されたステート表現を用いたファイルフォーマットの概略図である。
【図１】
0003711144.tif 000002
【図２】
0003711144.tif 000003
【図３】
0003711144.tif 000004
【図６】
0003711144.tif 000005
【図４】
0003711144.tif 000006
【図５】
0003711144.tif 000007