(実施形態に適用可能な構成)
以下に添付図面を参照して、画像処理装置および画像処理方法、ならびに、画像形成装置の実施の形態を詳細に説明する。図1は、実施形態に係る画像形成装置1の一例の構成を示すブロック図である。画像形成装置1において、AXI(Advanced eXtensible Interface)バスに従ったバス13(以下、AXIバス13と呼ぶ)に対してCPU I/F11を介してCPU(Central Processing Unit)10が接続されると共に、ローカルI/F21を介してROM(Read Only Memory)22およびパネルコントローラ23が接続される。
AXIバス13は、メモリコントローラ25を介してメインメモリ14が接続される。それと共に、AXIバス13に対して、描画部15、符号化部16、復号部17および通信コントローラ20が接続される。復号部17の出力は、プリンタエンジン19を制御するエンジンコントローラ18に接続される。
AXIバス13は、接続された各部間におけるデータ転送を制御する。CPU I/F11は、CPU10とAXIバス13との間のインターフェイスであって、CPU10は、CPU I/F11およびAXIバス13を介して、画像形成装置1の各部に接続される。パネルコントローラ23は、ユーザ操作を行うために操作子や表示部が設けられたパネル24が接続される。
ROM22は、各種プログラムや文字などのフォント情報が予め記憶されている。CPU10は、ROM22に予め記憶されたプログラムに従い、図示されないRAM(Random Access Memory)をワークメモリとして用いて、この画像形成装置1の動作を制御する。CPU10は、ワークメモリとしてメインメモリ14を利用することも可能である。また、CPU10は、エンジンコントローラ18に対して、プリンタエンジン19を制御するための命令を出す。通信コントローラ20は、ネットワークを介して接続される、パーソナルコンピュータ(PC)といった外部機器との間の通信を制御する。
AXIバス13を介してなされるメインメモリ14に対するアクセスの制御は、メモリコントローラ25により行われる。メインメモリ14は、例えばプログラム領域、PDLデータ領域、中間言語格納メモリ領域、バンドメモリ領域、CMYKページ符号データ領域およびその他領域を含む。
プログラム領域は、CPU10が動作するためのプログラムなどが格納される。PDLデータ領域は、例えば通信コントローラ20を介してパーソナルコンピュータから転送されたPDL(Page Description Language)データが格納される。中間言語格納メモリ領域は、CPU10がPDLデータに基づき生成した中間言語が格納される。バンドメモリ領域は、PDLデータに基づきCPU10に描画された描画パターンによる、C、M、Y、K各色の版によるバンド画像データがそれぞれ格納される。CMYKバンド符号データ領域は、CMYK各版の、符号化されたバンド画像データ(バンド符号データと呼ぶ)が格納される。また、その他領域は、上述以外のデータが格納される領域であって、例えばCPU10がプログラムを実行する際のワークメモリとして用いることができる。
描画部15は、CPU10によりPDLデータに基づき生成された中間言語を読み込んで解析し、解析結果に従い描画パターンを描画し、メインメモリ14のバンド記憶領域に対して描画パターンによるバンド画像データを書き込む描画処理を行う。また、描画部15は、中間言語の解析結果に従いブラシパターンを生成して、メインメモリ14のバンド記憶領域に書き込まれたバンド画像に対して、ブラシパターンを用いてブラシ処理を施す。
メインメモリ14から、描画部15により描画されたバンド画像が読み出されて、AXIバス13を介して符号化部16および復号部17で符号化および復号処理などを施されて、エンジンコントローラ18に供給される。エンジンコントローラ18が、供給されたバンド画像に従いプリンタエンジン19を制御することで、印刷媒体に対して画像が形成され、印刷がなされる。
このような構成において、例えばパーソナルコンピュータで生成されたPDLデータがネットワークを介して通信コントローラ20に受信され、メインメモリ14のPDLデータ領域に記憶される。CPU10は、メインメモリ14のPDLデータ領域からPDLデータを読み出して解析し、解析結果に基づき中間言語を生成し、メインメモリ14に記憶する。描画部15は、メインメモリ14から読み出した中間言語に従い描画パターンの描画処理を行い、CMYK各版のバンド画像データを生成する。生成されたCMYK各版のバンド画像データは、メインメモリ14のバンドメモリ領域に書き込まれる。描画部15は、さらに、必要に応じてブラシパターンを生成し、バンドメモリ領域からバンド画像データを読み出してブラシパターンによるブラシ合成処理を行い、ブラシ処理後パターンによるバンド画像データを、メインメモリ14のバンドメモリ領域における元のアドレスに書き戻す。
符号化部16は、メインメモリ14のバンドメモリ領域から読み出されたCMYK各版のバンド画像データに対して、MTF(Move To Front)制御およびハフマン符号化を利用した圧縮符号化方式により圧縮符号化処理を施す。バンド画像データが圧縮符号化された符号データは、メインメモリ14のCMYKページ符号データ領域に格納される。復号部17は、メインメモリ14のCMYKページ符号データ領域から読み出されたCMYK各版の符号データを復号して、CMYK各版の画像データを出力し、エンジンコントローラ18に送る。エンジンコントローラ18は、復号部17から受け取ったCMYK各版の画像データに従いプリンタエンジン19を制御してプリントアウトを行う。
(実施形態による処理の概要)
次に、図2および図3を用いて、実施形態による処理の概要について説明する。図2および図3において、バンドメモリ50は、上述したメインメモリ14のバンドメモリ領域に対応し、PDLデータの解析結果に基づく描画処理により描画パターンが生成され、画像データとして書き込まれるメモリである。実施形態では、図2および図3に例示されるように、バンドメモリ50と、描画部15に含まれる垂直ラインメモリ51とを用いて、描画パターンに対するブラシ合成処理を行う。
図2(a)に示されるように、バンドメモリ50において、X軸方向の座標は画素単位とされ、X軸方向に記憶される最大の画素数に従いバンド幅が定義される。また、Y軸方向の座標はライン単位とされ、Y軸方向に記憶される最大のライン数に従いバンド高さが定義される。図2(a)の例では、バンドメモリ50の領域の左上隅がX軸方向およびY軸方向の座標の原点とされる。Y座標すなわちラインアドレスは、図の上から下に向けて増加し、X座標すなわち画素アドレスは、図の左から右に向けて増加する。一例として、バンドメモリ50内に描画された矩形の描画パターンは、矩形の左上隅のX座標およびY座標と、右下隅のX座標およびY座標で領域が示される。
垂直ラインメモリ51は、Y軸方向に、バンドメモリ50の各ラインに対応するY座標毎に1ビットの情報を保持するメモリである。垂直ラインメモリ51において、バンドメモリ50の第1ライン目に対応するY座標を原点とし、図の上から下に向けて、バンドメモリ50のラインに対応してY座標の値が増加するものとする。すなわち、垂直ラインメモリ51のY座標の値は、垂直ラインメモリ51のアドレスに相当する。垂直ラインメモリ51は、バンドメモリ50に描画パターンによる画像データが書き込まれているラインに対応する座標のビットの値が例えば「1」となり、描画パターンによる画像データが書き込まれていないラインに対応する座標のビットの値が例えば「0」となる。
バンドメモリ50に描画パターンによる画像データが書き込まれていない場合(初期状態)では、図2(b)に例示されるように、垂直ラインメモリ51の各アドレスのビット値は全て「0」となる。一方、図2(a)の例では、第3ライン目から第6ライン目にかけて矩形の描画パターンの画像データが書き込まれているため、垂直ラインメモリ51において、対応する、図2(a)における上から3ビット目から6ビット目のアドレスにおけるビット値が「1」とされ、他のアドレスのビット値が全て「0」とされている。
実施形態では、描画部15は、ブラシ合成処理を行う際に、各ライン毎に、垂直ラインメモリ51のラインに対応する値に基づきブラシ合成処理を行うラインに対応するアドレスのビット値が「1」であるか「0」であるかを判定する。若し、当該ビットの値が「1」であれば、バンドメモリ50の当該ラインには描画パターンによる画像データが書き込まれているため、描画部15は、バンドメモリ50の当該ラインから描画パターンによる画像データを読み出してブラシ合成処理を施し、ブラシ合成処理された描画パターンによる画像データをバンドメモリ50の当該ラインの位置に書き戻す。
一方、描画部15は、垂直ラインメモリ51の、ブラシ合成処理を行うラインに対応するアドレスのビット値が「0」であれば、当該ラインには描画パターンによる画像データが書き込まれていないことが分かる。この場合には、描画部15は、バンドメモリ50からの画像データの読み出しを行わずに、当該ラインの描画パターンの値が予め定められた値(例えば「0」)であるものとしてブラシ合成処理を行う。このように、垂直ラインメモリ51の内容を参照してブラシ合成処理を行うことで、メインメモリ14に対するアクセスを減らすことができ、処理を高速化できる。
図3(a)は、バンドメモリ50に対して背景画像52を描画した場合の例を示す。この例では、背景画像52がバンドメモリ50の略全領域に亘って書き込まれており、第1ライン目と最終ラインとが背景画像52の書き込まれていないラインとなっている。したがって、垂直ラインメモリ51においても、第1ライン目および最終ラインにそれぞれ対応する先頭座標および後端座標のみでビット値が「0」とされ、他の座標ではビット値が「1」とされている。
図3(b)は、背景画像52の上に描画画像53を描画する例を示す。この場合、バンドメモリ50において、描画画像53が描画されるラインに対して既に背景画像52が書き込まれているため、垂直ラインメモリ51の当該ラインに対応する座標のビット値は、全て「1」とされている。そのため、描画部15は、通常の描画処理と同様にして、バンドメモリ50の当該ラインから画像データを読み出して、描画画像53に対応する部分を描画画像53の画像データと置き換える変更処理を行い、変更された画像データを、バンドメモリ50の元のライン位置に書き戻す。このように、メモリから読み出したデータに変更を加えてメモリの元の位置に書き戻す処理を、リードモディファイライトと呼ぶ。
(実施形態の処理の詳細)
以下に、実施形態による処理について、より詳細に説明する。図4は、実施形態に係る描画部15が処理する中間言語の例を概略的に示す。図4の例では、中間言語は、バンド初期化コマンド、グラフィクスブラシ設定コマンド、グラフィクスディザ設定コマンド、四角形描画コマンド、写真画像用色変換パラメータ設定コマンド、写真画像用ディザ設定コマンド、写真画像描画コマンド、バンド終了コマンドが順次記述されている。なお、実際には、C、M、Y、K各色について、中間言語が存在する。
図5は、実施形態に係る、上述の中間言語によるコマンドの一例を示す。図5の例では、各コマンドは、32ビットのデータ幅を持つ。先頭の32ビットがコマンドヘッダとされ、その後ろに、当該コマンドの各パラメータが付加される構造となっている。各コマンドは、C、M、Y、K各色について指定することができる。
図5(a)は、バンド初期化コマンドの例を示す。バンド初期化コマンドは、コマンドヘッダ(バンド情報設定コマンドヘッダ)に続き、バンドの先頭アドレス、バンド高さおよびバンド幅の各設定パラメータが指定される。図6を用いて後述するコマンド解析部62は、このコマンドを受け取ると、バンドの先頭アドレスとバンドの高さと幅とを記憶する。
図5(b)は、グラフィクスを描画するグラフィクス描画コマンドの1つであるグラフィクス描画用ハーフトーンパラメータ設定コマンドの例を示す。コマンドヘッダに続き、ディザのX方向、Y方向のサイズを指定するディザX,Yサイズと、閾値先頭アドレスとが指定される。このコマンドにより、グラフィクス描画におけるハーフトーンの閾値が設定される。
図5(c)は、写真画像を描画する写真描画コマンドの1つである写真画像描画用ハーフトーンパラメータ設定コマンドの例を示す。コマンドヘッダに続き、ディザのX方向、Y方向のサイズを指定するディザX,Yサイズと、閾値先頭アドレスとが指定される。このコマンドにより、写真画像描画におけるハーフトーンの閾値が設定される。
図5(d)は、写真画像を描画する写真描画コマンドの1つである写真画像描画用色変換パラメータ設定コマンドの例を示す。コマンドヘッダに続き、色変換演算処理用フラグ、格子点先頭アドレスおよびガンマテーブル先頭アドレスが指定される。このコマンドにより、写真画像描画の際の色変換のパラメータが設定される。
図5(e)は、定義したバンドの描画の終了を指示するバンド終了コマンドの例を示す。このバンド終了コマンドは、コマンドヘッダのみを有する。図6を用いて後述するコマンド解析部62は、このコマンドを受け取るとそのバンドの処理を終了する。
図5(f)は、グラフィクスを描画するグラフィクス描画コマンドの1つであるグラフィクス描画用ブラシ設定コマンドであり、ブラシのX方向、Y方向のサイズを指定するブラシX,Yサイズと、ブラシ先頭アドレスとが指定される。このコマンドにより、ブラシ合成処理の際のブラシサイズおよびブラシ先頭アドレスとが指定される。図6を用いて後述するコマンド解析部62は、このコマンドを受け取ると、例えば、ブラシサイズおよびブラシ先頭アドレスとを後述するCMYKグラフィクス描画部63に転送する。
図5(g)は、グラフィクスを描画するグラフィクス描画コマンドの1つである、四角形の描画を命令するグラフィクス描画用四角形描画コマンドの例を示す。コマンドヘッダに続き、カラー値が指定され、さらに、四角形の左上隅のXおよびY座標、右下隅のXおよびY座標の各描画パラメータがそれぞれ指定される。図6で後述するコマンド解析部62は、このコマンドを受け取ると四角形の左上隅のX,Y座標、右下隅のX,Yの座標と四角形コマンド名とを図6で後述する水平ライン変換部70へ転送し、描画処理を行う。
図5(h)は、写真画像を描画する写真描画コマンドの1つである、写真画像描画用変倍実行コマンドの例を示す。コマンドヘッダに続き、描画版と、ソース画像X幅と、DIS画像X幅と、ソース画像Y幅と、DIS画像Y幅と、描画X座標と、描画Y座標と、ソース画像先頭アドレスとが指定される。図6で後述するコマンド解析部62は、このコマンドを受け取ると、コマンドに指定される各パラメータを図示されない写真画像用変倍パラメータ記憶部に記憶し、後述する写真画像描画部61を起動する。
図6は、実施形態に係る描画部15の一例の構成を示す。描画部15は、インターフェイス(I/F)60と、写真画像描画部61と、コマンド解析部62と、CMYKグラフィクス描画部63と、ブラシ合成処理部64と、垂直ラインメモリ51とを有する。
I/F60は、描画部15とメモリコントローラ25とのインターフェイスであり、メインメモリ14に対して読み出し(リード)および書き込み(ライト)を要求するメモリリクエストをメモリコントローラ25に送信する。I/F60は、メモリリクエストに応じたメモリACK(アック)をメモリコントローラ25から受信すると、読み出しまたは書き込みを行うメモリアドレスをメモリコントローラ25に送信する。I/F60は、メインメモリ14から読み出されたリードデータをメモリコントローラ25から受信する。また、I/F60は、メインメモリ14に書き込むライトデータをメモリコントローラ25に対して送信する。
コマンド解析部62は、図5を用いて説明した描画コマンドをメインメモリ14から読み込んで解析する。より具体的には、コマンド解析部62は、メインメモリ14の中間言語格納メモリ領域のアドレスをI/F60に送信し、このアドレスに従いメインメモリ14の当該領域から読み出された描画コマンドをI/F60から受け取る。
コマンド解析部62は、受け取った描画コマンドを解析し、この描画コマンドが写真描画コマンドであれば、写真画像描画部61に対して起動信号を送信して写真画像描画部61を起動させると共に、写真描画コマンドに基づくデータを選択するように指示する切り替え信号を、ブラシ合成処理部64に送信する。そして、コマンド解析部62は、写真描画コマンドの描画パラメータを写真画像描画部61に転送する。
一方、コマンド解析部62は、受け取った描画コマンドがグラフィクス描画コマンドであれば、CMYKグラフィクス描画部63に対して起動信号を送信してCMYKグラフィクス描画部63を起動させると共に、グラフィクス描画コマンドに基づくデータを選択するように指示する切り替え信号を、ブラシ合成処理部64に送信する。そして、グラフィクス描画コマンドのパラメータをCMYKグラフィクス描画部63に転送する。
さらに、コマンド解析部62は、受け取った描画コマンドがグラフィクス描画コマンドのうちブラシ設定を指示するコマンド(図5(f)参照)であれば、ブラシオン/オフ信号をブラシ合成を行うことを指示するオン状態として、ブラシ合成処理部64に送信する。
写真画像描画部61は、コマンド解析部62から転送された写真描画コマンドのパラメータに従い写真描画処理を行い、メインメモリ14のバンドメモリ領域に描画するための描画パターンを生成する。例えば、写真画像描画部61は、メインメモリ14に対して、写真描画を行うための元画像(ソース画像)のアドレスをI/F60を介して送信する。このアドレスに従いメインメモリ14から読み出されたソース画像データがメモリコントローラ25から送信され、I/F60を介して写真画像描画部61に転送される。写真画像描画部61は、このソース画像データに対して所定の画像処理を施して、描画パターンを生成し、ブラシ合成処理部64に対して、例えば描画するワード単位の描画パターンと、描画アドレスと、描画レングスと、描画を行うラインを示す描画Y座標とを転送する。写真画像描画部61は、写真描画コマンドによる描画が終了すると、その旨示す描画終了信号をコマンド解析部62に対して送信する。
CMYK(Cyan, Magenta, Yellow, Black)グラフィクス描画部63は、コマンド解析部62から転送されたグラフィクス描画コマンドのパラメータに従いグラフィクス描画処理を行い、メインメモリ14のバンドメモリ領域に描画するための描画パターンを生成する。グラフィクス描画部63は、ブラシ合成処理部64に対して、例えば描画するワード単位の描画パターンと、ブラシパターンと、描画アドレスと、描画レングスと、描画を行うラインを示す描画Y座標とを転送する。CMYKグラフィクス描画部63は、グラフィクス描画コマンドによる描画が終了すると、その旨示す描画終了信号をコマンド解析部62に対して送信する。
ブラシ合成処理部64は、実施形態の特徴をなす部分であり、写真画像描画部61から受け取った描画パターン、描画アドレス、描画レングスおよび描画Y座標と、CMKYグラフィクス描画部63から受け取った描画パターン、ブラシパターン、描画アドレス、描画レングスおよび描画Y座標とに基づきブラシ合成処理を行う。
より具体的には、ブラシ合成処理部64は、I/F60を介して、描画Y座標をメインメモリ14のバンドメモリ領域におけるブラシ合成処理を行うアドレスとして指定し、このアドレスに従い読み出された画像データをI/F60を介して読み込む。ブラシ合成処理部64は、読み込んだ画像データに対してブラシパターンに従いブラシ合成処理を施し、ブラシ合成処理を施した画像データをI/F60を介してメインメモリ14のバンドメモリ領域における、当該画像データの元のアドレスに書き戻す。
ブラシ合成処理部64は、このブラシ合成処理の際に、描画Y座標を垂直ラインメモリ51に転送する。垂直ラインメモリ51は、この描画Y座標に対応するアドレスのビット値を下地フラグとしてブラシ合成処理部64に転送する。ブラシ合成処理部64は、この下地フラグに基づき、バンドメモリ領域における描画Y座標が示すラインに既に描画パターンによる画像データが書き込まれているか否かを判定する。
若し、当該ラインに既に描画パターンによる画像データが書き込まれていると判定した場合、ブラシ合成処理部64は、メインメモリ14のバンドメモリ領域における当該ラインから描画パターンによる画像データを読み出し、読み出された描画パターンによる画像データに対してブラシ合成処理を行う。一方、当該ラインに描画パターンによる画像データが書き込まれていない、すなわち、この画像データの書き込みが当該ラインに対する初めての描画パターンによる画像データの書き込みであると判定した場合、ブラシ合成処理部64は、メインメモリ14のバンドメモリ領域からの画像データの読み出しを行わず、予め定められた値(例えば値「0」)のデータを読み出した描画パターンによる画像データと見做して、この画像データに対してブラシ合成処理を行う。
図7は、実施形態に係る写真画像描画部61の一例の構成を示す。写真画像描画部61は、ソース画像読み込み部80と、色変換処理部81と、ラインメモリ82と、階調処理部83と、描画パターン生成部84と、コントローラ85とを有する。コントローラ85は、写真画像描画部61の全体の動作を制御するもので、コマンド解析部62から送信された起動信号に応じて、写真画像描画部61を起動させる。
ソース画像読み込み部80は、メインメモリ14からソース画像データを読み込む。例えば、ソース画像読み込み部80は、設定されたソース画像の例えばメインメモリ14上のアドレスをI/F60を介してメモリコントローラ25に送信する。メモリコントローラ25は、このアドレスに従いメインメモリ14からライン単位でソース画像データを読み出し、I/F60を介してソース画像読み込み部80に転送する。ソース画像読み込み部80は、転送されたソース画像データを、色変換処理部81に転送する。
色変換処理部81は、設定された色変換のためのパラメータ(図5(d)参照)に従いソース画像データに対して色変換処理を施す。ソース画像データに対して色変換処理が施された画像データは、ラインメモリ82に一旦格納される。階調処理部83は、ラインメモリ82に格納される画像データに対して階調処理を施し、階調処理が施された画像データを描画パターン生成部84に転送する。
描画パターン生成部84は、階調処理された画像データの値をワード長に纏めて描画パターンとする。それと共に、描画パターン生成部84は、描画した描画パターンをメインメモリ14のバンドメモリ領域に対して書き込むための描画アドレスと、描画長さを指定する描画レングスと、描画ラインを指定する描画Y座標とを生成する。描画パターン生成部84は、生成したこれら描画パターン、描画アドレス、描画レングスおよび描画Y座標を、ブラシ合成処理部64に転送する。
図8は、実施形態に係るCMYKグラフィクス描画部63の一例の構成を示す。CMYKグラフィクス描画部63は、水平ライン変換部70と、水辺ライン描画部71と、コントローラ72とを有する。コントローラ72は、CMYKグラフィクス描画部63の全体の動作を制御するもので、コマンド解析部62から送信された起動信号に応じて、CMYKグラフィクス描画部63を起動させる。
水平ライン変換部70は、コマンド解析部62からグラフィクス描画コマンド(図5(b)、図5(f)、図5(g)参照)を受け取り、コマンドに含まれるパラメータを水平ラインに変換して水平ライン描画部71に転送する。なお、水平ラインは、水平ラインのY値(Y座標)と、水平ライン始点値および終点値とにより表される。水平ライン描画部71は、水平ライン変換部70からの水平ラインデータに基づき、水平ラインを描画するための、ワード単位の描画パターンと、描画長さを指定する描画レングスと、描画パターンをメインメモリ14に対して描画するアドレスを指定する描画アドレスと、描画ラインを指定する描画Y座標と、ブラシ合成処理を指定するブラシパターンとを生成する。水平ライン描画部71は、生成したこれら描画パターン、描画アドレス、描画レングス、描画Y座標およびブラシパターンを、ブラシ合成処理部64に転送する。
図9は、実施形態によるブラシ合成処理部64の一例の構成を示す。ブラシ合成処理部64は、マルチプレクサ(MUX)90と、描画アドレスレジスタ91と、レングスレジスタ92と、描画パターンバッファ93と、ブラシパターンバッファ94と、ブラシオン/オフレジスタ95と、描画Y座標レジスタ96と、ブラシ合成処理回路97と、リード描画パターンバッファ98と、ライトバッファ99と、リード制御部100と、ライト制御部101とを有する。
MUX90は、写真画像描画部61およびCMYKグラフィクス描画部63それぞれから、描画パターンと、描画アドレスと、描画レングスと、描画Y座標とが入力される。また、CMYKグラフィクス描画部63からは、ブラシパターンがさらに入力される。MUX90は、コマンド解析部62から受け取った切り替え信号に従い、写真画像描画部61およびCMYKグラフィクス描画部63のうち一方から入力された描画パターン、描画アドレス、描画レングスおよび描画Y座標を選択する。切り替え信号がCMYKグラフィクス描画側を示している場合には、MUX90は、さらにブラシパターンを選択する。
描画アドレスレジスタ91、レングスレジスタ92、描画パターンバッファ93、ブラシパターンバッファ94および描画Y座標レジスタ96は、それぞれ、MUX90で選択された描画アドレス、描画レングス、描画パターン、ブラシパターンおよび描画Y座標を格納する。また、ブラシオン/オフレジスタ95は、コマンド解析部62から入力されたブラシオン/オフ信号を格納する。
描画アドレスレジスタ91およびレングスレジスタ92にそれぞれ格納された描画アドレスおよび描画レングスは、共に、リード制御部100およびライト制御部101に転送される。また、描画パターンバッファ93およびブラシパターンバッファ94にそれぞれ格納された描画パターンおよびブラシパターンは、共に、ブラシ合成処理回路97に転送される。さらに、ブラシオン/オフレジスタ95に格納されたブラシオン/オフ信号も、ブラシ合成処理回路97に転送される。
描画Y座標レジスタ96に格納された描画Y座標は、垂直ラインメモリ51に転送される。垂直ラインメモリ51は、下地フラグをブラシ合成処理回路97およびリード制御部100に出力する。
リード制御部100は、メインメモリ14のバンドメモリ領域からの画像データの読み出し(リード)を行うため、描画アドレスレジスタ91およびレングスレジスタ92から転送された描画アドレスおよび描画レングスをI/F60を介してメモリコントローラ25に送信する。また、リード制御部100は、メモリコントローラ25によりメインメモリ14のバンドメモリ領域から読み出された描画パターンをI/F60を介して受け取り、リード描画パターンバッファ98を介してブラシ合成処理回路97に転送する。以降、リード制御部100がメインメモリ14のバンドメモリ領域から読み出した描画パターンを、リード描画パターンと呼ぶ。
ここで、リード制御部100は、垂直ラインメモリ51からライン毎に出力される下地フラグに従い、メインメモリ14のバンドメモリ領域からの画像データの読み出しを行うか否かを制御する。例えば、第mライン目の処理を行う場合、垂直ラインメモリ51からリード制御部100に対して、第mライン目に対応する下地フラグが入力される。リード制御部100は、入力された下地フラグの値が、メインメモリ14のバンドメモリ領域において第mライン目に描画パターンによる画像データの書き込みがなされていないことを示す値(例えば値「0」)である場合、当該画像データのメインメモリ14からの読み出しを行わないように制御する。一方、下地フラグの値が、バンドメモリ領域において第mライン目に描画パターンによる画像データの書き込みがなされていることを示す値(例えば値「1」)であれば、通常通り、メインメモリ14からの画像データの読み出しを実行する。
ライト制御部101は、メインメモリ14のバンドメモリ領域に対する画像データの書き込み(ライト)を行うため、描画アドレスレジスタ91およびレングスレジスタ92から転送された描画アドレスおよび描画レングスと、ライトバッファ99に格納される描画パターンとを、I/F60を介してメモリコントローラ25に送信する。以降、ライト制御部101に転送する描画パターンを、ライト描画パターンと呼ぶ。
ブラシ合成処理回路97は、リード描画パターンバッファ98から描画パターンを読み込むと共に、描画パターンバッファ93およびブラシパターンバッファ94から描画パターンおよびブラシパターンをそれぞれ読み込む。そして、ブラシオン/オフレジスタ95に格納されたブラシオン/オフ信号がブラシ合成処理を行うことを示している場合に、読み込んだ各描画パターンとブラシパターンとを用いてブラシ演算を行い、ブラシパターンの合成処理を行う。
図10を用いてブラシ合成処理について概略的に説明する。なお、図10(a)〜図10(d)は、各描画パターンおよびブラシパターンを、画素毎にラインの位置を縦方向に対応させて示している。図10(a)は、リード描画パターンバッファ98から読み込んだリード描画パターン値の例、図10(b)は、描画パターンバッファ93から読み込んだ描画パターン値の例をそれぞれ示す。ここでは、説明のため、各描画パターンが2値画像データであるものとして示している。
図10(c)は、ブラシパターンバッファ94から読み込んだブラシパターン値の例を示す。ブラシパターンにおいて、「●(黒丸)」が値「0」、「○(白丸)」が値「1」を示すものとする。ブラシ合成処理回路97は、値が「0」で図10(a)のリード描画パターン値を選択し、値が「1」で図10(b)の描画パターン値を選択する。その結果、図10(d)にライト描画パターン値として例示されるように、図10(a)および図10(b)の各描画パターンが、ブラシパターンに従い合成された合成描画パターンが生成される。この図10(d)に例示されるライト描画パターン値が、ライト制御部101によりメインメモリ14のバンドメモリ領域に書き込まれることになる。
図11は、図10を用いて説明したようなブラシ合成処理を実現するための、ブラシ合成処理回路97の一例の構成を示す。ブラシ合成処理回路97は、それぞれn個の論理積回路1101、1102、…、110nと、MUX1111、1112、…、111nとを有する。なお、値nは、1ラインにおける処理単位の画素数に対応する。
例えば、第mライン目の各リード描画パターン値#0、#1、…、#nが、論理積回路1101、1102、…、110nそれぞれの一方の入力端に入力される。各論理積回路1101、1102、…、110nの他方の入力端には、垂直ラインメモリ51から、第mライン目に対応する下地フラグが入力される。
各MUX1111、1112、…、111nは、それぞれ、制御入力端1121、1122、…、112nと、2の選択入力端1131、1132、…、113nおよび1141、1142、…、114nとを有する。
各MUX1111、1112、…、111nにおいて、各制御入力端1121、1122、…、112nに対して、各ブラシパターン値#0、#1、…、#nが入力される。また、一方の選択入力端1131、1132、…、113nに対して各論理積回路1101、1102、…、110nの出力がそれぞれ入力され、他方の選択入力端1141、1142、…、114nに対して、描画パターンバッファ93から読み込まれた各描画パターン値#0、#1、…、#nがそれぞれ入力される。各MUX1111、1112、…、111nは、各制御入力端1121、1122、…、112nに入力された各ブラシパターン値に応じて、一方および他方の選択入力端をそれぞれ切り替える。
このような構成において、下地フラグの値が「1」であれば、各論理積回路1101、1102、…、110nは、一方の入力端に入力された各リード描画パターン値#0、#1、…、#nに応じた値を出力する。この場合、各MUX1111、1112、…。111nは、図10を用いて説明したような、各リード描画パターン値#0、#1、…、#nと各描画パターン値#0、#1、…、#nとが、ブラシパターン値#1、#2、…、#nに応じて切り替えて選択されたパターン値を、各ブラシ処理後パターン値#0、#1、…、#nとして出力する。
一方、下地フラグの値が「0」であれば、各論理積回路1101、1102、…、110nは、強制的に値「0」を出力することになる。この場合、各MUX1111、1112、…、111nは、各描画パターン値#0、#1、…、#nのオン/オフが各ブラシパターン値#0、#1、…、#nに応じて切り替えられた値を、各ブラシ処理後パターン値#0、#1、…、#nとして出力することになる。
図12は、実施形態による垂直ラインメモリ51の一例の構成を示す。実施形態では、垂直ラインメモリ51は、複数のレジスタ1211、1212、…、121k、…、121256を備え、メインメモリ14のバンドメモリ領域の各ラインの情報を、バンド高さ方向に分割して保持する。この例では、バンド高さが8192ラインであり、垂直ラインメモリ51は、それぞれ32ライン毎のライン情報を保持する256個のレジスタ1211、1212、…、121k、…、121256を有する。これらレジスタ1211、1212、…、121k、…、121256は、初期化信号により状態が初期化される。なお、レジスタ121kは、レジスタ1211〜121256中の任意のレジスタを指す。
垂直ラインメモリ51は、さらに、MUX120および122と、ビットパターン生成部130と、論理積回路131と、論理和回路132と、判定部133とを有する。描画Y座標レジスタ96から、描画パターンによる画像データの書き込みにより描画を行うラインを示す描画Y座標の値が垂直ラインメモリ51に入力される。ここで、描画Y座標は、16ビットのビット長を持つデータであるものとする。垂直ラインメモリ51において、描画Y座標の16ビットのビット長のうち上位11ビットがMUX120および122に選択信号として入力され、下位5ビットがビットパターン生成部130に入力される。
ビットパターン生成部130は、入力された下位5ビットの値から、図13に例示されるように、当該5ビットの値に対応するビット位置の値が「1」となる32ビットのパターンを生成し出力する。なお、図13の出力側の表記において、左端の「32’b」は、右隣から連続する各値がビット長が32ビットのバイナリ値であることを示す。また、この32ビットのバイナリ値は、左端がLSB(Least Significant Bit)、右端がMSB(Most Significant Bit)となっている。
MUX120および122は、レジスタ1211、1212、…、121k、…、121256から、描画Y座標の上位11ビットの値kに対応するレジスタ121kを選択する。
論理和回路132は、ビットパターン生成部130で生成された32ビットのビットパターンの各値と、MUX122で選択されたレジスタ121kの32ビットの各値との論理和を出力する。論理和回路132の32ビット長の出力は、MUX120で選択されたレジスタ121kに書き込まれる。
このように、実施形態では、描画が行われたライン(Y座標)を示す描画Y座標の値に基づき論理和演算を行い、演算結果を描画Y座標の上位ビットに従い選択されたレジスタ121kに格納する。メインメモリ14のバンドメモリ領域におけるあるラインに対して、描画パターンによる画像データの最初の書き込みを行った場合に、当該ラインに対して描画が行われた旨を示す情報が、垂直ラインメモリ51に記憶される。
論理積回路131は、ビットパターン生成部130で生成された32ビットのビットパターンの各値と、MUX122で選択されたレジスタ121kの32ビットの各値とのそれぞれの論理積を出力する。論理積回路131の32ビットの出力は、判定部133に入力される。判定部133は、入力された論理積回路131の32ビットの出力のうち、値が「1」のビットが存在するか否かを判定する。若し、当該32ビットのうち値が「1」のビットが少なくとも1ビットあった場合に、下地有りとして、値「1」の下地フラグを出力する。一方、判定部133は、当該32ビットのうち値が「1」のビットが存在しなければ、下地無しとして、値「0」の下地フラグを出力する。
このように、実施形態では、描画Y座標の値から生成されたビットパターンと、各レジスタ1211、1212、…、121k、…、121256に格納される値との間で論理積演算を行い、演算結果に基づき下地の有無の判定を行う。その際に、各ラインの情報を複数のレジスタに分割して格納し、描画Y座標の上位ビットおよび下位ビットに基づき判定を行なっているため、ロジックを単純化することができる。
例えば、上述の例に限らず、8192ラインに対応して、フリップフロップ回路を8192個使用することも考えられるが、この場合、8192個のフリップフロップ回路の出力から1の出力を選択するセレクタが必要となり、ロジックが複雑化してしまう。
図14は、実施形態によるブラシ合成処理部64による一例の処理を示すフローチャートである。この図14のフローチャートによる処理は、描画コマンドに従った1ラインの描画毎に実行される。
ステップS100で、ブラシ合成処理部64は、切り替え信号に従い、写真画像の描画を行うか否かを判定する。若し、写真画像の描画を行うと判定した場合、処理がステップS101に移行される。この場合、MUX90において写真画像描画部側が選択され、描画アドレスレジスタ91、レングスレジスタ92および描画パターンバッファ93には、それぞれ写真画像描画用コマンドによる描画アドレス、描画レングスおよび描画パターンが格納される。
ステップS101で、ブラシ合成処理部64は、メインメモリ14のバンドメモリ領域における、描画アドレスレジスタ91に格納される描画アドレスが示すアドレスに、描画パターンによる画像データを書き込む。描画パターンの書き込みがなされると、処理が後述するステップS107に移行される。
なお、ブラシ合成処理回路97において、写真画像描画の際には、各ブラシパターン値#0〜#nが、全てMUX1111〜111nの選択入力端1141〜114nをそれぞれ選択する値とされ、入力された各描画パターン値#0〜#nがそのままブラシ処理後パターン値#0〜#nとして出力されるものとする。また、ステップS101の処理に伴い、描画を行ったラインを示す描画Y座標が描画Y座標レジスタ96から垂直ラインメモリ51に転送される。
上述のステップS100で、写真画像描画ではないと判定した場合、処理がステップS102に移行される。ステップS102で、ブラシ合成処理部64は、ブラシオン/オフ信号に従い、ブラシ合成処理がオンとされているか否かを判定する。若し、ブラシ合成処理がオフとされていると判定した場合、処理がステップS101に移行される。この場合、MUX90においてCMYKグラフィクス描画部側が選択され、描画アドレスレジスタ91、レングスレジスタ92および描画パターンバッファ93には、それぞれCMYKグラフィクス描画用コマンドによる描画アドレス、描画レングスおよび描画パターンが格納される。ブラシ合成処理部64は、メインメモリ14のバンドメモリ領域における、描画アドレスレジスタ91に格納される描画アドレスが示すアドレスに、描画パターンによる画像データを書き込む。描画パターンの書き込みがなされると、処理が後述するステップS107に移行される。
ステップS102でブラシ合成処理がオンとされていると判定した場合、処理がステップS103に移行され、ブラシ合成処理部64は、垂直ラインメモリ51から出力される下地フラグの値の判定を行う。若し、下地フラグの値が、メインメモリ14のバンドメモリ領域における描画Y座標に対応するラインに既に描画パターンが書き込まれていることを示す値「1」であると判定した場合、処理がステップS104に移行される。
ステップS104で、ブラシ合成処理部64は、メインメモリ14のバンドメモリ領域における、描画アドレスレジスタ91に格納される描画アドレスが示すアドレスから画像データを読み出し、読み出した画像データに基づく描画パターンをリード描画パターンとする。
すなわち、フラグ合成処理回路97において、下地フラグの値に従い、各論理積回路1101〜110nにおいて下地フラグと描画パターンとの論理積が求められる。この場合、下地フラグの値が「1」とされているので、各論理積回路1101〜110nから各リード描画パターン値#0〜#nの値がそのまま各ブラシ処理後パターン値#0〜#nとして出力され、各MUX1111〜111nに入力される。そして、処理が後述するステップS106に移行される。
一方、ステップS103で、下地フラグの値が、メインメモリ14のバンドメモリ領域における描画Y座標に対応するラインに、未だ描画パターンが書き込まれていないことを示す値「0」であると判定した場合、処理がステップS105に移行される。ステップS105で、ブラシ合成処理部64は、メインメモリ14からの画像データの読み出しを行わないと共に、リード描画パターンの値を全て「0」とする。
すなわち、フラグ合成処理回路97において、下地フラグの値に従い、各論理積回路1101〜110nにおいて下地フラグと描画パターンとの論理積が求められる。この場合、下地フラグの値が「0」とされているので、各論理積回路1101〜110nから値「0」が出力される。この値「0」が、各リード描画パターン値#0〜#nとして、各MUX1111〜111nに入力される。そして、処理がステップS106に移行される。
ステップS106で、ブラシ合成処理部64は、ステップS104またはステップS105で生成されたリード描画パターンと、描画パターンバッファ93から読み込まれた描画パターンと、ブラシパターンバッファ94から読み込まれたブラシパターンとを用いて、ブラシ合成処理を行う。
すなわち、ブラシ合成処理部64のブラシ合成処理回路97において、例えばMUX1111は、選択入力端1131および1141にそれぞれ入力されたリード描画パターン値#0と描画パターン値#0とを、制御入力端1121に入力されたブラシパターン値#0に従い切り替えて、ブラシ処理後パターン値#0として出力する。他のMUX1112〜111nでも、同様にしてブラシ処理後パターン値#2〜#nが出力される。
ステップS106でブラシ合成処理が行われると、処理はステップS107に移行される。ステップS107で、ブラシ合成処理部64は、ブラシ合成処理が施された描画パターンによる画像データを、描画アドレスレジスタ91に格納される描画アドレスに従い、メインメモリ14のバンドメモリ領域に対して書き込む。
より具体的には、ブラシ合成処理部64は、ブラシ合成処理回路97からブラシ処理後パターンを描画パターンとして出力し、出力されたこの描画パターンをライトバッファ99を介してライト制御部101に転送する。ライト制御部101は、描画パターンと、描画アドレスレジスタ91から転送される描画アドレスと、レングスレジスタ92から転送される描画レングスとをI/F60を介してコントローラ25に送信する。メモリコントローラ25は、送信された描画パターンによる画像データを、メインメモリ14のバンドメモリ領域における、描画アドレスで示される位置に書き込む。
次のステップS108で、ブラシ合成処理部64は、垂直ラインメモリ51に対し、描画Y座標に対応するアドレスに対して値「1」をセットし、図14のフローチャートによる一連の処理が終了される。
具体的には、垂直ラインメモリ51において、描画Y座標に従い対応するレジスタ121kが選択されると共に、ビットパターン生成部130で描画Y座標に基づくビットパターンが生成される。論理和回路132で、レジスタ121kの値と、ビットパターン生成部130で生成されたビットパターンとの論理和が求められ、求めた論理和の値が、レジスタ121kに書き込まれる。
このように、実施形態では、ブラシ合成処理の際に、垂直ラインメモリ51からブラシ合成処理の対象のラインに応じて出力される下地フラグに基づき、当該ラインに未だ描画パターンが書き込まれていないと判定された場合に、メインメモリ14からの当該ラインの読み出しを行わずに、リード描画パターンの値を「0」として、ブラシ合成処理を行う。そのため、ブラシ合成処理の際のメインメモリ14からの描画パターンの読み出しを高速化することが可能である。
また、ライン単位でブラシ合成処理を行うため、ブラシパターンの記憶に要するメモリ容量が小さくて済むと共に、図18を用いて説明したようなブラシパターンにも対応できる。
従来技術によれば、例えば図15に例示されるような、1ページをグラフィクス画像で覆ってしまう背景画像200に対してブラシ合成処理を行う場合、例えば、2値のブラシパターンの値「1」および「0」の部分に対し、背景画像200による第1色と、背景画像200に対して合成する前景画像による第2色とをそれぞれ適用して、第1色と第2色とを切り替えて描画する。
従来では、このブラシ合成処理の際に、背景画像200をリード描画パターンとしてメインメモリ14から読み込むと共に、前景画像を描画パターンとして読み込み、ブラシパターンを用いて合成して、メインメモリ14に書き戻す、リードモディファイライト処理が行われていた。このリードモディファイライト処理では、図16に例示されるように、読み出し処理において大きな遅延が生じる。一方、書き込み処理については、図17に例示されるように、読み出し処理に対して遅延が小さい。
実施形態では、描画パターンによる画像データが未だ書き込まれていないラインにおいて、リードモディファイライトにおける読み出し処理を省略できるので、ブラシ合成処理をより高速に実行できる。
なお、上述の実施形態は、本発明の好適な実施の例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変形による実施が可能である。