以下、本発明の実施形態について説明する。
図1に、本実施形態に係る画像処理システム10の構成概略図が示されている。画像処理システム10は、端末装置12、画像処理装置としての印刷コントローラ14、及び印刷装置16を含んで構成される。また、印刷コントローラ14は、フロントエンド装置18及びバックエンド装置20を含んで構成される。端末装置12とフロントエンド装置18、フロントエンド装置18とバックエンド装置20、及びバックエンド装置20と印刷装置16との間は、例えばLAN(Local Area Network)などの通信回線22、24、及び26により通信可能に接続されている。
端末装置12は、例えばパーソナルコンピュータなどの汎用コンピュータであってよい。端末装置12は、ユーザの指示に従い、文書の印刷命令である印刷ジョブをフロントエンド装置18に対して送信する。
フロントエンド装置18は、端末装置12から送信された印刷ジョブから中間データを生成し、中間データをバックエンド装置20に送信する。バックエンド装置20は、フロントエンド装置18からの中間データを処理して画像データを生成し、画像データを印刷装置16に送信する。フロントエンド装置18及びバックエンド装置20の詳細な機能構成、及びこれらが行う処理の詳細については後述する。
フロントエンド装置18は、CPU(中央演算装置)、ROM(Read Only Memory)やRAM(Random Access Memory)あるいはハードディスクなどからなる記憶媒体、入出力インターフェース、通信インターフェース、及び表示部などを含むコンピュータであってよい。当該記憶媒体に、フロントエンド装置18の各部(後述)を機能させるためのプログラムが記憶されており、CPUが当該プログラムに従って各部を制御する。バックエンド装置20も同様にコンピュータであってよく、その記憶媒体にバックエンド装置20の各部(後述)を機能させるためのプログラムが記憶されており、CPUが当該プログラムに従って各部を制御する。
フロントエンド装置18及びバックエンド装置20を実現するハードウエアの1つの具体例として、それぞれがサーバとして機能する複数の情報処理装置を1つの筐体内に搭載したブレードサーバを用いることが考えられる。ブレードサーバは、上述のコンピュータの構成を1枚の基板(ブレード)に実装し、複数のブレードを筐体内に搭載したサーバ装置である。例えば、ブレードサーバに搭載された1つのブレードをフロントエンド装置18として機能させ、他の1つのブレードをバックエンド装置20として機能させてもよい。あるいは、例えば、フロントエンド装置18及びバックエンド装置20のそれぞれを、ブレードサーバに搭載された複数のブレードにより実現してもよい。また、フロントエンド装置18及びバックエンド装置20のを1つのブレードにより実現するようにしてもよい。
画像形成部としての印刷装置16は、紙などの印刷媒体に対して画像形成処理としての印刷処理を行う装置であり、例えば、連続紙プリンタであってよい。なお、印刷装置16は、電子写真、インクジェット、又はその他の方式の印刷エンジンにより印刷を行うものとする。なお、本実施形態では、画像処理装置としての印刷コントローラ14と印刷装置16が別体となっているが、印刷コントローラ14と印刷装置16とが一体となっていてもよい。この場合は、印刷コントローラ14及び印刷装置16が画像処理装置を構成することとなる。
図2に、フロントエンド装置18及びバックエンド装置20の機能構成の概略が示されている。以下、図2を参照しながら、フロントエンド装置18及びバックエンド装置20の詳細について説明する。
フロントエンド装置18は、印刷ジョブ受信部30及び論理ページ解釈部32を含んで構成される。また、バックエンド装置20は、中間データバッファ34、描画部36、アクセラレータ部38、及び出力バッファ40を含んで構成される。本実施形態においては、このうち、印刷ジョブ受信部30、論理ページ解釈部32、描画部36の各部は、CPUや記憶媒体などのハードウェアと、CPUの動作を規定するソフトウェア(プログラム)との協働により実現される。一方、アクセラレータ部38は、処理の高速化のためハードウェア(電気電子回路やプロセッサなど)で構成されている。また、中間データバッファ34及び出力バッファ40は、バックエンド装置20を構成するコンピュータの記憶媒体において定義される。
印刷ジョブ受信部30は、端末装置12から送信された印刷ジョブを受信する。本実施形態においては、印刷ジョブは、文書の印刷命令と、印刷対象の文書をページ記述言語で記述したPDLデータとを含む。ページ記述言語は、ディスプレイ表示処理、印刷処理などを情報処理機器に実行させるためのコンピュータプログラミング言語である。PDLデータは、印刷対象の文書を構成する文字や図形などのオブジェクトの位置情報、書式情報及び色情報などを含む。印刷ジョブ受信部30は、受信した印刷ジョブに含まれるPDLデータを論理ページ解釈部32に渡す。
論理ページ解釈部32は、印刷ジョブ受信部30からのPDLデータに基づいて、印刷データとしての中間データを生成する。中間データの例としては、ディスプレイリストなどが挙げられる。中間データは、印刷対象の文書の構成要素である複数のオブジェクトの描画処理を行う順番を表す描画命令を含む。この描画命令を記述する言語としては、PDLデータと比較してより詳細な手順を表現する言語が用いられる。例えば、PDLデータにおいて、文書上におけるあるオブジェクトの位置、形状、及び大きさを表す情報が定義される場合、中間データにおける当該オブジェクトの描画命令では、例えば印刷対象の文書におけるスキャンライン単位で当該オブジェクトの描画の手順を記述したものであり得る。また、中間データは、印刷対象の文書において定義される描画領域(例えばスキャンライン、バンド、タイルなど。詳細は後述)毎におけるオブジェクトの数、各オブジェクトの配置関係(重なり関係含む)、あるいは各オブジェクトの透過率を示す各情報を含んでいる。論理ページ解釈部32が生成した中間データはバックエンド装置20へ送信される。
中間データバッファ34は、フロントエンド装置18から送信された中間データを格納する。
描画部36は、中間データバッファ34に格納された中間データを読み出し、中間データに対して描画処理を行うことで描画データを生成する。描画部36は、印刷対象の文書において定義される複数の描画領域毎に描画処理を行い、各描画領域に対応する複数の描画データを生成する。描画部36は、複数の形式の描画データを生成することができる。本実施形態では、描画部36は、描画領域に含まれる画素毎に色データを有するビットマップ形式の描画データ、及び、ビットマップ形式よりもデータ量を低減し得る圧縮形式の描画データ(詳細後述)を生成することができる。生成された描画データはアクセラレータ部38に出力される。なお、本実施形態では、描画部36は中間データに基づいて描画データを生成しているが、必ずしもその必要はなく、例えば印刷データとしてのPDLデータに対して描画処理を行って描画データを生成するようにしてもよい。
このように、本明細書における「描画データ」とは、印刷対象の文書における各描画領域に基づいて生成された各描画領域に対応したデータであって、複数の形式を取り得るデータを意味する。また、「描画処理」とは、各描画領域に対応した複数の描画データを生成する処理を意味する。
本実施形態では、描画領域として1つのスキャンラインが定義される。つまり、本実施形態では、印刷対象の文書のスキャンライン毎に描画データが生成される。スキャンラインは、印刷対象の文書の1方向に伸びる幅1画素分のラインであり、本実施形態ではx軸方向(左右方向)に伸長するものとする。また、描画領域としてはスキャンラインに限られず、複数のスキャンラインがまとめられたバンド、あるいは、文書を格子状に分割したときの1つの分割領域であるタイルなどであってもよい。
また、描画部36は、生成した複数の描画データそれぞれに対して第1の画像処理を行う。第1の画像処理の内容は、各描画領域に対応した各描画データに個別に施すことのできるものである。
描画部36の詳細な機能構成、並びに、描画処理及び第1の画像処理の詳細については後述する。
生成された複数の描画データは、描画部36内のバッファ(後述)からアクセラレータ部38に対してDMA(Direct Memory Access)転送される。
アクセラレータ部38は、描画部36からの印刷対象の文書1ページ分の複数の描画データに対してラスタライズ処理を行うことで、1ページ分の画像データを生成する。画像データは、印刷装置16が処理可能な形式であって、単一形式(例えばビットマップ形式あるいはランレングス形式)からなるものである。
このように、本明細書における「ラスタライズ処理」とは、複数の描画データをまとめて単一形式のデータに変換することを意味する。また、「画像データ」とは、印刷装置16が処理可能なデータを意味する。
また、アクセラレータ部38は、生成した画像データに対して第2の画像処理を行う。本実施形態では、第2の画像処理は、複数の描画領域に対応する複数の描画データがまとめられた画像データに対して行われるため、第2の画像処理としては、複数の描画領域に跨った処理が可能である。
アクセラレータ部38の詳細な機能構成、並びに、ラスタライズ処理及び第2の画像処理の詳細についても後述する。
アクセラレータ部38により生成された画像データは、出力バッファ40に格納される。出力バッファ40に格納された画像データは、印刷装置16によって読み出される。印刷装置16は、出力バッファ40から読み出した画像データに基づいて印刷処理を行う。
図3に、描画部36の機能構成の概略が示されている。以下、図3を参照しながら、描画部36の詳細な機能構成、並びに、描画処理及び第1画像処理の詳細について説明する。
描画データ生成部50は、中間データバッファ34に格納された中間データを読み出して、印刷対象の文書において定義された描画領域毎に描画処理を行い、描画データを生成する。描画データ生成部50が生成する描画データは、圧縮形式(より詳しくは可逆圧縮形式)としてのランレングス形式、又はビットマップ形式のいずれかである。本実施形態では、描画データ生成部50は、ランレングス形式の描画データを生成する。上述のように、本実施形態では1つの描画領域として1つのスキャンラインが定義されているため、描画データ生成部50はスキャンライン毎に描画データを生成していく。印刷対象の文書に複数のオブジェクトが含まれている場合には、描画データ生成部50は、中間データにおいて指示されたオブジェクトの描画処理の順番に基づいて、まず1番目のオブジェクトに対して描画処理を行い、次いで2番目以降のオブジェクトを1つずつ重ねる毎に順次描画処理を行うことで、最終的に全てのオブジェクトが重畳された状態における各スキャンラインに対応する描画データを生成する。
スキャンライン形式判定部52は、各スキャンラインに対応する各描画データが取るべき形式を判定する。各スキャンラインの描画データの形式は、印刷対象の文書の各スキャンラインの画像内容に応じて決定される。本実施形態では、スキャンライン形式判定部52は、各描画データの形式として、ランレングス形式又はビットマップ形式のいずれかを決定する。ここでのランレングス形式とは、画素の色を表現する1つ分の色データと、当該色の画素が連続する長さを示すデータとを含む形式である。ランレングス形式によれば、例えば同じ色が連続する画素群が多く存在する場合、画素毎に色データを有するビットマップ形式に比して、描画データのデータ量が低減される。しかし、スキャンラインの画像内容によっては(例えば同じ色が連続する画素群が少ない場合)ランレングス形式の方がかえってデータ量が多くなってしまう場合もある。このように、本実施形態における圧縮形式とは、ビットマップ形式に比してデータ量を低減し得る形式ではあるが、描画領域の内容によっては、ビットマップ形式よりもデータ量が大きくなり得るデータ形式を意味する。
スキャンライン形式判定部52により、ビットマップ形式であると判定されたスキャンラインに対応する描画データは、描画データ生成部50からビットマップ形式出力部54へ送られる。ビットマップ形式出力部54は、入力されたランレングス形式の描画データをビットマップ形式の描画データに変換して出力する。スキャンライン形式判定部52により、ランレングス形式であると判定されたスキャンラインに対応する描画データは、描画データ生成部50からランレングス形式出力部56へ送られる。ランレングス形式出力部56は、入力されたランレングス形式の描画データをそのまま出力する。以上のように、本実施形態においては、描画データ生成部50、スキャンライン形式判定部52、ビットマップ形式出力部54、及びランレングス形式出力部56が描画データ生成手段を構成する。
複数のスキャンラインバッファからなるスキャンラインバッファ群58は、ビットマップ形式出力部54又はランレングス形式出力部56から出力される複数の描画データを格納する。各スキャンラインバッファは、印刷対象の文書の各スキャンラインに対応するものである。つまり、印刷対象の文書のn番目のスキャンラインに対応する描画データがスキャンラインバッファnに格納される。例えば、スキャンラインバッファ0には0番目のスキャンラインに対応する描画データが格納され、スキャンラインバッファ1には1番目のスキャンラインに対応する描画データが格納される。
図4に、各スキャンラインバッファのデータ構造が示されている。各スキャンラインバッファには、対応するスキャンラインの描画データと共に、対応するスキャンラインの描画データの形式を示す形式情報が記憶される。図4に示す通り、本実施形態では、形式情報として「0」が記憶されている場合、当該スキャンラインバッファに対応するスキャンラインの描画データはランレングス形式であることを示す。一方、形式情報として「1」が記憶されている場合、当該スキャンラインバッファに対応するスキャンラインの描画データはビットマップ形式であることを示す。
前述したスキャンライン形式判定部52は、各スキャンラインバッファに記憶された形式情報を参照することで、各スキャンラインに対応する描画データの形式を判定する。例えば、スキャンライン0に対応する描画データの形式を判定するにあたり、スキャンライン形式判定部52は、スキャンラインバッファ0に格納された形式情報を参照する。そして、当該形式情報が「0」の場合は、当該描画データがランレングス形式出力部56に出力され、当該形式情報が「1」の場合は、当該描画データがビットマップ形式出力部54に出力される。
本実施形態では、印刷対象の文書の各ページの処理の開始時点においては、全てのスキャンラインバッファの形式情報は「0」に初期化される。つまり、各スキャンラインに対応する各描画データは、まずは、ランレングス形式出力部56からランレングス形式で出力されることとなる。
ここで、本実施形態におけるランレングス形式の描画データのデータ構造について説明する。図5に、本実施形態におけるランレングス形式の描画データのデータ構造が示されている。図5における横軸は、スキャンラインバッファのメモリアドレスを示している。ランレングス形式の描画データは、3種類のデータブロックを含んでいる。すなわち、ラン(同色を有する連続する画素群)のタイプ及びカラーブロックへのポインタを示すフォーマットブロック(図5においてfnで示されるブロック)、スキャンライン上におけるランの右端の座標を示す座標ブロック(図5においてxrnで示されるブロック)、及び、ランの色を示すカラーブロック(図5においてcolornで示されるブロック)を含んで構成される。1つのランは、フォーマットブロックと、座標ブロックと、カラーブロックの組によって定義される。なお、ランに色が無い場合(描画指示無しの場合)は、当該ランのカラーブロックは省略可能である。
図5に示されるように、各ランに対応するフォーマットブロック及び座標ブロックは、スキャンラインバッファのメモリアドレスの最小値(0)詰め(図5における左詰め)で順に格納されていく。ランの順番は、スキャンラインに沿ったスキャン方向(例えば印刷対象の文書の左端から右端側へ向かう方向)における順番であってよい。0番目のランであるフォーマットブロックf0及び座標ブロックxr0で示されるラン0は、スキャンラインの左端からx座標がxr0−1までの画素群であることを示す。また、1番目のランであるフォーマットブロックf1及び座標ブロックxr1で示されるラン1は、x座標がxr0(ラン0の右端の次の画素がラン1の左端であるため)からxr1−1までの画素群であることを示す。
一方、各ランに対応するカラーブロックは、スキャンラインバッファのメモリアドレスの最大値(ADDRMAX)詰め(図5における右詰め)で順に格納されていく。これにより、各ランに対応する複数のカラーブロックがスキャンラインバッファのメモリ領域の1つの連続した領域にまとめられることになる。これにより、各ランに対する色変換処理(後述)にあたり、色データをスキャンラインバッファから効率よく読み出すことができる。
図6に、フォーマットブロックのデータ構造が示されている。フォーマットブロックは、ランのタイプを示すタイプ情報、及び対応するカラーブロックのメモリアドレスを示すポインタ情報が含まれる。本実施形態では、ランのタイプとして、スキップ、単色、ビットマップのいずれかが設定される。タイプ情報として「0」を有する場合、当該ランがスキップタイプであることを示し、タイプ情報として「1」を有する場合、当該ランが単色タイプであることを示し、タイプ情報として「2」を有する場合、当該ランがビットマップタイプであることを示す。
スキップタイプとは、当該ランが示す画素群に対しては描画指示がないことを意味する。したがって、スキップタイプのランに対してはカラーブロックが定義されない。単色タイプとは、当該ランが示す画素群は全て同色であることを示す。単色タイプのランに対応するカラーブロックには、当該ランに含まれる画素群の色を示す1つの色データが含まれる。ビットマップタイプとは、当該ランが示す画素群が複数の色を有していることを示す。ビットマップタイプのランに対応するカラーブロックには、当該ランに含まれる各画素毎の色を示す複数の色データが含まれる。
図7に、ランレングス形式の描画データの具体例が示されている。図7の例においては、4つのランが定義されている。1つ目のランはスキップタイプであり、スキャンラインの左端からx=9(x座標が9)までの画素群であることが示されている。1つ目のランはスキップタイプであることから、当該ランに対応するカラーブロックが定義されていない。2つ目のランは単色タイプであり、x=10からx=19までの画素群であることが示されている。2つ目のランには、(Y,M,C,K)=(0,255,255,0)(赤)を示す色データを有するカラーブロックが定義されている。これは、x=10からx=19までの画素群の色が赤であることを示している。3つ目のランはビットマップタイプであり、x=20からx=29までの画素群であることが示されている。3つ目のランには、x=20からx=29までの各画素を示す複数の色データを有するカラーブロックが定義されている。ここでは、3つ目のランにおいては、赤からシアンへのグラデーションであるとする。4つ目のランは単色タイプであり、x=30からx=39までの画素群であることが示されている。4つ目のランには、(Y,M,C,K)=(255,0,0,0)(シアン)を示す色データを有するカラーブロックが定義されている。なお、4つ目のランからスキャンラインの右端までの間に描画指示がない場合は、当該ランの記載を省略することができる。例えば、図7の例において、スキャンラインの右端がx=49である場合、4つ目のランの右端であるx=40からx=49までの画素群において描画指示がない場合、当該画素群に対応するスキップタイプのランを示す各ブロックを省略することができる。図7に示されるランレングス形式の描画データは、図8に示すような画像を示すものとなる。
本実施形態におけるランレングス形式の描画データのデータ量は以下の通りであるとする。フォーマットブロックは5バイト(タイプ情報1バイト、ポインタ情報4バイト)であり、座標ブロックは3バイトであり、単色タイプのカラーブロックは4バイトであるとする。ビットマップタイプのカラーブロックのデータ量は、当該ランに含まれる画素数に応じて変動する。具体的には、ビットマップタイプのランに含まれる画素数をmとすると、4mバイトとなる。また、座標ブロックのデータ量は描画領域のサイズに応じて変動し得る。
図3に戻り、データ形式変換手段としてのスキャンライン形式変換部60は、ビットマップ形式出力部54又はランレングス形式出力部56から出力された描画データの形式を、ランレングス形式からビットマップ形式へ、あるいはビットマップ形式からランレングス形式へ変換する処理を行う。
まず、ランレングス形式からビットマップ形式への変換について説明する。スキャンライン形式変換部60は、ランレングス形式出力部56から出力されたランレングス形式の描画データが所定の第1条件を満たした場合に、当該描画データをビットマップ形式に変換する。詳しくは、ランレングス形式の描画データのデータ量が所定量を超える場合に、当該描画データをビットマップ形式に変換する。本実施形態では、当該所定量を当該描画データをビットマップ形式とした場合のデータ量に基づいて決定している。本実施形態では、スキャンライン形式変換部60は、ランレングス形式の描画データのデータ量が、当該描画データをビットマップ形式とした場合のデータ量を超える場合に、当該描画データをビットマップ形式に変換する。当該所定量は、描画領域のサイズ(本実施形態ではスキャンラインの長さ)に応じて決定することができる。例えば、スキャンラインの長さが20画素である場合、1つの画素を表す色データが4バイト(CMYKそれぞれ1バイト)であるとすると、当該スキャンラインに対応するビットマップ形式の描画データのデータ量は20×4=80バイトとなるから、当該所定量を80バイトと設定することができる。また、このように算出された値(80バイト)に基づいて、所定量を決定するようにしてもよい。
ある描画データに対して、ランレングス形式とビットマップ形式のいずれのデータ量が大きくなるかは、描画領域のサイズと、ランレングス形式の描画データにおけるランの数とに基づいて推定することができる。例えば、上述の通り、1つのスキャンラインが20画素の長さである場合、当該スキャンラインに対応するビットマップ形式の描画データのデータ量は80バイトとなる。一方、全てのランが全て単色タイプであると仮定すると、1つのランのデータ量は12バイト(フォーマットブロック5バイト、座標ブロック3バイト、カラーブロック4バイト)となる。つまり、全てのランが単色タイプであると仮定した場合、ランが1つ増える度に、ランレングス形式の描画データの容量が12バイトずつ増えていくことになる。したがって、80÷12≒6.67であるから、ランの数が6個を超える、つまり7個以上である場合は、ビットマップ形式よりもランレングス形式の方が描画データの数が大きくなると推定できる。この場合、スキャンライン形式変換部60は、ランレングス形式の描画データに7個以上のランが含まれると判定した場合に、当該描画データをビットマップ形式に変換する。もちろん、1つのスキャンラインに含まれるランのタイプがいずれであるかは、文書の内容次第であり事前に把握することができないが、上述のように、ランのタイプが全て単色タイプであると仮定した上で、ランの数の閾値が決定されている。
あるいは、ランレングス形式からビットマップ形式へ描画データを変換する条件としての描画データが含むランの数を、単にスキャンラインの長さに基づいて決定してもよい。例えば、ランの数がスキャンラインの長さの1/4を超える場合に、描画データをビットマップ形式に変換するようにしてもよい。
また、スキャンライン形式変換部60は、描画データをランレングス形式からビットマップ形式に変換すると共に、当該描画データが格納されるスキャンラインバッファの形式情報(図4参照)を「1」に変更する。これにより、以後、オブジェクトが追加されて、描画データ生成部50が再度当該スキャンラインに対応する描画データを生成する場合、その描画データはビットマップ形式出力部54からビットマップ形式として出力されるようになる。
図9〜図12を参照して、描画データがランレングス形式からビットマップ形式に変換される具体例を説明する。本例における印刷対象の文書は複数のオブジェクトを有している。図9には、そのうち1番目に処理されるobj1が示されている。obj1は単色の図形オブジェクトであるとする。x軸方向に並ぶ1列の画素列(20画素)が1つのスキャンラインである。上述したように、描画データがランレングス形式からビットマップ形式に変換される条件は、ランの数が6を超える(7個以上)であるという条件とする。ここでは、y=1のスキャンライン1に着目する。
スキャンライン1の描画データは、描画データ生成部50で生成され、まずはランレングス形式出力部56からランレングス形式で出力される。まず、ランレングス形式出力部56は、x=0の画素(スキップタイプのラン)に関するフォーマットブロック及び座標ブロック(スキップタイプのためカラーブロックは省略される)を出力し、スキャンラインバッファ1に格納する。次いで、x=1〜x=18までの画素群(単色タイプのラン)に関するフォーマットブロック、座標ブロック、及びカラーブロックを出力し、スキャンラインバッファ1に格納する。x=19を示すスキップタイプのランに関するデータは、上述の通り省略可能である。スキャンライン1の描画データに含まれるランは以上である。図10に、スキャンライン1のランレングス形式の描画データが示されている。したがって、スキャンライン1については、ランの数が2であり、ランの数が7個以上であるという条件を満たさないから、スキャンライン形式変換部60は、スキャンラインバッファ1に格納された描画データをビットマップ形式に変換せず、ランレングス形式のまま維持する。なお、スキャンライン形式変換部60は、各ランに関するデータブロックがスキャンラインバッファに格納される度に、ランの数が所定ラン数以上であるか否かを判定してよい。
図11には、2番目に処理されるobj2がobj1に重畳された様子が示されている。obj2も単色(ただしobj1とは異なる色)の図形オブジェクトであるとする。図11に示される通り、obj2がobj1に重畳されたことで、スキャンライン1におけるx=1〜x=18までの画素群(単色タイプのラン)の間に、他の色が割り込まれている。したがって、描画データ生成部50及びランレングス形式出力部56は、x=1〜x=18まで画素群に対応する単色タイプのランを分割して、割り込まれた色(obj2の色)を表す新たなランを表すデータブロックを追加する処理を行う。
まず、スキャンバッファ1に格納されたランレングス形式の描画データ(図10参照)のうち、2番目のランの座標ブロックの値が「19」から「2」に変更される。これにより、2番目のランは、x=1の1画素に対応するものとなる。次いで、ランレングス形式出力部56は、新たにx=2〜x=3までの画素群(obj2に対応する単色タイプのラン)に関する各データブロックを出力する(3つ目のラン)。以後、同様にして、ランレングス形式出力部56は、x=4〜x=7までの画素群(obj1に対応する単色タイプのラン)に関する各データブロック(4つ目のラン)、x=8〜x=11までの画素群(obj2に対応する単色タイプのラン)に関する各データブロック(5つ目のラン)、x=12〜x=16までの画素群(obj1に対応する単色タイプのラン)に関する各データブロック(6つ目のラン)、x=17〜x=18までの画素群(obj2に対応する単色タイプのラン)に関する各データブロック(7つ目のラン)を出力する。各ランに関する各データブロックのスキャンラインバッファ1への追加処理が行われる度に、スキャンライン形式変換部60は、スキャンラインバッファ1に格納されるランの数が7以上となる否かを判定する。したがって、7つ目のランに関する各データブロック(少なくともフォーマットブロック)がランレングス形式出力部56から出力された時点で、スキャンライン形式変換部60は、ランの数が7個以上となると判定し、直ちに、スキャンライン1に対応する描画データをビットマップ形式に変換してスキャンラインバッファ1に格納する。そして、ランレングス形式出力部56は、スキャンラインバッファ1の形式情報を「1」に変更する。
このように、本実施形態においては、スキャンライン形式変換部60は、描画データの生成途中において、当該描画データが所定の第1条件を満たした場合に、生成済みの描画データをランレングス形式からビットマップ形式に変換する。
なお、ランレングス形式からビットマップ形式へ描画データを変換する条件としての描画データが含むランの数(閾値)を、描画領域のうち、描画処理を終えた(つまりランレングス形式の描画データが生成済みの)領域に応じて、動的に変更するようにしてもよい。上述のように、スキャンラインの長さが20画素である場合、当該閾値(ランの数)は6個であったが、例えば、当該スキャンラインのうち10画素分の描画処理を終えた段階の閾値を4個として、10画素分の描画処理を終えた時点でランの数が4個を超える場合には、その時点で当該スキャンラインに対応する描画データをビットマップ形式に変換するようにしてもよい。このようにすることで、ビットマップ形式へ変換する必要があることをより早期に判断することができる。描画データがビットマップ形式に変換されるのであれば、その前におけるランレングス形式の描画データの生成は無駄な処理となるところ、ビットマップ形式への変換の判断をより早期に行うことで、無駄となる処理量を低減することができる。
次に、一旦ビットマップ形式へ変換された描画データを再度ランレングス形式に戻す処理について説明する。スキャンライン形式変換部60は、ビットマップ形式に変換済みのスキャンラインに対応する描画データが所定の第2条件を満たした場合に、当該スキャンラインに対応する描画データを再度ランレングス形式に変換する処理を行う。ビットマップ形式からランレングス形式への変換は、印刷対象の文書に含まれる複数のオブジェクトに対して順次描画処理が行われる場合に生じ得る。具体的には、あるスキャンラインにおいて、新たに処理対象となったオブジェクト(特に、透過(オーバープリント)が指定されておらず、それより先に処理されたオブジェクトをノックアウトするオブジェクト)が所定の第2条件を満たした場合に、当該スキャンラインに対応する描画データをランレングス形式に変換する。また、スキャンライン形式変換部60は、描画データをビットマップ形式からランレングス形式に変換すると共に、当該描画データが格納されるスキャンラインバッファの形式情報(図4参照)を「0」に変更する。
本実施形態では、あるスキャンライン内の処理対象のオブジェクト以外の画素数と、当該スキャンラインにおいて処理対象のオブジェクトをランレングス形式の描画データとした場合のランの数との合計が、所定数以下である、という条件を第2条件としている。当該所定数は、上記第1条件を充足するためのランの数(上述の例では20画素のスキャンラインに対して6個)である。具体的には、スキャンライン形式変換部60は、スキャンラインの長さをLとし、当該スキャンラインにおける処理対象のオブジェクトのランの数をn、当該ランの長さの合計をN、上記第1条件を充足するためのランの数をThとすると、L−N+n≧Thが成立する場合に、当該スキャンラインに対応する描画データをランレングス形式に変換する。ここで、L−Nが、スキャンライン内の処理対象のオブジェクト以外の画素数を表している。
例えば、スキャンラインの長さを20(L=20)、当該スキャンラインにおける処理対象のオブジェクトのランの数を2(n=2)、当該ランの長さの合計を16(N=16)、上記第1条件を充足するためのランの数を6(Th=6)である場合を考える。n=2、N=16であるから、スキャンラインに含まれる20個の画素のうち、16個の画素は2つのランで表せることになる。仮に、残り4こ(つまりL−N個)の画素を全て個別のランで表すことになった場合、当該スキャンラインに含まれるランの数は、残り4個の画素にそれぞれ対応する4つのランと、16個の画素を表す2つのランを足した6個(つまりL−N+n)となる。これが、第1条件を充足するためのランの数をThである6個以下であれば、当該スキャンラインに対応する描画データは、ビットマップ形式よりもランレングス形式の方がデータ量は小さいと言える。したがって、スキャンライン形式変換部60は、L−N+n≧Thが成立する場合に、当該スキャンラインに対応する描画データをランレングス形式に変換する。
図13〜図14を参照して、描画データがビットマップ形式からランレングス形式に変換される具体例を説明する。図13には、図11に示した印刷対象の文書に対して、さらにobj3が重畳された様子が示されている。obj3も単色(ただしobj1及びobj2とは異なる色)の図形オブジェクトであるとする。また、obj3は、オーバープリントが指定されておらず、obj3により、obj1及びobj2がノックアウトされるものとする。
現在ビットマップ形式であるスキャンライン1に着目すると、処理対象のobj3は、x=0からx=16までの17個の画素が同色で連続している。つまり、n=1であり、N=17である。本例では、上述の通り、L=20、及びTh=6であるから、20−17+1≧6という条件を満たす。したがって、スキャンライン形式変換部60は、スキャンラインバッファ1に格納されるスキャンライン1に対応する描画データをランレングス形式のデータに変換する。それと共に、ランレングス形式出力部56は、スキャンラインバッファ1の形式情報を「0」に変更する。変換後のランレングス形式の描画データが図14に示されている。
上記の処理が、印刷対象の文書に含まれる全てのオブジェクトが重畳されるまで繰り返される。また、上記の処理が、スキャンライン1以外のスキャンラインについても実行される。その結果、スキャンラインバッファ群58において、ランレングス形式の描画データとビットマップ形式とが混在した複数の描画データが格納され得ることになる。以後、描画領域毎に、ランレングス形式とビットマップ形式とのいずれかの形式をとる複数の描画データ(つまり形式が混在した複数の描画データ)を形式混在描画データと記載する。形式混在描画データは、印刷対象の文書の各描画領域に適した形式(つまりよりデータ量が小さくなる形式)で描画データが生成されている。これにより、全ての描画データをビットマップ形式とした場合、あるいは、全ての描画データをランレングス形式とした場合に比して、形式混在描画データ全体として、データ量を低減させることができる。
本実施形態においては、ランレングス形式の描画データのデータ量が、当該描画データをビットマップ形式とした場合のデータ量を超える場合に、当該描画データがビットマップ形式に変換される。したがって、各スキャンラインバッファの記憶可能容量は、少なくともビットマップ形式の描画データを記憶可能な容量であればよい。記憶可能容量は、描画領域の大きさに基づいて決定される。上述の例のようにスキャンラインが20画素からなる場合、各スキャンラインバッファは、少なくとも20×4=80バイトの記憶可能容量があればよい。
また、各スキャンラインバッファの記憶可能容量をさらに低減させる観点から、ランレングス形式から変換する際に、ビットマップ形式に代えて、非可逆圧縮形式に描画データを変換するようにしてもよい。非可逆圧縮形式は、ビットマップ形式よりもデータ量が小さい形式であり、例えば、低解像度ビットマップ形式などの形式である。
非可逆圧縮形式に変換することとすれば、さらに各スキャンラインバッファの記憶可能容量を低減できる。例えば、スキャンラインにおいて隣接する2つの画素を1画素にまとめて、解像度が元のビットマップ形式の半分となりデータ量も半分になる低解像度ビットマップ形式を非可逆圧縮形式として採用した場合、各スキャンラインバッファの記憶可能容量は、通常のビットマップ形式に変換する場合に比して半分で足りるようになる。もちろん、非可逆圧縮形式に変換する場合は、ランレングス形式から非可逆圧縮形式へ変換するための条件としては、ランレングス形式の描画データのデータ量が、当該描画データを非可逆圧縮形式とした場合のデータ量を超えるといった条件となる。
特に、印刷装置16の処理能力に対して印刷対象の文書の解像度が高い場合は、印刷結果における画質劣化をあまり目立たせることなく、各スキャンラインバッファの記憶可能容量を低減できる。また、非可逆圧縮形式に変換される場合であっても、複数の描画データのうち、画質が劣化するのはビットマップ形式の描画データのみであって、ランレングス形式の描画データの画質は維持することができる。
描画領域として、バンドあるいはタイルを採用する場合は、印刷対象の文書のx方向のみならず、y方向における圧縮も可能となる。また、描画領域としてバンドあるいはタイルを採用する場合には、非可逆圧縮形式としてJPEGを採用することもできる。
図3に戻り、色変換手段としての第1画像処理部62は、スキャンラインバッファ群58に記憶された形式混在描画データに対して第1の画像処理を行う。形式混在描画データは、各スキャンラインに対応した別個の描画データであるため、第1の画像処理としては、各スキャンラインに対応する各描画データに個別に実行できる処理(他の描画データを参照しない処理)が行われる。本実施形態では、第1の画像処理として、色補正処理及びチャネルスワップ処理を含む色変換処理が実行される。
チャネルスワップ処理とは、例えば印刷装置16が金トナーあるいは銀トナーなどのメタリックカラーのトナーを備えている場合であって、端末装置12において当該メタリックカラーを指定した印刷ジョブを生成できない場合に行われる処理である。この場合、基本色のうちの1つ(例えばシアン)がメタリックカラーとして割り当てられ、端末装置12において印刷ジョブが生成される(当該印刷ジョブにはシアン色が含まれないとする)。まず、基本色の処理においては、メタリックカラーに割り当てられたシアン版(したがって実態はメタリック版)は、印刷装置16のメタリックカラー処理部へ出力される。次に、特色の処理が行われるが、その際、特色としてシアン成分を有する色(例えば緑)が存在する場合、現在メタリックカラー処理部に割り当てられているシアン版をシアンカラー処理部に割り当てる必要がある。したがって、特色の処理に先立って、シアン版の割り当てがメタリックカラー処理部からシアンカラー処理部へ変更される。このように、ある色の版のカラー処理部への割り当てを変更する処理がチャネルスワップ処理である。
各スキャンラインに対応する各描画データ(形式混在描画データ)は、複数のスキャンラインバッファにそれぞれ格納されているから、第1画像処理部62は、形式混在描画データに対して色変換処理を並列に実行することができる。これにより、並列処理しない場合に比して、色変換処理を高速に行うことができる。
形式混在描画データを並列処理する場合、第1画像処理部62を複数設けるようにしてもよい。例えば、第1画像処理部62を2つ設け、一方の第1画像処理部62が偶数番目のスキャンラインバッファに記憶された描画データに対して色変換処理を行い、他方の第1画像処理部62が奇数番目のスキャンラインバッファに記憶された描画データに対して色変換処理を行うようにしてもよい。あるいは、偶数番目、奇数番目という分け方ではなく、2つの第1画像処理部62のうち、空いている(処理を行っていない)方に順次形式混在描画データを入力するようにしてもよい。
また、第1画像処理部62は、マルチスレッド処理機能を有していてもよく、複数の描画データを複数のスレッドにおいて並列処理させるようにしてもよい。
また、形式混在描画データには、ランレングス形式の描画データを含んでいる。上述のように、ランレングス形式の描画データは、複数の画素の色が1つの色データにより表現されている。したがって、ランレングス形式の描画データに対して色変換処理を行う際には、当該1つの色データに対して処理を行うことで、複数の画素に対する色変換処理を行うことができる。このように、ランレングス形式を含む形式混在描画データに対して色変換処理を行うことで、全てビットマップ形式の描画データに対して色変換処理を行う場合に比して、色変換処理の処理量が低減され、色変換処理が高速化される。
また、上述のように、ランレングス形式の描画データにおいては、色データを含むカラーブロックがメモリ領域においてひとかたまりとなっているため、第1画像処理部62は、色変換処理にあたって、好適に各スキャンラインバッファから色データを読み出すことができる。
第1の画像処理が施された形式混在描画データは、アクセラレータ部38にDMA転送される。上述の通り、形式混在描画データは、全ての描画データをビットマップ形式とした場合、あるいは、全ての描画データをランレングス形式とした場合に比してデータ量が低減されているから、当該DMA転送処理が高速化される。
図15に、アクセラレータ部38の機能構成の概略が示されている。以下、図15を参照しながら、アクセラレータ部38の詳細な機能構成、並びに、ラスタライズ処理及び第2の画像処理の詳細について説明する。
画像データ生成手段としてのビットマップ展開部70は、スキャンラインバッファ群58からDMA転送されてくる印刷対象の文書1ページ分の形式混在描画データ毎にラスタライズ処理を施して、文書1ページ分の画像データを生成する。当該画像データは単一形式からなるものであり、本実施形態ではビットマップ形式である。
形式混在描画データは、各描画領域に対応した複数の描画データからなるから、第1画像処理部62同様、ビットマップ展開部70も、各描画領域に対応した複数の描画データに対してラスタライズ処理を並列に実行することができる。これにより、並列処理しない場合に比して、ラスタライズ処理を高速に行うことができる。
ビットマップ展開部70により生成された画像データはビットマップバッファ72に格納される。
画像処理実行手段としての第2画像処理部74は、ビットマップバッファ72に格納された画像データに対して第2の画像処理を行う。画像データは、形式混在描画データがまとめられたデータであるため、第2の画像処理としては、隣接する各描画領域に跨った処理が可能である。本実施形態では、第2の画像処理として、シャープネス処理、スムージング処理、あるいはn×n画素群に対するフィルタ処理などが実行される。
画像データ変換部76は、第2の画像処理が施された画像データを印刷装置16が対応する圧縮形式に変換する。圧縮形式とは例えばランレングス形式などである。圧縮形式に変換された画像データは出力バッファ40に格納される。なお、画像データ変換部76による処理は行われなくてもよく、すなわち、ビットマップ形式の画像データが出力バッファ40に格納されてもよい。
なお、印刷装置16が対応可能であるならば、ラスタライズ処理がバイパスされ、形式混在描画データそのものが画像データとして出力バッファ40に格納されるようにしてもよい。
以下、図16及び図17に示されたフローチャートに従って、描画部36及びアクセラレータ部38の処理の流れを説明する。
図16のステップS10において、印刷対象の文書の各ページに対する処理を開始する前に、スキャンライン形式変換部60は、各スキャンラインバッファの形式情報を「0」に初期化する。つまり、各スキャンラインの描画データを形式をランレングス形式に初期化する。
ステップS12において、描画データ生成部50は、中間データに含まれるオブジェクトのうち、1つのオブジェクトを選択する。当該オブジェクトは、中間データに含まれるオブジェクトの処理順に従って選択されてよい。
ステップS14において、描画データ生成部50は、選択されたオブジェクトについて、各スキャンラインについての描画データを生成する。
ステップS16において、スキャンライン形式判定部52は、生成した描画データのうち1つの描画データを選択する。
ステップS18において、スキャンライン形式判定部52は、選択した描画データに対応するスキャンラインバッファの形式情報が「0」(ランレングス形式)であるか「1」(ビットマップ形式)であるかを判定する。ここでは、選択した描画データに対応するスキャンラインバッファの形式情報が「0」であるとし、当該描画データはランレングス形式出力部56からランレングス形式で出力され、ステップS20に進む。
ステップS20において、スキャンライン形式変換部60は、ランレングス形式の描画データの各ランに対応する各データブロックがスキャンラインバッファに記憶される毎に、ランの数が所定ラン数を超えるか否かを判定する。当該所定ラン数は、上述の通りスキャンラインの長さに基づいて設定される。
描画データのラン数が所定ラン数を超えない場合、ステップS22に進み、スキャンライン形式変換部60は、描画データの形式を変換せず、ランレングス形式を維持する。
描画データのラン数が所定ラン数を超える場合、ステップS24に進み、スキャンライン形式変換部60は、当該描画データの形式をビットマップ形式に変換する。次いで、ステップS26において、スキャンライン形式変換部60は、当該描画データに対応するスキャンラインバッファの形式情報を「1」に変更する。
ステップS28において、スキャンライン形式判定部52は、ステップS14において生成した描画データのうち、ステップS18以下の処理が未処理の描画データがあるか否かを判定する。未処理の描画データがある場合、ステップS16に戻り、スキャンライン形式判定部52は、他の描画データを選択してステップS18以下の処理を繰り返す。1つのオブジェクトについて全てのスキャンラインに対応する描画データについて処理を終えたと判定されると、ステップS30に進む。
ステップS30において、描画データ生成部50は、中間データに含まれる全てのオブジェクトについて処理を終えたか否かを判定する。未処理のオブジェクトがある場合、ステップS12に戻り、描画データ生成部50は、他のオブジェクトを選択し、処理済みのオブジェクトに当該選択したオブジェクトを重畳させたデータに対してステップS14以下の処理を繰り返す。全てのオブジェクトについて処理を終えたと判定されると、図17のステップS40(後述)に進む。
再度のステップS18において、選択した描画データに対応するスキャンラインバッファの形式情報が「1」であるかと判定された場合、当該描画データはビットマップ形式出力部54からビットマップ形式で出力され、ステップS32に進む。
ステップS32において、スキャンライン形式変換部60は、ビットマップ形式の描画データにおいて、同色で連続する画素数が所定画素数を超えるか否かを判定する。当該所定画素数は、上述の通りスキャンラインの長さに基づいて設定される。
ビットマップ形式の描画データにおいて、同色で連続する画素数が所定画素数を超えない場合、ステップS34に進み、スキャンライン形式変換部60は、描画データの形式を変換せず、ビットマップ形式を維持する。
ビットマップ形式の描画データにおいて、同色で連続する画素数が所定画素数を超える場合、ステップS36に進み、スキャンライン形式変換部60は、当該描画データの形式をランレングス形式に再変換する。次いで、ステップS38において、スキャンライン形式変換部60は、当該描画データに対応するスキャンラインバッファの形式情報を「0」に変更する。
ステップS12〜ステップS38までの処理が繰り返されることにより、印刷対象の文書1ページ分の形式混在描画データがスキャンラインバッファ群58に格納される。
図17のステップS40において、第1画像処理部62には、スキャンラインバッファ群58に格納された形式混在描画データに対して、第1の画像変換処理を行う。上述の通り、第1の画像変換処理とは各描画データに対して個別に施すことができる処理であり、色補正あるいはチャネルスワップ処理などの色変換処理である。色変換処理は、形式混在描画データに対して並列処理されてよい。
ステップS42において、色変換処理された形式混在描画データはアクセラレータ部38にDMA転送され、ビットマップ展開部70は、形式混在描画データに対してラスタライズ処理を行って文書1ページ分の画像データを生成する。ラスタライズ処理は、形式混在描画データに対して並列に実行されてよい。画像データはビットマップバッファ72に格納される。
ステップS44において、第2画像処理部74は、ビットマップバッファ72に格納された画像データに対して第2の画像変換処理を行う。上述の通り、第2の画像変換処理とは複数の描画データに跨って施すことができる処理であり、シャープネス処理、スムージング処理、フィルタ処理などである。
ステップS46において、画像データ変換部76は、第2の画像変換処理が行われた画像データを印刷装置16に応じた圧縮形式に変換する。上述の通り、ステップS46の処理はスキップすることができる。
ステップS48において、アクセラレータ部38は、画像データを出力バッファ40に格納する。出力バッファ40に格納された画像データは、印刷装置16により読み出される。印刷装置16は、読み出した画像データに基づいて印刷処理を行う。
以上説明した実施形態によれば、印刷対象の文書の各描画領域毎に、よりデータ量が小さくなる形式で描画データが生成され、その結果として、形式混在描画データが生成される。したがって、形式混在描画データは、単一のビットマップ形式で生成された描画データ、あるいは単一のランレングス形式で生成された描画データよりもデータ量が低減されている。形式混在描画データのデータ量が低減されることで、スキャンラインバッファの容量低減、第1画像処理部62による色変換処理の高速化、描画部36からアクセラレータ部38へのDMA転送の高速化、ビットマップ展開部70によるラスタライズ処理の高速化などが実現される。
以上、本発明に係る実施形態を説明したが、本発明は上記実施形態に限られるものではなく、本発明の趣旨を逸脱しない限りにおいて種々の変更が可能である。