以下、発明を実施するための形態について、図面を用いて詳細に説明する。
[1.第1の実施の形態]
[1−1.カラープリンタの構成]
まず第1の実施の形態について説明する。図1に、カラープリンタ1の機能構成を示す。
カラープリンタ1は、データ受信部2と、PDL(Page Description Language)データ解析部3と、カラーマッチング処理部4と、データ格納部5と、印刷イメージ生成部6と、印刷部7とで構成される。
データ受信部2は、外部から送信される印刷用データであるPDLデータを受信するようになっている。
PDLデータ解析部3は、データ受信部2が受信したPDLデータを解析して、図2に示すような中間コードMcを生成するようになっている。この中間コードMcについて詳しくは後述する。
カラーマッチング処理部4は、PDLデータ解析部3によりPDLデータを解析して得られるRGBカラー情報を、オブジェクト(図形、文字、イメージ)の種別に基づいて、カラープリンタ1のプリンタ特性に合わせたCMYカラー情報に色変換するようになっている。
データ格納部5は、PDLデータ解析部3により生成された中間コードMcなどを格納するようになっている。印刷イメージ生成部6は、PDLデータ解析部3により生成された中間コードMcに基づき、印刷イメージを生成するようになっている。
印刷部7は、印刷イメージ生成部6により生成された印刷イメージに基づき、印刷用紙に印刷を行うようになっている。
また、上述の印刷イメージ生成部6は、中間コード判別部10と、図形描画部11と、文字描画部12と、イメージ描画部13と、描画処理部14と、黒生成処理部15とで構成される。
中間コード判別部10は、データ解析部3により生成された中間コードMcを判別するようになっている。図形描画部11、文字描画部12、イメージ描画部13は、それぞれ、中間コードMcに基づいて、図形、文字、イメージの描画を行うようになっている。
描画処理部14は、画素単位の描画処理及びROP演算を行うことで印刷イメージを生成するようになっている。この描画処理部14が行うROP処理は、ROP3に基づく処理であり、このROP3では、ソース、パターン、ディスティネーションに対して、所定の論理演算(これをROP演算と呼ぶ)を行うことで、オブジェクト(図形、文字、イメージ)同士の重なりを実現するようになっている。
尚、ソースは、描画する画像、パターンは、描画する画像の塗り潰しパターン、ディスティネーションは、描画先の画像であり、詳しくは後述するが、オブジェクト(図形、文字、イメージ)は、ソース、パターン又はディスティネーションに指定されて、論理演算されるようになっている。
黒生成処理部15は、描画処理部14により生成された印刷イメージに含まれるCMYカラー情報とオブジェクト情報をもとに黒生成を行うことで印刷イメージのカラー情報をCMYカラーからCMYKカラーに変換するようになっている。
さらに、上述のデータ格納部5は、図示しないRAM(Random Access Memory)やHDD(Hard Disk Drive)でなり、中間コード格納部16と、印刷イメージ格納部17と、ROP情報格納部18と、カラー情報格納部19とで構成される。
中間コード格納部16は、中間コードMcを格納するようになっている。印刷イメージ格納部17は、印刷イメージを格納するようになっている。
ROP情報格納部18は、PDLデータから得られたROP情報を一時保存するようになっている。カラー情報格納部19は、PDLデータから得られたカラー情報を一時保存するようになっている。これらROP情報及びカラー情報について詳しくは後述する。
カラープリンタ1は、このような構成となっている。尚、カラープリンタ1の各部の詳しい動作については後述する。
[1−2.中間コードのデータ構造]
次に、PDLデータ解析部3によって生成される中間コードMcについて説明する。図2に、この中間コードMcのデータ構造の一例を示す。
この中間コードMcは、複数のコードCdで構成される。実際、図2に示す例では、ROP指定コードCd10、Cd20、Cd30、色指定コードCd11、Cd21、パターン指定コードCd12、Cd13、図形指定コードCd14、文字指定コードCd22、Cd23、イメージ指定コードCd31、Cd32、終端コードCd99が、中間コードMcに含まれている。
また、これら複数のコードCdは、基本的に、オブジェクト(図形、文字、イメージ)単位で先頭から順に配置されるようになっている。
例えば、ROP指定コードCd10、色指定コードCd11、パターン指定コードC12、C13、図形指定コードCd14は、オブジェクトの1つである図形をパターンとして描画するためのものである。
また、ROP指定コードCd20、色指定コードCd21、文字指定コードCd22、Cd23は、オブジェクトの1つである文字を描画するためのものである。
さらに、ROP指定コードCd30、イメージ指定コードCd31、Cd32は、オブジェクトの1つであるイメージを描画するためのものである。
これらのうち、ROP指定コードCd10、Cd20、Cd30は、オブジェクトを描画するときにどのようなROP演算を行うかを指定するものであり、ROP演算コードが記されている。
ここで、代表的なROP演算コードと、ROP演算式との対応表を図3に示す。尚、図3に示すSはソース、Pはパターン、Dはディスティネーションを示している。
図2に示す例では、図形をパターン描画する場合のROP指定コードCd10として、パターン(P)Onlyに対応するROP演算コード「0x0f」が指定され、文字を描画する場合のROP指定コードCd20として、ソース(S)とパターン(P)のANDに対応するROP演算コード「0x03」が指定され、イメージを描画する場合のROP指定コードCd30として、ソース(S)Onlyに対応するROP演算コード「0x33」が指定されている。
色指定コードCd11、Cd21は、オブジェクトの描画色を指定するためのものである。この色指定コードCd11、Cd21は、CMYカラー3色のそれぞれのカラーレベルを0〜0xffの範囲で指定するものである。
図2に示す例では、図形をパターン描画する場合の色指定コードCd11として、CMY=0xff、0x00、0x00が指定されている。また文字を描画する場合の色指定コードCd21として、CMY=0x00、0xff、0x00が指定されている。
ちなみに、この色指定コードCdは、通常、図形又は文字を描画する場合にのみ用いられるものであり、イメージを描画する場合には用いられない。
パターン指定コードCd12、Cd13は、オブジェクトの塗り潰しパターンを指定するためのものであり、パターン指定コードCd12で、パターンの開始座標と大きさ(幅、高さ)を指定して、つづくパターン指定コードCd13で、実際のパターンデータ(0or1から構成されるビットマップデータ)C13を指定するようになっている。
このパターン指定コードCdも、通常、図形又は文字を描画する場合にのみ用いられるものであり、イメージを描画する場合には用いられない。
図形指定コードCd14は、描画する図形の種類、開始座標、大きさ(幅、高さ)を指定するためのものであり、図2に示す例では、図形の種類として矩形を指定している。
文字指定コードCd22、Cd23は、描画する文字を指定するためのものであり、文字指定コードCd22で、文字の開始座標と大きさ(幅、高さ)を指定して、つづく文字指定コードCd23で、実際の文字データ(0or1から構成されるビットマップデータ)を指定するようになっている。
イメージ指定コードCd31、Cd32は、描画するイメージを指定するためのものであり、イメージ指定コードCd31で、イメージの開始座標と大きさ(幅、高さ)を指定して、つづくイメージ指定コードCd32で、実際のイメージデータ(1画素3byteのCMYカラーで表現されるバイナリデータ)を指定するようになっている。
終端コードCd99は、中間コードMcの終端を示すものであり、中間コードMcの最後尾に配置されている。
中間コードMcは、このようなデータ構造となっている。
[1−3.カラープリンタによる印刷処理]
次に、カラープリンタ1による印刷処理について説明する。
まず、図4に示すフローチャートを用いて、印刷処理の概要手順(これを印刷処理概要手順と呼ぶ)RT1から説明する。この印刷処理概要手順RT1では、まずステップSP1において、データ受信部2が、外部よりPDLデータを受信する。
つづくステップSP2において、PDLデータ解析部3が、受信したPDLデータを解析して、中間コードMcを生成する。
つづくステップSP3において、印刷イメージ生成部6が、生成された中間コードMcに基づいて、印刷イメージを生成する。
つづくステップSP4において、印刷部7が、生成された印刷イメージに基づいて印刷を行う。
カラープリンタ1は、このような印刷処理概要手順RT1にそって印刷処理を行うようになっている。
次に、印刷処理概要手順RT1のステップSP2での処理、すなわちPDLデータを解析して中間コードMcを生成する処理の詳しい手順(これをPDLデータ解析処理手順と呼ぶ)RT2について、図5に示すフローチャートを用いて説明する。
このPDLデータ解析処理手順RT2では、まずステップSP10において、PDLデータ解析部3が、PDLデータに対してコマンド分割を行う。
ここで、PDLデータは、例えば1ページ分の印刷イメージを生成するためのデータであり、このPDLデータには、印刷イメージを生成するためのコマンドとして、ROP処理を指定するROP情報、色を指定するカラー情報、図形を指定する図形指定コマンド、文字を指定する文字指定コマンド、イメージを指定するイメージ指定コマンド、パターンを指定するパターン指定コマンドなどが、実行順に記されている。
実際、このPDLデータには、例えば、図形をパターン描画する場合、ROP情報、カラー情報、パターン指定コマンド、図形指定コマンドの4つが順に記されている。
また、例えば、文字を描画する場合、ROP情報、カラー情報、文字指定コマンドの3つが順に記されている。
さらに、例えば、イメージを描画する場合、ROP情報、イメージ指定コマンドの2つが順に記されている。
PDLデータ解析部3は、PDLデータから、このようなコマンドを順に抽出するようになっている。
つづくステップSP11において、PDLデータ解析部3は、コマンド分割により得られたコマンドを解析して、以降の処理をコマンドの種別ごとに分岐させる。
ここで、得られたコマンドがROP情報であった場合、PDLデータ解析部3は、ステップSP12において、ROP情報格納部18にこのROP情報を格納する。このとき、このROP情報格納部18に以前のROP情報が格納されている場合には、以前のROP情報を、今回のROP情報で更新する。
その後、PDLデータ解析部3は、ステップSP24に移る。このステップSP24の処理については、後述する。
また、得られたコマンドがカラー情報であった場合、PDLデータ解析部3は、ステップSP13において、カラー情報格納部19にこのカラー情報を格納する。このとき、このカラー情報格納部19に以前のカラー情報が格納されている場合には、以前のカラー情報を、今回のカラー情報で更新する。尚、このカラー情報は、RGB3色のRGBカラー情報である。その後、PDLデータ解析部3は、ステップSP24に移る。
また、得られたコマンドがパターン指定コマンドであった場合、PDLデータ解析部3は、ステップSP14において、このパターン指定コマンドをもとに、パターン指定用の中間コードMc(例えば図2に示すパターン指定コードCd12及びCd13)を生成して、ステップSP23に移る。このステップSP23の処理については、後述する。
また、得られたコマンドが図形指定コマンドであった場合、ステップSP15において、カラーマッチング処理部4が、カラー情報格納部19に格納されている現在のRGBカラー情報を、図形用のカラーマッチング処理によりCMYカラー情報に変換する。
つづくステップSP16において、PDLデータ解析部3は、図形指定コマンドをもとに、図形指定用の中間コードMc(例えば図2に示す図形指定コードCd14)を生成する。
さらに、PDLデータ解析部3は、つづくステップSP21において、ステップSP15で得られたCMYカラー情報をもとに、色指定用の中間コードMc(例えば図2に示す色指定コードCd11)を生成する。
さらに、PDLデータ解析部3は、つづくステップSP22において、ROP情報格納部18に格納されているROP情報をもとに、ROP指定用の中間コードMc(例えば図2に示すROP指定コードCd10)を生成する。
ここまでのステップSP14、15、SP16、SP21、SP22の処理で、図形をパターン描画するための中間コードMc(例えば図2に示すコードCd10〜Cd14)が生成されたことになる。
そして、PDLデータ解析部3は、つづくステップSP23において、このようにして生成した中間コードMcを、中間コード格納部16に格納する。その後、PDLデータ解析部3は、ステップSP24に移る。
また、得られたコマンドが文字指定コマンドであった場合、ステップSP17において、カラーマッチング処理部4が、カラー情報格納部19に格納されている現在のRGBカラー情報を、文字用のカラーマッチング処理によりCMYカラー情報に変換する。
つづくステップSP18において、PDLデータ解析部3は、文字指定コマンドをもとに、文字指定用の中間コードMc(例えば図2に示す文字指定コードCd22及びCd23)を生成する。
さらに、PDLデータ解析部3は、つづくステップSP21において、ステップSP17で得られたCMYカラー情報をもとに、カラー指定用の中間コードMc(例えば図2に示す色指定コードCd21)を生成する。
さらに、PDLデータ解析部3は、つづくステップSP22において、ROP情報格納部18に格納されているROP情報をもとに、ROP指定用の中間コードMc(例えば図2に示すROP指定コードCd20)を生成する。
ここまでのステップSP17、SP18、SP21、SP22の処理で、文字を描画するための中間コードMc(例えば図2に示すコードCd20〜Cd23)が生成されたことになる。
そして、PDLデータ解析部3は、つづくステップSP23において、このようにして生成した中間コードMcを、中間コード格納部16に格納する。その後、PDLデータ解析部3は、ステップSP24に移る。
また、得られたコマンドがイメージ指定コマンドであった場合、ステップSP19において、カラーマッチング処理部4が、カラー情報格納部19に格納されている現在のRGBカラー情報を、イメージ用のカラーマッチング処理によりCMYカラー情報に変換する。
つづくステップSP20において、PDLデータ解析部3は、イメージ指定コマンドをもとに、イメージ指定用の中間コードMc(例えば図2に示すイメージ指定コードCd31及びCd32)を生成する。
さらに、PDLデータ解析部3は、つづくステップSP22において、ROP情報格納部18に格納されているROP情報をもとに、ROP指定用の中間コードMc(例えば図2に示すROP指定コードCd30)を生成する。
ここまでのステップSP19、SP20、SP22の処理で、イメージを描画するための中間コードMc(例えば図2に示すコードCd30〜Cd32)が生成されたことになる。
そして、PDLデータ解析部3は、つづくステップSP23において、このようにして生成した中間コードMcを、中間コード格納部16に格納する。その後、PDLデータ解析部3は、ステップSP24に移る。
ステップSP24において、PDLデータ解析部3は、PDLデータの終端を検出したかどうか、すなわちPDLデータにまだ解析していないコマンドが残っているか否かを確認する。
そして、PDLデータ解析部3は、PDLデータにまだ解析していないコマンドが残っている場合には、ステップSP11に戻り、PDLデータのコマンドを全て解析し終えると、このPDLデータ解析処理手順RT2を終了する。
カラープリンタ1は、このようなPDLデータ解析処理手順RT2にそって、PDLデータを解析して中間コードMcを生成するようになっている。
次に、印刷処理概要手順RT1(図4)のステップSP3での処理、すなわち印刷イメージを生成する処理の詳しい手順(これを印刷イメージ生成処理手順と呼ぶ)RT3について、図6に示すフローチャートを用いて説明する。
この印刷イメージ生成処理手順RT3では、まずステップSP30において、中間コード判別部10が、中間コード格納部16に格納されている中間コードMcを解析して、この中間コードMcからコードCdを順に抽出し、以降の処理をコードCdの種別ごとに分岐させる。
ここで、抽出したコードCdが、色指定コードCdであった場合、中間コード判別部10は、ステップSP31において、描画処理部14に、この色指定コードCdにより指定されるCMYカラーを示すカラー情報を登録する。
その後、中間コード判別部10は、ステップSP40に移る。このステップSP40の処理については、後述する。
また、抽出したコードCdが、ROP指定コードCdであった場合、中間コード判別部10は、ステップSP32において、描画処理部14に、このROP指定コードCdにより指定されるROP演算を示すROP情報を登録する。その後、中間コード判別部10は、ステップSP40に移る。
また、抽出したコードCdが、パターン指定コードCdであった場合、中間コード判別部10は、ステップSP33において、描画処理部14に、このパターン指定コードCdにより指定されるパターンを示すパターン情報を登録する。その後、中間コード判別部10は、ステップSP40に移る。
また、抽出したコードCdが、図形指定コードCdであった場合、ステップSP34において、図形描画部11が、描画処理部14にオブジェクト種別として図形を登録する。
さらに図形描画部11は、つづくステップSP35において、描画処理部14を利用し、印刷イメージ格納部17のバッファ領域に対して図形描画を行う。尚、このとき、描画処理部14は、図形指定コードCdと、登録されている各種情報(カラー情報、ROP情報、パターン情報)に基づいて、図形描画を行うようになっている。その後、中間コード判別部10が、ステップSP40に移る。
また、抽出したコードCdが、文字指定コードCdであった場合、ステップSP36において、文字描画部12が、描画処理部14にオブジェクト種別として文字を登録する。
さらに文字描画部12は、つづくステップSP37において、描画処理部14を利用し、印刷イメージ格納部17のバッファ領域に対して文字描画を行う。尚、このとき、描画処理部14は、文字指定コードCdと、登録されている各種情報(カラー情報、ROP情報、パターン情報)に基づいて、文字描画を行うようになっている。その後、中間コード判別部10が、ステップSP40に移る。
また、抽出したコードCdが、イメージ指定コードCdであった場合、ステップSP38において、イメージ描画部13が、描画処理部14にオブジェクト種別としてイメージを登録する。
さらにイメージ描画部13は、つづくステップSP39において、描画処理部14を利用し、印刷イメージ格納部17のバッファ領域に対してイメージ描画を行う。尚、このとき、描画処理部14は、イメージ指定コードCdと、登録されているROP情報に基づいて、イメージ描画を行うようになっている。その後、中間コード判別部10が、ステップSP40に移る。
ステップSP40において、中間コード判別部10は、次のコードCdが終端コードCdであるかどうかを確認する。ここで、次のコードCdが終端コードCdでない場合、このことは、処理し終えていないコードCdがまだ残っていることを意味する。このとき、中間コード判別部10は、ステップSP30に戻る。
これに対して、次のコードCdが終端コードCdであった場合、このことは、中間コードMcの全コードCdを処理し終えたことを意味する。この時点で、印刷イメージ格納部17には、中間コードMcに基づくCMYカラーの中間イメージが格納されていることになる。尚、この中間イメージは、CMYKカラーの印刷イメージの元となるものである。
このとき、つづくステップSP41において、黒生成処理部15が、印刷イメージ格納部17のバッファ領域に黒生成処理を行う。すなわち、印刷イメージ格納部17に格納されているCMYカラーの中間イメージに対して黒生成処理を行う。これにより、CMYKカラーの印刷イメージが生成される。尚、この黒生成処理について詳しくは後述する。
カラープリンタ1は、このような印刷イメージ生成処理手順RT3で、中間コードMcにもとづく印刷イメージを生成するようになっている。
次に、印刷イメージ生成処理手順RT3での描画処理部14の処理(すなわちステップSP35、SP37、SP39での処理)の概要手順(これを描画処理概要手順と呼ぶ)RT4について、図7に示すフローチャートを用いて説明する。
この描画処理概要手順RT4では、まずステップSP50において、描画処理部14が、登録されている各種情報(カラー情報、ROP情報、パターン情報)と、ソース(描画する画像)及びディスティネーション(描画先の画像)のカラー情報を分析して、ROP情報に含まれるROP指定コードCdに対応するROP処理を行う。これにより、中間イメージの各画素のカラー情報が確定する。
ここで、描画処理部14は、中間イメージの各画素のデータとして、図8に示すデータ形式でなるカラー画素データCpを生成するようになっている。
このカラー画素データCpは、4Byteで表現され、Bit#31〜24の1Byteで、シアンのカラーレベル(0〜255)を保持し、Bit#23〜16の1Byteでマゼンタのカラーレベル(0〜255)を保持し、Bit#15〜8の1Byteでイエローのカラーレベル(0〜255)を保持するようになっている。
さらに、このカラー画素データCpは、Bit#7〜0の1Byteが、オブジェクトに関する情報を保持するオブジェクト情報フィールドOfとなっている。
このオブジェクト情報フィールドOfを構成する各Bitは、それぞれ意味を持っており、Bit#7は、XORを用いたROP処理が実施されたかどうかを識別するためのものである。
実際、このBit#7は、1であれば、XORを用いたROP処理が行われたことを示し、0であれば、XORを用いたROP処理が行われていないことを示す。このBit#7を、以下、XORフラグとも呼ぶ。
Bit#6は、今回のROP処理が行われるまで描画されていたオブジェクトの種別(これを過去オブジェクト種別と呼ぶ)がイメージであるかどうかを識別するためのものである。Bit#5は、過去オブジェクト種別が文字であるかどうかを識別するためのものであり、Bit#4は、過去オブジェクト種別が図形であるかどうかを識別するためのものである。
つまり、オブジェクト情報フィールドOfは、このBit#4〜6で、今回のROP処理が行われるまで描画されていたオブジェクトの種別を示す過去オブジェクト種別を保持するようになっている。
ここで、Bit#6が1、Bit#4と5が0であれば、過去オブジェクト種別がイメージであることを示し、Bit#5が1、Bit#4と6が0であれば文字、Bit#4が1、Bit#5と6が0であれば図形であることを示す。
尚、Bit#4〜6の全てが0である場合には、過去オブジェクトが存在しないこと(オブジェクト無し)を意味する。
Bit#3は、ダミーであり、Bit#2は、現在のオブジェクト種別がイメージであるかどうかを識別するためのものであり、Bit#1は、現在のオブジェクト種別が文字であるかどうかを識別するためのものであり、Bit#0は、現在のオブジェクト種別が図形であるかどうかを識別するためのものである。
つまり、オブジェクト情報フィールドOfは、このBit#0〜2に、現在のオブジェクト種別(これを現在オブジェクト種別と呼ぶ)を保持するようになっている。
ここで、Bit#2が1、Bit#1と0が0であれば、現在オブジェクト種別がイメージであることを示し、Bit#1が1、Bit#2と0が0であれば文字、Bit#0が1、Bit#2と1が0であれば図形であることを示す。
尚、Bit#0〜2の全てが0である場合には、現在オブジェクトが存在しないことを意味する。
このように、オブジェクト情報フィールドOfには、XORフラグと、過去オブジェクト種別と、現在オブジェクト種別が記される。
また、詳しくは後述するが、現在オブジェクト種別は、黒生成処理に利用され、過去オブジェクト種別は、ROP処理としてXORが行われたときのオブジェクト情報フィールドOfの更新に利用される。
このような、カラー画素データCpが、印刷イメージの画素ごとのデータとして、印刷イメージ格納部17のバッファ領域に格納されるようになっている。
そして、上述のステップSP50では、描画処理部14がROP処理を行うことで、ROP処理の結果として、このカラー画素データCpのBit#31〜8までのCMYカラー情報が確定する。これにより、印刷イメージ格納部17のバッファ領域に対してオブジェクトの描画が行われたことになる。
さらに、つづくステップSP51において、描画処理部14は、今回のROP処理に基づき、カラー画素データCpのオブジェクト情報フィールドOfの更新を行う。尚、このオブジェクト情報フィールドOfの更新について詳しくは後述する。
描画処理部14は、このような描画処理概要手順RT4で、描画処理を行うようになっている。
次に、印刷イメージ生成処理手順RT3(図6)のステップSP41での黒生成処理の詳しい手順(これを黒生成処理手順と呼ぶ)RT5について、図9に示すフローチャートを用いて、詳しく説明する。
この黒生成処理手順RT5では、まずステップSP60において、黒生成処理部15が、印刷イメージ格納部17に格納されている中間イメージの各画素のオブジェクト情報フィールドOfのBit#2を確認する。
ここで、Bit#2が1であれば、このことは、画素の現在オブジェクト種別がイメージであることを意味する。このとき、黒生成処理部15は、ステップSP61に移り、このステップSP61において、イメージ用の黒生成処理を行う。
一方で、オブジェクト情報フィールドOfのBit#2が0であれば、このことは、画素の現在オブジェクト種別がイメージではないことを意味する。このとき、黒生成処理部15は、ステップSP62に移り、このステップSP62において、オブジェクト情報フィールドOfのBit#1を確認する。
ここで、Bit#1が1であれば、このことは、画素の現在オブジェクト種別が文字であることを意味する。このとき、黒生成処理部15は、ステップSP63に移り、このステップSP63において、文字用の黒生成処理を行う。
一方で、オブジェクト情報フィールドOfのBit#1が0であれば、このことは、画素の現在オブジェクト種別がイメージでも文字でもなく図形であることを意味する。このとき、黒生成処理部15は、ステップSP64に移り、このステップSP64において、図形用の黒生成処理を行う。
尚、黒生成処理部15が行う黒生成処理は、CMYのカラーレベルをもとに黒(K)のカラーレベルを算出して、さらにこの算出した黒(K)のカラーレベルをもとにCMYのカラーレベルを調整する処理である。
つまり、この黒生成処理は、CMYを混ぜ合わせたグレー成分を、Kのみ、もしくはCMYとKとを混ぜ合わせたグレー成分に置き換える処理である。
そして、上述のステップSP61、SP63、SP64では、それぞれイメージ用の黒生成処理、文字用の黒生成処理、図形用の黒生成処理を行っているが、これらはCMYとKの配分が異なる黒生成処理である。
例えば、文字用の黒生成処理及び図形用の黒生成処理では、文字及び図形の輪郭をはっきりさせるために、CMYを混ぜ合わせたグレー成分を、Kのみのグレー成分に置き換える。ゆえに、この場合、CMYのカラーレベルは0となる。
また、例えば、イメージ用の黒生成処理では、イメージを鮮明にするために、CMYを混ぜ合わせたグレー成分を、KよりもCMYの比率の方が高くなるようにして、CMYとKとを混ぜ合わせたグレー成分に置き換える。
このようにして、黒生成処理部15は、オブジェクト種別ごとに最適な黒生成処理を行うようになっている。
そして、実際、黒生成処理部15は、この黒生成処理を、印刷イメージ格納部17に格納されている中間イメージの画素ごとに行うことで、中間イメージの各画素のカラー画素データCpを更新する。
このとき、黒生成処理部15は、カラー画素データCpのBit#7〜0に保持されているオブジェクト情報フィールドを、黒生成処理で得られた黒のカラーレベル(0〜255)で上書きする。
すなわち、黒生成処理後のカラー画素データCpは、図10に示すように、Bit#31〜24の1Byteで、シアンのカラーレベル(0〜255)を保持し、Bit#23〜16の1Byteでマゼンタのカラーレベル(0〜255)を保持し、Bit#15〜8の1Byteでイエローのカラーレベル(0〜255)を保持し、Bit#7〜0の1Byteで黒のカラーレベル(0〜255)を保持するようになっている。
かくして、印刷イメージ格納部17に格納されているCMYカラーの中間イメージがCMYKカラーの印刷イメージに変換されたことになる。
黒生成処理部15は、このような黒生成処理手順RT5で、黒生成処理を行うことにより、CMYカラーの中間イメージからCMYKカラーの印刷イメージを生成するようになっている。
ところで、上述のように、オブジェクト種別ごとに最適な黒生成処理を行うには、当然のことながら、カラー画素データCpのオブジェクト情報フィールドOfに記されている現在オブジェクト種別が、実際に描画されているオブジェクトの種別と同じでなければならない。
そこで、このカラープリンタ1では、上述の描画処理概要手順RT4(図7)のステップSP51において、オブジェクト情報フィールドOfに常に正確な現在オブジェクト種別が記されるように、ROP処理を行うごとに各カラー画素データCpのオブジェクト情報フィールドOfを更新するようになっている。
以下、描画処理概要手順RT4のステップSP51でのオブジェクト情報フィールドOfを更新する処理の手順(これをオブジェクト情報更新処理と呼ぶ)RT6について、図11に示すフローチャートを用いて詳しく説明する。
尚、このオブジェクト情報更新処理手順RT6を説明した後、実際に行われる様々なROP処理による描画操作を例に挙げて、どのような描画操作を行うときにどのようにオブジェクト情報フィールドOfが更新されるのかを説明することにする。
このオブジェクト情報更新処理手順RT6では、まずステップSP70において、描画処理部14が、登録されているROP情報に記されているROP演算コードを確認して、以降の処理をこのROP演算コードごとに分岐させる。
ここで、ROP演算コードが、0x99、0xa5、0x66、0x5aであった場合、すなわち今回のROP演算がこれらのROP演算コードにより指定されるXOR演算である場合、描画処理部14は、ステップSP71において、オブジェクト情報フィールドOfのBit#7を確認する。
ここで、このBit#7が1の場合、このことは、このオブジェクト情報フィールドOfに対応する画素が、XORが既に1回行われている画素であり、今回のXORが2回目のXORであることを意味する。
このとき描画処理部14は、ステップSP72に移り、このステップSP72において、例えば図12(A)に示すように、オブジェクト情報フィールドOfのBit#4〜6の値を、Bit#0〜2に戻す。
つまり、オブジェクト情報フィールドOfに保持されている過去オブジェクト種別を、現在オブジェクト種別として戻す。
ここで、今回のROP処理を行ってから、このステップSP72でオブジェクト情報フィールドを更新するまでの間、オブジェクト情報フィールドOfのBit#0〜2には、現在オブジェクト種別として、今回のROP処理が行われるまで描画されていたオブジェクトの種別が保持され、Bit#4〜6には、過去オブジェクト種別として、前回のROP処理が行われるまで描画されていたオブジェクトの種別が保持されていることになる。
そして、このステップSP72では、Bit#4〜6に保持されている過去オブジェクト種別を、現在オブジェクト種別としてBit#0〜2に戻すようになっている。
実際、XOR演算を利用したROP処理の場合、1回目のXOR演算により描画された部分に、その部分と同一色で2回目のXOR演算による描画を行うと、その部分の色が1回目のXOR演算を行う前の元の色に戻る特性を有している。ゆえに、この場合、オブジェクト種別も、1回目のXOR演算を行う前の元のオブジェクト種別に戻さなくてはならない。
そこで、このステップSP72では、現在オブジェクト種別を、1回目のXORが行われる前のオブジェクト種別を示している過去オブジェクト種別に戻すようになっている。
これにより、オブジェクト情報フィールドOfには、実際に描画されているオブジェクト種別と同じ正しいオブジェクト種別が保持されることになる。
このステップSP72の後、描画処理部14は、つづくステップSP73において、図12(B)に示すように、Bit#7を0にリセットし、オブジェクト情報更新処理を終了する。
また一方で、上述のステップSP71でBit#7を確認した結果、このBit#7が0の場合、このことは、今回のXOR演算が1回目のXOR演算であることを意味する。
この場合、描画処理部14は、ステップSP74に移り、例えば図13(A)に示すように、2回目のXOR演算が行われるときのために、Bit#0〜2の値を、Bit#4〜6に移動させる。つまり、オブジェクト情報フィールドOfに現在オブジェクト種別として保持されているオブジェクト種別を、過去オブジェクト種別として保持させる。
尚、このように、現在オブジェクト種別として保持されているオブジェクト種別を、過去オブジェクト種別として保持させることを、以降、オブジェクト種別を退避させると呼ぶ。
さらに、描画処理部14は、つづくステップSP75において、例えば図13(B)に示すように、Bit#0〜2に、現在オブジェクト種別として、現在描画されているオブジェクトの種別を設定する。
これにより、オブジェクト情報フィールドOfには、過去オブジェクト種別と現在オブジェクト種別が保持されることになる。
その後、描画処理部14は、つづくステップSP76において、例えば図13(C)に示すように、今回XOR演算を行ったことを示すために、Bit#7を1にし、オブジェクト情報フィールド更新処理を終了する。
また、ROP演算コードが、0x77であった場合、すなわち今回のROP演算が0x77で指定される、ソース(S)とディスティネーション(D)のOR演算である場合、描画処理部14は、ステップSP77において、このときのソースの色を確認する。
尚、0x77は、詳しくは後述するが、XOR演算とセットで利用されるROP演算であって、1回目のXOR演算と2回目のXOR演算との間に行われ、白黒データを描画することで、黒色の部分にのみ描画対象を残す所謂マスク処理を行うためのものである。
ここで、ソースの色が白(CMY=0x00、0x00、0x00)である場合、オブジェクト種別は前回描画されていたオブジェクト種別のままなので、オブジェクト情報フィールドOfは更新しない。
一方で、ソースの色が白以外である場合、描画処理部14は、ステップ78において、オブジェクト情報フィールドOfのBit#7を確認する。
ここで、Bit#7が1の場合、このオブジェクト情報フィールドOfに対応する画素が、XOR演算が行われた画素であり、次回以降に2回目のXOR演算が行われる可能性があることを意味する。
このとき、描画処理部14は、ステップSP79に移り、例えば図14(A)に示すように、オブジェクト情報フィールドOfのBit#0〜2の値を、Bit#4〜6に移動させることで、現在オブジェクト種別を過去オブジェクト種別として退避させる。さらに、描画処理部14は、つづくステップSP80において、例えば図14(B)に示すように、Bit#0〜2に現在のオブジェクト種別を設定し、オブジェクト情報更新処理を終了する。
一方で、ソースの色が白以外で、且つBit#7が0の場合、描画処理部14は、ステップSP79の処理を省略して、ステップSP80に移り、ステップSP80において、Bit#0〜2に現在のオブジェクト種別を設定し、オブジェクト情報更新処理を終了する。
また、ROP演算コードが、0x5f又は0x0fであった場合、すなわち今回のROP演算が0x5fで指定される、パターン(P)とディスティネーション(D)のOR演算、もしくは0x0fで指定されるパターン(P)Onlyである場合、描画処理部14は、ステップSP81において、このときのパターンの色を確認する。
尚、0x5fは、詳しくは後述するが、0x77と同様、XOR演算とセットで利用されるROP演算であって、1回目のXOR演算と2回目のXOR演算との間に行われ、白黒データを描画することで、黒色の部分にのみ描画対象を残す所謂マスク処理を行うためのものである。
また、0x0fも、詳しくは後述するが、XOR演算とセットで利用されるROP演算であって、1回目のXOR演算と2回目のXOR演算との間に行われ、黒データを描画することで、黒色の部分にのみ描画対象を残す所謂マスク処理を行うためのものである。
ここで、パターンの色が白(CMY=0x00、0x00、0x00)である場合、オブジェクト種別は何もかわらないので、描画処理部14は、オブジェクト情報フィールドを更新せずに、オブジェクト情報更新処理を終了する。
一方で、パターンの色が白以外である場合、描画処理部14は、ステップ78に移り、以降、上述したステップSP78〜SP80の処理を行い、オブジェクト情報更新処理を終了する。
また、ROP演算コードが、0x11又は0x05であった場合、すなわち今回のROP演算が0x11で指定される、ソース(S)とディスティネーション(D)のAND演算、もしくは0x05で指定される、パターン(P)とディスティネーション(D)のAND演算である場合、描画処理部14は、ステップSP82において、このときのディスティネーションの色を確認する。
尚、0x11及び0x05は、詳しくは後述するが、OR演算とセットで利用されるROP演算であり、0x77もしくは0x5fにより白黒データが描画された後に行われ、描画対象をANDすることで、黒い部分にのみ描画対象を残す所謂マスク処理を行うためのものである。
ここで、ディスティネーションの色が黒(CMY=0xff、0xff、0xff)である場合、描画処理部14は、ステップSP83に移り、ステップSP83において、Bit#0〜2に現在のオブジェクト種別を設定し、オブジェクト情報更新処理を終了する。
一方で、ディスティネーションの色が黒以外である場合、オブジェクト種別は何もかわらないので、描画処理部14は、オブジェクト情報フィールドを更新せずに、オブジェクト情報フィールド更新処理を終了する。
また、ROP演算コードが、0x47であった場合、すなわち今回のROP演算が0x47で指定される、パターン(P)とソース(S)のANDと、ソース(S)のNOTとディスティネーション(D)のANDとのOR演算である場合、描画処理部14は、ステップSP84において、このときのソースの色を確認する。
尚、0x47は、詳しくは後述するが、特定のアプリケーションで文字描画を行うときに指定されるROP演算である。
ここで、ソースの色が白(CMY=0x00、0x00、0x00)である場合、オブジェクト種別は何もかわらないので、描画処理部14は、オブジェクト情報フィールドを更新せずに、オブジェクト情報更新処理を終了する。
一方で、ソースの色が白以外である場合、描画処理部14は、ステップSP83に移り、ステップSP83において、Bit#0〜2に現在のオブジェクト種別を設定し、オブジェクト情報更新処理を終了する。
また、ROP演算コードが、上述したもの以外の場合、描画処理部14は、ステップSP83に移り、ステップSP83において、Bit#0〜2に現在のオブジェクト種別を設定し、オブジェクト情報更新処理を終了する。
描画処理部14は、このようなオブジェクト情報更新処理手順RT6にそって、オブジェクト情報フィールドOfを更新するようになっている。
ここで、PDLで利用されるROP処理による描画操作と、オブジェクト情報フィールドOfの更新について、具体的な例を挙げながら、詳しく説明する。
まず、ROP処理による描画操作の1つとして、ROP演算コード=0x47を用いる描画操作について説明する。尚、ここでは、この描画操作を、第1の描画操作と呼ぶ。
この第1の描画操作では、ROP演算コード=0x47で指定されるROP演算で、文字もしくは白黒のイメージを描画する。
すなわち、図15に示すように、例えば、任意の色のパターンと、白黒イメージのソースを用いて描画を行う。このとき、ソースが1(黒)の部分にはパターンによる描画を行い、ソースが0(白)の部分は、ディスティネーションのままとする。
この結果、先に描画されていた図形を背景として、この上に、白黒イメージの黒部分で示される図形のみがパターンの色で描画された画像が得られる。
このような第1の描画操作を行う場合、上述したオブジェクト情報更新処理手順RT6のステップSP83及び84での処理に基づいて、オブジェクト情報フィールドOfの更新が行われる。
すなわち、この場合、図15に示すように、ソースが1(黒)の部分の画素のオブジェクト情報フィールドOfには、今回描画したオブジェクトの種別を現在オブジェクト種別として格納するようにし、ソースが0(白)の部分の画素のオブジェクト情報フィールドOfは更新しないようになっている。
尚、図15に示す例では、白黒イメージを描画しているが、この白黒イメージはパターンを用いて文字を描画するためのものであることから、ここでは、ソースが1(黒)の部分のオブジェクト情報フィールドOfに、現在オブジェクト種別として「イメージ」ではなく、「文字」を保持させるようになっている。
かくして、第1の描画操作において、オブジェクト情報フィールドOfには、実際に描画されているオブジェクトの種別と同じ現在オブジェクト種別が保持されることになる。
次に、ROP演算コード=0xa5(又は0x99)と0x77を用いる描画について説明する。尚、ここでは、この描画を、第2の描画操作と呼ぶ。
この第2の描画操作は、2回のXOR演算(0xa5又は0x99)の間に、OR演算(0x77)で白黒のデータを描画することで、この白黒のデータの黒部分にのみ描画対象となるオブジェクトを残すものである。
まず、0xa5のXOR演算を行う場合について説明する。この場合、図16(A)に示すように、ROP演算コード=0xa5で指定されるROP演算(XOR演算)により、任意の色で図形(例えば矩形)を描画する。
次に、図16(B)に示すように、ROP演算コード=0x77で指定されるROP処理(OR演算)で、白黒のイメージを描画する。
この結果、1回目のXOR演算により描画された図形を背景として、この上に、白黒イメージの黒部分で示される図形のみが描画された画像が得られる。
その後、図16(C)に示すように、再び、ROP演算コード=0xa5で指定されるROP演算(XOR演算)で、1回目のXOR演算と同一色で図形(例えば矩形)を描画する。
この結果、白黒イメージの黒部分で示される図形が任意の色で描画されると共に、この図形以外の背景が、1回目のXOR演算で図形を描画する前の状態に戻った画像が得られる。
このような第2の描画操作を行う場合、上述したオブジェクト情報更新処理手順RT6のステップSP71〜SP76、及びSP77〜SP80での処理に基づいて、オブジェクト情報フィールドOfの更新が行われる。
すなわち、この場合、図17(A)に示すように、1回目のXORで図形が描画された後、オブジェクト情報フィールドOfに保持されている現在オブジェクト種別(この場合「オブジェクト無し」)を、過去オブジェクト種別として退避させ、さらに今回描画したオブジェクトの種別(「図形」)を新たな現在オブジェクト種別として保持させ、XORフラグを1にする。
さらに、図17(B)に示すように、0x77で白黒イメージが描画された後、ソースが1の部分(黒色の図形となる部分)については、オブジェクト情報フィールドOfに保持されている現在オブジェクト種別(「図形」)を過去オブジェクト種別として退避させ、今回描画したオブジェクトの種別(「イメージ」)を新たな現在オブジェクト種別として保持させる。
これに対して、ソースが0の部分(文字の背景となる部分)については、今回のROP処理で色が変化しない(オブジェクトも変化しない)ので、オブジェクト情報フィールドOfは更新しない。
これにより、ソースが0の部分のオブジェクト情報フィールドOfには、過去オブジェクト種別として、1回目のXOR演算が行われる前のオブジェクトの種別(「オブジェクト無し」)が保持されつづけることになる。
そして、最後に、図17(C)に示すように、2回目のXOR演算で図形が描画された後、XORフラグが1の部分のオブジェクト情報フィールドOfについて、保持されている過去オブジェクト種別を、現在オブジェクトに戻す。
この結果、最終的に得られた画像の、文字が図形で描画されている部分のオブジェクト情報フィールドOfには、現在オブジェクト種別として「図形」が保持され、図形の背景となる部分で、1回目のXOR演算が行われる前の状態に戻った部分のオブジェクト情報フィールドOfには、オブジェクト種別として「オブジェクト無し」が保持される。
かくして、この第2の描画操作においても、オブジェクト情報フィールドOfには、実際に描画されているオブジェクトの種別と同じ現在オブジェクト種別が保持されることになる。
さらに、0x99のXORを行う場合についても説明する。この場合、まず、図16(D)に示すように、ROP演算コード=0x99で指定されるROP演算(XOR演算)で、イメージを描画する。
次に、図16(E)に示すように、ROP演算コード=0x77で指定されるROP演算(OR演算)で、白黒のイメージを描画する。
この結果、1回目のXOR演算により描画されたイメージの上に、白黒イメージの黒部分の図形のみが描画された画像が得られる。
その後、図16(F)に示すように、再び、ROP演算コード=0x99で指定されるROP演算(XOR演算)で、1回目のXOR演算と同一のイメージを描画する。
この結果、白黒イメージの黒部分が描画されていた部分にのみイメージが描画され、このイメージ以外の部分が、1回目のXOR演算でイメージを描画する前の状態に戻った画像が得られる。
この場合も、0xa5の場合と同様にして、オブジェクト情報フィールドOfを更新する。
この結果、最終的に得られた画像の、イメージが描画されている部分のオブジェクト情報フィールドOfには、現在オブジェクト種別として「イメージ」が保持され、イメージ以外の部分で、1回目のXOR演算が行われる前の状態に戻った部分のオブジェクト情報フィールドOfには、オブジェクト種別として「オブジェクト無し」が保持される。
かくして、この第2の描画操作においても、オブジェクト情報フィールドOfには、実際に描画されているオブジェクトの種別と同じ現在オブジェクト種別が保持されることになる。
次に、ROP演算コード=0x0f、0x77及び0x11を用いる描画操作について説明する。尚、ここでは、この描画操作を、第3の描画操作と呼ぶ。
この第3の描画操作は、OR演算(0x77)で白黒のデータを描画した後、描画対象をAND演算(0x11)することで、この白黒のデータの黒部分にのみ描画対象となるオブジェクトを残すものである。
この場合、図18(A)に示すように、まずROP演算コード=0x0fで指定されるROP演算(パターン(P)Only)により、任意の色(ここでは白以外の色とする)で図形(例えば矩形)をパターン描画する。
次に、図18(B)に示すように、ROP演算コード=0x77で指定されるROP演算(OR演算)により、白黒のイメージを描画する。
この結果、パターン描画された図形の上に、白黒イメージの黒部分の図形のみが描画された画像が得られる。
その後、ROP演算コード=0x11で指定されるROP演算(AND演算)で、イメージを描画する。
この結果、白黒イメージの黒部分が描画されていた部分にのみイメージが描画され、このイメージ以外の部分はパターン描画された図形の色のままとなっている画像が得られる。
このような第3の描画操作を行う場合、上述したオブジェクト情報更新処理手順RT6のステップSP77〜SP83での処理に基づいて、オブジェクト情報フィールドOfの更新が行われる。
すなわち、この場合、図18(A)に示すように、0x0fで図形が任意の色でパターン描画された後、オブジェクト情報フィールドOfに、今回描画したオブジェクトの種別(「図形」)を新たな現在オブジェクト種別として保持させる。
さらに、図18(B)に示すように、0x77で白黒イメージが描画された後、ソースが1の部分(黒部分)については、今回描画したオブジェクトの種別(「イメージ」)を新たな現在オブジェクト種別として保持させ、ソースが0の部分については、今回のROP処理でオブジェクトが変化しないので、オブジェクト情報フィールドOfは更新しない。
最後に、図18(C)に示すように、0x11でイメージが描画された後、ディスティネーションが1の部分(白黒イメージの黒部分が描画されていた部分)については、今回描画したオブジェクトの種別(「イメージ」)を新たな現在オブジェクト種別として保持させ、ディスティネーションが1以外の部分については、今回のROP処理でオブジェクトが変化しないので、オブジェクト情報フィールドOfは更新しない。
この結果、最終的に得られた画像の、イメージが描画されている部分のオブジェクト情報フィールドOfには、現在オブジェクト種別として「イメージ」が保持され、イメージ以外の部分の、最初に描画された図形の色のままの部分のオブジェクト情報フィールドOfには、オブジェクト種別として「図形」が保持される。
かくして、この第3の描画操作においても、オブジェクト情報フィールドOfには、実際に描画されているオブジェクトの種別と同じ現在オブジェクト種別が保持されることになる。
次に、ROP演算コード=0xa5と0x0fを用いる描画操作について説明する。尚、ここでは、この描画操作を、第4の描画操作と呼ぶ。
この第4の描画操作は、2回のXOR演算(0xa5)の間に、パターン(P)Only(0x0f)で黒データを描画することで、この黒データの部分にのみ描画対象となるオブジェクトを残すものである。
この場合、図19(A)に示すように、ROP演算コード=0xa5で指定されるROP演算(XOR演算)により、任意の色で図形(例えば矩形)を描画する。
次に、図19(B)に示すように、ROP演算コード=0x0fで指定されるROP演算(パターン(P)Only)で、黒の図形をパターン描画する。
この結果、1回目のXOR演算により描画された図形を背景として、この上に、黒の図形がパターン描画された画像が得られる。
その後、図19(C)に示すように、再び、ROP演算コード=0xa5で指定されるROP演算(XOR演算)で、1回目のXOR演算と同一色で図形(例えば矩形)を描画する。
この結果、パターン描画されている図形が任意の色で描画されると共に、この図形以外の背景が、1回目のXOR演算で図形を描画する前の状態に戻った画像が得られる。
このような第4の描画操作を行う場合、上述したオブジェクト情報更新処理手順RT6のステップSP71〜SP76、及びSP78〜SP81での処理に基づいて、オブジェクト情報フィールドOfの更新が行われる。
すなわち、この場合、図19(A)に示すように、1回目のXOR演算で図形が描画された後、オブジェクト情報フィールドOfに保持されている現在オブジェクト種別(この場合「オブジェクト無し」)を、過去オブジェクト種別として退避させ、さらに今回描画したオブジェクトの種別(「図形」)を新たな現在オブジェクト種別として保持させ、XORフラグを1にする。
さらに、図19(B)に示すように、0x0fで黒の図形がパターン描画された後、パターンが0以外の部分(今回黒の図形が描画された部分)については、オブジェクト情報フィールドOfに保持されている現在オブジェクト種別(「図形」)を過去オブジェクト種別として退避させ、今回描画したオブジェクトの種別(「図形」)を新たな現在オブジェクト種別として保持させる。
これに対して、パターンが0の部分(今回黒の図形が描画されていない部分)については、今回のROP処理でオブジェクトが変化しないので、オブジェクト情報フィールドOfは更新しない。
これにより、パターンが0の部分のオブジェクト情報フィールドOfには、過去オブジェクト種別として、1回目のXOR演算が行われる前のオブジェクトの種別(「オブジェクト無し」)が保持されつづけることになる。
最後に、図19(C)に示すように、2回目のXOR演算で図形が描画された後、XORフラグが1の部分のオブジェクト情報フィールドOfについて、保持されている過去オブジェクト種別を、現在オブジェクトに戻して、XORフラグを0にリセットする。
この結果、最終的に得られた画像の、図形が描画されている部分のオブジェクト情報フィールドOfには、現在オブジェクト種別として「図形」が保持され、図形以外の部分の、1回目のXOR演算が行われる前の状態に戻った部分のオブジェクト情報フィールドOfには、オブジェクト種別として「オブジェクト無し」が保持される。
かくして、この第4の描画操作においても、オブジェクト情報フィールドOfには、実際に描画されているオブジェクトの種別と同じ現在オブジェクト種別が保持されることになる。
最後に、ROP演算コード=0x0fと0x11を用いる描画操作について説明する。尚、ここでは、この描画操作を、第5の描画操作と呼ぶ。
この第5の描画操作は、パターン(P)Only(0x0f)で黒データを描画した後、描画対象をAND演算(0x11)することで、この黒データの部分にのみ描画対象となるオブジェクトを残すものである。
この場合、図20(A)に示すように、まずROP演算コード=0x0fで指定されるROP演算(パターン(P)Only)により、図形を黒でパターン描画する。
次に、図20(B)に示すように、ROP演算コード=0x11で指定されるROP演算(AND演算)により、イメージを描画する。
この結果、黒の図形が描画されていた部分にのみイメージが描画され、このイメージ以外の部分は元の色のままとなっている画像が得られる。
このような第5の描画操作を行う場合、上述したオブジェクト情報更新処理手順RT6のステップSP79〜SP83での処理に基づいて、オブジェクト情報フィールドOfの更新が行われる。
すなわち、この場合、図20(A)に示すように、0x0fで図形が黒でパターン描画された後、この図形が描画された部分のオブジェクト情報フィールドOfに、今回描画したオブジェクトの種別(「図形」)を新たな現在オブジェクト種別として保持させる。
またこのとき、図形以外の部分については、今回のROP処理でオブジェクトが変化しないので、オブジェクト情報フィールドOfは更新しない。
最後に、図20(B)に示すように、0x11でイメージが描画された後、ディスティネーションが1の部分(黒の図形が描画されていた部分)については、今回描画したオブジェクトの種別(「イメージ」)を新たな現在オブジェクト種別として保持させ、ディスティネーションが1以外の部分については、今回のROP処理でオブジェクトが変化しないので、オブジェクト情報フィールドOfは更新しない。
この結果、最終的に得られた画像の、イメージが描画されている部分のオブジェクト情報フィールドOfには、現在オブジェクト種別として「イメージ」が保持され、イメージ以外の部分の、オブジェクトが最初から何も変化していない部分のオブジェクト情報フィールドOfには、オブジェクト種別として「オブジェクト無し」が保持される。
かくして、この第5の描画操作においても、オブジェクト情報フィールドOfには、実際に描画されているオブジェクトの種別と同じ現在オブジェクト種別が保持されることになる。
ここまで説明したように、カラープリンタ1では、様々なROP処理による描画操作を行うときに、常に、カラー画素データCpのオブジェクト情報フィールドOfに記されている現在オブジェクト種別が、実際に描画されているオブジェクトの種別と同じになるようにオブジェクト情報フィールドOfを更新するようになっている。
[1−4.効果]
上述したように、カラープリンタ1は、カラー画素コードCdのオブジェクト情報フィールドOfに、XOR演算が行われたかどうかを示すXORフラグと、現在描画されているオブジェクトの種別を示す現在オブジェクト種別と、現在描画されているオブジェクトの前に描画されていたオブジェクトの種別を示す過去オブジェクト種別とを保持させるようにした。
そして、カラープリンタ1は、1回目のXOR演算と同一色で2回目のXOR演算が行われる画素について、オブジェクト情報フィールドOfのXORフラグを参照することで、今回のXOR演算が2回目のXOR演算かどうかを判断し、2回目のXOR演算であると判断すると、オブジェクト情報フィールドOfに記されている過去オブジェクト種別で、現在オブジェクト種別を書き換える。
このとき、過去オブジェクト種別には、1回目のXOR演算が行われる前のオブジェクト種別が記されていることから、オブジェクト情報フィールドOfの現在オブジェクト種別は、1回目のXORが行われる前のオブジェクト種別に戻ることになる。
この結果、オブジェクト情報フィールドOfには、最後に描画したオブジェクトの種別ではなく、1回目のXOR演算を行う前の元のオブジェクトの種別が保持される。
こうすることで、オブジェクト情報フィールドOfには、現在オブジェクト種別として、実際に描画されているオブジェクトの種別が保持される。
かくして、従来問題となっていた、XOR演算を同一色で2回行うことによりオブジェクトの種別が1回目のXOR演算を行う前に戻る場合でも、正確な現在オブジェクト種別を保持することができる。
また、このように、正確な現在オブジェクト種別を得ることができるので、この現在オブジェクト種別を利用して、実際に描画されているオブジェクトの種別ごとに最適な黒生成処理を行うことができ、従来と比して一段と高品位な印刷イメージを生成することができる。
[2.第2の実施の形態]
[2−1.カラープリンタの構成]
次に第2の実施の形態について説明する。図21に、この第2の実施の形態のカラープリンタ100の機能構成を示す。
カラープリンタ100は、データ受信部101と、PDLデータ解析部102と、データ格納部103と、印刷イメージ生成部104と、印刷部105とで構成される。
また、上述の印刷イメージ生成部104は、中間コード判別部110と、図形描画部111と、文字描画部112と、イメージ描画部113と、描画処理部114と、カラーマッチング処理部115と、黒生成処理部116とで構成される。
さらに、上述のデータ格納部103は、中間コード格納部117と、印刷イメージ格納部118と、ROP情報格納部119と、カラー情報格納部120とで構成される。
このように、このカラープリンタ100は、カラーマッチング処理部115が、印刷イメージ生成部104内に設けられている点が、第1の実施の形態のカラープリンタ1と大きく異なる点である。
そして、このカラープリンタ100では、印刷処理時に、カラープリンタ1とは異なるタイミングで、カラーマッチング処理部115によるカラーマッチング処理(色変換)を行うようになっている。
尚、カラープリンタ100は、カラープリンタ1とは異なるタイミングで、カラーマッチング処理を行う点を除けば、基本的に、カラープリンタ1と同様の印刷処理を行うようになっている。
ゆえに、ここでは、主に、印刷処理時に、カラーマッチング処理をどのタイミングで行うかについて説明することとする。
[2−2.カラープリンタによる印刷処理]
このカラープリンタ100は、第1の実施の形態で説明した印刷処理概要手順RT1(図4)と同様の手順で印刷処理を行うようになっている。
すなわち、印刷処理の概要は、第1の実施の形態と同様であるので、ここでは説明を省略する。
次に、印刷処理概要手順RT1のステップSP2での処理、すなわちPDLデータ解析処理手順RT10について、図22に示すフローチャートを用いて説明する。
このPDLデータ解析処理手順RT10は、第1の実施の形態で説明したPDLデータ解析処理手順RT2(図5)から、カラーマッチング処理を省略したものである。
このPDLデータ解析処理手順RT10では、まずステップSP100において、PDLデータ解析部102が、PDLデータに対してコマンド分割を行う。
つづくステップSP101において、PDLデータ解析部102は、コマンド分割により得られたコマンドを解析して、以降の処理をコマンドの種別ごとに分岐させる。
ここで、得られたコマンドがROP情報であった場合、PDLデータ解析部102は、ステップSP102において、ROP情報格納部119にこのROP情報を格納する。このとき、このROP情報格納部119に以前のROP情報が格納されている場合には、以前のROP情報を、今回のROP情報で更新する。
その後、PDLデータ解析部102は、ステップSP111に移る。このステップSP111の処理については、後述する。
また、得られたコマンドがカラー情報であった場合、PDLデータ解析部102は、ステップSP103において、カラー情報格納部120にこのカラー情報を格納する。このとき、このカラー情報格納部120に以前のカラー情報が格納されている場合には、以前のカラー情報を、今回のカラー情報で更新する。尚、このカラー情報は、RGB3色のRGBカラー情報である。その後、PDLデータ解析部102は、ステップSP111に移る。
また、得られたコマンドがパターン指定コマンドであった場合、PDLデータ解析部102は、ステップSP104において、このパターン指定コマンドをもとに、パターン指定用の中間コードMc(例えば図2に示すパターン指定コードCd12及びCd13)を生成して、ステップSP110に移る。
また、得られたコマンドが図形指定コマンドであった場合、ステップSP105において、PDLデータ解析部102は、図形指定コマンドをもとに、図形指定用の中間コードMc(例えば図2に示す図形指定コードCd14)を生成する。
さらに、PDLデータ解析部102は、つづくステップSP108において、カラー情報格納部120に格納されているRGBカラー情報をもとに、色指定用の中間コードMc(例えば図2に示す色指定コードCd11)を生成する。
尚、この場合の色指定用の中間コードMcは、CMY3色ではなくRGB3色のそれぞれのカラーレベルを指定するものである。
さらに、PDLデータ解析部102は、つづくステップSP109において、ROP情報格納部119に格納されているROP情報をもとに、ROP指定用の中間コードMc(例えば図2に示すROP指定コードCd10)を生成する。
そして、PDLデータ解析部102は、つづくステップSP110において、このようにして生成した中間コードMcを、中間コード格納部117に格納する。その後、PDLデータ解析部102は、ステップSP111に移る。
また、得られたコマンドが文字指定コマンドであった場合、ステップSP106において、PDLデータ解析部102は、文字指定コマンドをもとに、文字指定用の中間コードMc(例えば図2に示す文字指定コードCd22及びCd23)を生成する。
さらに、PDLデータ解析部102は、つづくステップSP108において、カラー情報格納部120に格納されているRGBカラー情報をもとに、カラー指定用の中間コードMc(例えば図2に示す色指定コードCd21(ただしRGBカラー))を生成する。
さらに、PDLデータ解析部102は、つづくステップSP109において、ROP情報格納部119に格納されているROP情報をもとに、ROP指定用の中間コードMc(例えば図2に示すROP指定コードCd20)を生成する。
そして、PDLデータ解析部102は、つづくステップSP110において、このようにして生成した中間コードMcを、中間コード格納部117に格納する。その後、PDLデータ解析部102は、ステップSP111に移る。
また、得られたコマンドがイメージ指定コマンドであった場合、ステップSP107において、PDLデータ解析部3は、イメージ指定コマンドをもとに、イメージ指定用の中間コードMc(例えば図2に示すイメージ指定コードCd31及びCd32)を生成する。
さらに、PDLデータ解析部102は、つづくステップSP109において、ROP情報格納部119に格納されているROP情報をもとに、ROP指定用の中間コードMc(例えば図2に示すROP指定コードCd30)を生成する。
そして、PDLデータ解析部102は、つづくステップSP110において、このようにして生成した中間コードMcを、中間コード格納部117に格納する。その後、PDLデータ解析部102は、ステップSP111に移る。
ステップSP111において、PDLデータ解析部102は、PDLデータの終端を検出したかどうか、すなわちPDLデータにまだ解析していないコマンドが残っているか否かを確認する。
そして、PDLデータ解析部102は、PDLデータにまだ解析していないコマンドが残っている場合には、ステップSP101に戻り、PDLデータのコマンドを全て解析し終えると、このPDLデータ解析処理手順RT10を終了する。
カラープリンタ100は、このようなPDLデータ解析処理手順RT10にそって、PDLデータを解析して、RGB3色でROP処理を行うための中間コードMcを生成するようになっている。
次に、印刷処理概要手順RT1(図4)のステップSP3での処理、すなわち印刷イメージ生成処理手順RT11について、図23に示すフローチャートを用いて説明する。
この印刷イメージ生成処理手順RT11では、まずステップSP120において、中間コード判別部110が、中間コード格納部117に格納されている中間コードMcを解析して、この中間コードMcからコードCdを順に抽出し、以降の処理をコードCdの種別ごとに分岐させる。
ここで、抽出したコードCdが、色指定コードCdであった場合、中間コード判別部110は、ステップSP121において、描画処理部114に、この色指定コードCdにより指定されるRGBカラーを示すカラー情報を登録する。
その後、中間コード判別部110は、ステップSP130に移る。このステップSP130の処理については、後述する。
また、抽出したコードCdが、ROP指定コードCdであった場合、中間コード判別部110は、ステップSP122において、描画処理部114に、このROP指定コードCdにより指定されるROP演算を示すROP情報を登録する。その後、中間コード判別部110は、ステップSP130に移る。
また、抽出したコードCdが、パターン指定コードCdであった場合、中間コード判別部110は、ステップSP123において、描画処理部114に、このパターン指定コードCdにより指定されるパターンを示すパターン情報を登録する。その後、中間コード判別部110は、ステップSP130に移る。
また、抽出したコードCdが、図形指定コードCdであった場合、ステップSP124において、図形描画部111が、描画処理部114にオブジェクト種別として図形を登録する。
さらに図形描画部111は、つづくステップSP125において、描画処理部114を利用し、印刷イメージ格納部118のバッファ領域に対して図形描画を行う。
このとき、描画処理部114は、第1の実施の形態で説明した描画処理概要手順RT4(図7)と同様の手順で、図形指定コードCdと、登録されている各種情報(カラー情報、ROP情報、パターン情報)に基づいて、図形描画を行う。
この結果、Bit#31〜8の3ByteでRGB3色のそれぞれのカラーレベルを示し、Bit#7〜0の1Byteがオブジェクト情報フィールドOfとなるカラー画素データCpが生成され、このカラー画素データCpが印刷イメージ格納部118のバッファ領域に中間イメージのデータとして格納される。
その後、中間コード判別部110が、ステップSP130に移る。
また、抽出したコードCdが、文字指定コードCdであった場合、ステップSP126において、文字描画部112が、描画処理部114にオブジェクト種別として文字を登録する。
さらに文字描画部112は、つづくステップSP127において、描画処理部114を利用し、印刷イメージ格納部118のバッファ領域に対して文字描画を行う。
この場合も、描画処理部114は、描画処理概要手順RT4と同様の手順で、文字指定コードCdと、登録されている各種情報(カラー情報、ROP情報、パターン情報)に基づいて、文字描画を行う。
この結果、RGB3色のそれぞれのカラーレベルを示すと共にオブジェクト情報フィールドOfを保持するカラー画素データCpが生成され、このカラー画素データCpが印刷イメージ格納部118のバッファ領域に中間イメージのデータとして格納される。
その後、中間コード判別部110が、ステップSP130に移る。
また、抽出したコードCdが、イメージ指定コードCdであった場合、ステップSP128において、イメージ描画部113が、描画処理部114にオブジェクト種別としてイメージを登録する。
さらにイメージ描画部113は、つづくステップSP129において、描画処理部114を利用し、印刷イメージ格納部118のバッファ領域に対してイメージ描画を行う。
この結果、RGB3色のそれぞれのカラーレベルを示すと共にオブジェクト情報フィールドOfを保持するカラー画素データCpが生成され、このカラー画素データCpが印刷イメージ格納部118のバッファ領域に中間イメージのデータとして格納される。
その後、中間コード判別部110が、ステップSP130に移る。
ステップSP130において、中間コード判別部110は、次のコードCdが終端コードCdであるかどうかを確認する。ここで、次のコードCdが終端コードCdでない場合、このことは、処理し終えていないコードCdがまだ残っていることを意味する。このとき、中間コード判別部110は、ステップSP120に戻る。
これに対して、次のコードCdが終端コードCdであった場合、このことは、中間コードMcの全コードCdを処理し終えたことを意味する。この時点で、印刷イメージ格納部118には、中間コードMcに基づくRGBカラーの中間イメージが格納されていることになる。
このとき、つづくステップSP131において、カラーマッチング処理部115が、印刷イメージ格納部118に格納されている中間イメージをRGBカラーからCMYカラーに色変換するカラーマッチング処理を行う。尚、このカラーマッチング処理について詳しくは後述する。
この時点で、印刷イメージ格納部118には、中間コードMcに基づくCMYカラーの中間イメージが格納されていることになる。
そして、つづくステップSP132において、黒生成処理部116が、印刷イメージ格納部118に格納されているCMYカラーの中間イメージに対して黒生成処理を行う。これにより、CMYKカラーの印刷イメージが生成される。
尚、この黒生成処理は、第1の実施の形態と同様であるので、ここでは詳しい説明を省略する。
カラープリンタ100は、このような印刷イメージ生成処理手順RT11で、中間コードMcにもとづく印刷イメージを生成するようになっている。
次に、印刷イメージ生成処理手順RT11(図23)のステップSP131でのカラーマッチング処理の手順(これをカラーマッチング処理手順と呼ぶ)RT12について、図24に示すフローチャートを用いて詳しく説明する。
このカラーマッチング処理手順RT12では、まずステップSP140において、カラーマッチング処理部115が、印刷イメージ格納部118に格納されてい中間イメージの各画素のオブジェクト情報フィールドOfのBit#2を確認する。
ここで、Bit#2が1であれば、このことは、画素の現在オブジェクト種別がイメージであることを意味する。このとき、カラーマッチング処理部115は、ステップSP141に移り、このステップSP141において、イメージ用のカラーマッチング処理を行うことで、画素のカラー情報をRGBカラーからCMYカラーに変換する。
一方で、オブジェクト情報フィールドOfのBit#2が0であれば、このことは、画素の現在オブジェクト種別がイメージではないことを意味する。このとき、カラーマッチング処理部115は、ステップSP142に移り、このステップSP142において、オブジェクト情報フィールドOfのBit#1を確認する。
ここで、Bit#1が1であれば、このことは、画素の現在オブジェクト種別が文字であることを意味する。このとき、カラーマッチング処理部115は、ステップSP143に移り、このステップSP143において、文字用のカラーマッチング処理を行うことで、画素のカラー情報をRGBカラーからCMYカラーに変換する。
一方で、オブジェクト情報フィールドOfのBit#1が0であれば、このことは、画素の現在オブジェクト種別がイメージでも文字でもなく図形であることを意味する。このとき、カラーマッチング処理部115は、ステップSP144に移り、このステップSP144において、図形用のカラーマッチング処理を行うことで、画素のカラー情報をRGBカラーからCMYカラーに変換する。
このようにして、カラーマッチング処理部115は、オブジェクト種別ごとに最適なカラーマッチング処理を行うようになっている。
そして、実際、カラーマッチング処理部115は、このカラーマッチング処理を、印刷イメージ格納部17に格納されている中間イメージの画素ごとに行うことで、中間イメージの各画素のカラー画素データCpを更新する。
かくして、印刷イメージ格納部17に格納されている中間イメージがRGBカラーからCMYカラーに変換されたことになる。
カラーマッチング処理部115は、このようなカラーマッチング処理手順RT12にそって、カラーマッチング処理を行うことにより、中間イメージをRGBカラーからCMYカラーに変換するようになっている。
この第2の実施の形態のカラープリンタ100によれば、一般的にハードウェア処理されるカラーマッチング処理と黒生成処理とを、印刷イメージ生成部104で連続して行うようになり、こうすることで、印刷イメージの生成を高速化することができる。
また、このカラープリンタ100によれば、ROP処理を、RGBカラーのまま行うので、より正確な印刷イメージを得ることができるとも言える。
[3.他の実施の形態]
[3−1.他の実施の形態1]
上述した第1及び第2の実施の形態では、オブジェクト情報フィールドOfに記されている現在オブジェクト種別を利用して、カラーマッチング処理や黒生成処理を行うようにした。
これに限らず、カラーマッチング処理や黒生成処理以外にも、オブジェクト種別ごとに行う処理があれば、この処理を、オブジェクト情報フィールドOfに記されている現在オブジェクト種別を利用して行うようにしてもよい。
例えば、この現在オブジェクト種別を、特色(白やクリア)の設定に利用してもよい。この場合、例えば、カラー画素コードCdに保持されているCMYのカラーレベルが全て0であり、且つ現在オブジェクト種別に、図形、文字、イメージのいずれかが示されている場合、このオブジェクトの色を特色に設定するようにする。
[3−2.他の実施の形態2]
また、上述した第1及び第2の実施の形態では、カラー画素コードCdのBit#0〜7をオブジェクト情報フィールドOfとして利用するようにした。
これに限らず、オブジェクト情報フィールドOfを、カラー画素コードCdとは別に、例えば印刷イメージ格納部17に格納するようにしてもよい。
尚、このようにオブジェクト情報フィールドOfとカラー画素コードCdとを別々に保持する場合、これらを、画素ごとに紐付けて保持するようにすればよい。
[3−3.他の実施の形態3]
さらに、上述した第1及び第2の実施の形態では、ROP3に基づくROP処理を行うカラープリンタ1及び100に本発明を適用したが、これに限らず、XOR演算を同一色で2回行うことにより色が1回目のXOR演算を行う前の色に戻るようなROP処理を行うものであれば、カラープリンタ1及び100以外のカラープリンタに本発明を適用してもよい。
[3−4.他の実施の形態4]
さらに、上述した第1及び第2の実施の形態では、文字用の黒生成処理と図形用の黒生成処理を同様の処理(CMYのグレー成分をKのみのグレー成分に置き換える処理)とした。
これに限らず、文字用の黒生成処理と図形用の黒生成処理を、CMYとKの配分を変えるようにして、異なる処理にしてもよい。
[3−5.他の実施の形態5]
さらに、上述した第1の実施の形態では、カラープリンタ1を、データ受信部2、PDLデータ解析部3、カラーマッチング処理部4、データ格納部5、印刷イメージ生成部6、印刷部7により構成したが、これらは、任意のソフトウェア又はハードウェアで実装されるものである。
第2の実施の形態のカラープリンタ100についても同様であり、データ受信部101、PDLデータ解析部102、データ格納部103、印刷イメージ生成部104、印刷部105は、任意のソフトウェア又はハードウェアで実装されるものである。
[3−6.他の実施の形態6]
さらに、上述した第1及び第2の実施の形態では、画像処理装置としてのカラープリンタ1及び100に本発明を適用したが、これに限らず、カラープリンタ1や100と同様に、ROP処理を行う装置であれば、ファクシミリ、MFP(Multi Function Product:複合機)、コピー機などに適用することができる。
[3−7.他の実施の形態7]
さらに、本発明は、上述した第1及び第2の実施の形態と、上述した他の実施の形態とに限定されるものではない。すなわち本発明は、上述した第1及び第2の実施の形態と上述した他の実施の形態の一部または全部を任意に組み合わせた実施の形態や、一部を抽出した実施の形態にもその適用範囲が及ぶものである。