以下、本発明の好ましい実施形態について、添付図面を参照して説明する。図1は、本発明の一実施形態におけるプリンタ制御装置10を含むプリンタ1の電気的構成を示したブロック図である。
プリンタ1は、インクジェットヘッド19を有するインクジェットプリンタであり、インクジェットヘッド19に穿設されているノズルから紙に向けてインク滴を吐出して印刷を行う周辺装置である。また、プリンタ制御装置10は、プリンタ1全体の動作を制御すると共に、プリンタ1で印刷される画像データを生成する装置である。
プリンタ1は、PC100と通信ケーブルまたは無線通信を介して接続されており、PC100から送信される印刷命令を受信すると、その印刷命令と共にPC100から送信されるXPSによって記述された電子文書(以下、「XPS文書」と称する)等のデータをプリンタ制御装置10において解析し、そのデータ(XPS文書)に従った画像データを生成して、その生成された画像データに基づく画像を紙に印刷する。
このとき、XPS文書に、楕円形状の放射グラデーションの描画を指示する画像描画命令であるRadialGradientBrush要素が含まれていると、プリンタ1のプリンタ制御装置10によって、そのRadialGradientBrush要素で示される楕円形状の放射グラデーションが生成される。
プリンタ制御装置10は、その楕円形状の放射グラデーションの描画に係る負荷を抑制しつつ、その楕円形状の放射グラデーションを生成できるように構成されている。尚、ここで、楕円形状の放射グラデーションとは、中心点から楕円形状で放射状に色値が変化するグラデーションのことを示す。
次に、プリンタ1の詳細構成について説明する。プリンタ1は、図1に示すように、プリンタ制御装置10の他、操作パネル14、液晶ディスプレイ(以下、「LCD(Liquid Crystal Display)」と称する)15、搬送モータ(LFモータ)16、搬送モータ駆動回路17、インクジェットヘッド19、ヘッド用ドライバ20、インターフェイス21を備えている。
このうち、プリンタ制御装置10、操作パネル14、LCD15、搬送モータ駆動回路17、ヘッド用ドライバ20、インターフェイス21は、入出力ポート23を介して互いに接続されている。また、搬送モータ16は、搬送モータ駆動回路17に接続され、インクジェットヘッド19は、ヘッド用ドライバ20に接続されている。
プリンタ制御装置10は、CPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13を備えており、これらはバスライン22を介して互いに接続されている。バスライン22は、入出力ポート23に接続されており、プリンタ制御装置10の各部と、入出力ポート23に接続された各部との間で、信号の送受信が行われる。
CPU11は、ROM12やRAM13に記憶される固定値やプログラム、或いは、インターフェイス21を介してPC100より受信される各種信号などに従って、プリンタ1の制御や、プリンタ1で印刷される画像データの生成を行う演算装置である。
ROM12は、CPU11で実行される制御プログラム12aや、その制御プログラム12aで参照される固定値などを格納した書換不能な不揮発性のメモリである。図5のフローチャートに示す印刷処理を行うプログラムや、図6のフローチャートに示す楕円放射グラデーションラスタライズ処理を行うプログラムは、この制御プログラム12aに含まれる。
このうち、図5のフローチャートに示す印刷処理を行うプログラムは、インターフェイス21を介してPC100から印刷命令を受信した場合にCPU11によって実行されるもので、印刷命令と共に受信するXPS文書等のデータを解析して、そのデータに応じた画像を生成する。
また、図6のフローチャートに示す楕円放射グラデーションラスタライズ処理を行うプログラムは、XPS文書を受信した場合であって、そのXPS文書に楕円形状の放射グラデーションを描画するRadialGradientBrush要素が含まれている場合に、印刷処理(図5参照)を行うプログラムから、CPU11によって実行されるプログラムである。
この楕円放射グラデーションラスタライズ処理(図6参照)を行うプログラムがCPU11によって実行されると、RadialGradientBrush要素で示される楕円形状から、中心を原点とした真円形状にアフィン変換する変換行列が生成されると共に、楕円形状内に描画されるグラデーションパターンを、アフィン変換によって得られる真円形状内に描画すると仮定して、その真円形状内に同一の色値が描画される複数の真円をそれぞれ規定するベクトルデータが、真円毎に算出される。
そして、生成された変換行列の逆行列を算出し、その逆行列を用いて、真円形状内に同一の色値が描画される複数の真円のベクトルデータを逆アフィン変換することによって、楕円形状内に同一の色値が描画される複数の楕円をそれぞれ規定するベクトルデータを算出する。その後、その複数の楕円のベクトルデータに基づいて、各楕円内を対応する色値で描画することにより、RadialGradientBrush要素で示される楕円形状の放射グラデーションが生成される。尚、本実施形態における楕円形状の放射グラデーションの描画原理の詳細については、図3を参照して後述する。
RAM13は、書換可能な揮発性のメモリであり、各種のデータを一時的に記憶するためのメモリである。このRAM13には、XPSデータメモリ13a、グラデーションパラメータメモリ13b、変換行列メモリ13c、ページメモリ13dが設けられている。
XPSデータメモリ13aは、PC100から印刷命令とともに受信したXPS文書を一時的に格納するメモリである。インターフェイス21は、PC100よりXPS文書を受信すると、その受信したXPS文書をRAM13のXPSデータメモリ13aにDMA(Direct Memory Access)転送する。これにより、PC100から受信したXPS文書がXPSデータメモリ13aに格納される。
このXPSデータメモリ13aに格納されたXPS文書は、後述する印刷処理(図5参照)が実行されるCPU11によって読み出され、XPS文書の内容が解析される。そして、CPU11は、このXPS文書の内容に従った画像描画処理を行うことにより、プリンタ1で印刷する画像データを生成し、生成された画像データをページメモリ13dに格納する。
グラデーションパラメータメモリ13bは、XPS文書における楕円形状の放射グラデーションの描画を指示する画像描画命令である、RadialGradientBrush要素に含まれる、楕円形状を規定するパラメータと、その楕円形状内に描画されるグラデーションパターンを規定するパラメータとを格納するメモリである。
CPU11は、XPSデータメモリ13aに格納されたXPS文書中にRadialGradientBrush要素が含まれている場合に、印刷処理(図5参照)の中で実行される楕円放射グラデーションラスタライズ処理(図6参照)によって、そのRadialGradientBrush要素から、楕円形状を規定するパラメータと、その楕円形状内に描画されるグラデーションパターンを規定するパラメータとを抽出し、これらをグラデーションパラメータメモリ13bに格納する。尚、XPS文書に含まれるRadialGradientBrush要素と、その要素に含まれるパラメータの詳細については、図2を参照して後述する。
グラデーションパラメータメモリ13bに格納されたパラメータのうち、楕円形状を規定するパラメータは、楕円形状から、中心を原点とした真円形状にアフィン変換する変換行列を生成するために使用される。
また、グラデーションパラメータメモリ13bに格納されたパラメータのうち、楕円形状内に描画されるグラデーションパターンを規定するパラメータの1つである、グラデーションの中心座標(図2参照)は、上述の変換行列によってアフィン変換される。
そして、そのアフィン変換後のグラデーションの中心座標を含め、グラデーションパラメータメモリ13bに格納された、楕円形状内に描画されるグラデーションパターンを規定するパラメータによって、アフィン変換により得られる真円形状に対して、その真円形状内に同一の色値が描画される複数の真円のそれぞれを規定するベクトルデータを、その真円毎に算出する。
変換行列メモリ13cは、XPS文書のRadialGradientBrush要素によって示される楕円形状から真円形状にアフィン変換する変換行列を格納するメモリである。CPU11は、後述する楕円放射グラデーションラスタライズ処理(図6参照)を実行することにより、グラデーションパラメータメモリ13bに格納された楕円形状を規定するパラメータに基づいて、楕円形状から、中心を原点とした真円形状にアフィン変換する変換行列を生成し、その生成した変換行列を変換行列メモリ13cに格納する。
この変換行列メモリ13cに格納された変換行列は、グラデーションパラメータメモリ13bに格納された楕円形状内に描画されるグラデーションパターンを規定するパラメータのうち、グラデーションの中心座標(図2参照)をアフィン変換する場合に用いられる。
このとき、アフィン変換後のグラデーションの中心座標がY軸上の0又は正側にない場合、CPU11は、そのアフィン変換後のグラデーションの中心座標がY軸上の正側に配置されるように、変換行列に回転の要素を追加して、新たな変換行列を生成する。そして、新たに生成された変換行列は、変換行列メモリ13cに上書きによって格納される。尚、変換行列の追加される回転の要素については、図3を参照して後述する。
グラデーションパラメータメモリ13bに格納されたグラデーションの中心座標(図2参照)は、最終的に変換行列メモリ13cに格納された変換行列(即ち、回転の要素が追加された変換行列)によって、再びアフィン変換される。そして、その再度のアフィン変換後のグラデーションの中心座標を含む、グラデーションパラメータメモリ13bに格納された楕円形状内に描画されるグラデーションパターンを規定するパラメータに基づいて、アフィン変換によって得られる真円形状に対して、その真円形状内に同一の色値が描画される複数の真円のそれぞれを規定するベクトルデータを、その真円毎に算出する。
また、最終的に変換行列メモリ13cに格納された変換行列(即ち、回転要素が追加された変換行列)は、CPU11によって、その逆行列が算出される。そして、真円形状内に同一の色値が描画される複数の真円のベクトルデータを、算出した逆行列を用いて逆アフィン変換することで、RadialGradientBrush要素で示される楕円形状に対して、その楕円形状内に同一の色値が描画される複数の楕円のそれぞれを規定するベクトルデータを算出できる。
ページメモリ13dは、プリンタ制御装置10によって生成された、プリンタ1で印刷される画像データを、ビットマップ形式で格納するメモリである。楕円放射グラデーションラスタライズ処理(図6参照)によって生成された楕円形状の放射グラデーションや、その他XPS文書等のデータに従って生成された画像データが、このページメモリ13d上にラスタライズされる。
そして、印刷処理(図5参照)により、PC100から印刷命令と共に受信したデータに従って、印刷される画像データがページメモリ13d上にラスタライズされると、CPU11は、搬送モータ駆動回路17やヘッド用ドライバ20を駆動して、ページメモリ13dに格納された画像データから、紙にその画像データに対応する画像を紙に印刷する。
次に、操作パネル14は、プリンタの設定や、各種動作の指示を行うための入力ボタンによって構成されたユーザインターフェイスである。LCD15は、操作パネル14の操作に応じてメニューや動作状態などを表示するための表示デバイスである。ユーザは操作パネル14を操作することにより、その操作に対応する情報がLCD15に表示される。
搬送モータ(LFモータ)16は、プリンタ1の所定の位置に配置された紙を搬送方向の上流から下流又はその逆方向に搬送するためのステッピングモータであり、その駆動はCPU11からの指示により搬送モータ駆動回路17によって制御される。この搬送モータ16の駆動により、インクジェットヘッド19の下面(ノズル端の対向面)に紙が給送される。
インクジェットヘッド19は、複数のノズル、アクチュエータ(いずれも図示せず)を備えた印字ヘッドであり、シアン、マゼンタ、イエロー、ブラックの各インクに対応した4つのインクジェットヘッドが設けられている。また、ヘッド用ドライバ20は、インクジェットヘッド19に設けられたアクチュエータを駆動する駆動回路である。
CPU11は、ページメモリ13dに格納された画像データに基づいて、シアン、マゼンタ、イエロー、ブラックの各インクに対応した多値化データを生成し、その多値化データを、ゲートアレイ(図示せず)を介してヘッド用ドライバ20へ送信する。ヘッド用ドライバ20は、送信された多値化データに合った波形の駆動パルスを生成し、その駆動パルスを各ノズルに対応したアクチュエータに印加することによって、各ノズルからインク滴が吐出され、ページメモリ13dに格納された画像データに対応する画像が紙に印刷される。
インターフェイス21は、プリンタ1とPC100とのデータの送受信を制御するためのものであり、プリンタ1は、このインターフェイス21を介して、PC100から印刷命令および印刷すべき画像を示すデータ(XPS文書など)を受信する。
このとき、インターフェイス21は、PC100から印刷命令を受信すると、CPU11に対してその旨を通知する割り込み信号を送信する。また、インターフェイス21は、PC100からXPS文書を受信すると、そのXPS文書をRAM13に設けられたXPSデータメモリ13aにDMA転送する。
次いで、図2を参照して、XPS文書に含まれるRadialGradientBrush要素の詳細について説明する。図2は、RadialGradientBrush要素を説明する説明図であり、(a)には、RadialGradientBrush要素の例、及び、その要素で規定されるパラメータを示しており、(b)には、RadialGradientBrush要素で規定されたパラメータによって描画される楕円形状の放射グラデーションの例を示している。
RadialGradientBrush要素は、図2(a)に示すように、複数の属性およびサブ要素から構成されている。このうち、”Center”属性31、”RadiusX”属性33、”RadiusY”属性34は、楕円形状を規定するパラメータを与えるものである。一方、”GradientOrigin”属性32、RadialGradientBrush.GradientStops要素35は、楕円形状内に描画されるグラデーションパターンを規定するパラメータを与えるものである。
”Center”属性31は、図2(b)に示す楕円形状の中心座標(Cx,Cy)を与えるものである。ここで、楕円形状の中心とは、楕円形状の長軸および短軸が交わる点のことである。
”GradientOrigin”属性32は、図2(b)に示すグラデーションの中心座標(Gx,Gy)を与えるものである。ここで、グラデーションの中心とは、放射グラデーションにおける色の変化の始点(グラデーションの始点)のことである。
放射グラデーションは、このグラデーションの中心から、グラデーションにおける色の変化の終点(グラデーションの終点)であるRadialGradientBrush要素で規定される楕円形状の外周上の点までの間で、色が徐々に変化するように表現される。
尚、これら”Center”属性31,”GradientOrigin”属性32によって与えられるパラメータは、XPS文書によって示される印刷領域の左上端の位置を原点として、互いに直交する2つの座標軸(X軸、Y軸)で示される直交座標系によって表わされている(図2(b)参照)。
この直交座標系では、印刷領域の左右方向がX軸となり、左から右に向けてX軸の正方向が規定されている。一方、印刷領域の上下方向がY軸となり、上から下に向けてY軸の正方向が規定されている。
図2(a)に示したRadialGradientBrush要素の例では、楕円形状の中心座標は”Center”属性31より(150,150)が与えられる。また、グラデーションの中心座標は”GradientOrigin”属性32より(200,170)が与えられる。
一方、”RadiusX”属性33は、楕円形状におけるX軸方向の半径(以下、「X径」と称する)Rxを与えるものである。また、”RadiusY”属性34は、楕円形状におけるY軸方向の半径(以下、「Y径」と称する)Ryを与えるものである。
尚、”RadiusX”属性33および”RadiusY”属性34のパラメータによって規定される楕円形状は、X軸方向およびY軸方向にその楕円形状の長軸および短軸が設定されるようになっている。
従って、RxおよびRyのうち、値の小さい方が楕円形状の短軸の半径となり、値の大きい方が長軸の半径となる。また、楕円形状のX軸方向の長さは、図2(b)に示すように、2Rxとなり、Y軸方向の長さは2Ryとなる。
図2(a)に示したRadialGradientBrush要素の例では、X径は”RadiusX”属性33より「140」が与えられ、Y径は”RadiusY”属性34より「100」が与えられる。
一方、RadialGradientBrush.GradientStops要素35は、グラデーションの色値を規定するパラメータを与えるものである。この要素35は、更に2つのGradientStop要素35a,35bから構成されている。このGradientStop要素35a,35bは、ともに”Color”属性と、”Offset”属性とを含んでいる。
”Color”属性は、”Offset”属性で示される点における赤、緑、青それぞれの色値を与えるもので、6桁の16進数で与えられる。このうち、上位2桁の16進数が赤の色値(Rs,Re)を与え、続く2桁の16進数が緑の色値(Gs,Ge)を与え、残る2桁の16進数が青の色値(Bs,Be)を与える。
”Offset”属性は、”Color”属性で示される色値で表わされる点を規定するものである。例えば、”Offset”属性の値が「0」の場合、”Color”属性で示される色値がグラデーションの中心(グラデーションの始点)における色値であることを示し、”Offset”属性の値が「1」の場合、”Color”属性で示される色値がRadialGradientBrush要素で規定される楕円形状の外周上の点(グラデーションの終点)における色値であることを示す。
よって、GradientStop要素35aにより、図2(b)に示すように、グラデーションの中心(グラデーションの始点)における赤、緑、青の各色値Rs,Gs,Bsが与えられ、GradientStop要素35bにより、楕円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値Re,Ge,Beが与えられる。
図2(a)に示したRadialGradientBrush要素の例では、グラデーションの中心(グラデーションの始点)における赤、緑、青の各色値Rs,Gs,Bsは、GradientStop要素35aより、それぞれ「(FF)16」「(FF)16」「(00)16」が与えられる。
また、楕円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値Re,Ge,Beは、GradientStop要素35bより、それぞれ「(00)16」「(00)16」「(FF)16」が与えられる。尚、「(FF)16」は、16進数の”FF”(10進数の255)であることを示し、「(00)16」は、16進数の”00”(10進数の0)であることを示す。
このような複数の属性およびサブ要素を含むRadialGradientBrush要素によって、図2(b)に示すように、”Center”属性31により与えられる楕円形状の中心座標(Cx,Cy)から、印刷領域においてその楕円形状が描画される位置が特定され、”RadiusX”属性33および”RadiusY”属性34により与えられる楕円形状のX径RxおよびY径Ryから、その楕円形状における外周の形および大きさが特定される。そして、これらにより、印刷領域における楕円形状の外周上の点の位置が特定される。
また、”GradientOrigin”属性32により与えられるグラデーションの中心座標(Gx,Gy)によって、印刷領域におけるグラデーションの中心の位置が特定される。
そして、GradientStop要素35aにより与えられるグラデーションの中心(グラデーションの始点)における赤、緑、青の各色値Rs,Gs,Bsと、GradientStop要素35bにより与えられる楕円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値Re,Ge,Beとを、そのグラデーションの中心と楕円形状の外周上の点との距離に応じて内挿することにより、楕円形状内のグラデーションパターンが特定される。
次いで、図3を参照して、本実施形態における楕円形状の放射グラデーションの描画原理について説明する。図3は、その楕円形状の放射グラデーションの描画原理を説明する説明図である。なお、以下の説明において、次式に示す3行3列の行列を(a,b,c,d,e,f)と表記する。
本実施形態において、PC100から印刷命令と共に受信したデータがXPS文書であって、そのXPS文書にRadialGradientBrush要素が含まれていると、プリンタ制御装置10は、まず、図3(a)に示す各種パラメータ、即ち、楕円の中心座標(Cx,Cy)、X径Rx、Y径Ryといった楕円形状を規定するパラメータと、グラデーションの中心座標(Gx,Gy)、グラデーションの中心(グラデーションの始点)における赤、緑、青の各色値Rs,Gs,Bs、楕円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値Re,Ge,Beといった楕円形状内に描画されるグラデーションパターンを規定するパラメータとを、RadialGradientBrush要素から抽出する(図3(イ))。
尚、図3(a)は、RadialGradientBrush要素で規定されたパラメータによって描画される楕円形状の放射グラデーションの例を示す図であり、図2(b)と同一の図である。
次に、抽出した楕円形状を規定するパラメータを用いて、図3(a)に示す楕円形状を、図3(b)に示す半径がRxで中心座標が原点(0,0)である真円形状にアフィン変換する変換行列Aを、以下の(1)式によって生成する(図3(ロ))。
A=(1,0,0,Rx/Ry,−Cx,−(Rx/Ry)・Cy) ・・・(1)
尚、本実施形態では、以下、図3(a)に示す楕円形状を、図3(b)に示す半径がRxで中心座標が原点(0,0)である真円形状にアフィン変換する場合について説明するが、楕円形状を半径がRyで中心座標が原点(0,0)である真円形状にアフィン変換してもよいし、楕円形状を半径がR(Rは任意の値)で中心座標が原点(0,0)である真円形状にアフィン変換してもよい。
前者の場合、変換行列Aは以下の(2)式によって生成され、後者の場合、変換行列Aは(3)式によって生成される。
A=(Ry/Rx,0,0,1,−(Ry/Rx)・Cx,−Cy) ・・・(2)
A=(R/Rx,0,0,R/Ry,−(R/Rx)・Cx,−(R/Ry)・Cy) ・・・(3)
次いで、図3(a)に示すグラデーションの中心座標(Gx,Gy)を(1)式によって生成した変換行列Aを用いて、アフィン変換する(図3(ハ))。そして、図3(b)に示すアフィン変換後のグラデーションの中心がY軸上の0又は正側にあるか否かを判断し、アフィン変換後のグラデーションの中心がY軸上の0および正側にない場合には、そのグラデーションの中心および原点(0,0)を結んだ線分と、Y軸正方向とによって成す角度θ(図3(b)参照)を算出する(図3(ニ))。
そして、原点を中心に角度θだけ回転するアフィン変換を行う変換行列B’を以下の(4)式によって生成し、(5)式に示すように、この変換行列B’を変換行列Aに乗算することによって、変換行列Aに回転の要素を追加した変換行列Bを生成する(図3(ホ))。
B’=(cosθ,sinθ,−sinθ,cosθ,0,0) ・・・(4)
B=A・B’ ・・・(5)
尚、(1)式によって生成される変換行列Aによって変換されたグラデーションの中心が、Y軸上の0又は正側にある場合には、(1)式の変換行列Aがそのまま変換行列Bとして使用される。
そして、変換行列Bを用いて、再び図3(a)に示すグラデーションの中心座標(Gx,Gy)をアフィン変換することによって、図3(a)に示す楕円形状が、図3(c)に示すように、半径がRxで中心座標が原点(0,0)である真円形状に変換されると共に、グラデーションの中心がY軸上の0又は正側に配置される。
次いで、楕円形状内に描画されるグラデーションパターンを図3(c)に示す真円形状に対して描画すると仮定して、その真円形状内に同一の色値が描画される複数の真円のそれぞれを規定するベクトルデータを、その真円毎に算出する(図3(ヘ))。
そして、各真円のベクトルデータと、その真円内に描画すべき色値とを、その真円に対応付けてRAM13に格納する。尚、この真円形状内に同一の色値が描画される複数の真円におけるベクトルデータの算出方法については、図4を参照して後述する。
次に、図3(c)に示す真円形状に対して算出された、その真円形状内に同一の色値が描画される複数の真円のベクトルデータを、RAM13から読み出して、逆アフィン変換する(図3(ト))。この逆アフィン変換で用いられる変換行列は、図3(a)に示す楕円形状を図3(c)に示す真円形状にアフィン変換した変換行列Bの逆行列である。
従って、図3(c)に示す真円形状に対して算出された、その真円形状内に同一の色値が描画される複数の真円のベクトルデータを逆アフィン変換すると、図3(d)に示すように、RadialGradientBrush要素によって示される楕円形状内に同一の色値が描画される複数の楕円のそれぞれを規定するベクトルデータが算出される。
次いで、算出された複数の楕円のベクトルデータに基づいて各楕円を特定すると共に、それぞれの楕円に対し、各楕円における逆アフィン変換の変換元となる真円に対応付けられてRAM13に記憶された色値を読み出して、その楕円内をRAM13から読み出した対応する色値でそれぞれ描画することによって、図3(e)に示す楕円形状の放射グラデーションをビットマップ形式でページメモリ13dに格納し、ラスタライズを行う(図3(チ))。
このように、RadialGradientBrush要素によって示される楕円形状を、変換行列Bを用いたアフィン変換することによって真円形状に変換し、その真円形状内に同一の色値が描画される複数の真円のベクトルデータを真円毎に算出する。そして、その算出された各真円のベクトルデータを変換行列Bの逆行列を用いた逆アフィン変換を行うことによって、RadialGradientBrush要素で示される楕円形状内に同一の色値が描画される複数の楕円のベクトルデータを楕円ごとに算出する。
これにより、その算出された複数の楕円のベクトルデータに基づいて、各楕円内を対応する色値で描画すれば、RadialGradientBrush要素で示される楕円形状の放射グラデーションを生成することができる。
次いで、図4を参照して、真円形状における放射グラデーションにおいて、その真円形状内に同一の色値が描画される複数の真円のそれぞれを規定するベクトルデータの算出方法について説明する。図4は、その真円のベクトルデータの算出方法を説明する説明図である。
尚、放射グラデーションを生成する場合、光の3原色である赤、緑、青に対する放射グラデーションがそれぞれ独立して生成されるが、以下の説明では、赤に対する放射グラデーションを生成する場合の真円のベクトルデータの算出方法について説明する。緑および青に対する放射グラデーションについては、赤に対する放射グラデーションと同一の方法で真円のベクトルデータが算出されるので、その説明を省略する。
ここで、真円形状内に同一の色値が描画される複数の真円のベクトルデータを算出する場合、楕円形状の放射グラデーションにおけるグラデーションの中心(グラデーションの始点)の色値Rsを、真円形状の放射グラデーションにおいてY軸上の0又は正側に配置されたアフィン変換後のグラデーションの中心(グラデーションの始点)の色値とする。
また、楕円形状の放射グラデーションにおける楕円形状の外周上の点(グラデーションの終点)色値Reを、真円形状の放射グラデーションにおいて、アフィン変換によって得られた真円形状の外周上の点(グラデーションの終点)における色値とする。
そして、本実施形態では、真円形状の外側から順に、同一の色値が描画される真円の中心座標と半径とを算出し、その中心座標と半径とからその真円上の各点の座標を算出することによって、その真円のベクトルデータを求める。
具体的には、まず、真円形状の外周(真円0)の中心座標C0および半径r0を、それぞれ(0,0)及びRxと特定する。そして、この中心座標C0および半径r0とから、真円0上の各点の座標を算出して、その真円0のベクトルデータを算出する。また、真円0内部に描画される色値R0を真円形状の外周上の点(グラデーションの終点)における色値Reに設定する。
次いで、真円0に描画される色値R0とは異なる色値R1が描画される一つ内側の真円1について、その真円1の中心座標C1(C1x,C1y)および半径r1と、その真円1内部に描画される色値R1とを以下の(6)式〜(9)式を用いて算出する。
C1x=0 ・・・(6)
C1y=G’y・k/(Re−Rs) ・・・(7)
r1=r0−r0・k/(Re−Rs) ・・・(8)
R1=Re−k ・・・(9)
ここで、G’yは、変換行列Bによるアフィン変換後のグラデーションの中心のY座標である。
また、kは隣り合う真円内に描画される色値の変化量であり、本実施形態では、グラデーションの中心における色値Rsが真円形状の外周上の点における色値Reよりも大きい場合に負の値、例えば「−1」の値が設定され、グラデーションの中心における色値Rsが真円形状の外周上の点における色値Reよりも小さい場合に正の値、例えば「+1」の値が設定さる。尚、変化量kの絶対値は、人間の知覚や使用する色空間の特徴およびプリンタ1における色再現能力などを考慮して、色の変化が滑らかであると感じられる値を選べばよい。
そして、(6)式から(8)式によって算出された真円1の中心座標C1(C1x,C1y)および半径r1から、真円1上の各点の座標を算出して、その真円1のベクトルデータを算出する。
その後、真円2、真円3、・・・、真円n、・・・の中心座標、半径、および色値を、外側の真円から順に算出して、各真円の中心座標および半径から、それぞれの真円について真円上の各点の座標を算出し、その真円のベクトルデータをそれぞれ算出する。そして、この処理を、色値Rsで描画される真円のベクトルデータの算出が完了するまで繰り返し行う。尚、真円nの中心座標Cn(Cnx,Cny)、半径rnおよび色値Rnは以下の(10)式〜(13)式を用いて算出する。
Cnx=0 ・・・(10)
Cny=G’y・n・k/(Re−Rs) ・・・(11)
rn=r0−r0・n・k/(Re−Rs) ・・・(12)
Rn=Re−n・k ・・・(13)
また、上述したように、真円nのベクトルデータと色値Rnは、それぞれ真円nのパラメータとして、RAM13に格納される。
以上の方法によって、真円形状における放射グラデーションにおいて、その真円形状内に同一の色値が描画される複数の真円をそれぞれ規定するベクトルデータが算出される。尚、本実施形態において、変換行列Bを用いたアフィン変換によって、真円形状の放射グラデーションにおけるグラデーションの中心は、Y軸上の0又は正側に配置されているので、同一の色値を有する真円形状の中心座標を算出する場合、X座標は0に固定することができる。
換言すれば、同一の色値が描画される真円形状の中心座標をY座標のみを用いた一次元の関数として算出することができるので、各真円のベクトルデータを算出するときの演算量を削減することができ、よって、放射グラデーションの描画に係る負荷を抑制することができる。
また、変換行列Bを用いたアフィン変換によって、グラデーションの中心がY軸上の0又は正側に配置されることにより、アフィン変換後のグラデーションの中心が、常に真円形状の中心と同じか、それよりも正側に位置するように固定することができる。
次いで、図5を参照して、プリンタ制御装置10で実行される印刷処理の処理フローについて説明する。図5は、この印刷処理を示すフローチャートである。この処理は、インターフェイス21を介してPC100から受信した印刷命令に続くデータに従って、印刷すべき画像データを生成し、生成した画像データを印刷する処理で、インターフェイス21がCPU11に対して印刷命令を受信した旨を通知する割り込み信号を送信すると、CPU11によってその割り込みが検出されて、この処理の実行が開始される。
この印刷処理では、まず、印刷命令に続いてPC100から受信したデータがXPSに従って記述されたXPS文書であるか否かを判断する(S11)。その結果、XPS文書であると判断される場合には(S11:Yes)、次いで、インターフェイス21によってXPSデータメモリ13aにDMA転送されたXPS文書を、XPSデータメモリ13aから読み出して、その内容を解析し、XPS文書に含まれる要素の1つを取得する(S12)。
そして、S12の処理によって取得された要素が、RadialGradientBrush要素であるか否かを判断する(S13)。その結果、RadialGradientBrush要素であると判断される場合には(S13:Yes)、その取得された要素が楕円形状の放射グラデーションの描画命令であると判断し、後述する楕円放射グラデーションラスタライズ処理(図6参照)を実行する(S14)。
この楕円放射グラデーションラスタライズ処理により、描画に係る負荷を抑制しつつ、RadialGradientBrush要素によって示される楕円形状の放射グラデーションを生成することができる。そして、この生成された楕円形状の放射グラデーションがページメモリ13d上にラスタライズされる。S14の処理の後、S16の処理へ移行する。
一方、S13の処理の結果、S12の処理によって抽出された要素が、RadialGradientBrush要素でないと判断される場合には(S13:No)、その要素に応じたラスタライズ処理を実行し、生成された画像データをページメモリ13dに格納して(S15)、S16の処理へ移行する。
S16の処理では、S12の処理によって抽出された要素の他に、XPS文書に要素があるか否かを判断する。そして、S12の処理によって抽出された要素の他にXPS文書に要素があると判断される場合には(S16:Yes)、S12の処理へ回帰し、再びS12〜S16の処理を実行する。
そして、XPS文書に含まれる全ての要素がS12の処理によって抽出され、その全ての要素に対してS14又はS15の処理によってラスタライズ処理が実行された(S16:No)と判断されるまで、S12〜S16の処理を繰り返し実行する。これにより、XPS文書によって示される画像データが、ページメモリ13d上にラスタライズされる。
一方、S16の処理の結果、S12の処理によってXPS文書に含まれる全ての要素が抽出され、その全ての要素に対してS14又はS15の処理によるラスタライズ処理が実行されたと判断されると(S16:No)、S18の処理へ移行する。
また、S11の処理の結果、印刷命令に続いてPC100から受信したデータがXPSに従って記述されたXPS文書でないと判断される場合には(S11:No)、その印刷命令に続いてPC100から受信したデータの内容に従って、印刷用の画像データを生成し、その画像データをページメモリ13d上に格納する(S17)。そして、S18の処理へ移行する。
次いで、S18の処理では、S11からS17の処理によって生成されてページメモリ13dに格納された画像データに基づいて、搬送モータ駆動回路17およびヘッド用ドライバ20に対して信号を送信し、搬送モータ16およびインクジェットヘッド19を駆動することによって、紙に画像データに基づく画像を印刷する。そして、この印刷処理を終了する。
これにより、PC100より印刷命令を受信すると、その印刷命令に続くデータに基づいて画像データが生成され、その生成された画像データに基づく画像を紙に印刷させることができる。
また、この印刷処理では、PC100から印刷命令に続く画像データとしてXPS文書を受信した場合に、そのXPS文書を解析する。そして、そのXPS文書にRadialGradientBrush要素が含まれている場合には、後述する楕円放射グラデーションラスタライズ処理が実行される。これにより、プリンタ制御装置10は、描画に係る負荷を抑制しつつ、RadialGradientBrush要素によって示される楕円形状の放射グラデーションを生成できるようになっている。
次いで、図6を参照して、プリンタ制御装置10で実行される楕円放射グラデーションラスタライズ処理について説明する。図6は、この楕円放射グラデーションラスタライズ処理を示すフローチャートである。
この処理は、XPS文書に含まれるRadialGradientBrush要素によって示される楕円形状の放射グラデーションを生成する処理で、CPU11により実行される印刷処理の中で、印刷命令に続くデータがXPS文書であり、且つ、そのXPS文書に記載された要素の中にRadialGradientBrush要素が含まれる場合に実行される。以下、この楕円放射グラデーションラスタライズ処理を、図3に示した楕円形状の放射グラデーションの描画原理と対応付けながら説明する。
この楕円放射グラデーションラスタライズ処理では、まず、RadialGradientBrush要素から、楕円形状を規定するパラメータとして、楕円形状の中心座標(Cx,Cy)、長軸および短軸の半径であるX径Rx及びY径Ry(いずれも図2参照)を抽出し、これらをグラデーションパラメータメモリ13bに格納する(S21)。
次いで、RadialGradientBrush要素から、楕円形状内に描画されるグラデーションパターンを規定するパラメータとして、グラデーションの中心座標(Gx,Gy)、グラデーションの中心(グラデーションの始点)における赤、緑、青の各色値Rs,Gs,Bs、及び、楕円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値Re,Ge,Be(いずれも図2参照)を抽出し、これらもグラデーションパラメータメモリ13bに格納する(S22)。尚、S21及びS22の処理が、図3(イ)に相当する。
次に、グラデーションパラメータメモリ13bに格納された楕円形状を規定するパラメータを読み出し、RadialGradientBrush要素によって示される楕円形状(図3(a)参照)から、半径がRxで中心座標が原点(0,0)である真円形状(図3(b)参照)にアフィン変換する変換行列Aを、(1)式を用いて生成し、変換行列メモリ13cに格納する(S23)。
尚、S23の処理では、上述したように、変換行列Aを(2)式より生成して変換行列メモリ13cに格納することにより、楕円形状から、半径がRyで中心座標が原点(0,0)である真円形状にアフィン変換するようにしてもよい。
また、変換行列Aを(3)式より生成して変換行列メモリ13cに格納し、楕円形状から、半径がR(Rは任意の値)で中心座標が原点(0,0)である真円形状にアフィン変換するようにしてもよい。このS23の処理が、図3(ロ)に相当する。
S23の処理により、変換行列Aが生成されて、変換行列メモリ13cに格納されると、次いで、グラデーションパラメータメモリ13bに格納されたグラデーションの中心座標(Gx,Gy)を、変換行列メモリ13cに格納された変換行列Aを用いてアフィン変換する(S24)。このS24の処理が、図3(ハ)に相当する。
そして、S24の処理によって得られたアフィン変換後のグラデーションの中心座標が、Y軸上の0又は正側にあるか否かを判断する(S25)。その結果、そのアフィン変換後のグラデーションの中心座標が、Y軸上の0又は正側にあると判断される場合には(S25:Yes)、変換行列Aをそのまま変換行列Bとして、変換行列メモリ13cに格納された変換行列をそのまま保持し(S26)、S28の処理へ移行する。
一方、S25の処理の結果、アフィン変換後のグラデーションの中心座標が、Y軸上の0又は正側にないと判断される場合には(S25:No)、その変換後のグラデーションの中心および原点(0,0)を結んだ線分とY軸正方向とによって成す角度θ(図3(c)参照)を算出すると共に(図3(ニ)に相当)、変換行列メモリ13cに格納された変換行列Aに、(4)式および(5)式を用いて、原点(0,0)を中心とした角度θの回転操作を追加して、変換行列Bを生成し(図3(ホ)に相当)、この変換行列Bを変換行列メモリ13cに上書きして格納する(S27)。そして、S28の処理へ移行する。
このように、S25からS27の処理を実行することによって、RadialGradientBrush要素によって示される楕円形状(図3(a)参照)を、半径がRxで中心座標が原点(0,0)である真円形状にアフィン変換すると共に、グラデーションの中心をY軸上の0又は正側に配置する(図3(c)参照)変換行列Bを生成することができる。
S28の処理では、グラデーションパラメータメモリ13bに格納されたグラデーションの中心座標(Gx,Gy)を、今度は変換行列Bを用いてアフィン変換する。これにより、グラデーションの中心がY軸上の0又は正側に配置される。
次いで、楕円形状内に描画されるグラデーションパターンを、図3(c)に示す半径がRxで中心座標が原点(0,0)である真円形状内に描画すると仮定して、その真円形状内に同一の色値が描画される複数の真円をそれぞれ規定するベクトルデータを、その真円毎に算出する(S29)。
この処理では、グラデーションパラメータメモリ13bから、グラデーションの中心(グラデーションの始点)における赤、緑、青の各色値Rs,Gs,Bsを読み出し、これら各色値Rs,Gs,BsをY軸上の0又は正側に配置されたアフィン変換後のグラデーションの中心(グラデーションの始点)における赤、緑、青の各色値とする。
また、グラデーションパラメータメモリ13bから、楕円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値Re,Ge,Beを読み出し、これら各色値Re,Ge,Beを、アフィン変換によって得られる真円形状の外周上の点(グラデーションの終点)における赤、緑、青の各色値とする。
そして、図4を参照して上述した算出方法によって、真円形状内に同一の色値が描画される複数の真円のベクトルデータを算出する。そして、算出された各真円のベクトルデータと、その真円内部に描画される色値とを、各々の真円に対応付けて、RAM13に格納する。尚、S29の処理が、図3(ヘ)に相当する。
S29の処理の後、S30の処理では、S26又はS27の処理によって変換行列メモリ13cに保持または格納された変換行列Bの逆行列Cを算出する。そして、この算出された逆行列Cを用いて、S29の処理によってRAM13に格納された各真円のベクトルデータを逆アフィン変換する(S31)。これにより、RadialGradientBrush要素で示される楕円形状内に同一の色値が描画される、図3(d)のような複数の楕円をそれぞれ規定するベクトルデータが、楕円ごとに算出される。尚、このS31の処理が、図3(ト)に相当する。
その後、逆アフィン変換によって算出された同一の色値が描画される複数の楕円のベクトルデータに基づいて各楕円を特定すると共に、それぞれの楕円に対し、その楕円における逆アフィン変換の変換元となる真円に対応付けられてRAM13に記憶された色値を読み出して、その楕円内をRAM13から読み出した対応する色値でそれぞれ描画する(S32)。
これにより、図3(e)に示すように、RadialGradientBrush要素で示される楕円形状の放射グラデーションを生成することができ、この放射グラデーションをビットマップ形式でページメモリ13dに格納することにより、ラスタライズが行われる。尚、このS32の処理が、図3(チ)に相当する。
以上のように、プリンタ制御装置10において、この楕円放射グラデーションラスタライズ処理が実行されると、楕円形状よりアフィン変換される真円形状に対して、同一の色値が描画される複数の真円のベクトルデータが算出される。仮に、楕円形状内に同一の色値が描画される楕円のベクトルデータを、RadialGradientBrush要素より抽出されるパラメータから直接算出すれば、楕円の長径および短径を考慮しなければならず、その演算が複雑になるが、本実施形態では、半径だけを考慮して演算すればよく、そのベクトルデータの算出に係る演算を簡単に行うことができる。また、楕円形状から真円形状へのアフィン変換やアフィン逆変換は、楕円の短径方向または長径方向の単純な拡大・縮小処理や、回転操作によって行うことができる。よって、楕円形状のグラデーションの描画に係る負荷を抑制することができる。
そして、この楕円のベクトルデータによって特定される複数の楕円内に、対応する色値を描画することによって、楕円形状の放射グラデーションが生成されるので、RadialGradientBrush要素により示される楕円形状の放射グラデーションを容易に生成することができる。
従って、XPSにより記述された文書に、RadialGradientBrush要素が存在する場合に、描画に係る負荷を抑制しつつ、そのRadialGradientBrush要素によって示される楕円形状の放射グラデーションを生成することができる。
また、アフィン変換後のグラデーションの中心位置が0又はY軸上に設定されるので、Y軸に沿って同一の色値の描画される複数の真円の中心位置を算出しながら、その真円のベクトルデータを算出する。これにより、同一の色値が描画される真円の中心位置をそのY座標によって示される一次元の関数を用いて算出することができる。よって、真円のベクトルデータを算出するときの演算量をより削減することができ、放射グラデーションの描画に係る負荷を更に抑制することができる。
以上、本実施形態におけるプリンタ制御装置10によれば、楕円形状の放射グラデーションを生成する場合に、楕円形状を真円形状にアフィン変換したうえで、同一の色値が描画される真円を示すベクトルデータを算出し、このベクトルデータを逆変換することによって、楕円形状のグラデーションにおける同一の色値が描画される真円を示すベクトルデータを算出するので、放射グラデーションの描画に係る負荷を抑制しつつ、楕円形状の放射グラデーションを生成することができる。
また、本実施形態におけるプリンタ1によれば、PC100からの印刷命令に続いて受信されるデータの中に楕円形状の放射グラデーションの描画命令があると、その描画命令から楕円形状の放射グラデーションがプリンタ制御装置10によって生成されるので、楕円形状の放射グラデーションを印刷する場合に、描画に係る負荷を抑制しつつ、楕円形状の放射グラデーションを生成して、その印刷を行うことができる。
以上、実施形態に基づき本発明を説明したが、本発明は上述した実施形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
例えば、上記実施形態では、画像描画命令であるXPS文書のRadialGradientBrush要素で示される楕円形状の短軸および長軸が、それぞれX軸方向またはY軸方向に設定されている場合について説明したが、必ずしもこれに限られるものではなく、楕円形状の短軸および長軸が任意の方向に設定されていてもよい。
この場合、画像描画命令で示される楕円形状の短軸および長軸が、X軸方向またはY軸方向に設定されるように、その楕円形状を回転させるアフィン変換を行った上で、図3を参照して説明した描画原理に基づいて楕円形状の放射グラデーションを生成し、その後、短軸および長軸の方向を画像描画命令で示される方向に戻すために、得られた楕円形状の放射グラデーションに対して、逆アフィン変換を行うようにしてもよい。
上記実施形態では、RadialGradientBrush要素に含まれるRadialGradientBrush.GradientStops要素によって、グラデーションの中心(グラデーションの始点)および楕円形状の外周上の点(グラデーションの終点)における色値が規定される場合について説明したが、このRadialGradientBrush.GradientStops要素に、グラデーションの始点および終点の間の任意の点における色値を規定するGradientStop要素が含まれる場合であっても、本発明を適用可能である。
この場合、任意の点における色値を規定するGradientStop要素の”Offset”属性で示される値は、グラデーションの始点・終点間の距離を「1」としたときの、このGradientStop要素で色値が規定される任意の点とグラデーションの始点との距離dを表しているので、真円形状に対してグラデーションを描画するときには、真円形状のグラデーションの中心(グラデーションの始点)から上記距離dだけ離れた点における色値が、上記GradientStop要素で規定される任意の点における色値となるようにすればよい。
上記実施形態では、楕円放射グラデーションラスタライズ処理(図6参照)において、真円形状に対して、同一の色値が描画される複数の真円をそれぞれ示すベクトルデータを算出した後、変換行列Bの逆行列Cを算出する場合について説明したが、必ずしもこれに限られるものではなく、変換行列Bを生成したのち、真円のベクトルデータを逆アフィン変換する前までの間に逆行列Cを算出すればよい。
上記実施形態では、PC100より受信される印刷命令に続くデータがXPS文書であり、このXPS文書に楕円形状の放射グラデーションの描画命令であるRadialGradientBrush要素が含まれると、図6に示す楕円放射グラデーションラスタライズ処理を実行する場合について説明したが、必ずしもこれに限られるものではなく、PC100からの印刷命令に続くPDLによって記述されたデータに、楕円形状の放射グラデーションの描画命令が含まれていれば、図6に示す楕円放射グラデーションラスタライズ処理を実行するようにしてもよい。
上記実施形態では、プリンタ制御装置10がプリンタ1内部に設けられる場合について説明したが、必ずしもこれに限られるものではなく、プリンタ制御装置10は、プリンタ1の外部に設けられ、プリンタ制御装置10がプリンタ1と、通信ケーブルや無線通信によって接続されていてもよい。また、プリンタ制御装置10がPC100内部に設けられていてもよい。
上記実施形態では、プリンタ制御装置10において図6に示す楕円放射グラデーションラスタライズ処理が実行され、プリンタ1において印刷される楕円形状の放射グラデーションを生成する場合について説明したが、この楕円放射グラデーションラスタライズ処理の実行は、プリンタ制御装置10の他、楕円形状の放射グラデーションを出力するデバイスを制御する装置においても適用可能である。
例えば、ディスプレイに楕円形状の放射グラデーションを表示させる場合に、そのディスプレイを制御する装置において、図6に示す楕円放射グラデーションラスタライズ処理を実行し、ディスプレイへの表示用画像データを格納するフレームメモリに対し、その楕円放射グラデーションラスタライズ処理により生成された楕円形状の放射グラデーションをラスタライズしてもよい。
上記実施形態では、プリンタ1が記録媒体として紙に印刷する場合について説明したが、必ずしもこれに限られるものではなく、布やプラスチック、ビニールなどに印刷されてもよい。
上記実施形態では、アフィン変換後のグラデーションの中心がY軸上の0又は正側に配置されるように変換行列Bを生成する場合について説明したが、アフィン変換後のグラデーションの中心がY軸上の0又は負側に配置されるように変換行列Bを生成してもよい。また、アフィン変換後の中心がX軸上の0又は正側に配置されるように変換行列Bを生成してもよいし、X軸上の0又は負側に配置されるように変換行列Bを生成してもよい。