(57)【要約】【課題】  カラーマッチングをレンダリング前に行なうかレンダリング後に行なうかによって問題が生じる特定の種類のレンダリングが指定されている場合でも、適切にカラーマッチングを行なえるようにする。【解決手段】  ＰＤＬ文書をレンダリングするレンダリング手段と、ＰＤＬ文書で指定された色情報を、ＰＤＬ文書を印刷する印刷デバイス用の色情報に変換するカラーマッチング手段と、カラーマッチング手段による変換をレンダリング前に行なうかレンダリング後に行なうかを設定する設定手段と、レンダリング手段において特定のレンダリング命令をレンダリングする場合、設定手段における設定に関わらずカラーマッチング手段による変換をレンダリング前かレンダリング後かのいずれかを常に選択する特例判定手段とを備える。【選択図】  図４
2006341457.tif 000002
【特許請求の範囲】
【請求項１】
記述言語文書をレンダリングするレンダリング手段と、
前記記述言語文書で指定された色情報を、前記記述言語文書を印刷する印刷デバイス用の色情報に変換するカラーマッチング手段と、
前記カラーマッチング手段による前記変換を前記レンダリング前に行なうか前記レンダリング後に行なうかを設定する設定手段と、
前記レンダリング手段において特定のレンダリング命令をレンダリングする場合、前記設定手段における設定に関わらず前記カラーマッチング手段による前記変換を前記レンダリング前か前記レンダリング後かのいずれかを常に選択する特例判定手段と、を備えることを特徴とする印刷装置。
【請求項２】
前記特定のレンダリング命令は、グラデーション命令であり、前記特例判定手段において、前記カラーマッチング手段による前記変換を前記レンダリング前に行なうことが選択されることを特徴とする請求項１に記載の印刷装置。
【請求項３】
記述言語文書をレンダリングするレンダリングステップと、
前記記述言語文書で指定された色情報を、前記記述言語文書を印刷する印刷デバイス用の色情報に変換するカラーマッチングステップと、
前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうか前記レンダリング後に行なうかを設定する設定ステップと、
前記レンダリングステップにおいて特定のレンダリング命令をレンダリングする場合、前記設定ステップにおける設定に関わらず前記カラーマッチングステップによる前記変換を前記レンダリング前か前記レンダリング後かのいずれかを常に選択する特例判定ステップと、を備えることを特徴とする印刷装置の制御方法。
【請求項４】
前記特定のレンダリング命令は、グラデーション命令であり、前記特例判定ステップにおいて、前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうことが選択されることを特徴とする請求項３に記載の印刷装置の制御方法。
【請求項５】
記述言語文書を印刷する印刷装置の制御プログラムであって、
前記記述言語文書をレンダリングするレンダリングステップと、
前記記述言語文書で指定された色情報を、前記記述言語文書を印刷する印刷デバイス用の色情報に変換するカラーマッチングステップと、
前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうか前記レンダリング後に行なうかを設定する設定ステップと、
前記レンダリングステップにおいて特定のレンダリング命令をレンダリングする場合、前記設定ステップにおける設定に関わらず前記カラーマッチングステップによる前記変換を前記レンダリング前か前記レンダリング後かのいずれかを常に選択する特例判定ステップと、を備えることを特徴とする印刷装置の制御プログラム。
【請求項６】
前記特定のレンダリング命令は、グラデーション命令であり、前記特例判定ステップにおいて、前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうことが選択されることを特徴とする請求項５に記載の印刷装置の制御プログラム。
【請求項７】
請求項５または請求項６に記載のプログラムを格納したコンピュータ読み取り可能な記憶媒体。
【請求項８】
請求項５または請求項６に記載のプログラムを格納したＷｅｂサーバ。
【請求項９】
記述言語文書をレンダリング部でレンダリングし、
前記記述言語文書で指定された色情報を、カラーマッチング部で前記記述言語文書を印刷する出力デバイス用の色情報に変換する画像処理方法であって、
前記記述言語文書のうちグラデーションに関するレンダリングについては、前記カラーマッチングによる前記変換を前記レンダリング前に行なうことを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷装置におけるレンダリングとカラーマッチングの技術に関し、特に記述言語文書のレンダリングとカラーマッチングの技術に関する。
【背景技術】
【０００２】
従来、ＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ；ページ記述言語）文書の各レンダリング命令に指定された色をモニタやプリンタに出力する際には、出力先デバイスのプロファイルを使用して、そのデバイスの色域（ｇａｍｕｔ）に圧縮・変換してから出力することが行なわれている。この方法については、例えば特許文献１に記載がある。
【０００３】
また、特許文献２では、異なる属性（色空間など）を持つオブジェクトに対し、それぞれに最適な画像データ構造に変換し、適用するカラーマッチング処理をリアルタイムで切り替え可能にする方法についての記載がある。
【０００４】
【特許文献１】特開平７−１０７３１２号公報
【特許文献２】特開平８−２３５３４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
記述言語文書の色指定に不透明度（アルファ値）が含まれる場合や、塗りの指定にグラデーションが含まれる場合は、アルファブレンド処理やグラデーションのレンダリングが必要になる。この際、アルファブレンド処理やグラデーションレンダリングの前にデバイスの色域に圧縮するか、デバイスの色域に圧縮してからアルファブレンド処理やグラデーションレンダリングを行なうかによって、レンダリング結果が異なる。したがって、レンダリングの際にどちらにするかを決定する必要があるが、グラデーションについては、デバイスの色域に圧縮してからグラデーションレンダリングを行なうと、グラデーションの階調性に問題を生じる。このように、特定の種類のレンダリングを行なう場合、カラーマッチングをレンダリング前に行なうかレンダリング後に行なうかによって、問題が生じる場合があった。
【０００６】
本発明は以上の事情に鑑みてなされたものであり、記述言語文書をプリンティングする際、カラーマッチングをレンダリング前に行なうかレンダリング後に行なうかを指定できる場合に、カラーマッチングをレンダリング前に行なうかレンダリング後に行なうかによって問題が生じる特定の種類のレンダリングが指定されている場合でも、適切にカラーマッチングを行なえるようにすることを課題とする。
【０００７】
特に、グラデーションレンダリングについて、より階調性の高い出力を実現することができるようにすることを課題とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明に係る印刷装置は、記述言語文書をレンダリングするレンダリング手段と、前記記述言語文書で指定された色情報を、前記記述言語文書を印刷する印刷デバイス用の色情報に変換するカラーマッチング手段と、前記カラーマッチング手段による前記変換を前記レンダリング前に行なうか前記レンダリング後に行なうかを設定する設定手段と、前記レンダリング手段において特定のレンダリング命令をレンダリングする場合、前記設定手段における設定に関わらず前記カラーマッチング手段による前記変換を前記レンダリング前か前記レンダリング後かのいずれかを常に選択する特例判定手段と、を備えることを特徴とする。
【０００９】
また、上記印刷装置において、前記特定のレンダリング命令は、グラデーション命令であり、前記特例判定手段において、前記カラーマッチング手段による前記変換を前記レンダリング前に行なうことが選択されることを特徴とする。
【００１０】
また、本発明は、記述言語文書を印刷する印刷装置の制御方法であって、記述言語文書をレンダリングするレンダリングステップと、前記記述言語文書で指定された色情報を、前記記述言語文書を印刷する印刷デバイス用の色情報に変換するカラーマッチングステップと、前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうか前記レンダリング後に行なうかを設定する設定ステップと、前記レンダリングステップにおいて特定のレンダリング命令をレンダリングする場合、前記設定ステップにおける設定に関わらず前記カラーマッチングステップによる前記変換を前記レンダリング前か前記レンダリング後かのいずれかを常に選択する特例判定ステップと、を備えることを特徴とする。
【００１１】
また、上記記述言語文書を印刷する印刷装置の制御方法において、前記特定のレンダリング命令は、グラデーション命令であり、前記特例判定ステップにおいて、前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうことが選択されることを特徴とする。
【００１２】
また、本発明は、記述言語文書を印刷する印刷装置の制御プログラムであって、前記記述言語文書をレンダリングするレンダリングステップと、前記記述言語文書で指定された色情報を、前記記述言語文書を印刷する印刷デバイス用の色情報に変換するカラーマッチングステップと、前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうか前記レンダリング後に行なうかを設定する設定ステップと、前記レンダリングステップにおいて特定のレンダリング命令をレンダリングする場合、前記設定ステップにおける設定に関わらず前記カラーマッチングステップによる前記変換を前記レンダリング前か前記レンダリング後かのいずれかを常に選択する特例判定ステップと、を備えることを特徴とする。
【００１３】
また、上記記述言語文書を印刷する印刷装置の制御プログラムにおいて、前記特定のレンダリング命令は、グラデーション命令であり、前記特例判定ステップにおいて、前記カラーマッチングステップによる前記変換を前記レンダリング前に行なうことが選択されることを特徴とする。
【００１４】
また、上記記述言語文書を印刷する印刷装置の制御プログラムは、コンピュータ読み取り可能な記憶媒体、Ｗｅｂサーバに格納することができる。
【００１５】
また、本発明は、画像処理方法であって、記述言語文書をレンダリング部でレンダリングし、前記記述言語文書で指定された色情報を、カラーマッチング部で前記記述言語文書を印刷する出力デバイス用の色情報に変換する画像処理方法であって、前記記述言語文書のうちグラデーションに関するレンダリングについては、前記カラーマッチングによる前記変換を前記レンダリング前に行なうことを特徴とする。
【発明の効果】
【００１６】
本発明によれば、記述言語文書をプリンティングする際、カラーマッチングをレンダリング前に行なうかレンダリング後に行なうかを指定できる場合に、カラーマッチングをレンダリング前に行なうかレンダリング後に行なうかによって問題が生じる特定の種類のレンダリングが指定されている場合でも、適切にカラーマッチングを行なえる。
【００１７】
特に、グラデーションレンダリングについて、より階調性の高い出力を実現することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明における一実施形態について図面を参照して詳細に説明する。  
［本実施形態の概要］
本実施形態では、ＰＤＬとしてＳＶＧ  １．１を使用する。ＳＶＧ  １．１の仕様はＳＶＧ  １．１  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  （ｈｔｔｐ:／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ＳＶＧ１１／）に示されている。ユーザＰＣ（クライアント）において、ＳＶＧ(Ｓｃａｌｅａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃ)文書ファイルをインタプリタが中間コードデータに変換する。この際、レンダリング前カラーマッチングを行なうかレンダリング後カラーマッチングを行なうかを指定する。指定した情報は中間コードデータに埋め込まれる。続いて、レンダラーが中間コードデータをビットマップデータに変換する。レンダラーは埋め込まれた情報にしたがってレンダリング前カラーマッチングかレンダリング後カラーマッチングかのいずれかを選択して実行するが、グラデーションレンダリングについては常にレンダリング前カラーマッチングを行なう。レンダリング前カラーマッチングを行なったピクセルは以後常に同じカラーマッチングを行なう。最後にプリンタにビットマップデータを送信し、プリンタはビットマップデータを使用して出力を行ない、印刷結果を得る。
【００１９】
［全体構成］
まず、図１を参照して本実施形態の全体構成を説明する。  
１０１はユーザが操作を行なうクライアントＰＣであり、ネットワークインタフェースを経由してネットワーク１０３に接続されている。１０２はネットワーク経由で印刷指示を受け付けるプリンタであり、同じくネットワークインタフェースを経由してネットワーク１０３に接続されている。ＰＣ１０１はネットワーク１０３を通じてプリンタ１０２に印刷指示を送信することが可能である。
【００２０】
［コンピュータ装置およびプリンタの構成］
次に、図２と図３を参照して、本実施形態で使用するコンピュータ装置およびプリンタの構成について説明する。  
図２は、クライアント１０１の構成の一例を示すブロック図である。２０１はＲＡＭ２０２に格納されている制御プログラムに従って本装置全体の制御を行なうＣＰＵである。２０２はＣＰＵ２０１が実行する本装置の制御プログラムや、文書画像等のデータを格納するＲＡＭ等の内部記憶部である。２０３はＣＰＵ２０１の制御の下にネットワークとの接続を行なってデータ等を送受信するネットワークインタフェースである。２０４はデータを保存する磁気ディスク等の外部記憶装置である。２０５はディスプレイ、２０６はキーボード、２０７はマウス等のポインティングデバイスである。ＲＡＭ２０２に格納されているプログラムは、同じくＲＡＭ２０２に格納されているＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の機能を必要に応じて使用し、ＲＡＭ２０２に一時記憶するデータの内容を読み書きしたり、外部記憶装置２０４上でデータを読み書きしたり、ネットワークインタフェースを通じてデータの送受信を行なったり、キーボード２０６やポインティングデバイス２０７からの入力を受け取ったり、ディスプレイ２０５に表示を行なったりすることで、所定の動作を行なう。
【００２１】
図３は、プリンタ１０２の構成の一例を示すブロック図である。２０８、２０９、２１０、２１１は図２の２０１、２０２、２０３、２０４に示したのと同じくそれぞれＣＰＵ、ＲＡＭ、ネットワークインタフェース、外部記憶装置である。２１２は印刷を行なうプリンタエンジンである。ＲＡＭ２０９に格納されているプログラムは、ネットワークインタフェース２１０を通じて受信した印刷指示にしたがって、プリンタエンジン２１２を制御して印刷を行なう。その際、ＲＡＭ２０９に一時記憶するデータの内容を読み書きしたり、外部記憶装置２１１上でデータを読み書きしたりすることができる。
【００２２】
［全体のブロック図］
次に、図４を参照して、本実施形態で使用するコンピュータ装置内のブロック構成について説明する。  
図４は、物理的に図１のような構成を取るクライアント１０１、プリンタ１０２、ネットワーク１０３において、本実施形態の動作に主として関わる論理ブロック、すなわちプログラムモジュール、ファイルエンティティ、メモリデータ、および通信経路の構成を示すブロック図である。
【００２３】
３０１はクライアント１０１のブロック境界を表わし、ここではＯＳの制御下にある環境を指す。インタプリタ３１０、レンダラー３１１、ＣＭＭ（Ｃｏｌｏｒ  Ｍａｎａｇｅｍｅｎｔ  Ｍｏｄｕｌｅ）３１２は、通常は外部記憶装置２０４に保存されているが、ユーザ、ＯＳ、あるいは別のプログラムから実行が指示されると、ＯＳの制御によりＲＡＭ２０２に読み込まれ、実行可能な状態となる。３０２は外部記憶装置２０４に保存されているＳＶＧ文書ファイルであり、インタプリタ３１０を含むプログラムはＯＳの機能を利用してＳＶＧ文書ファイル３０２の内容を読み書きすることが可能である。
【００２４】
３０３はＲＡＭ２０２に格納される中間コードデータであり、インタプリタ３１０、レンダラー３１１を含むプログラムは同じくＯＳの機能を利用して中間コードデータ３０３の内容を読み書きすることが可能である。３０４はＲＡＭ２０２に格納されるビットマップデータであり、レンダラー３１１を含むプログラムは同じくＯＳの機能を利用してビットマップデータ３０４の内容を読み書きすることが可能である。
【００２５】
３０９はＲＡＭ２０２に格納される設定で、レンダリング前カラーマッチングを行なうかレンダリング後カラーマッチングを行なうかを指定するものである。インタプリタ３１０はＳＶＧ文書ファイル３０２から中間コードデータ３０３への変換を行なうが、この変換動作は両言語の仕様から機械的に決定できるものである。したがって、本実施形態ではインタプリタ３１０の動作について詳述はせず、変換内容の提示のみ行なう。また、インタプリタ３１０はこの変換の際、カラーマッチング設定３０９を参照し、設定内容を中間コードデータ３０３に記述する。レンダラーは中間コードデータ３０３からビットマップデータ３０４を作成し、ネットワーク１０３を経由してプリンタ３１３のコントローラ３１４に送信する。この際、カラーマッチングのためにＣＭＭ３１２の機能を利用する。
【００２６】
ＣＭＭ３１２は必要なカラーマッチングを行なうため、ＳＶＧ文書ファイル３０２および中間コードデータ３０３の入力カラースペースを表わす入力プロファイル３０５、レンダラー３１１のレンダリングカラースペースを表わすレンダリングプロファイル３０６、プリンタ３１３のデバイスカラースペースを表わすプリンタプロファイル３０７、カラーマッチング時のマッチング方法を指定するレンダリングインテント３０８を入力として使用する。
【００２７】
ＣＭＭは通常ＯＳの一部あるいはＯＳによって利用可能なライブラリとして提供され、プログラムからはその機能を利用するのみであるので、本実施形態ではＣＭＭ３１２の動作について詳述はせず、その機能と利用例のみ示す。
【００２８】
３１３はプリンタ１０２のブロック境界を表わす。コントローラ３１４はＲＡＭ２０９に格納され、常に実行可能な状態にあるプログラムである。コントローラ３１４はネットワークインタフェース２１０を通じてレンダラー３１１からビットマップデータ３０４を受信すると、ＲＡＭ２０９にビットマップデータ３１５として格納し、その情報にしたがってプリンタエンジン２１２を制御して印刷を行なう。
【００２９】
［ＳＶＧ文書ファイル］
次に、図５〜図６を参照して、本実施形態で使用するＳＶＧ文書ファイルについて説明する。  
図５は、本実施形態で使用するＳＶＧ文書ファイル３０２の内容を示す図である。
【００３０】
１行目はＸＭＬ宣言（ＸＭＬ  Ｄｅｃｌａｒａｔｉｏｎ）であり、本ＳＶＧ文書ファイルがＸＭＬ  １．０仕様にしたがって記述されていることを示す。
【００３１】
２〜３行目は文書型宣言（Ｄｏｃｕｍｅｎｔ  Ｔｙｐｅ  Ｄｅｃｌａｒａｔｉｏｎ）であり、外部サブセットとしてＳＶＧ  １．１の文書型定義（Ｄｏｃｕｍｅｎｔ  Ｔｙｐｅ  Ｄｅｆｉｎｉｔｉｏｎ；ＤＴＤ）を参照している。
【００３２】
４〜５行目はルート要素としての＜ｓｖｇ＞要素の開始タグである。＜ｓｖｇ＞要素の幅・高さとしてそれぞれ２１．０ｃｍと２９．７ｃｍ（Ａ４サイズ）、ユーザ座標系として（０，０）−（２１０，２９７）を指定しているほか、ＳＶＧ名前空間と、準拠するＳＶＧのバージョン番号を指定している。
【００３３】
６行目は＜ｄｅｓｃ＞要素であり、本ＳＶＧ文書ファイルについての説明を記述する。＜ｄｅｓｃ＞要素の内容はＳＶＧ文書のレンダリングには使用されない。
【００３４】
７、１４、１７行目はコメント要素である。コメント要素の内容もＳＶＧ文書のレンダリングには使用されない。
【００３５】
８〜１３行目はグラデーションをレンダリングするためのＳＶＧペイントサーバの定義である。この定義により、以降のレンダリング要素のｆｉｌｌ属性またはｓｔｒｏｋｅ属性から“ＳａｍｐｌｅＧｒａｄｉｅｎｔ”という名前でＵＲＩ参照可能になる。ここでは、開始点において“Ｒ（赤）＝ＦＦH、Ｇ（緑）＝０、Ｂ（青）＝０”、終了点において“Ｒ（赤）＝ＦＦH、Ｇ（緑）＝ＦＦH、Ｂ（青）＝６６H”のグラデーションを定義している。
【００３６】
１４〜１５行目はグラデーションの矩形をレンダリングするための＜ｒｅｃｔ＞要素である。左上座標の値はユーザ座標系において（３０，３０）を指定し、幅と高さの値はユーザ座標系においてそれぞれ１２０と８０を指定している。矩形内部の塗りつぶしは“ＳａｍｐｌｅＧｒａｄｉｅｎｔ”グラデーション、矩形の外形線の色は“ｂｌｕｅ”（青色）、外形線の幅はユーザ座標系において２と指定している。
【００３７】
１６〜１７行目は半透明の円をレンダリングするための＜ｃｉｒｃｌｅ＞要素である。中心座標の値はユーザ座標系において（９０，１４０）を指定し、半径の値はユーザ座標系において５０を指定している。円内部の塗りつぶしの色は“Ｒ（赤）＝３３H、Ｇ（緑）＝ＦＦH、Ｂ（青）＝３３Hで”不透明度（アルファ値）が０．７、円の外形線の色は“ｂｌｕｅ”（青色）、外形線の幅はユーザ座標系において２と指定している。
【００３８】
１６行目はルート要素としての＜ｓｖｇ＞要素の終了タグであり、４〜５行目の開始タグに対応するものである。
【００３９】
図５に示したＳＶＧ文書ファイルをレンダリングした例を図６に示す。５０１が１４〜１５行目の＜ｒｅｃｔ＞要素に対応するグラデーションの矩形、５０２が１６〜１７行目の＜ｃｉｒｃｌｅ＞要素に対応する半透明の円である。５０３はＳＶＧ文書全体の外接矩形を示している。外接矩形５０３のサイズは幅２１．０ｃｍ、高さ２９．７ｃｍである。縦横の破線、破線交点の円、破線交点付近の座標値表示は、ポイントとなる座標の座標値を図示するためのものであり、実際のレンダリングには含まれない。
【００４０】
［中間コード］
次に、図７〜図８を参照して、本実施形態で使用する中間コードについて説明する。
【００４１】
図７は、本実施形態で使用する中間コードの仕様を示す図である。
【００４２】
６０１はレンダリング命令を表わすオペコードであり、数字で指定する。本実施形態では９種類のオペコードを定義している。オペコードは１バイト整数として中間コードデータ３０３に格納される。
【００４３】
６０２はオペコードを人間が識別しやすくするためのニーモニックである。ニーモニックは中間コードの内容をダンプして示すような場合にのみ使用し、中間コードデータ３０３には含まれない。
【００４４】
６０３はオペコードに対する引数を表わすオペランドである。オペランドの数とその意味はオペコードによって異なる。オペランドは２バイト浮動小数点数として中間コードデータ３０３に格納される。
【００４５】
本実施形態で使用する中間コードでは、単位系としてｍｍのみを使用する。オペランドに座標や長さを指定する場合は、すべてｍｍに換算した値を指定する。座標値はページ左上を原点とする絶対値で、Ｘ（横方向）（ｍｍ）とＹ（縦方向）（ｍｍ）の組で表わす。オペランドに色を指定する場合はＲＧＢ（赤・緑・青）あるいはＲＧＢＡ（赤・緑・青・アルファ値）で表わし、Ｒ（赤）、Ｇ（緑）、Ｂ（青）、Ａ（アルファ値）の値をそれぞれ０．０〜１．０の範囲で指定する。ＲＧＢで色が指定された場合は、アルファ値を１．０として扱う。
【００４６】
オペコード０（ニーモニックＰａｇｅＳｔａｒｔ）はページの開始を表わす。オペランドはページの幅Ｗ（ｍｍ）とページの高さＨ（ｍｍ）、およびレンダリング前カラーマッチングを行なうかレンダリング後カラーマッチングを行なうかのフラグＦである。Ｆが０の場合はレンダリング前カラーマッチングを表わし、Ｆが１の場合はレンダリング後カラーマッチングを表わす。
【００４７】
オペコード１（ニーモニックＰａｇｅＥｎｄ）はページの終了を表わす。オペランドはない。
【００４８】
オペコード２（ニーモニックＦｉｌｌ）は単色による塗りつぶしの色の指定である。Ｆｉｌｌで指定する塗りつぶしは以降のレンダリング命令すべてに適用される。オペランドは塗りつぶしの色ＲＧＢＡである。
【００４９】
オペコード３（ニーモニックＧｒａｄＬｉｎｅａｒ）は線形グラデーションによる塗りつぶしの指定である。線形グラデーションはグラデーションベクトルで指定する。オペランドはグラデーションベクトルの開始座標Ｘ１、Ｙ１と終了座標Ｘ２、Ｙ２、開始色Ｒ１Ｇ１Ｂ１、終了色Ｒ２Ｇ２Ｂ２である。図６の５０１に示したグラデーションの場合、グラデーションベクトルは開始座標（３０，３０）、終了座標（１５０，３０）となる。色はＦＦHで除算することで０．０〜１．０に正規化し、開始色（１．０，０．０，０．０）、終了色（１．０，１．０，０．４）となる。塗りつぶしの際、グラデーションベクトルは向きと直角方向に平行移動して使用される。したがって、開始座標と終了座標は、（３０，１１０）と（１５０，１１０）、（３０，２００）と（１５０，２００）など、向きと直角方向に平行移動したものなら何を用いても構わない。また、開始座標よりも前に塗りつぶしが必要になった場合、開始色を使用する。同じく、終了座標よりも後に塗りつぶしが必要になった場合、終了色を使用する。５０１のグラデーションの場合、前記のグラデーションベクトルに対しては、Ｘ＜３０における塗りつぶしには開始色（０．０，１．０，１．０）が使用され、Ｘ＞１５０における塗りつぶしには終了色（１．０，１．０，０．４）が使用される。ＦｉｌｌあるいはＧｒａｄＬｉｎｅａｒで指定する塗りつぶしのうち、最後に指定された方が以降のレンダリング命令すべてに適用される。
【００５０】
オペコード４（ニーモニックＳｔｒｏｋｅ）は外形線の指定である。Ｓｔｒｏｋｅで指定する外形線は以降のレンダリング命令すべてに適用される。オペランドは外形線の色ＲＧＢと、外形線の幅Ｗ（ｍｍ）である。本実施形態では外形線の色をＲＧＢで指定するので、アルファ値は前述のとおり１．０として扱う。
【００５１】
オペコード５（ニーモニックＰａｔｈＳｔａｒｔ）はパスの開始を表わす。オペランドはない。
【００５２】
オペコード６（ニーモニックＰａｔｈＥｎｄ）はパスの終了を表わす。オペランドはクローズフラグＦであり、“１”が指定された場合はパスの終了位置から開始位置まで直線をレンダリングすることで、パスを閉じることを表わす。“０”が指定された場合は何もしない。
【００５３】
オペコード７（ニーモニックＰａｔｈＭｏｖｅＴｏ）はパスのレンダリング位置の移動を表わす。ＰａｔｈＳｔａｒｔ命令とＰａｔｈＥｎｄ命令の間でのみ有効である。ＰａｔｈＭｏｖｅＴｏはレンダリング位置を移動するだけで、実際のレンダリングは行なわない。オペランドは移動位置座標Ｘ、Ｙである。
【００５４】
オペコード８（ニーモニックＰａｔｈＬｉｎｅＴｏ）はパスの現在位置からオペランドで指定された位置まで直線をレンダリングする。ＰａｔｈＳｔａｒｔ命令とＰａｔｈＥｎｄ命令の間でのみ有効である。オペランドは直線終端座標Ｘ、Ｙである。
【００５５】
オペコード９（ニーモニックＰａｔｈＡｒｃ）はパスの現在位置から円弧をレンダリングする。ＰａｔｈＳｔａｒｔ命令とＰａｔｈＥｎｄ命令の間でのみ有効である。ＰａｔｈＡｒｃは常に時計回り方向に円弧をレンダリングする。オペランドは円弧中心座標Ｘ、Ｙおよび円弧の長さＤである。円弧の長さＤは角度（°）で指定する。
【００５６】
図８は、図５に示した内容のＳＶＧ文書ファイル３０２をインタプリタ３１０が変換した中間コードデータ３０３の内容を示す図である。中間コードデータ３０３は１バイト整数のオペコードと２バイト浮動小数点数のオペランドのみが格納されたバイナリデータであるが、図８に示すのはそれを人間が識別しやすくするためにダンプ表示し、ニーモニックも付記したものである。
【００５７】
１行目はページ開始命令で、オペランドでページの幅と高さを２１０．０ｍｍと２９７．０ｍｍに指定している。また、レンダリング前カラーマッチングを行なうかレンダリング後カラーマッチングを行なうかも指定されている。ここでは１．０、すなわちレンダリング後カラーマッチングが指定されている。これは図５の＜ｓｖｇ＞要素の開始タグおよび図４の設定３０９に相当する。長さ指定をｃｍからｍｍに換算している。
【００５８】
２行目は以降のレンダリングに使用する線形グラデーションによる塗りつぶし命令で、オペランドでグラデーションベクトルを開始座標（３０．０ｍｍ，３０．０ｍｍ）、終了座標（１５０．０ｍｍ，３０．０ｍｍ）、開始色（Ｒ，Ｇ，Ｂ）＝（１．０，０．０，０．０）、終了色（Ｒ，Ｇ，Ｂ）＝（１．０，１．０，０．４）に指定している。図５のグラデーション定義および＜ｒｅｃｔ＞要素のｆｉｌｌ属性からのＵＲＬ参照に相当する。グラデーションベクトルの開始座標と終了座標を矩形の開始位置と終了位置から計算するとともに、色指定を０．０〜１．０に正規化している。
【００５９】
３行目は以降のレンダリングに使用する外形線命令で、オペランドで外形線の色を青色、すなわち（Ｒ，Ｇ，Ｂ）＝（０．０，０．０，１．０）に指定し、線幅を２．０ｍｍに指定している。図５の＜ｒｅｃｔ＞要素および＜ｃｉｒｃｌｅ＞要素のｓｔｒｏｋｅ属性およびｓｔｒｏｋｅ−ｗｉｄｔｈ属性に相当する。ここでは文字列表記の色指定からＲＧＢ表記に変換するとともに、長さ指定をユーザ座標系からｍｍに換算している。
【００６０】
４〜９行目は矩形のレンダリングを行なう命令群である。５行目のレンダリング位置移動命令、６〜８行目の直線レンダリング命令、９行目のパス終了命令の各オペランドの指定によって、座標（３０．０ｍｍ，３０．０ｍｍ）→（１５０．０ｍｍ，３０．０ｍｍ）→（１５０．０ｍｍ，１１０．０ｍｍ）→（３０．０ｍｍ，１１０．０ｍｍ）→（３０．０ｍｍ，３０．０ｍｍ）を直線で結ぶ閉パスがレンダリングされる。矩形内部は２行目の命令により線形グラデーションで塗りつぶされ、外形線は３行目の命令により青色かつ線幅２ｍｍでレンダリングされる。図５の＜ｒｅｃｔ＞要素および図６のレンダリング結果５０１に相当する。座標指定をユーザ座標系からｍｍに換算している。
【００６１】
１０行目は以降のレンダリングに使用する塗りつぶし命令で、オペランドで塗りつぶしの色を（Ｒ，Ｇ，Ｂ，Ａ）＝（０．２，１．０，０．２，０．７）に指定している。図５の＜ｃｉｒｃｌｅ＞要素のｆｉｌｌおよびｆｉｌｌ−ｏｐａｃｉｔｙ属性に相当する。色指定を０．０〜１．０に正規化している。
【００６２】
１１〜１４行目は円のレンダリングを行なう命令群である。１２行目のレンダリング位置移動命令および１３行目の円弧レンダリング命令によって、座標（９０．０ｍｍ，１４０．０ｍｍ）を中心とし、座標（９０．０ｍｍ，９０．０ｍｍ）から始まる、角度３６０．０度の円がレンダリングされる。円内部は１０行目の命令により（Ｒ，Ｇ，Ｂ，Ａ）＝（０．２，１．０，０．２，０．７）の単色で塗りつぶされ、外形線は３行目の命令により青色かつ線幅２ｍｍでレンダリングされる。図５の＜ｃｉｒｃｌｅ＞要素および図６のレンダリング結果５０２に相当する。座標指定や長さ指定をユーザ座標系からｍｍに換算している。
【００６３】
１５行目はページ終了命令である。オペランドはない。図５の＜ｓｖｇ＞要素の終了タグに相当する。
【００６４】
［ＣＭＭの機能］
次に、本実施形態で使用するＣＭＭ３１２のカラーマッチング機能について説明する。  ＣＭＭ．ｇｍは色域圧縮（ｇａｍｕｔ  ｍａｐｐｉｎｇ）を行なう。引数（ｃｏｌｏｒ，ｐｒｏｆ１，ｐｒｏｆ２，ｉｎｔｅｎｔ）は色指定ｃｏｌｏｒ，プロファイルｐｒｏｆ１、プロファイルｐｒｏｆ２、レンダリングインテントｉｎｔｅｎｔである。機能はｐｒｏｆ１が表現する色域の色ｃｏｌｏｒをｐｒｏｆ２が表現する色域の色にｉｎｔｅｎｔにしたがって圧縮し、ｐｒｏｆ１が表現する色域の色として返す。
【００６５】
ＣＭＭ．ｃｃは色域変換（ｃｏｌｏｒ  ｃｏｎｖｅｒｓｉｏｎ）を行なう。引数（ｃｏｌｏｒ，ｐｒｏｆ１，ｐｒｏｆ２）は色指定ｃｏｌｏｒ、プロファイルｐｒｏｆ１、プロファイルｐｒｏｆ２である。機能はｐｒｏｆ１が表現する色域の色ｃｏｌｏｒをｐｒｏｆ２が表現する色域の色に圧縮せずに変換し、ｐｒｏｆ２が表現する色域の色として返す。ｃｏｌｏｒで指定する色はｐｒｏｆ２が表現する色域に収まっていることが前提である。
【００６６】
［レンダラーの動作概要］
次に、図９〜図１０を参照して、レンダラー３１１の動作の概要について説明する。
【００６７】
図９〜図１０はレンダラー３１１が中間コードデータ３０３をレンダリングしてビットマップデータ３０４を作成し、プリンタ３１３のコントローラ３１４に送信する動作を示すフローチャートである。
【００６８】
ステップＳ８０１は動作の開始である。
【００６９】
ステップＳ８０２は変数の初期化処理である。ＳＶＧ文書ファイル３０２を変換した中間コードデータ３０３を変数ｄｌｃに読み込む。ｆｉｌｌはレンダリング命令に適用される単色塗りつぶしに使用する色を保持する変数で、（ｒ，ｇ，ｂ，ａ）はＲＧＢＡ表記の色の各要素を表わす。初期値は（１．０，１．０，１．０，１．０）、すなわち完全不透明（アルファ値１．０）の白色である。ｓｔｒｏｋｅはレンダリング命令に適用される外形線に使用する色と線幅を保持する変数で、（ｒ，ｇ，ｂ，ｗ）はＲＧＢ表記の色の各要素と線幅（ピクセル）を表わす。初期値は（０．０，０．０，０．０，１）、すなわち黒色・線幅１ピクセルである。ｇｒａｄはレンダリング命令に適用される線形グラデーション塗りつぶしに使用するグラデーションベクトルを保持する変数で、（ｘ１，ｙ１）と（ｘ２，ｙ２）はそれぞれ開始点と終了点の座標値（ピクセル）、（ｒ１，ｇ１，ｂ１）と（ｒ２，ｇ２，ｂ２）はそれぞれ開始点と終了点の色をＲＧＢ表記で表わす。初期値はない。ｐａｉｎｔは塗りつぶしに単色ｆｉｌｌを使うか線形グラデーションｇｒａｄを使うかを決める変数で、値としてｆｉｌｌまたはｇｒａｄを保持する。初期値はｆｉｌｌである。
【００７０】
ステップＳ８０３は中間コードデータｄｌｃから次のオペコードとオペランドを取得する処理である。取得したオペコードとオペランドをそれぞれ変数ｏｐとｏｐｅｒａｎｄに格納する。
【００７１】
ステップＳ８０４、Ｓ８０６、Ｓ８０９、Ｓ８１１、Ｓ８１３、Ｓ８１５、Ｓ８１８、Ｓ８２５、Ｓ８２７、Ｓ８２９は、オペコードｏｐの種別を判定し、それぞれのオペコードに応じて適切な処理を行なう。
【００７２】
ステップＳ８０４でオペコードｏｐが０（ニーモニックＰａｇｅＳｔａｒｔ）であればステップＳ８０５に進む。それ以外の場合はステップＳ８０６に進む。
【００７３】
ステップＳ８０５は種々の初期化処理を行なう。まず、ｉｎｐｕｔＰｒｏｆは入力プロファイル３０５の内容を保持する変数である。ｐｒｉｎｔｅｒＰｒｏｆはプリンタプロファイル３０７の内容を保持する変数である。ｉｎｔｅｎｔはレンダリングインテント３０８の内容を保持する変数である。これらの変数は本ステップの以降の処理において使用する。ｂｍｐはビットマップデータ３０４を格納するための変数である。ここでｂｍｐの要素ｗはビットマップデータの幅（ピクセル）を表わす。オペランドｏｐｅｒａｎｄのページ幅Ｗ（ｍｍ）をビットマップの単位系（ピクセル）に変換するために、出力解像度ｒｅｓを乗算する。ｂｍｐの要素ｈはビットマップデータの高さ（ピクセル）を表わす。オペランドｏｐｅｒａｎｄのページの高さＨ（ｍｍ）をビットマップの単位系（ピクセル）に変換するために、出力解像度ｒｅｓを乗算する。ｂｍｐの要素ｒｅｓはプリンタ３１３の出力解像度をＰＰＭ（Ｐｉｘｅｌｓ  Ｐｅｒ  Ｍｉｌｌｉｍｅｔｅｒ）で表わす。
【００７４】
ｂｍｐの要素ｐｄｅｆはレンダリング前カラーマッチングを行なうかレンダリングカラーマッチングを行なうかを格納する。オペランドｏｐｅｒａｎｄのフラグＦが１ならば値としてｐｏｓｔを保持し、それ以外の場合は値としてｐｒｅを保持する。
【００７５】
ｂｍｐの要素ｄａｔａ［］はビットマップデータを格納する配列で、大きさは横ｗ（ピクセル）、縦ｈ（ピクセル）である。ｄａｔａ［］の各要素（ｒ，ｇ，ｂ，ａ）は各ピクセルの色をＲＧＢＡ表記で表わす。ｄａｔａ［］の各要素の値は現在のｆｉｌｌの値、すなわち完全不透明（アルファ値１．０）の白色で初期化される。この際、変数ｐｄｅｆの値がｐｒｅならば、すなわちレンダリング前カラーマッチングが指定されていれば、ＣＭＭ．ｇｍ機能を利用して、ｆｉｌｌの値を入力色域（ｉｎｐｕｔＰｒｏｆが表現）からプリンタ３１３の色域（ｐｒｉｎｔｅｒＰｒｏｆが表現）に、レンダリングインテントｉｎｔｅｎｔで圧縮した値を格納する。ｂｍｐの要素ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］はビットマップの各ピクセルに対して、レンダリング前カラーマッチングを行なったか、レンダリング後カラーマッチングを行なったかを格納する配列で、大きさは配列ｄａｔａ［］と同じである。レンダリング前カラーマッチングを行なった場合は値としてｐｒｅを保持し、レンダリング後カラーマッチングを行なった場合は値としてｐｏｓｔを保持する。初期値は変数ｐｄｅｆの値である。処理が終了すればステップＳ８０３に戻る。
【００７６】
ステップＳ８０６でオペコードｏｐが１（ニーモニックＰａｇｅＥｎｄ）であればステップＳ８０７でプリンタ出力の定義済み処理を呼び出し、ステップＳ８０８で終了する。それ以外の場合はステップＳ８０９に進む。なお、プリンタ出力の定義済み処理については図１５を参照して後述する。
【００７７】
ステップＳ８０９でオペコードｏｐが２（ニーモニックＦｉｌｌ）であればステップＳ８１０に進む。それ以外の場合はステップＳ８１１に進む。
【００７８】
ステップＳ８１０は変数ｆｉｌｌの更新処理である。オペランドｏｐｅｒａｎｄで指定された色（Ｒ，Ｇ，Ｂ，Ａ）を変数ｆｉｌｌの各要素（ｒ，ｇ，ｂ，ａ）に格納する。また、以降の塗りつぶしに単色を使うよう、変数ｐａｉｎｔを値ｆｉｌｌに設定する。処理が終了すればステップＳ８０３に戻る。
【００７９】
ステップＳ８１１でオペコードｏｐが３（ニーモニックＧｒａｄＬｉｎｅａｒ）であればステップＳ８１２に進む。それ以外の場合はステップＳ８１３に進む。
【００８０】
ステップＳ８１２は変数ｇｒａｄの更新処理である。オペランドｏｐｅｒａｎｄで指定されたグラデーションベクトル（Ｘ１，Ｙ１，Ｘ２，Ｙ２，Ｒ１，Ｇ１，Ｂ１，Ｒ２，Ｇ２，Ｂ２）を変数ｇｒａｄの各要素（ｘ１，ｙ１，ｘ２，ｙ２，ｒ１，ｇ１，ｂ１，ｒ２，ｇ２，ｂ２）に格納する。また、以降の塗りつぶしにグラデーションを使うよう、変数ｐａｉｎｔを値ｇｒａｄに設定する。処理が終了すればステップＳ８０３に戻る。
【００８１】
ステップＳ８１３でオペコードｏｐが３（ニーモニックＳｔｒｏｋｅ）であればステップＳ８１４に進む。それ以外の場合はステップＳ８１５に進む。
【００８２】
ステップＳ８１４は変数ｓｔｒｏｋｅの更新処理である。オペランドｏｐｅｒａｎｄで指定された色（Ｒ，Ｇ，Ｂ）と線幅（Ｗ）を変数ｓｔｒｏｋｅの各要素（ｒ，ｇ，ｂ，ｗ）に格納する。この際、オペランドの単位系（ｍｍ）をビットマップの単位系（ピクセル）に変換するために、出力解像度ｂｍｐ．ｒｅｓを乗算する。処理が終了すればステップＳ８０３に戻る。
【００８３】
ステップＳ８１５でオペコードｏｐが4（ニーモニックＰａｔｈＳｔａｒｔ）であればステップＳ８１６に進む。それ以外の場合はＳ８１７からステップＳ８１８に進む。
【００８４】
ステップＳ８１６はパスレンダリング用の変数ｐａｔｈ［］とｃｕｒｓｏｒの準備処理である。ｐａｔｈ［］はパスの座標値を格納する配列である。ｐａｔｈ［］の各要素（ｘ，ｙ）はピクセル単位で表わした座標値である。ｃｕｒｓｏｒはパスの現在のレンダリング位置を格納する変数で、要素（ｘ，ｙ）は同じくピクセルで表わした座標値である。処理が終了すればステップＳ８０３に戻る。
【００８５】
ステップＳ８１８でオペコードｏｐが５（ニーモニックＰａｔｈＥｎｄ）であればステップＳ８１９に進む。それ以外の場合はステップＳ８２５に進む。
【００８６】
ステップＳ８１９はオペランドｏｐｅｒａｎｄのフラグＦが１かどうかの判定処理である。１であればステップＳ８２０に進み、それ以外の場合はステップＳ８２１に進む。
【００８７】
ステップＳ８２０は閉パスのレンダリング処理である。変数ｄｌｃの現在の読み込み位置に、オペコード８（ニーモニックＰａｔｈＬｉｎｅＴｏ）を挿入する。オペランドは現在のパスの開始位置であるｐａｔｈ［０］であるが、ビットマップの単位系（ピクセル）からオペランドの単位系（ｍｍ）に変換するために、出力解像度ｂｍｐ．ｒｅｓで除算する。また、再度パスの終了処理を行なうため、オペコード５（ニーモニックＰａｔｈＥｎｄ）も挿入する。今度は閉パスのレンダリング処理は必要ないので、オペランドは０とする。処理が終了すればＳ８３１からステップＳ８０３に戻る。
【００８８】
ステップＳ８２１はパスの塗りつぶしが必要かどうかを判定する処理である。パスの現在のレンダリング位置を表わす変数ｃｕｒｓｏｒの値と、パスの開始位置である変数ｐａｔｈ［０］の値とを比較し、等しければ閉パスなので塗りつぶしが必要であると判定し、ステップＳ８２２に進む。それ以外の場合はＳ８３１からステップＳ８０３に戻る。
【００８９】
ステップＳ８２２は塗りつぶしとして単色を使うかグラデーションを使うかを判定する処理である。変数ｐａｉｎｔの値がｆｉｌｌであれば単色塗りつぶしであると判定し、ステップＳ８２３に進む。それ以外の場合はグラデーション塗りつぶしとしてステップＳ８２４に進む。
【００９０】
ステップＳ８２３はパス単色塗りつぶしの定義済み処理を呼び出す処理である。パス単色塗りつぶしの定義済み処理については図１１を参照して後述する。
【００９１】
ステップＳ８２４はパスグラデーションの定義済み処理を呼び出す処理である。パスグラデーションの定義済み処理については図１３〜図１４を参照して後述する。
【００９２】
ステップＳ８２５でオペコードｏｐが７（ニーモニックＰａｔｈＭｏｖｅＴｏ）であればステップＳ８２６に進む。それ以外の場合はステップＳ８２７に進む。
【００９３】
ステップＳ８２６はパスの現在のレンダリング位置を表わす変数の更新処理である。オペランドｏｐｅｒａｎｄで指定された座標値（Ｘ，Ｙ）を変数ｃｕｒｓｏｒの各要素（ｘ，ｙ）に格納する。この際、オペランドの単位系（ｍｍ）をビットマップの単位系（ピクセル）に変換するために、出力解像度ｂｍｐ．ｒｅｓを乗算する。処理が終了すればＳ８３１からステップＳ８０３に戻る。
【００９４】
ステップＳ８２７でオペコードｏｐが８（ニーモニックＰａｔｈＬｉｎｅＴｏ）であればステップＳ８２８に進む。それ以外の場合はステップＳ８２９に進む。
【００９５】
ステップＳ８２８はビットマップデータｂｍｐに直線をレンダリングする処理である。開始点はパスの現在のレンダリング位置であるｃｕｒｓｏｒ（ｘ，ｙ）である。終了点はオペランドｏｐｅｒａｎｄで指定された座標値（Ｘ，Ｙ）であるが、オペランドの単位系（ｍｍ）をビットマップの単位系（ピクセル）に変換するために、出力解像度ｂｍｐ．ｒｅｓを乗算する。外形線は変数ｓｔｒｏｋｅの色（ＲＧＢ）と線幅（ピクセル）を使用する。レンダリングした直線の各座標値（ピクセル）を変数ｐａｔｈ［］に追加し、最後に追加した座標値（直線終了点）を変数ｃｕｒｓｏｒに格納する。処理が終了すればＳ８３１からステップＳ８０３に戻る。
【００９６】
ステップＳ８２９でオペコードｏｐが８（ニーモニックＰａｔｈＡｒｃＴｏ）であればステップＳ８３０に進む。それ以外の場合は図７に示した中間コード仕様に存在しないので、処理をスキップしてＳ８３１からステップＳ８０３に戻る。
【００９７】
ステップＳ８３０はビットマップデータｂｍｐに円弧をレンダリングする処理である。開始点はパスの現在のレンダリング位置であるｃｕｒｓｏｒ（ｘ，ｙ）である。中心点はオペランドｏｐｅｒａｎｄで指定された座標値（Ｘ，Ｙ）であるが、オペランドの単位系（ｍｍ）をビットマップの単位系（ピクセル）に変換するために、出力解像度ｂｍｐ．ｒｅｓを乗算する。角度はオペランドｏｐｅｒａｎｄで指定された角度Ｄ（°）である。外形線は変数ｓｔｒｏｋｅの色（ＲＧＢ）と線幅（ピクセル）を使用する。レンダリングした円弧の各座標値（ピクセル）を変数ｐａｔｈ［］に追加し、最後に追加した座標値を変数ｃｕｒｓｏｒに格納する。処理が終了すればＳ８３１からステップＳ８０３に戻る。
【００９８】
［パスの塗りつぶし］
次に、図１１を参照して、パス塗りつぶしの動作について説明する。  
図１１は、パスの塗りつぶしを行なう定義済み処理の動作を示すフローチャートである。本定義済み処理は図１０に示すフローチャートのステップＳ８２３から呼び出される。
【００９９】
ステップＳ９０１はパス塗りつぶし動作の開始である。ｂｍｐ、ｐａｔｈ、ｆｉｌｌは本定義済み処理呼び出し時の引数である。引数ｂｍｐは、図９〜図１０において、ステップＳ８０５で初期化し、ステップＳ８２３、Ｓ８２４、Ｓ８２８、Ｓ８３０で更新した変数ｂｍｐと同じ値を有する。引数ｐａｔｈは、図９〜図１０において、ステップＳ８１６で初期化し、ステップＳ８２８およびステップＳ８３０で更新した変数ｐａｔｈと同じ値を有する。引数ｆｉｌｌは、図９において、ステップＳ８０２で初期化し、ステップＳ８１０で更新した変数ｆｉｌｌと同じ値を有する。
【０１００】
ステップＳ９０２は変数の初期化処理である。ｃｏｏｒｄはビットマップデータｂｍｐ．ｄａｔａ［］を左上から右下に向かってスキャンする際の座標値を保持する変数で、（ｘ，ｙ）はピクセル単位の座標値を表わす。初期値は（０，０）で、ビットマップデータｂｍｐ．ｄａｔａの左上を表わす。図１１に示したフローチャートは変数ｃｏｏｒｄをループ変数とするループ処理になっている。
【０１０１】
ステップＳ９０３は変数ｃｏｏｒｄが表わす座標値が変数ｐａｔｈが表わすパス内かどうかを判定する処理である。ステップＳ８２１で変数ｐａｔｈが閉パスと判断された場合のみステップＳ８２３で本処理が呼び出されるので、変数ｐａｔｈが表わすパスは必ず閉パスであり、任意の座標値についてパス内かどうかを判定することができる。パス内と判定された場合はステップＳ９０４に進む。パス内でない場合はステップＳ９０７に進む。
【０１０２】
ステップＳ９０４は変数ｆｉｌｌが表わす色のアルファ値が１．０（完全不透明）かどうかを判定する処理である。アルファ値が１．０（完全不透明）であればアルファブレンドは必要ないと判断し、ステップＳ９０５に進む。アルファ値が１．０以外（透明）であればアルファブレンドの必要があると判断し、ステップＳ９０６に進む。
【０１０３】
ステップＳ９０５は変数ｆｉｌｌのアルファ値が１．０（完全不透明）の場合の塗りつぶし処理である。アルファブレンドは必要ないので、ビットマップデータｂｍｐ．ｄａｔａ［］の座標位置ｃｏｏｒｄの色を、変数ｆｉｌｌが表わす色で置き換える。
【０１０４】
ステップＳ９０６は変数ｆｉｌｌのアルファ値が１．０以外（透明）の場合に、アルファブレンドの定義済み処理を呼び出す処理である。アルファブレンドの定義済み処理は、戻り値として、アルファブレンド後の色（ＲＧＢＡ）と、レンダリング前カラーマッチングを行なったかレンダリング後カラーマッチングを行なったかのフラグ（ｐｒｅまたはｐｏｓｔ）とを返すので、ビットマップデータｂｍｐ．ｄａｔａ［］およびフラグｂｍｐ．ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］の座標位置ｃｏｏｒｄの値をそれぞれ戻り値で置き換える。アルファブレンドの定義済み処理については図１２を参照して後述する。
【０１０５】
ステップＳ９０７〜Ｓ９１０はループ処理である。
【０１０６】
ステップＳ９０７は変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘを１加算する処理である。
【０１０７】
ステップＳ９０８は変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘがビットマップデータの横方向の大きさｂｍｐ．ｗと等しくなったかどうかの判定処理である。等しければステップＳ９０９に進み、等しくなければステップＳ９０３に戻る
ステップＳ９０９は、変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘを０に初期化し、変数ｃｏｏｒｄの縦方向の値ｃｏｏｒｄ．ｙを１加算する処理である。
【０１０８】
ステップＳ９１０は変数ｃｏｏｒｄの縦方向の値ｃｏｏｒｄ．ｙがビットマップデータの縦方向の大きさｂｍｐ．ｈと等しくなったかどうかの判定処理である。等しければステップＳ９１１に進み、等しくなければステップＳ９０３に戻る。
【０１０９】
ステップＳ９１１は終了である。本定義済み処理の戻り値はないが、引数ｂｍｐで渡したビットマップデータｂｍｐ．ｄａｔａ［］およびフラグｂｍｐ．ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］が更新される。
【０１１０】
［アルファブレンド］
次に、図１２を参照して、アルファブレンドレンダリングの動作について説明する。  
図１２は、アルファブレンドを行なう定義済み処理の動作を示すフローチャートである。本定義済み処理は図１１に示すフローチャートのステップＳ９０６から呼び出される。
【０１１１】
ステップＳ１００１はアルファブレンドの開始である。ｃｏｌｏｒ１、ｃｏｌｏｒ２、ｐｒｅ＿ｏｓ＿ｐｏｓｔは本定義済み処理呼び出し時の引数である。引数ｃｏｌｏｒ１は、図９のステップ８０５で初期化し、図１１のステップＳ９０５、ステップＳ９０６その他で更新したビットマップデータｂｍｐ．ｄａｔａ［］の任意の座標における色の値である。引数ｃｏｌｏｒ２は、図９のステップＳ８０２で初期化し、ステップＳ８１０で更新した変数ｆｉｌｌの色の値である。引数ｐｒｅ＿ｏｒ＿ｐｏｓｔは、図９のステップＳ８０５で初期化し、図１１のステップＳ９０６、図１３のステップＳ１１１０で更新された変数ｂｍｐ．ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］の任意の座標におけるフラグの値である。
【０１１２】
ステップＳ１００２は変数の初期化処理である。ｒｅｔｕｒｎは戻り値を保持する変数で、要素（ｒ，ｇ，ｂ，ａ）はＲＧＢＡ表記の色の各要素を表わす。要素ｐｒｅ＿ｏｒ＿ｐｏｓｔはレンダリング前カラーマッチングを行なったか、レンダリング後カラーマッチングを行なったかを表わし、値としてｐｒｅまたはｐｏｓｔを保持する。ｉｎｐｕｔＰｒｏｆは入力プロファイル３０５の内容を保持する変数である。ｐｒｉｎｔｅｒＰｒｏｆはプリンタプロファイル３０７の内容を保持する変数である。ｉｎｔｅｎｔはレンダリングインテント３０８の内容を保持する変数である。
【０１１３】
ステップＳ１００３は引数ｐｒｅ＿ｏｒ＿ｐｏｓｔの値を判定する処理である。引数ｐｒｅ＿ｏｒ＿ｐｏｓｔの値がｐｒｅであればステップＳ１００４に進む。それ以外の場合はステップＳ１００５に進む。
【０１１４】
ステップＳ１００４はレンダリング前カラーマッチングを行なう場合のレンダリング処理である。まず、ＣＭＭ３１２のＣＭＭ．ｇｍ機能を利用して、引数ｃｏｌｏｒ２の値を入力色域（ｉｎｐｕｔＰｒｏｆが表現）からプリンタ３１３の色域（ｐｒｉｎｔｅｒＰｒｏｆが表現）に、レンダリングインテントｉｎｔｅｎｔで圧縮し、結果を再び変数ｃｏｌｏｒ２に格納する。引数ｐｒｅ＿ｏｒ＿ｐｏｓｔの値がｐｒｅであれば、その座標におけるビットマップデータはすでに色域圧縮が行なわれているので、引数ｃｏｌｏｒ１について処理は必要ない。次に、ｃｏｌｏｒ１の値と圧縮後のｃｏｌｏｒ２の値とでブレンド処理を行ない、結果を変数ｒｅｔｕｒｎ（ｒ，ｇ，ｂ，ａ）に格納する。最後に、変数ｒｅｔｕｒｎ．ｐｒｅ＿ｏｒ＿ｐｏｓｔに値ｐｒｅを格納する。ブレンド処理は、ｃｏｌｏｒ１の値（ｒ，ｇ，ｂ，ａ）とｃｏｌｏｒ２の値（ｒ，ｇ，ｂ，ａ）とから、以下の式により計算される。
【０１１５】
return.r＝color1.r×color1.a×（1−color2.a）＋color2.r×color2.a
return.g＝color1.g×color1.a×（1−color2.a）＋color2.g×color2.a
return.b＝color1.b×color1.a×（1−color2.a）＋color2.b×color2.a
return.a＝color1.a×（1−color2.a）＋color2.a
【０１１６】
ステップＳ１００５はレンダリング後カラーマッチングを行なう場合のレンダリング処理である。引数ｃｏｌｏｒ１の値と引数ｃｏｌｏｒ２の値とでブレンド処理を行ない、結果を変数ｒｅｔｕｒｎ（ｒ，ｇ，ｂ，ａ）に格納し、変数ｒｅｔｕｒｎ．ｐｒｅ＿ｏｒ＿ｐｏｓｔに値ｐｏｓｔを格納する。ブレンド処理はステップＳ１００４と同様である。
【０１１７】
ステップＳ１００６は終了である。変数ｒｅｔｕｒｎの値を戻り値として返す。
【０１１８】
［パスグラデーション］
次に、図１３〜図１４を参照して、パスグラデーションレンダリングの動作について説明する。  
図１３は、パスのグラデーション処理を行なう定義済み処理の動作を示すフローチャートである。本定義済み処理は図１０に示すフローチャートのステップＳ８２４から呼び出される。
【０１１９】
ステップＳ１１０１はパスグラデーション動作の開始である。ｂｍｐ、ｐａｔｈ、ｇｒａｄは本定義済み処理呼び出し時の引数である。引数ｂｍｐは、図９〜図１０において、ステップＳ８０５で初期化し、ステップＳ８２３、Ｓ８２４、Ｓ８２８、Ｓ８３０で更新した変数ｂｍｐと同じ値を有する。引数ｐａｔｈは、図９〜図１０において、ステップＳ８１６で初期化し、ステップＳ８２８およびステップＳ８３０で更新した変数ｐａｔｈと同じ値を有する。引数ｇｒａｄは、図９において、ステップＳ８０２で準備し、ステップＳ８１２で更新した変数ｇｒａｄと同じ値を有する。
【０１２０】
ステップＳ１１０２は変数の初期化処理である。ｃｏｏｒｄはビットマップデータｂｍｐ．ｄａｔａ［］を左上から右下に向かってスキャンする際の座標値を保持する変数で、（ｘ，ｙ）はピクセル単位の座標値を表わす。初期値は（０，０）で、ビットマップデータｂｍｐ．ｄａｔａの左上を表わす。図１３に示したフローチャートは変数ｃｏｏｒｄをループ変数とするループ処理になっている。ｉｎｐｕｔＰｒｏｆは入力プロファイル３０５の内容を保持する変数である。ｐｒｉｎｔｅｒＰｒｏｆはプリンタプロファイル３０７の内容を保持する変数である。ｉｎｔｅｎｔはレンダリングインテント３０８の内容を保持する変数である。変数ｃ１、ｃ２は、ＣＭＭ．ｇｍ機能を利用して、引数ｃｏｌｏｒ１、ｃｏｌｏｒ２を入力色域（ｉｎｐｕｔＰｒｏｆが表現）からプリンタ３１３の色域（ｐｒｉｎｔｅｒＰｒｏｆが表現）に、レンダリングインテントｉｎｔｅｎｔで圧縮した色値を格納する。
【０１２１】
ステップＳ１１０３は変数ｃｏｏｒｄが表わす座標値が変数ｐａｔｈが表わすパス内かどうかを判定する処理である。ステップＳ８２１で変数ｐａｔｈが閉パスと判断された場合のみステップＳ８２４で本処理が呼び出されるので、変数ｐａｔｈが表わすパスは必ず閉パスであり、任意の座標値についてパス内かどうかを判定することができる。パス内と判定された場合はステップＳ１１０４に進む。パス内でない場合はステップＳ１１１１に進む。
【０１２２】
ステップＳ１１０４は変数ｃｏｏｒｄが表わす座標値におけるグラデーションの色値を求めるための準備処理である。ステップＳ１１０４では図１４に示す値ａ、ｂ、ｃからｒａｔｉｏを計算し、それぞれの変数に格納する。
【０１２３】
ここで、図１４を参照して、値ａ、ｂ、ｃ、ｒａｔｉｏについて説明する。図１４は、引数ｇｒａｄが表わすグラデーションベクトルの開始位置、開始色、終了位置、終了色、および変数ｃｏｏｒｄが表わす座標位置、グラデーション色の関係を示す。１２０１がグラデーションベクトルの開始位置を表わす。１２０２がグラデーションベクトルの終了位置を表わす。１２０３が変数ｃｏｏｒｄの位置を表わす。１２０４は開始位置１２０１と終了位置１２０２の距離である。これを
【０１２４】
【数１】
2006341457.tif 000003
【０１２５】
とする。１２０５は開始位置１２０１と変数ｃｏｏｒｄの位置１２０３の距離である。これを
【０１２６】
【数２】
2006341457.tif 000004
【０１２７】
とする。１２０６は終了位置１２０２と変数ｃｏｏｒｄの位置１２０３の距離である。これを
【０１２８】
【数３】
2006341457.tif 000005
【０１２９】
とする。グラデーションベクトルは向きと直角方向に平行移動して使用されるので、変数ｃｏｏｒｄの位置におけるグラデーションの色は開始色から１２０７に示す距離だけ終了色方向に進んだ位置にある。ここで、距離１２０７である
【０１３０】
【数４】
2006341457.tif 000006
【０１３１】
を上記距離１２０４で除算した値を 
【０１３２】
【数５】
2006341457.tif 000007
【０１３３】
とする。この時、１２０８に示すようにｒａｔｉｏが０未満であれば、変数ｃｏｏｒｄの位置１２０３は開始位置１２０１よりも前（図では左側）に位置する。１２０９に示すようにｒａｔｉｏが０〜１の範囲であれば、変数ｃｏｏｒｄの位置１２０３は開始位置１２０１と終了位置１２０３との間に位置する。１２１０に示すようにｒａｉｔｏが１より大きければ、変数ｃｏｏｒｄの位置１２０３は終了位置１２０２よりも後（図では右側）に位置する。
【０１３４】
ステップＳ１１０５は変数ｒａｔｉｏが０未満かどうかの判定処理である。０未満であればステップＳ１１０６に進む。それ以外はステップＳ１１０７に進む。
【０１３５】
ステップＳ１１０６は変数ｃｏｏｒｄが表わす位置が変数ｇｒａｄが表わすグラデーションベクトルよりも前に位置する場合に、変数ｃｏｏｒｄの位置におけるグラデーションの色値ｃｏｌｏｒとして、グラデーションベクトルの開始色ｃ１を設定する処理である。
【０１３６】
ステップＳ１１０７は、変数ｒａｔｉｏが１より大きいかどうかの判定処理である。１より大きければステップＳ１１０８に進む。それ以外はステップＳ１１０９に進む。
【０１３７】
ステップＳ１１０８は変数ｃｏｏｒｄが表わす位置が変数ｇｒａｄが表わすグラデーションベクトルよりも後に位置する場合に、変数ｃｏｏｒｄの位置におけるグラデーションの色値ｃｏｌｏｒとして、グラデーションベクトルの終了色ｃ２を設定する処理である。
【０１３８】
ステップＳ１１０９は変数ｃｏｏｒｄが表わす位置が変数ｇｒａｄが表わすグラデーションベクトル内に位置する場合に、変数ｃｏｏｒｄの位置におけるグラデーションの色値ｃｏｌｏｒを計算する処理である。本ステップにおいては変数ｒａｔｉｏは０〜１の値を取り、これはグラデーションベクトルの開始色ｃ１から終了色ｃ２までの距離を１とした場合の、ｃ１からｃｏｌｏｒまでの距離を示す。したがって、ｃｏｌｏｒは以下の式により計算される。
【０１３９】
color＝（c2−c1）×ratio＋c1
【０１４０】
ステップＳ１１１０は引数ｂｍｐの更新処理である。ビットマップデータｂｍｐ．ｄａｔａ［］およびフラグｂｍｐ．ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］の座標位置ｃｏｏｒｄの値をそれぞれ変数ｃｏｌｏｒの値とｐｒｅとで置き換える。
【０１４１】
ステップＳ１１１１〜Ｓ１１１４はループ処理である。
【０１４２】
ステップＳ１１１１は変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘを１加算する処理である。
【０１４３】
ステップＳ１１１２は変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘがビットマップデータの横方向の大きさｂｍｐ．ｗと等しくなったかどうかの判定処理である。等しければステップＳ１１１３に進み、等しくなければステップＳ１１０３に戻る。
【０１４４】
ステップＳ１１１３は、変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘを０に初期化し、変数ｃｏｏｒｄの縦方向の値ｃｏｏｒｄ．ｙを１加算する処理である。
【０１４５】
ステップＳ１１１４は変数ｃｏｏｒｄの縦方向の値ｃｏｏｒｄ．ｙがビットマップデータの縦方向の大きさｂｍｐ．ｈと等しくなったかどうかの判定処理である。等しければステップＳ１１１５に進み、等しくなければステップＳ１１０３に戻る。
【０１４６】
ステップＳ１１１５は終了である。本定義済み処理の戻り値はないが、引数ｂｍｐで渡したビットマップデータｂｍｐ．ｄａｔａ［］およびフラグｂｍｐ．ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］が更新される。
【０１４７】
［プリンタ出力］
最後に、図１５を参照して、プリンタ出力の動作について説明する。  
図１５は、プリンタ出力を行なう定義済み処理の動作を示すフローチャートである。本定義済み処理は、図９に示すフローチャートのステップＳ８０７から呼び出される。
【０１４８】
ステップＳ１３０１は開始である。引数ｂｍｐは図９〜図１０において、ステップＳ８０５で初期化し、ステップＳ８２３、Ｓ８２４、Ｓ８２８、Ｓ８３０でレンダリングされた変数ｂｍｐと同じ値を有する。
【０１４９】
ステップＳ１３０２は変数の初期化処理である。ｃｏｏｒｄはビットマップデータｂｍｐ．ｄａｔａを左上から右下に向かってスキャンする際の座標値を保持する変数で、（ｘ，ｙ）はピクセル単位の座標値を表わす。図１５に示したフローチャートは主に変数ｃｏｏｒｄをループ変数とするループ処理で構成される。ｉｎｐｕｔＰｒｏｆは入力プロファイル３０５の内容を保持する変数である。ｐｒｉｎｔｅｒＰｒｏｆはプリンタプロファイル３０７の内容を保持する変数である。ｉｎｔｅｎｔはレンダリングインテント３０８の内容を保持する変数である。ｏｕｔｐｕｔｂｍｐ［］はプリンタ出力用のビットマップデータを保持する配列で、大きさはｂｍｐ．ｄａｔａ［］と同じである。
【０１５０】
ステップＳ１３０３は変数ｃｏｏｒｄが指す座標値のビットマップデータとｐｒｅまたはｐｏｓｔの値をｂｍｐ．ｄａｔａ［］とｂｍｐ．ｐｒｅ＿ｏｒ＿ｐｏｓｔ［］から取得する処理である。取得した値をそれぞれ変数ｄａｔａとｐｒｅ＿ｏｒ＿ｐｏｓｔに格納する。
【０１５１】
ステップＳ１３０４は変数ｐｒｅ＿ｏｒ＿ｐｏｓｔが値ｐｒｅかどうかの判定処理である。この判定が真になる場合、該ピクセルにおける色値はすでにプリンタ３１３の色域に圧縮されている。その場合はステップＳ１３０６に進む。それ以外の場合はステップＳ１３０５に進む。
【０１５２】
ステップＳ１３０５はＣＭＭ３１２のＣＭＭ．ｇｍ機能を利用して、ピクセルデータを入力色域（ｉｎｐｕｔＰｒｏｆが表現）からプリンタ３１３の色域（ｐｒｉｎｔｅｒＰｒｏｆが表現）にレンダリングインテントｉｎｔｅｎｔで圧縮する処理である。結果は変数ｄａｔａに上書きする。
【０１５３】
ステップＳ１３０６では、変数ｄａｔａの色値はすでにプリンタ３１３の色域（ｐｒｉｎｔｅｒＰｒｏｆが表現）に圧縮されているので、ＣＭＭ３１２のＣＭＭ．ｃｃ機能を利用して、入力色域（ｉｎｐｕｔＰｒｏｆが表現）からプリンタ３１３の色域（ｐｒｉｎｔｅｒＰｒｏｆが表現）に変換する処理である。結果はプリンタ出力用ビットマップデータｏｕｔｐｕｔｂｍｐ［］の変数ｃｏｏｒｄが指す座標位置に格納する。
【０１５４】
ステップＳ１３０７〜Ｓ１３１０はループ処理である。
【０１５５】
ステップＳ１３０７は変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘを１加算する処理である。
【０１５６】
ステップＳ１３０８は変数ｃｏｏｒｄの横方向の値ｃｏｏｒｄ．ｘがビットマップデータの横方向の大きさｂｍｐ．ｗと等しくなったかどうかの判定処理である。等しければステップＳ１３０９に進み、等しくなければステップＳ１３０３に戻る。
【０１５７】
ステップＳ１３０９は変数ｃｏｏｒｄの縦方向の値ｃｏｏｒｄ．ｙを１加算する処理である。
【０１５８】
ステップＳ１３１０は変数ｃｏｏｒｄの縦方向の値ｃｏｏｒｄ．ｙがビットマップデータの縦方向の大きさｂｍｐ．ｈと等しくなったかどうかの判定処理である。等しければステップＳ１３１１に進み、等しくなければステップＳ１３０３に戻る。
【０１５９】
ステップＳ１３１１はプリンタ出力用ビットマップデータｏｕｔｐｕｔｂｍｐ［］を作成し終わったので、プリンタ３１３のコントローラ３１４に送信する処理である。プリンタ３１３は受信したビットマップデータをＲＡＭ２０９にビットマップデータ３１５として格納し、プリンタエンジン２１２をビットマップデータ３１５にしたがって制御して出力を行なう。
【０１６０】
ステップＳ１３１２は終了である。戻り値はない。
【０１６１】
［その他の実施形態］
上記実施形態では中間コードデータをクライアント１０１でレンダリングしたが、クライアント１０１からプリンタ１０３に中間コードデータを送信することで、レンダリングはプリンタ１０３で行なうようにしてもよい。
【０１６２】
また上記実施形態では入力プロファイルが表現する入力色域（カラースペース）でレンダリングを行なったが、レンダリングプロファイル３０６が表現するレンダリング色域（カラースペース）でレンダリングしてもよいし、プリンタプロファイル３０７が表現するプリンタ色域（カラースペース）でレンダリングするようにしてもよい。
【０１６３】
また上記実施形態ではＰＤＬとしてＳＶＧ  １．１を使用したが、もちろんこれに限るものではなく、ＳＶＧのその他のバージョン、あるいは中間コードに変換可能なものであれば任意のＰＤＬを使用することが可能である。
【０１６４】
また上記実施形態では１ページの表示・印刷を行なう例を示したが、ＰＤＬが複数ページに対応するものであれば、中間コード、ビューワプログラム、コントローラをそれに対応させてもよい。
【０１６５】
また上記実施形態ではＳＶＧ文書につき一つの入力プロファイルとレンダリングインテントを使用したが、ＳＶＧ文書内に存在するオブジェクトの種類ごと、たとえばイメージ、グラフィックス、テキストオブジェクトごとに入力プロファイルとレンダリングインテントを指定できるようにしてもよい。さらに、個々のオブジェクトごとに入力プロファイルとレンダリングインテントを指定できるようにするシステムも考えられる。
【０１６６】
また上記実施形態ではグラデーションとして線形グラデーションのみを使用したが、これ以外にも、放射型グラデーションを始めとする任意のグラデーションに対応可能である。また、グラデーションベクトルより前や後についてはそれぞれグラデーションの開始色と終了色を使用するとしたが、これ以外にも、グラデーションベクトルを繰り返して使ったり、端点で折り返して使ったりする手法がある。
【０１６７】
また図１においてＰＣとプリンタはネットワーク接続されるとしたが、これ以外の接続形態であってもよく、たとえばＰＣとプリンタが直接接続されていたり、あるいはメモリカードやＣＤなどのメディアを通じてデータを受け渡しするような形態であっても、本発明の実施を妨げるものではない。
【０１６８】
また図２においてプログラムはＲＡＭ２０２に格納されるとしたが、これに限るものではなく、他の実施形態においてはプログラムを外部記憶装置２０４から読み込んで実行するようにしてもよいし、ネットワークインタフェース２０３を介して受信して実行するようにしてもよい。また、図２には示していないが、ＲＯＭ等の読み出し専用の内部記憶部から読み込んで実行するようにしてもよい。また、キーボード２０６やポインティングデバイス２０７の代わりに、あるいはそれらに加えて、音声入力等の他の入力装置を備えることもできる。また、ディスプレイ２０５、キーボード２０６、ポインティングデバイス２０７を他のコンピュータ装置と共有する場合も考えられる。
【０１６９】
また図４において中間コードデータ３０３、ビットマップデータ３０４、３１５はＲＡＭに保持したが、これ以外に、ファイルやデータベースその他の永続記憶に保存してもよい。また、同じＰＤＬ文書に対する中間コードデータはキャッシュしておいて、次回以降の処理に利用する形態も考えられる。
【０１７０】
また図７において中間コードの仕様を示したが、使用可能な中間コードはこの仕様に限定されるものではない。たとえば単位系はｍｍ以外の任意の単位系またはその組み合わせであってもよい。パスにはベジエ曲線、楕円弧、その他の数学的に表現可能な任意のパスを記述できるようにしてもよい。塗りは単色と線形グラデーションだけではなくブラシ、イメージ、放射型グラデーション等の複雑な塗りを行なえるようにしてもよい。色はＲＧＢ、ＲＧＢＡ以外にカラープロファイルによる指定、デバイスカラーによる指定、特色の指定なども行なえるようにしてもよい。また、オペコードとして１バイト整数、オペランドとして２バイト浮動小数点数を使うことも単なる一例であって、他のエンコード方法を使用しても構わない。あるいは、中間コードをプリンタ１０３に送信する形態においては、プリンタ１０３が解釈可能なＰＤＬを用いても構わない。
【０１７１】
また図１１、図１３において汎用的アルゴリズムを使用してビットマップ全体をスキャンし、各座標が引数ｐａｔｈが表現するパスに含まれるかどうかを判定したが、これ以外に、引数ｐａｔｈが表現するパスに含まれる座標をあらかじめ抽出し、それらの座標に対してレンダリングを行なったり、グラデーションについてはグラデーションベクトルの色値をあらかじめ計算しておいて、それをパス内に繰り返し適用する方法など、より効率の良い手法を採ったとしても、本発明は一般性を失わない。
【０１７２】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータがその供給されたプログラムコードを読み出して実行することによっても達成され得る。その場合、プログラムの機能を有していれば、その形態はプログラムである必要はない。
【０１７３】
従って、本発明の機能処理をコンピュータで実現するために、そのコンピュータにインストールされるプログラムコード自体およびそのプログラムを格納した記憶媒体も本発明を構成することになる。つまり、本発明の特許請求の範囲には、本発明の機能処理を実現するためのコンピュータプログラム自体、およびそのプログラムを格納した記憶媒体も含まれる。
【０１７４】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。  
プログラムを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ）などがある。
【０１７５】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、そのホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記憶媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷｅｂサーバも、本発明の請求の範囲に含まれるものである。
【０１７６】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【０１７７】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。  
さらに、記憶媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【０１７８】
【図１】本発明に係る一実施形態の概略構成を示す図である。
【図２】同実施形態におけるコンピュータ装置の構成を示す図である。
【図３】同実施形態におけるプリンタ装置の構成を示す図である。
【図４】同実施形態の全体構成を示すブロック図である。
【図５】同実施形態で使用するＳＶＧ文書ファイルの内容を示す図である。
【図６】同実施形態で使用するＳＶＧ文書ファイルのレンダリング例である。
【図７】同実施形態で使用する中間コード仕様を示す図である。
【図８】同実施形態で使用するＳＶＧ文書ファイルを変換した中間コードのダンプ表示例である。
【図９】同実施形態におけるレンダラーの動作を示すフローチャート（１）である。
【図１０】同実施形態におけるレンダラーの動作を示すフローチャート（２）である。
【図１１】同実施形態におけるパス単色塗りつぶし動作（定義済み処理）を示すフローチャートである。
【図１２】同実施形態におけるアルファブレンド動作（定義済み処理）を示すフローチャートである。
【図１３】同実施形態におけるパスグラデーション動作（定義済み処理）を示すフローチャートである。
【図１４】同実施形態におけるパスグラデーション動作（定義済み処理）を示すフローチャートである。
【図１５】同実施形態におけるプリンタ出力動作（定義済み処理）を示すフローチャートである。
【符号の説明】
【０１７９】
１０１…クライアント
１０２…プリンタ
１０３…ネットワーク
２０１…ＣＰＵ
２０２…ＲＡＭ
２０３…ネットワークインタフェース
２０４…外部記憶装置
２０５…ディスプレイ
２０６…キーボード
２０７…ポインティングデバイス
２０８…ＣＰＵ
２０９…ＲＡＭ
２１０…ネットワークインタフェース
２１１…外部記憶装置
２１２…プリンタエンジン
【図１】
2006341457.tif 000008
【図２】
2006341457.tif 000009
【図３】
2006341457.tif 000010
【図４】
2006341457.tif 000011
【図５】
2006341457.tif 000012
【図６】
2006341457.tif 000013
【図７】
2006341457.tif 000014
【図８】
2006341457.tif 000015
【図９】
2006341457.tif 000016
【図１０】
2006341457.tif 000017
【図１１】
2006341457.tif 000018
【図１２】
2006341457.tif 000019
【図１３】
2006341457.tif 000020
【図１４】
2006341457.tif 000021
【図１５】
2006341457.tif 000022