以下に添付図面を参照して、画像処理システム、画像処理方法および画像処理装置、ならびに、画像形成システムの実施形態を詳細に説明する。
(各実施形態に適用可能なシステムの概要)
図1は、各実施形態に適用可能な画像形成システムの一例の構成を示す。図1において、画像形成システム1は、それぞれLAN(Local Area Network)といったネットワーク2を介して接続される、プリンタ10とホストコンピュータ(ホストPC)20とを含む。画像形成装置または画像処理装置としてのプリンタ10は、ホストPC20からネットワーク2を介して送信された画像データを受信し、受信した画像データに基づき、紙などの印字媒体に対して印字を行う。
例えば、ホストPC20は、プリンタ10の印字を制御するためのプログラムであるプリンタドライバが搭載される。ホストPC20は、例えば文書作成用アプリケーションプログラムを用いて文書データを生成し、生成された文書データをプリンタドライバに渡す。プリンタドライバは、渡された文書データからページ記述言語で記述された印刷データを生成し、生成した印刷データに従いRIP(Raster Image Process)によりラスタイメージによる画像データを生成し、生成した画像データをプリンタ10に転送する。プリンタ10は、ホストPC20から転送された画像データに従い、印字媒体に対する印字を実行する。
なお、図1では、プリンタ10とホストPC20とがネットワーク2を介して接続されるように示したが、これはこの例に限定されない。例えば、プリンタ10とホストPC20とがUSB(Universal Serial Bus)といったシリアルインターフェイスを介して接続されていてもよい。また、プリンタ10とホストPC20との接続は、有線接続に限らず、無線通信により接続されていてもよい。
各実施形態に適用されるプリンタ10は、画像データに従いインクをノズルから吐出することで媒体に印字を行うインクジェットプリンタである。インクジェットプリンタは、インクを吐出するノズルが印字媒体の搬送方向である副走査方向に沿って配列されたノズル列を有するヘッド(IJヘッドと呼ぶ)を、副走査方向と直交する主走査方向に走査させて印字を行う。
図2は、各実施形態に適用可能なIJヘッドの構成の例を示す。図2において、IJヘッド13は、シアン、マゼンタ、イエローおよびブラックそれぞれの色のインクを吐出するノズルがYドット(Yは1以上の整数)分整列したノズル列130C、130M、130Yおよび130Kが設けられる。このIJヘッド13を、ノズル列130C、130M、130Yおよび130Kと直交する方向に移動させながら各ノズルからインクを吐出することで、Yドットの幅で纏めて印字を実行できる。IJヘッド13は、例えば電圧を加えることで変形するピエゾ素子を用いてインクの吐出を制御する。
なお、以下では、IJヘッド13を移動させながら各ノズル列130C、130M、130Yおよび130Kからインクを吐出する動作を、走査と呼ぶ。
図3は、各実施形態に適用可能な、IJヘッド13による印字動作の例を示す。図3において、用紙15は、IJヘッド13による印字が行われる印字媒体である。IJヘッド13により、用紙15に対して印刷対象である画像データ30に従い印字を行う。図3の例では、用紙15は、図中に矢印で示されるように、図の下側から上側に向けた方向に搬送されるものとし、搬送方向の先頭側の端を用紙15の先端とし、搬送方向の後端側の端を用紙15の後端とする。
IJヘッド13の各ノズル列130C、130M、130Yおよび130Kが用紙15の搬送方向と並行になるように、IJヘッド13の方向を定める。用紙15を固定し、IJヘッド13を用紙の搬送方向と直交する方向に走査させることで、用紙15に対し、搬送方向と直交する方向に、搬送方向にYドット分の幅で、印字を行うことができる。
以下では、図3に示されるように、IJヘッド13の初期位置を用紙15の左端側とし、用紙15の左端側から右端側に向けてIJヘッド13による走査を行う経路を往路、用紙15の右端側から左端側に向けてIJヘッド13による走査を行う経路を復路と呼ぶ。
プリンタ10は、例えば、用紙15を固定させてIJヘッド13を往路で走査させて、画像データ30における1スキャン分の画像データ311による印字を行う。プリンタ10は、IJヘッド13による用紙15の右端側までの印字が完了すると、その位置でIJヘッド13を停止させて用紙15をYドットに対応する距離だけ搬送する。プリンタ10は、用紙15の右端側に停止されたIJヘッド13を復路で走査させて、画像データ30における1スキャン分の画像データ312による印字を行う。プリンタ10は、IJヘッド13による用紙15の左端側までの印字が完了すると、その位置でIJヘッド13を停止させて、さらに用紙15をYドットに対応する距離だけ搬送する。
プリンタ10は、このIJヘッド13の往路および復路の動作と、用紙15の搬送動作とを繰り返し、各スキャンによる画像データ30の各画像データ311、312、313、…、31mによる印字を順次実行する。これにより、用紙15に対して画像データ30による画像が形成される。
図3の例では、印刷対象となる画像データ30は、用紙15の左上隅に対応する位置を原点とし、原点から左方向(X方向とする)にX画素の幅を有し、原点から下方向(Y方向とする)にm×Yライン(mは1以上の整数)の長さ(高さ)を有するものとする。なお、ラインは、画素がX方向に1列に整列された画素列である。一例として、A4サイズの用紙15に対して、X方向に8インチ、Y方向に11インチの画像データ30による画像全体が印字可能である。
例えば、印刷対象となる画像データ30の解像度を320ドット/インチとし、Y=320として各ノズル列130C、130M、130Yおよび130Kがそれぞれ320個のノズルを備える場合を考える。この場合、IJヘッド13の往路、復路の移動、および、用紙15の搬送を11回実行する(m=11)ことで、画像データ30による用紙15に対する印字が完了する。
なお、インクの吐出に係るIJヘッド13の移動の動作を主走査と呼び、用紙15を搬送させることでIJヘッド13による印字位置を変更する動作を副走査と呼ぶ。また、IJヘッド13の移動方向に平行な方向を主走査方向、用紙15の搬送方向に平行な方向を副走査方向と呼ぶ。
上述したような、副走査方向に各ノズルが整列されたノズル列130C、130M、130Yおよび130Kを備えるIJヘッド13の主走査により印字を行う場合、画像データ30をIJヘッド13の走査方向(往路、復路)に応じた角度で回転させ画像データ30の縦横を回転させて、IJヘッド13に供給することが好ましい。
図4を用いて、実施形態に適用可能な画像データ30の回転について説明する。画像データ30は、DRAM(Dynamic Random Access Memory)といったメモリに書き込まれる。IJヘッド13には、このメモリに書き込まれた画像データのうち1スキャン分の画像データが読み出されて供給される。一般的に、画像データは、メモリのアドレスが主走査方向に連続するようにメモリに書き込まれる。
図4(a)は、メモリ40に画像データ30が書き込まれた様子を概略的に示す。図4(a)において、メモリ40は、アドレスad[0]、ad[1]、…、ad[k]、ad[k+1]、…として示されるように、図の左方向に向けてメモリアドレスが連続しているものとする。画像データ30は、メモリアドレスが主走査方向に連続するように、メモリ40に書き込まれる。
IJヘッド13を往路にて走査させる場合、IJヘッド13に対して、図4(a)の画像データ311の左端の、副走査方向の列から画像データを供給する必要がある。一方、IJヘッド13を復路にて走査させる場合は、IJヘッド13に対して、画像データ311の右端の、副走査方向の列から画像データを供給する必要がある。
上述したように、IJヘッド13は、各ノズル列130C、130M、130Yおよび130Kが副走査方向に平行に配列されており、ノズル列数(この場合は4列)に対応する数のラインを、副走査方向に纏めて印字する。一方、画像データ30は、メモリアドレスが主走査方向に連続するようにメモリ40に書き込まれている。そのため、メモリ40からの、IJヘッド13に供給するための画像データ30の読み出しは、メモリ40のアドレスが不連続な方向でメモリ40にアクセスして行うことになる。
DRAMなどにおいては、連続したアドレスに対するアクセスであれば、1のアドレス指定に対して、指定されたアドレスから連続する複数のアドレスから一度にデータを読み出して転送するバースト転送を利用でき、効率良くメモリアクセスを実行可能である。しかしながら、不連続なアドレスに対するアクセスの場合、バースト転送が利用できないため、メモリアクセスの効率を向上させるのが困難となる。
そのため、メモリ40に書き込まれた1スキャン分の画像データ311を、図4(b)および図4(c)に示されるように、IJヘッド13の走査方向(往路、復路)に応じて、右回りで90°または270°回転させてメモリ上に配置する。
図4(b)は、往路の例を示している。往路の場合、メモリ40上の画像データ311に対して右回りで90°の回転を施し、第Yラインから第0ラインに向けてメモリアドレスが連続するように、画像データをメモリに書き込む。したがって、回転された画像データ311は、各ラインにおいて位置の対応する各画素が連続したメモリアドレスに書き込まれる。この連続したメモリアドレス対するアクセスにより、各画素のデータを纏めて読み出してIJヘッド13に転送することができる。
図4(c)は、復路の例を示している。復路の場合、メモリ40上の画像データ311に対して右回りで270°の回転を施し、第0ラインから第Yラインに向けてメモリアドレスが連続するように、画像データをメモリに書き込む。この場合も上述した270°の回転の場合と同様に、回転された画像データ311は、各ラインにおいて位置の対応する各画素が連続したメモリアドレスに書き込まれ、各画素のデータを纏めて読み出してIJヘッド13に転送することができる。
なお、図4(b)および図4(c)何れの場合も、図中の上端の行から下端の行に向けて順次、読み出しが行われる。
(既存技術による回転処理の例)
ここで、理解を容易とするために、既存の方法による、画像データのハードウェアによる回転処理について、図5を用いて概略的に説明する。図5では、印刷対象となる画像データ30に含まれる各スキャンの画像データ311〜31mのうち1つの画像データ(画像データ31kとする)を右回りに90°回転させる場合について示している。
図5(a)において、画像データ31kは、図の横方向にX画素、縦方向にYラインを有する画像データが含まれる。ここで、図5(a)の画像データ31kにおいて、左上隅を原点とし、右方向に画素アドレスが増加し、下方向にラインアドレスが増加するものとする。この画像データ31kの左下から左上に向けて、矩形領域33、33、…毎に、順に画像データを読み出す。この例では、各矩形領域33は、4画素×4ラインのサイズを有する。
矩形領域33において、矢印34で示される方向に配置される各画素は、メモリ上の連続したアドレスに配置されるため、バーストアクセスが可能である。このバーストアクセスが可能な各画素を1回のアクセス単位(バーストサイズ)として各画素を読み出すことで、画像データの読み出しを行う。図5(a)の例では、1回のバーストアクセスにより4画素が読み出され、図中にアクセス順(1)〜(4)として示されるように、下から上方向への4回のバーストアクセスにより矩形領域33内の画像データの読み出しが行われる。
図5(a)の例では、1回のバーストアクセスにより矩形領域33から4画素の画像データが読み出されている。メモリから読み出された画像データ31kは、図5(b)の左側に例示されるように、例えば画素単位でアクセスが可能なメモリ35に画素毎に書き込まれる。図5(b)の左側の例では、メモリ35の横1列がバーストサイズとされ、矩形領域33においてバーストアクセスされた順に、メモリ35の図中で上端から下端に向けて各画素が書き込まれる。
このメモリ35から画素単位で画像データを読み出して、読み出した各画素を、同様に画素単位でアクセスが可能な他のメモリ36(図5(b)右側参照)に書き込む。このとき、メモリ35から読み出した各画素を、配置位置をメモリ35における配置位置に対して右回り(時計回り)に90°回転させて縦横変換を行い、メモリ36に書き込む。例えば、図5(b)を参照し、メモリ35において上端の1行に左から右に向けて書き込まれる各画素A、B、CおよびDが、メモリ36の右端の1列に、上から下に向けて書き込まれる。
このメモリ36に書き込まれた各画素を、図5(c)に示すように、メモリ30と同様に、図の横方向にアドレスが連続するメモリ30’に書き込む。このとき、メモリ36の横方向の1行の4画素をバースト単位として、メモリ36に書き込まれた各画素を4回のバーストアクセスによりメモリ36から読み出して、矩形領域33’で示されるように、各画素をメモリ30’に書き込む。
図5(a)における1つの矩形領域33から読み出された画像データが、メモリ35および36を用いて90°回転され、図5(c)に示す矩形領域33’単位でメモリに書き込まれる。図5(a)において、画像データ31の下端から上端に向けた矩形領域33単位でのメモリからの読み出しにおいて、上端部の矩形領域33においてアクセス順(Y−3)からアクセス順Yの読み出しが行われることで、矩形領域33単位の列321での処理が完了する。列321の処理が完了すると、画像データ31kにおいて矩形領域33単位で右側に1列分移動して、次の列322において、再び下端から上端に向けてメモリからの読み出しが行われる。
この画像データ31kにおける矩形領域33単位の下端から上端に向けた読み出しに応じて、メモリ30’の左端から右端に向けて、メモリ36から読み出された画像データが矩形領域33’単位で書き込まれる。図5(a)に示す、画像データ31kにおける列321のメモリからの読み出しの完了に応じて、図5(c)に示す、メモリ36から読み出された画像データの、矩形領域33’単位での行321’のメモリ30’への書き込みが完了する。画像データ31kにおいて、メモリ30からの読み出し領域の矩形領域33単位での右側への1列分の移動に応じて、メモリ30’では、矩形領域33’単位で下側に1行分移動(例えば行321’から行322’移動)して、メモリ36から読み出された画像データの書き込みが実行される。
なお、270°の回転の場合は、回転の元画像データとなる画像データ31kにおいて、90°回転と逆の順序でメモリ30からの読み出しが行われる。より具体的には、画像データ31kにおける右上隅から下端に向けて矩形領域33単位でメモリ30からの読み出しを行い、1列分の処理が完了すると、左側に1列分移動して、同様に上端から下端から上端に向けて読み出しを行う。回転後のメモリ30’に対する画像データの書き込みは、上述した90°回転の場合と同様である。
ここで、メモリ読み出しに際してバーストサイズを大きくすると、転送効率を向上させることができる。しかしながら、バーストサイズを大きくすることで、1度に縦横変換を行うサイズが大きくなり、縦横変換処理に係る回路の規模が増大することになる。図5(a)〜図5(c)の例では、バーストサイズを大きくすることで、メモリ35および36の規模が増大する。
一方、バーストサイズが小さい場合、1度に縦横変換する画像データのサイズが小さくて済むため縦横変換の回路規模は小さくなるが、画像データの転送効率の向上が難しい。また、回転処理として求めるパフォーマンスがそれほど高くなかったとしても、バーストサイズが小さいアクセスを行う機能があると、他の機能のメモリアクセスの効率を向上させることが困難となる可能性がある。特に、少ないリソースで機能を実現する必要がある組み込みシステムにおいては、重要な問題となる。
(第1の実施形態のより詳細な説明)
次に、第1の実施形態についてより詳細に説明する。図6は、第1の実施形態に適用可能なホストPC20のハードウェア構成の例を示す。図6において、ホストPC20は、CPU(Central Processing Unit)2000と、ROM(Read Only Memory)2001と、RAM(Random Access Memory)2002と、グラフィクスI/F(インタフェース)2003と、ストレージ2004と、データI/F2005と、通信I/F2006とを備え、これら各部がバス2010により互いに通信可能に接続される。
ストレージ2004は、データを不揮発に記憶する記憶媒体であって、ハードディスクドライブやフラッシュメモリを適用できる。ストレージ2004は、CPU2000が動作するためのプログラムやデータが記憶される。
CPU2000は、例えば、ROM2001やストレージ2004に予め記憶されたプログラムに従い、RAM2002をワークメモリとして用い、このホストPC20の全体の動作を制御する。グラフィクスI/F2003は、CPU2000によりプログラムに従い生成された表示制御信号に基づき、ディスプレイ2007が対応可能な表示信号を生成する。ディスプレイ2007は、グラフィクスI/F2003から供給された表示信号に応じた画面を表示する。
データI/F2005は、外部の機器との間でデータの送受信を行う。データI/F2005としては、例えばUSBを適用可能である。この例では、データI/F2005に、ユーザ入力を受け付ける入力デバイスとしてキーボード2008aおよびポインティングデバイス2008bが接続されている。また、データI/F2005に通信方式に対応するケーブル2008cを接続させることで、このケーブル2008cを介した外部の機器との通信が可能となる。通信I/F2006は、CPU2000の指示に従い、ネットワーク2に対する通信を制御する。
図7は、第1の実施形態に適用可能なプリンタ10のハードウェア構成の例を示す。図7において、プリンタ10は、コントローラ11と、印字部12と、IJヘッド13と、駆動系14aおよび14bと、DRAM(Dynamic RAM)1007と、を含む。これらのうち、駆動系14aは、モータおよび各種機構を含み、IJヘッド13を主走査方向に移動させるための駆動系である。また、駆動系14bは、モータおよび各種機構を含み、用紙15を副走査方向に移動(搬送)させるための駆動系である。IJヘッド13は、図2を用いて説明したように、副走査方向にそれぞれ320ドットのノズルが整列するノズル列130C、130M、130Yおよび130Kを含む。
なお、コントローラ11は、汎用のSoC(System-on-a-chip)を用いて構成することができる。また、印字部12は、汎用のSoCが持たないインクジェット方式によるプリンタ独自の機能を含むため、例えばFPGA(Field-Programmable Gate Array)を用いて構成する。
コントローラ11は、CPU1000と、ROM1001と、OP(オペレーションパネル)制御部1002と、OP1002aと、データI/F1003と、外部I/F1004と、メモリコントローラ(MEMC)1005と、内部I/F1006と、を含み、これら各部がバス1010により互いに通信可能に接続される。また、コントローラ11に対して、SDRAM(Synchronous Dynamic Random Access Memory)1007が接続される。
CPU1000は、例えば、ROM1001に予め記憶されたプログラムに従い、後述するDRAM1007をワークメモリとして用い、このプリンタ10の全体の動作を制御する。OP制御部1002は、OP1002aにプリンタ10の操作画面を表示させると共に、OP1002aに対してなされたユーザ操作を受け付ける。
データI/F1003は、外部の機器との間でデータの送受信を行う。データI/F1003としては、例えばUSBを適用可能である。プリンタ10は、このデータI/F1003と、上述したホストPC20のデータI/F2005とをケーブル2008cで接続することで、ホストPC20との間でデータ通信を行うことができる。外部I/F1004は、CPU1000の指示に従い、ネットワーク2に対する通信を制御する。プリンタ10は、この外部I/F1004により、ネットワーク2を介してホストPC20との間でデータ通信を行うことができる。
内部I/F1006は、コントローラ11と印字部12とを接続しコントローラ11と印字部12との間で通信を行うためのインタフェースである。内部I/F1006としては、PCIーExpress(Peripheral Component Interconnect-Express)に準じたインタフェースを適用することができる。この場合、内部I/F1006は、PCIーExpressにおけるルートコンプレックスの機能を含む。
MEMC1005は、SDRAM1007と接続され、SDRAM1007に対する読み書きの制御を行う。MEMC1005およびSDRAM1007は、SDRAM1007に対する1つのアドレス指定で複数のアドレスに纏めてアクセスするバーストアクセスと、バーストアクセスによるバースト転送が可能である。
ホストPC20から例えばネットワーク2を介して送信された画像データは、外部I/F1004により受信され、外部I/F1004からバス1010を介してMEMC1005に渡される。MEMC1005は、バス1010を介して受け取った画像データをSDRAM1007に書き込む。また、MEMC1005は、SDRAM1007から書き込まれた画像データを読み出して、バス1010を介して内部I/F1006に渡す。
なお、図7では、バス1010が、画像データの転送と、CPU1000に係る制御情報などの転送とで共通して用いられているが、これはこの例に限定されない。例えば、画像データが転送される画像バスと、制御情報が転送されるバスとをそれぞれ設けてもよい。
印字部12は、内部I/F1020と、RDMAC1021と、変換部1022と、ヘッド駆動部1023と、印字制御部1024と、を含む。内部I/F1020は、コントローラ11の内部I/F1006と接続され、印字部12とコントローラ11との間で通信を行うためのインタフェースである。内部I/F1020は、コントローラ11側の内部I/F1006がPCIーExpressによるインタフェースである場合、これに対応し、PCIーExpressにおけるエンドポイントの機能を含む。
RDMAC1021は、コントローラ11に接続されMEMC1005に制御されるSDRAM1007からのデータの読み出しを行うDMAC(Direct Memory Access Controller)である。
例えば、RDMAC1021は、内部I/F1020および1006を介して、MEMC1005に対してアドレスを指定し、指定したアドレスからのデータの読み出しを指示する。MEMC1005は、この指示に従いSDRAM1007の指定されたアドレスからデータを読み出し、読み出したデータを、内部I/F1006および1020を介してRDMAC1021に転送する。RDMAC1021は、転送されたデータを変換部1022に渡す。
変換部1022は、詳細を後述する、第1の実施形態に係る第2の縦横変換処理を行う。変換部1022は、第2の縦横変換処理を施した画像データをヘッド駆動部1023に供給する。ヘッド駆動部1023は、変換部1022から供給された画像データに基づき、IJヘッド13のピエゾ素子を駆動するための駆動波形を生成し、IJヘッド13に供給する。
印字制御部1024は、例えばMPU(Micro Processing Unit)、ROM、タイミング生成器および各種のインタフェースを含み、ROMに予め記憶されるプログラムに従い、各種インタフェースを介して、ヘッド駆動部1023およびIJヘッド13、ならびに、各駆動系14aおよび14bの動作の制御を行う。例えば、印字制御部1024は、タイミング生成器により所定のタイミングを指示する各種の制御信号を生成する。印字制御部1024は、生成した各種の制御信号を、RDMAC1021、変換部1022、ヘッド駆動部1023、各駆動系14aおよび14bにそれぞれ供給し、RDMAC1021、変換部1022、ヘッド駆動部1023、各駆動系14aおよび14bの各部における処理のタイミングを制御する。
図8は、第1の実施形態に係る変換部1022の構成の例を示す。図8において、変換部1022は、変換メモリ1220と、変換メモリ制御部1222と、バッファメモリ1230と、バッファ制御部1231と、を含む。変換メモリ制御部1222は、変換メモリ1220に対するアクセス制御を行い、変換メモリ1220に対するデータの書き込みと、変換メモリ1220からのデータの読み出しとを制御する。バッファ制御部1231は、バッファメモリ1230に対するアクセス制御を行い、バッファメモリ1230に対するデータの書き込みと、バッファメモリ1230からのデータの読み出しとを制御する。
RDMAC1021から変換部1022に渡された画像データは、変換メモリ制御部1222により、画素単位でアクセス可能な変換メモリ1220に書き込まれる。変換メモリ制御部1222は、変換メモリ1220から、所定のタイミングで画像データを読み出し、読み出した画像データをバッファ制御部1231に渡す。バッファ制御部1231は、変換メモリ制御部1222から渡された画像データを、複数のラインメモリを含むバッファメモリ1230に書き込む。バッファ制御部1231は、バッファメモリ1230の各ラインメモリから所定のタイミングで画像データを読み出し、読み出した画像データを変換部1022から出力する。
図9−1は、第1の実施形態に係るホストPC20およびプリンタ10の機能を説明するための一例の機能ブロック図である。図9−1の例は、印刷対象となる画像データ30における、IJヘッド13の往路または復路において処理対象となる1スキャン分の画像データ31kについて、横サイズがX画素、縦サイズがYライン、1画素がPビットの2次元の画像データを定義し、また、Aバイトの処理単位を定義する。Aバイト内の画素数Bは、(A×8)/Pとして求められる。なお、X、Y、P、AおよびBは、それぞれ1以上の整数である。
図9−1において、ホストPC20は、第1変換部200と、送信部201と、画像処理部202と、第1メモリ210とを含む。これらのうち、第1変換部200、送信部201および画像処理部202は、ホストPC20のCPU2000上で、第1の実施形態に係るプログラムが実行されることで実現される。ここで、第1変換部200、送信部201および画像処理部202を実現させるためのプログラムは、例えば、ホストPC20からプリンタ10の動作制御などを行うためのドライバプログラムに含まれる。また、第1メモリ210は、ホストPC20のRAM2002の所定領域を適用することができる。
画像処理部202は、例えばホストPC20に搭載される文書作成用アプリケーションプログラムを用いて作成された文書データが渡される。画像処理部202は、渡された文書データに基づきページ記述言語で記述された印刷データを生成し、生成した印刷データに従いRIPによりラスタイメージによる画像データを生成する。画像処理部202は、生成した画像データを、第1メモリ210に書き込む。
第1変換部200は、第1メモリ210に書き込まれた画像データに対して、Aバイト単位で縦横変換を行う第1の縦横変換処理を施す。送信部201は、第1変換部200により画像データに第1の縦横変換処理が施された画像データを、Aバイト単位でネットワーク2を介してプリンタ10に送信する。
ホストPC20における第1の実施形態に係る各機能を実現するためのプログラム(例えばドライバプログラム)は、インストール可能な形式または実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供される。これに限らず、当該プログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、当該ネットワークを介してダウンロードさせることにより提供してもよい。また、当該プログラムをインターネットなどのネットワークを経由して提供または配布するように構成してもよい。
当該プログラムは、第1変換部200、送信部201および画像処理部202を含むモジュール構成となっている。実際のハードウェアとしては、CPU2000がストレージ2004などの記憶媒体から当該プログラムを読み出して実行することにより、上述した各部がRAM2002などの主記憶装置上にロードされ、第1変換部200、送信部201および画像処理部202が主記憶装置上に生成されるようになっている。
図9−1において、プリンタ10は、受信部100と、書き込み部101と、読み出し部102と、第2変換部103と、バッファ書き込み部104と、バッファ読み出し部105と、第2メモリ110と、第3メモリ111と、バッファメモリ1230と、を含む。
受信部100は、ホストPC20から送信された画像データを受信する。書き込み部101は、受信部100で受信された画像データを、第2メモリ110の連続したアドレスに順次書き込む。読み出し部102は、第2メモリ110に書き込まれた画像データをバーストアクセスにより読み出す。なお、書き込み部101および読み出し部102は、図7のMEMC1005に対応し、第2メモリ110は、図7に示したSDRAM1007の所定の記憶領域を適用することができる。
第2変換部103は、読み出し部102に対して、第2メモリ110からの第2変換部103の処理ブロック分の画像データの読み出しを要求する。第2変換部103における処理ブロックは、Aバイト分の画素×B画素によるブロックである。この例では、AバイトがB個の画素を含むため、処理ブロックは、B画素×Bライン(B画素×B画素)からなるブロックとなる。読み出し部102は、この要求に応じて、第2メモリ110から当該処理ブロック分の画像データを読み出して第2変換部103に渡す。
第2変換部103は、読み出し部102から渡された処理ブロック分の画像データを画素単位で第3メモリ111に書き込む。なお、第2変換部103は、図8の変換メモリ制御部1222に対応し、第3メモリ111は、図8を用いて説明した変換メモリ1220に対応する。第2変換部103は、処理ブロック分の画像データが第3メモリ111に書き込まれると、書き込まれた画像データを画素単位で読み出して出力する。
このとき、第2変換部103は、第3メモリに書き込まれた画像データを、各画素の書き込み順の方向に対して90°または270°回転させた方向に従い画素単位で読み出す。これにより、第2変換部103は、処理ブロック内で、画像データに対して画素単位で第2の縦横変換処理を施す。第2変換部103は、第2の縦横変換処理により縦横変換された画像データを出力する。
より具体的には、第2変換部103は、読み出し部102から渡された画像データを、第3メモリ111に対し、画素単位で、第3メモリ111の左端から右端の方向に向けた行方向に書き込む。ここで、第2変換部103は、元データである画像データ30の各ラインの、ライン方向(横方向)の画素位置の一致する各画素が、第3メモリ111の縦方向すなわち列方向で揃うように、画像データの書き込みを行う。そして、第2変換部103は、第3メモリ111から、画像データを列毎に読み出す。
バッファ書き込み部104は、第2変換部103から出力された画像データをバッファメモリ1230に書き込む。バッファメモリ1230は、複数本(B本=(A×8)/P本)のラインメモリを含む。各ラインメモリは、バッファ番号BNUM「0」〜「B−1」が割り当てられる。バッファメモリ1230に含まれる各ラインメモリは、Aバイト単位で(Y/B)の深さのサイズ、すなわち、(Y/B)×Aバイトのサイズを有する。バッファメモリ1230は、この深さに応じてアドレスADが指定される。すなわち、バッファメモリ1230に対するアクセスは、アドレスADと、バッファ番号BNUMと、を指定して行われる。バッファ読み出し部105は、バッファメモリ1230から画像データを読み出して出力する。
このように、バッファ書き込み部104およびバッファ読み出し部105は、図8を用いて説明したバッファ制御部1231に含まれる機能である。
バッファ読み出し部105から出力された画像データは、ヘッド駆動部1023に渡される。
図9−2は、上述の図9−1の例に対して具体的な数値を導入した例を示す。図9−2の例では、1スキャン分の画像データ31kの縦サイズがY=320ライン、1画素が2ビット(P=2)、第1変換部200における処理単位を4バイト(A=4)とする。また、上述した1画素が2ビットであるので、Aバイト(=4バイト)内の画素数Bは、B=(4×8)/2=16個となる。
なお、画像データ31kの横方向のサイズ(X画素)は、特に限定されないが、横サイズが4バイト単位のバイトバウンダリではない場合は、画像データ31kの各ラインの後端に無効画素を付加して横方向のサイズが4バイト単位のバイトバウンダリになるよう、調整する。以下では、無効画素数Z=13であるものとする。
図9−2の例では、第1メモリ210は、少なくともX画素×320ラインのサイズを持つ画像データ30が格納される。第1変換部200は、この第1メモリ210に格納される画像データ30のX画素×320ラインの画像データ31k毎に、4バイトを処理単位として処理を行う。また、第3メモリ111は、16画素×16ラインの画像データを画素単位で書込み可能であり、第2変換部103は、これに対応し、16画素×16ライン(16画素×16画素)の処理ブロック内で画像データの縦横変換を行う。
また、バファメモリ112は、B本=16本のラインメモリを含み、各ラインメモリは、バッファ番号BNUM「0」〜「15」が割り当てられる。また、各ラインメモリは、4バイト単位で320/16=20の深さのサイズ、すなわち、4バイト×20=640ビットのサイズを持ち、1画素が2ビットであるので、1のラインメモリに対して320画素を書き込み可能である。さらに、各ラインメモリの深さ=20であることから、バッファメモリ1230は、深さ方向にアドレスAD「0」〜「19」を持つ。
(第1の実施形態に係る処理の詳細)
次に、第1の実施形態に係る処理について、より詳細に説明する。なお、第1変換部200の処理対象となる、1スキャン分の画像データ31kのサイズ、第1の変換部200の処理単位、第3メモリ111のサイズ、第2変換部103による処理の処理単位である処理ブロックのサイズ、バッファメモリ1230に関する各値は、それぞれ、上述した図9−2に示した値であるものとする。
(第1の実施形態に係る、IJヘッドの往路における90°回転処理)
先ず、図10−1〜図10−6、および、図11を用いて、第1の実施形態に係る、IJヘッド13の往路における90°回転処理について説明する。図10−1は、印刷対象の画像データ30における、1スキャン分の画像データ31kが第1メモリ210に書き込まれた様子を模式的に示す。画像データ31kは、第1メモリ210のアドレスが連続する横方向をX方向とし、縦方向をY方向として第1メモリ210上に配置される。
図10−1(c)において、画像データ31kは、縦方向がライン毎に区切られ、横方向が、第1変換部200による処理単位である4バイトのバイトバウンダリに区切られて示されている。各区画のデータは、ライン位置を値p、横方向の処理単位毎の位置を値q(p,qは整数:0≦p≦319,0≦q≦n)として、それぞれ第1メモリ210上でのアドレス「pLーqW」が割り当てられている。
なお、ライン位置および横方向の処理単位の位置は、図において第1メモリ210の左上隅を原点とし、ライン位置は原点から下方向に向けて増加し、処理単位の位置は原点から右方向に向けて増加するものとする。これは、以降の同様な表記について共通である。また、以下では、特に記載の無い限り、『第1メモリ210上でのアドレス「pLーqW」の画像データ』、をデータ「pLーqW」として説明を行う。
また、画像データ31kにおいて、縦方向のサイズは上述したように320ラインであり、横方向のサイズであるX画素は、n個(nは1以上の整数)の処理単位が含まれるサイズを有する。したがって、データ「0L−0W」、「319L−0W」、「0L−nW」および「319L−nW」が、それぞれ、画像データ31kの左上隅、左下隅、右上隅および右下隅における、第1変換部200による処理単位とされる。
さらに、図10−1(c)に示す画像データ31kにおいて、縦方向に連続する処理単位が「列」を形成する。例えば、各データ「pL−qW」において、値qが等しい各画像データにより、1つの列が形成される。
図10−1(a)は、画像データ31kの第1ライン目(p=0)の先頭側(左端側、q=0)のデータ「0L−0W」の構成例を示す。この例では、処理単位が4バイト、1画素が2ビットであるので、データ「0L−0W」は、4バイト/2ビット=16個の画素を含む。また、この例では、各画素は、左端側から右端側に向けて、データ「0L−0W」内での位置に対応する#0〜#15の各番号を与えられて示されている。この、データ「0L−0W」の構成は、画像データ31kに含まれる全てのデータ「pLーqW」に共通である。
図10−1(b)は、画像データ31kの第1ライン目の後端側(右端側、q=n)のデータ「0L−nW」の構成例を示す。上述したように、画像データ31kにZ個の無効画素が存在すると見做される場合、このZ個の無効画素は、画像データ31kの各ラインの後端側に配置される。この例では、Z=13とされて13個の無効画素が存在し、図10−1(b)において、この13個の無効画素が色を変えて示されている。この13個の無効画素が含まれる構成は、画像データ31kの各ラインの後端の各データ「pLーnW」について共通である。
第1変換部200は、第1メモリ210から画像データ31kを読み出す処理を、処理単位すなわちデータ「pLーqW」毎に行う。また、90°回転の場合、第1変換部200は、画像データ31kの下端から上端に向けて、データ「pLーqW」を順次、第1メモリ210から読み出す。より具体的には、第1変換部200は、先ず、画像データ31kの左下隅のデータ「319L−0W」を読み出し、次にデータ「318Lー0W」を読み出す。以降、第1変換部200は、図中に矢印Aで示されるように、この列の上端のデータ「0L−0W」まで、順次、各データ「pL−qW」を読み出す。
このように、第1変換部200は、第1メモリ210に書き込まれた画像データ31kを、処理単位すなわちデータ「pLーqW」毎に、アドレスが連続する方向と直交する方向に向けて読み出すことで、画像データ31kに対して第1の縦横変換処理を行う。
第1変換部200は、第1メモリ210からの1列分のデータ「319L−0W」〜「0L−0W」」の読み出しを完了すると、読み出し位置を処理単位分(Aバイト=4バイト)分右に移動させ、下端から上端に向けて、各データ「319Lー1W」〜「0L−1W」の読み出しを実行する。第1変換部200は、この処理を、画像データ31kの右端の列(データ「319L−nW」〜「0L−nW」)の読み出しが完了するまで繰り返す。
第1変換部200は、例えば処理単位のデータ「pL−qW」を読み出す毎に、読み出したデータ「pL−qW」を、送信部201によりプリンタ10に送信する。この処理単位のデータ「pL−qW」は、プリンタ10において受信部100に受信され、書き込み部101に渡される。書き込み部101は、渡されたデータ「pL−qW」を、第2メモリ110の連続するアドレスに順次書き込む。
図10−2は、書き込み部101により第2メモリ110に各データ「pL−qW」が書き込まれた様子を模式的に示す。第2メモリ110は、図において右方向にアドレスが連続する。書き込み部101は、ホストPC20から送信されたデータ「pL−qW」を、受信順に、図中に矢印Bで示されるように、第2メモリ110の左上隅からアドレスが連続する方向に順次書き込んでいく。
より具体的には、書き込み部101は、画像データ31kについて最初に受信したデータ「319L−0W」を第2メモリ110の左上隅に書き込み、次に受信したデータ「318L−0W」を、先に書き込んだデータ「319L−0W」の右隣に書き込む。この処理を、第1変換部200による、図10−1(c)に示す画像データ31kの1列分の読み出しが完了するまで繰り返す。図10−2の例では、第1変換部200が画像データ31kの左端の列の上端から読み出したデータ「0L−0W」が第2メモリ110の右端に書き込まれている。
書き込み部101は、ホストPC20から送信された、第1メモリ210の1列分のデータ「pL−0W」の第2メモリ110への書き込みが完了すると、第1メモリ210の次の列のデータ「pLー1W」を、第2メモリ110の次のラインに、左端側から、連続するアドレスに順次書き込んでいく。
第1変換部200による、画像データ31kの右端の列(データ「319L−nW」〜「0L−nW」)の読み出しに応じて、書き込み部101により、このデータ「319L−nW」〜「0L−nW」が第2メモリ110に書き込まれる。ここで、第1メモリ210には、処理単位のデータ「pL−qW」が縦方向に連続する列が、(X/4バイト)本、すなわち、(X画素/16画素)本、含まれる。したがって、第1メモリ210上の画像データ31kの全てのデータ「pL−qW」が第2メモリ110に書き込まれた場合、第2メモリ110には、処理単位のデータ「pL−qW」によるラインが(X画素/16画素)本、書き込まれることになる。
第2メモリ110に書き込まれた各データ「pL−qW」は、読み出し部102に読み出されて第2変換部103に渡される。より具体的には、読み出し部102は、第2メモリ110上の各データ「pL−qW」を、右上のデータ「319L−0W」からバーストアクセスにより順次読み出し、第2変換部103の処理ブロック分のデータ「pL−qW」を第2変換部103に渡す。
上述したように、第2変換部103が処理対象とする処理ブロックは、Aバイト×Bライン、すなわち、第1変換部200による処理単位の16個分のデータを含むブロックである。図10−1(c)および図10−2において、第1メモリ210から最初に読み出された、1つの処理ブロックに相当する16個のデータ「319L−0W」〜「304L−0W」を、実線太枠により示している。読み出し部101は、これらデータ「319L−0W」〜「304L−0W」をバーストアクセスにより読み出して、第2変換部103に渡す。
ここで、第2メモリ110において、各データ「pL−qW」は、第1メモリ210の各データ「pL−qW」の1列毎に、アドレスが連続する方向に順次書き込まれている。そのため、読み出し部102は、第1メモリ210における1列分のデータ「pL−qW」を、バーストアクセスを用いて読み出すことができる。一例として、処理ブロック単位でバースト転送を行う場合、Aバイト×Bライン=4バイト×16=64バイトなので、64ビットバスの場合、8バースト転送となる。
第2変換部103は、読み出し部102から渡された処理ブロック分のデータ「pL−qW」を第3メモリ111に書き込む。第3メモリ111は、画素単位で画像データの記憶が可能な複数の記憶領域を含む。第2変換部103は、各データ「pL−qW」に含まれる各画素を、第3メモリ111の各記憶領域に書き込む。
図10−3は、読み出し部102から渡された、第1メモリ210から最初に読み出された処理ブロックに相当する各データ「319L−0W」〜「304L−0W」が第3メモリ111に書き込まれた様子を模式的に示す。
図10−3の例では、第3メモリ111は、第2変換部103の処理ブロックに対応して、横方向に16画素(Aバイト)、縦方向に16ライン(Bライン)のサイズを有し、画素単位でアクセスが可能な16×16個の記憶領域1110、1110、…を含む。第3メモリ111は、例えば、図10−3のマトリクスの横方向(行)における位置と、縦方向(列)における位置と、を指定することで、各記憶領域1110、1110、…のうち指定された記憶領域1110にアクセスできる。このようなメモリは、例えばFF(Flip-Flop)を用いて構成することができる。
第2変換部103は、読み出し部102から渡された各データ「319L−0W」〜「304L−0W」を、第2メモリ110における配置順に従い、第3メモリ111における各記憶領域1110、1110、…によるマトリクスの上端の行から順に書き込む。
より具体的には、第2変換部103は、第2メモリ110において第1ライン目の先頭に配置されたデータ「319L−0W」に含まれる各画素#0〜#15(図10−1(a)参照)を、第3メモリ111の上端の行である1行目の各記憶領域1110、1110、…にそれぞれ書き込む。また、第2変換部103は、第2メモリ110においてデータ「319L−0W」の隣に配置されたデータ「318L−0W」に含まれる各画素#0〜#15を、第3メモリ111の2行目の各記憶領域1110、1110、…にそれぞれ書き込む。
以降、第2変換部103は、読み出し部102から渡された各データ「pL−qW」に含まれる各画素#0〜#15を、第3メモリ111の各行における各記憶領域1110に、それぞれ書き込む。第2変換部103は、この処理を、読み出し部102から渡された処理ブロックのデータ「304L−0W」に含まれる各画素#0〜#15の、第3メモリ111の下端の行の各記憶領域1110、1110、…に対する書き込みが完了するまで繰り返す。
このように、第2変換部103により、処理ブロックの各データ「pL−qW」にそれぞれ含まれる各画素#0〜#15が、第3メモリ111の各行の各記憶領域1110に書き込まれる。これにより、各データ「pL−qW」内で位置が対応する各画素が、第3メモリ111における、当該位置に対応する列の記憶領域1110、1110、…に整列して書き込まれる。図10−3の例では、第3メモリ111の左端の1列に、各データ「319L−0W」〜「304L−0W」における16個の画素#0がそれぞれ書き込まれる。この列の右隣の列は、各データ「319L−0W」〜「304L−0W」における16個の画素#1がそれぞれ書き込まれる。
以降、第3メモリ111の、各データ「pL−qW」の画素#nが書き込まれる列を、「画素#nの列」などと呼ぶ。
1つの処理ブロック分のデータの第3メモリ111に対する書き込みが完了すると、第2変換部103は、第3メモリ111から、書き込まれた各画素を読み出してバッファ書き込み部104に渡す。ここで、第2変換部103は、第3メモリ111から列毎に画素を読み出してバッファ書き込み部104に渡す。第2の変換部103が第3メモリ111に行方向に書き込まれた各画素を列方向に読み出すことで、画像データの縦横が画素単位で変換される(第2の縦横変換処理)。
図10−4は、バッファメモリ1230にデータ「319L−0W」〜「0L−0W」が書き込まれた様子を模式的に示す。図10−4の例では、バッファメモリ1230は、それぞれ4バイト(=Aバイト)単位で深さ20(=Y/B)のサイズを持つ、16本(B本)のラインメモリ1120、1120、…を含む。各ラインメモリ1120、1120、…は、それぞれバッファ番号BNUM「0」〜「15」が与えられている。
また、バッファメモリ1230は、深さ方向(図の横方向)に、深さに応じたアドレスAD「0」〜「19」を持つ。バッファメモリ1230の1つのアドレスADは、第2変換部103の処理ブロック分、すなわち、第3メモリ111に記憶される全画素の書き込みが可能である。図10−3および図10−4の例では、図10−3に示される第3メモリ111に書き込まれる全データ「319L−0W」〜「304L−0W」が、バッファメモリ1230において、図10−4に実線太枠および色を変えて示す、4バイト幅の1列に書き込まれる。
バッファ書き込み部104は、深さ方向のアドレスADを指定し、第2変換部103から渡された第3メモリ111の各列の画素を、16本のラインメモリ1120、1120、…それぞれのアドレスADに示される位置に書き込む。このとき、バッファ書き込み部104は、第3メモリ111の各列の画素を、その列の各データ「pL−qW」内での画素位置に対応するバッファ番号BNUMのラインメモリ1120の、指定されたアドレスADに書き込む。
一例として、第1メモリ210の左下隅のデータ「319L−0W」を含む処理ブロックであるデータ「319L−0W」〜「304L−0W」をバッファメモリ1230に書き込む場合を考える。この場合、バッファ書き込み部104は、バッファメモリ1230のアドレスAD「0」を指定する。さらに、バッファ書き込み部104は、図10−3に示される、第3メモリ111における画素#0の列(左端の列)から読み出された16個の画素を書き込むためのバッファ番号BNUMとして、バッファ番号BNUM「0」を指定する。
バッファ書き込み部104は、バッファ番号BNUM「0」で指定されるラインメモリ1120の、指定されたアドレスAD「0」の位置に、第2変換部103から渡された、各データ「319L−0W」〜「304L−0W」の画素#0を、各データ「319L−0W」〜「304L−0W」のライン番号の降順に、左詰めで書き込んでいく。すなわち、図10−4に点線太枠および色を変えて示す各L画素#0の領域において、左端にデータ「319L−0W」の画素#0が書き込まれ、その右隣にデータ「318L−0W」の画素#0が書き込まれる。当該領域の右端には、データ「304L−0W」の画素#0が書き込まれる。
バッファ書き込み部104は、同様にして、第2変換部103から渡された、第3メモリ111の画素#1の列、画素#2の列、…、画素#15の列の各画素を、バッファメモリ1230のバッファ番号BNUM「1」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「0」で指定される位置に書き込む。バッファ書き込み部104は、アドレスAD「0」に対する書き込みが完了すると、その旨を第2変換部103に通知する。
第2変換部103は、バッファ書き込み部104から、アドレスAD「0」に対する書き込み完了の通知を受け取ると、読み出し部102に対して、第2メモリ110からの次の処理ブロック分のデータの読み出しを要求する。読み出し部102は、この要求に応じて第2メモリ110から次の処理ブロック分のデータ(例えばデータ「303L−0W」〜「288L−0W」)を読み出し、第2変換部103に渡す。
第2変換部103は、読み出し部102から渡されたデータを、上述したようにして、画素単位で第3メモリ111に書き込む。第2変換部103は、処理ブロック分の画像データの第3メモリ111への書き込みが完了すると、第3メモリ111に書き込まれた各画素を列毎に読み出して、バッファ書き込み部104に渡す。バッファ書き込み部104は、バッファメモリ1230に対してアドレスADを昇順に指定する。バッファ書き込み部104は、第2変換部103から渡された第3メモリ111の画素#0〜#15の各列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「1」で指定される位置に書き込む。バッファ書き込み部104は、アドレスAD「1」に対する書き込みが完了すると、その旨を第2変換部103に通知する。
このような、第2変換部103から読み出し部102への処理ブロック分の画像データの読み出しの要求から、バッファ書き込み部104による、当該要求に応じて取得した処理ブロック分の各画素データのバッファメモリ1230への書き込みの処理を、Y/B回、すなわち20回繰り返す。これにより、第1メモリ210上の1スキャン分の画像データ31kにおける、先頭の1列分の画像データがバッファメモリ1230に書き込まれることになる。
ここで、第1メモリ210上の画像データ31kの各ラインにおける、ライン上での位置が対応する320個の画素が、バッファメモリ1230の各ラインメモリ1120にそれぞれ書き込まれている。例えば、各ライン上の左端の320個の各画素#0がバッファ番号BNUM「0」のラインメモリ1120に書き込まれ、次の320個の各画素#1がバッファ番号BNUM「1」のラインメモリ1120に書き込まれる。
バッファ読み出し部105は、図10−4の矢印Cとして示されるように、各ラインメモリ1120をバッファ番号BNUMの昇順に従い順次指定する。バッファ読み出し部105は、指定されたバッファ番号BNUMのラインメモリ1120に対して、バッファメモリ1230のアドレスを示すアドレスADを昇順に指定し、当該ラインメモリ1120からアドレスADに従い画素を読み出す。バッファ読み出し部105は、読み出した各画素を、ヘッド駆動部1023を介して、IJヘッド13の各ノズル列130C、130M、130Yおよび130Kに、指定されたラインメモリ1120毎に供給する。
例えば、ヘッド駆動部1023は、バッファ番号BNUM「0」のラインメモリ1120から読み出した320個の画素に基づき、ノズル列130Cの各ノズルを駆動する。同様に、ヘッド駆動部1023は、バッファ番号BNUM「1」のラインメモリ1120から読み出した320個の画素に基づき、ノズル列130Mの各ノズルを駆動する。
バッファメモリ1230に書き込まれた全ての画素データの読み出しが完了すると、第1メモリ210上の1スキャン分の画像データ31kにおける、次の1列分(例えばデータ「0L−1W」、「1L−1W」、…の列)の画像データをバッファメモリ1230に書き込む処理が行われる。
図10−1〜図10−4を用いて説明した処理を行うことで、図4(a)および図4(c)を用いて説明した、IJヘッド13の往路における、1スキャン分の画像データ311の90°回転が実現できる。
第1の実施形態では、この回転処理を、第1メモリ210に書き込まれる1スキャン分の画像データ31kの、アドレスが連続する方向と直交する方向へのバイトバウンダリの処理単位での読み出しと、画素単位でアクセスが可能な第3メモリ111に書き込まれた処理ブロック分の画素を、書き込み時と異なる方向に読み出す処理とを組み合わせて行っている。そのため、画像データ31kの90°の回転処理において、効率良くメモリアクセスを実行でき、回転処理を高速化が可能である。
第1の実施形態では、第3メモリ111から画像データ31kにおける各ラインの画素位置を合わせて読み出した各画素を、バッファメモリ1230が有するラインメモリ1120に書き込み、ラインメモリ1120から読み出した画素を、IJヘッド13を駆動するヘッド駆動部1023に渡している。そのため、画像データ31kの90°の回転処理において、回転処理後の画像データを書き込むフレームメモリが不要である。
さらに、第1の実施形態では、第1メモリ210に対するアクセスに、矩形アクセスを行うDMACを用いていないため、コストを削減することが可能である。さらにまた、矩形アクセスを行うDMACを用いる際の、回転後のフレームメモリも不要である。
なお、上述の、第1メモリ210上の画像データ31kに対する列毎の処理は、例えば、印字制御部1024が、RDMAC1021による読み出し処理、変換部1022による第2の変換処理、ヘッド駆動部1023によるIJヘッド13の駆動処理、駆動系14aおよび14bによる各機構の駆動処理を適切にタイミング制御することで実現できる。
次に、第1の実施形態に係る無効画素の処理について説明する。上述したように、画像データ31kの横方向のサイズが4バイト単位のバイトバウンダリではない場合、図10−1(b)に示したように、画像データ31kの各ラインの後端にZ個(Z=13とする)の無効画素を付加する。この場合、画像データ31kの各ラインの後端を含む列の各データ「0L−nW」〜「319L−nW」については、第3メモリ111から読み出した各画素をバッファメモリ1230に書き込む際に、無効画素を考慮した処理が行われる。
図10−5は、読み出し部102から渡された、第1メモリ210から最後に読み出された、第2変換部103の処理ブロックに相当する各データ「15L−nW」〜「0L−nW」が第3メモリ111に書き込まれた様子を模式的に示す。なお、図10−1(c)においては右上、図10−2においては右下にそれぞれ点線太枠で示した範囲に含まれるデータが、図10−5に示される各データ「15L−nW」〜「0L−nW」に対応する。
図10−5に色を変えて示されるように、第3メモリ111の右端からZ列(13列)が、無効画素が書き込まれる領域となる。図10−6は、第3メモリ111から読み出された各画素がバッファメモリ1230の各ラインメモリ1120、1120、…に書き込まれた様子を模式的に示す。この場合、バッファ番号BNUM「3」〜「15」で指定されるZ本(13本)の各ラインメモリ1120、1120、…に無効画素が書き込まれる(図中に点線太枠、色を変えて示す)。
バッファ読み出し部105は、各ラインメモリ1120、1120、…からの画素の読み出しの際に、これら無効画素が書き込まれる各ラインメモリ1120のバッファ番号BNUM「3」〜「15」を指定しない。すなわち、バッファ読み出し部105は、第1変換部200の処理単位のAバイトに含まれる画素数Bから無効画素数Zを減じた値(B−Z)に応じて、バッファ番号BNUM「0」〜「2」の各ラインメモリ1120から画素を読み出す。
図11は、第1の実施形態に係る、IJヘッド13の往路における90°回転処理を示す一例のフローチャートである。なお、ここでは、バッファメモリ1230のアドレスADについて、バッファ書き込み部104がバッファメモリ1230への書き込みの際に用いるアドレスADを、書き込みアドレスWADRとする。また、バッファ読み出し部105がバッファメモリ1230からの読み出しの際に用いるアドレスADを、読み出しアドレスRADRとする。
ステップS100で、第1変換部200は、第1メモリ210に書き込まれた、1スキャン分の画像データ31kに対して第1の縦横変換処理を施す。すなわち、図10−1(c)を用いて説明したように、第1変換部200は、第1メモリ210に書き込まれた1スキャン分の画像データ31kを、Aバイトの処理単位(データ「pL−qW」)毎に、アドレスが連続する方向と直交する方向に向けて読み出す。第1変換部200により第1メモリから読み出されたデータ「pL−qW」は、ホストPC20からプリンタ10に送信され、書き込み部101により、第2メモリ110の連続するアドレスに順次書き込まれる。
次のステップS101で、第1変換部200は、第1メモリ210からの1列分(Aバイト×Yライン)の処理が完了したか否かを判定する。第1変換部200は、1列分の処理が完了していないと判定した場合(ステップS101、「No」)、処理をステップS100に戻す。一方、第1変換部200は、1列分の処理が完了したと判定した場合(ステップS101、「Yes」)、処理をステップS102に移行させる。
ステップS102で、バッファ書き込み部104は、書き込みアドレスWADRの値を「値0」に初期化する。例えば、バッファ書き込み部104は、バッファメモリ1230の書き込みアドレスWADRを指定する書き込みアドレスカウンタを含み、ステップS102で、この書き込みアドレスカウンタの値を初期化する。次のステップS103で、読み出し部102は、第2メモリ110から、第2変換部103の処理ブロック分のデータを読み出し、読み出したデータを第2変換部103に入力する。
次のステップS104で、第2変換部103は、読み出し部102から渡された処理ブロック分のデータに対して第2の縦横変換処理を施す。すなわち、図10−3を用いて説明したように、第2変換部103は、読み出し部102から渡された処理ブロック分のデータを、画素単位でアクセス可能な第3メモリ111に対し、行方向に従い書き込む。第2変換部103は、第3メモリ111に書き込まれたデータを、列方向に従い画素単位で読み出し、処理ブロック分のデータの画素単位での縦横変換を行う。第2変換部103は、第3メモリ111から読み出した各列のデータを、バッファ書き込み部104に渡す。
次のステップS105で、バッファ書き込み部104は、第2変換部103から渡されたデータを、バッファメモリ1230が含む各ラインメモリ1120に書き込む。より具体的には、バッファ書き込み部104は、第2変換部103から渡された第3メモリ111の画素#0〜#15の各列のデータを、書き込みアドレスWADRに従い、バッファメモリ1230に含まれる、画素#0〜#15に応じて指定されたバッファ番号BNUM「0」〜「15」のラインメモリ1120、1120、…に書き込む。
バッファ書き込み部104は、第3メモリ111から読み出された処理ブロック分のデータのバッファメモリ1230への書き込みが完了すると、処理をステップS106に移行させる。バッファ書き込み部104は、ステップS106で、アドレスWADRの値を「1」だけインクリメントする。
次のステップS107で、バッファ書き込み部104は、ステップS103〜ステップS106の処理がバッファメモリ1230の深さ分、すなわち、Y/B回繰り返されたか否かを判定する。バッファ書き込み部104は、繰り返されていないと判定した場合(ステップS107、「No」)、処理をステップS103に戻す。一方、バッファ書き込み部104は、処理がY/B回繰り返されたと判定した場合(ステップS107、「Yes」)、処理をステップS108に移行させる。
ステップS108で、バッファ読み出し部105は、読み出しアドレスRADRの値を値「0」に初期化する。例えば、バッファ読み出し部105は、バッファメモリ1230の読み出しアドレスRADRの値を指定する読み出しアドレスカウンタを含み、ステップS108で、この読み出しアドレスカウンタの値を初期化する。次のステップS109で、バッファ読み出し部105は、バッファ番号BNUMを「0」に初期化する。
次のステップS110で、バッファ読み出し部105は、バッファメモリ1230に対して読み出しアドレスRADRと、バッファ番号BNUMとを指定する。バッファ読み出し部105は、バッファメモリ1230に含まれる各ラインメモリ1120のうち、バッファ番号BNUMで指定されるラインメモリ1120の、読み出しアドレスRADRで指定する位置からデータを読み出す。
次のステップS111で、バッファ読み出し部105は、読み出しアドレスRADRを1だけインクリメントする。次のステップS112で、バッファ読み出し部105は、読み出しアドレスRADRの値が値「Y/B−1」と一致するか否か、換言すれば、読み出しアドレスRADRがバッファメモリ1230の深さ方向の最大のアドレスを示しているか否かを判定する。バッファ読み出し部105は、読み出しアドレスRADRの値が値「Y/B−1」と一致しないと判定した場合(ステップS112、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、読み出しアドレスRADRの値が値「Y/B−1」と一致すると判定した場合(ステップS112、「Yes」)、処理をステップS113に移行させる。
ステップS113で、バッファ読み出し部105は、バッファ番号BNUMを1だけインクリメントして、処理をステップS114に移行させる。ステップS114で、バッファ読み出し部105は、バッファ番号BNUMがバッファメモリ1230において読み出しを行う最後のラインメモリ1120のバッファ番号BNUMとなっているか否かを判定する。
図10−1(b)を用いて説明したように、画像データ31kの横方向のサイズが4バイト単位のバイトバウンダリではない場合、画像データ31kの各ラインの後端にZ個の無効画素を付加している。そのため、ステップS114におけるバッファ番号BNUMの判定条件は、現在バッファメモリ1230に書き込まれているデータが、画像データ31kの第1メモリ210上での後端列のデータであるか否かで異なる。
ステップS114で、バッファ読み出し部105は、現在バッファメモリ1230に書き込まれているデータが後端列のデータである場合には、無効画素数Zを考慮し、バッファ番号BNUMが値「B−Z−1」であるか否かを判定する。バッファ読み出し部105は、バッファ番号BNUMが値「B−Z−1」ではないと判定した場合(ステップS114、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、バッファ番号BNUMが値「B−Z−1」であると判定した場合(ステップS114、「Yes」)、処理をステップS115に移行させる。
一方、バッファ読み出し部105は、現在バッファメモリ1230に書き込まれているデータが後端列以外のデータである場合には、バッファ番号BNUMが値「B−1」であるか否かを判定する。バッファ読み出し部105は、バッファ番号BNUMが値「B−1」ではないと判定した場合(ステップS114、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、バッファ番号BNUMが値「B−1」であると判定した場合(ステップS114、「Yes」)、処理をステップS115に移行させる。
ステップS115で、バッファ読み出し部105は、第1メモリ210上の画像データ31kにおける全列分の処理が完了したか否かを判定する。バッファ読み出し部105は、全列分の処理が完了したと判定した場合(ステップS115、「Yes」)、図11のフローチャートによる一連の処理を終了させる。
一方、バッファ読み出し部105は、ステップS115で、全列分の処理が終了していないと判定した場合(ステップS115、「No」)、処理をステ116に移行させる。ステップS116で、バッファ読み出し部105は、第1変換部200に対して、第1メモリ210から画像データ31kの次の列の各データ「pL−qW」を読み出す指示を出す。バッファ読み出し部105は、ステップS116の処理後、処理をステップS100に戻す。
(第1の実施形態に係る、IJヘッドの復路における270°回転処理)
次に、図12−1〜図12−6、および、図13を用いて、第1の実施形態に係る、IJヘッド13の復路における270°回転処理について説明する。第1の実施形態に係る270°回転処理は、上述した90°回転処理に対して、主に、第1メモリ210からのデータの読み出し順と、バッファメモリ1230からのデータの読み出し順とが異なる。以下、90°回転処理に対して異なる点を中心に、説明を行う。
図12−1は、印刷対象の画像データ30における、1スキャン分の画像データ31kが第1メモリ210に書き込まれた様子を模式的に示す。この図12−1(a)、図12−1(b)および図12−1(c)に示す各データ「pL−qW」の配置、ならびに、ラインの先頭側および後端側の画素の配置は、上述した図10−1(a)、図10−1(b)および図10−1(c)と同一であるので、ここでの説明を省略する。
第1の実施形態において、第1変換部200は、270°回転の場合、画像データ31kの右端の列から、上端から下端に向けて、データ「pLーqW」を順次、第1メモリ210から読み出す。より具体的には、第1変換部200は、先ず、画像データ31kの右上隅のデータ「0L−nW」を読み出し、次にデータ「1LーnW」を読み出す。以降、第1変換部200は、図中に矢印Dで示されるように、この列の下端のデータ「319L−nW」まで、順次、各データ「pL−qW」を読み出す。
このように、270°回転処理においても、第1変換部200により、第1メモリ210に書き込まれた画像データ31kを、データ「pLーqW」毎に、アドレスが連続する方向と直交する方向に向けた読み出しが行われることで、画像データ31kに対して第1の縦横変換処理が行われる。
第1変換部200は、第1メモリ210からの1列分のデータ「0L−nW」〜「319L−nW」」の読み出しを完了すると、読み出し位置を処理単位分(Aバイト=4バイト)分左に移動させ、上端から下端に向けて、各データ「0Lー(n−1)W」〜「319L−(n−1)W」の読み出しを実行する。第1変換部200は、この処理を、画像データ31kの左端の列(データ「0L−0W」〜「319L−0W」)の読み出しが完了するまで繰り返す。
第1変換部200は、読み出したデータ「pL−qW」を送信部201によりプリンタ10に送信する。この処理単位のデータ「pL−qW」は、プリンタ10において受信部100に受信されて書き込み部101に渡される。書き込み部101は、受信部100から渡されたデータ「pL−qW」を、第2メモリ110の連続するアドレスに順次書き込む。
図12−2は、書き込み部101により第2メモリ110に各データ「pL−qW」が書き込まれた様子を模式的に示す。書き込み部101は、ホストPC20から送信されたデータ「pL−qW」を、受信順に、図中に矢印Bで示されるように、第2メモリ110の左上隅からアドレスが連続する方向に順次書き込んでいく。
より具体的には、書き込み部101は、画像データ31kについて最初に受信したデータ「0L−nW」を第2メモリ110の左上隅に書き込み、次に受信したデータ「1L−nW」を、先に書き込んだデータ「0L−nW」の右隣に書き込む。この処理を、第1変換部200による、図12−1(c)に示す画像データ31kの1列分の読み出しが完了するまで繰り返す。第1変換部200が画像データ31kの右端の列の下端から読み出したデータ「319L−nW」が第2メモリ110の右端に書き込まれ、第1メモリ210の右端の1列のデータ「0L−nW」〜「319L−nW」が、横方向に整列される。
書き込み部101は、ホストPC20から送信された、第1メモリ210の1列分のデータ「pL−nW」の第2メモリ110への書き込みが完了すると、第1メモリ210の次の列のデータ「pL−(n−1)W」を、第2メモリ110の左端側から、連続するアドレスに順次書き込んでいく。第1変換部200による、画像データ31kの左端の列(データ「0L−0W」〜「319L−0W」)の読み出しに応じて、書き込み部101により、このデータ「0L−0W」〜「319L−0W」が第2メモリ110に書き込まれる。
第2メモリ110に書き込まれた各データ「pL−qW」は、読み出し部102に読み出されて第2変換部103に渡される。より具体的には、読み出し部102は、第2メモリ110上の各データ「pL−qW」を、右上のデータ「0L−nW」からバーストアクセスにより順次読み出し、第2変換部103の処理ブロック分のデータ「pL−qW」を第2変換部103に渡す。
図12−1(c)および図12−2において、第1メモリ210から最初に読み出された、1つの処理ブロックに相当するデータ「0L−nW」〜「15L−nW」を、実線太枠により示している。読み出し部101は、これらデータ「0L−nW」〜「15L−nW」をバーストアクセスにより読み出して、第2変換部103に渡す。
第2変換部103は、読み出し部102から渡された処理ブロック分のデータ「pL−qW」を第3メモリ111に書き込む。第2変換部103は、各データ「pL−qW」に含まれる各画素を、上述した90°回転処理の場合と同様にして、第3メモリ111の各記憶領域に書き込む。
図12−3は、読み出し部102から渡された、第1メモリ210から最初に読み出された処理ブロックに相当する各データ「0L−nW」〜「15L−nW」が第3メモリ111に書き込まれた様子を模式的に示す。図12−3の例では、第3メモリ111の左端の1列に、各データ「0L−nW」〜「15L−nW」における16個の画素#0がそれぞれ書き込まれる。この列の右隣の列は、各データ「0L−nW」〜「15L−nW」における16個の画素#1がそれぞれ書き込まれる。
1つの処理ブロックに含まれる各データ「pL−qW」に含まれる各画素の第3メモリ111に対する書き込みが完了すると、第2変換部103は、第3メモリ111から、書き込まれた各画素を列毎に読み出してバッファ書き込み部104に渡す。
このように、270°回転処理においても、第2変換部103が第3メモリ111に行方向に書き込まれた各画素を列方向に読み出すことで、画像データの縦横を画素単位で変換する第2の縦横変換処理が行われる。
図12−4は、バッファメモリ1230にデータ「0L−nW」〜「319L−nW」が書き込まれた様子を模式的に示す。この例では、図12−3に示される第3メモリ111に書き込まれる全データ「0L−nW」〜「15L−nW」が、バッファメモリ1230において、図12−4に実線太枠により示す、4バイト幅の1列に書き込まれる。
また、バッファ書き込み部104は、図12−4に示されるように、上述した90°回転処理の場合と同様にして、第2変換部103から渡された、第3メモリ111の画素#0の列、画素#1の列、…、画素#15の列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「0」で指定される位置に書き込む。
バッファ書き込み部104は、以降、上述した90°回転処理の場合と同様にして、バッファメモリ1230に対してアドレスADを昇順に指定する。バッファ書き込み部104は、第2変換部103から渡された第3メモリ111の画素#0〜#15の各列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「1」で指定される位置に書き込む。この処理をY/B回、すなわち20回繰り返すことで、第1メモリ210上の1スキャン分の画像データ31kにおける、後端の1列分の画像データがバッファメモリ1230に書き込まれる。
バッファ読み出し部105は、図12−4の矢印Eとして示されるように、各ラインメモリ1120をバッファ番号BNUMの降順に従い順次指定する。バッファ読み出し部105は、指定されたバッファ番号BNUMのラインメモリ1120に対して、バッファメモリ1230のアドレスを示すアドレスADを昇順に指定し、当該ラインメモリ1120からアドレスADに従い画素を読み出す。バッファ読み出し部105は、読み出した各画素を、ヘッド駆動部1023を介して、IJヘッド13の各ノズル列130C、130M、130Yおよび130Kに、指定されたラインメモリ1120毎に供給する。
ここで、第1の実施形態に係る270°回転処理においては、第1変換部200は、第1メモリ210上の画像データ31kの左端の列からデータ「pL−qW」の読み出しを開始している。そのため、図12−3に色を変えて示されるように、第3メモリ111の右端からZ列(13列)が、無効画素が書き込まれる領域となる。したがって、図12−4に示されるように、バッファ番号BNUM「3」〜「15」で指定されるZ本(13本)の各ラインメモリ1120、1120、…に無効画素が書き込まれる(図中に色を変えて示す)。バッファ読み出し部105は、各ラインメモリ1120、1120、…からの画素の読み出しの際に、これら無効画素が書き込まれる各ラインメモリ1120のバッファ番号BNUM「3」〜「15」を指定しない。
図12−5は、読み出し部102から渡された、第1メモリ210から最後に読み出された処理ブロックに相当する各データ「304L−0W」〜「319L−0W」が第3メモリ111に書き込まれた様子を模式的に示す。図12−5の例では、第3メモリ111の左端の1列に、各データ「319L−0W」〜「304L−0W」における16個の画素#0がそれぞれ書き込まれる。この列の右隣の列は、各データ「319L−0W」〜「304L−0W」における16個の画素#1がそれぞれ書き込まれる。
1つの処理ブロックに含まれる各データ「pL−qW」に含まれる各画素の第3メモリ111に対する書き込みが完了すると、第2変換部103は、第3メモリ111から、書き込まれた各画素を列毎に読み出してバッファ書き込み部104に渡す。
図12−6は、バッファメモリ1230にデータ「0L−0W」〜「319L−0W」が書き込まれた様子を模式的に示す。この例では、図12−5に示される第3メモリ111に書き込まれる全データ「304L−0W」〜「319L−0W」が、バッファメモリ1230において、図12−6に実線太枠により示す、4バイト幅の1列に書き込まれる。
また、バッファ書き込み部104は、図12−6に示されるように、第2変換部103から渡された、第3メモリ111の画素#0の列、画素#1の列、…、画素#15の列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「0」で指定される位置に書き込む。
バッファ書き込み部104は、以降、上述した図12−4による説明と同様にして、アドレスADを昇順に指定して、バッファメモリ1230に対してアドレスAD「1」〜「15」に対する書き込みを実行する。これにより、第1メモリ210上の1スキャン分の画像データ31kにおける1列分の画像データがバッファメモリ1230に書き込まれる。
バッファ読み出し部105は、図12−6の矢印Eとして示されるように、各ラインメモリ1120をバッファ番号BNUMの降順に従い順次指定し、指定されたバッファ番号BNUMのラインメモリ1120に対して、アドレスADを昇順に指定し、当該ラインメモリ1120からアドレスADに従い画素を読み出す。バッファ読み出し部105は、読み出した各画素を、ヘッド駆動部1023を介して、IJヘッド13の各ノズル列130C、130M、130Yおよび130Kに、指定されたラインメモリ1120毎に供給する。
バッファメモリ1230に書き込まれた全ての画素データの読み出しが完了すると、第1メモリ210上の1スキャン分の画像データ31kにおける、次の1列分(例えばデータ「0L−(n−1)W」、「1L−(n−1)W」、…の列)の画像データをバッファメモリ1230に書き込む処理が行われる。
図12−1〜図12−6を用いて説明した処理を行うことで、図4(a)および図4(b)を用いて説明した、IJヘッド13の復路における、1スキャン分の画像データ311の270°回転が実現できる。
図13は、第1の実施形態に係る、IJヘッド13の復路における270°回転処理を示す一例のフローチャートである。なお、図13のフローチャートにおいて、上述した図11のフローチャートと共通する部分には同一の符号を付して、詳細な説明を省略する。
図13において、ステップS100〜ステップS108の処理は、ステップS100の第1縦横変換処理における、第1変換部200による第1メモリ210からのデータの読み出し順以外は、図11の90°回転処理のステップS100〜ステップS108の処理と、略同様であるので、詳細な説明を省略する。
図13において、ステップS108でバッファ読み出しアドレスRADRの値が値「0」に初期化されると、処理がステップS120に移行される。ステップS120で、バッファ読み出し部105は、第1メモリ210上の画像データ31kにおいて現在処理対象としている列が、第1メモリ210上の後端列(読み出し処理を最初に行う列)であるか否かを判定する。
バッファ読み出し部105は、後端列であると判定した場合(ステップS120、「Yes」)、処理をステップS121に移行させる。ステップS121で、バッファ読み出し部105は、バッファ番号BNUMの値を、無効画素数を考慮した値「B−Z−1」に初期化する。一方、バッファ読み出し部105は、現在処理対象としている列が後端列ではないと判定した場合(ステップS120、「No」)、処理をステップS122に移行させる。ステップS122で、バッファ読み出し部105は、バッファ番号BNUMを値「B−1」に初期化する。
バッファ読み出し部105は、ステップS121またはステップS122でバッファ番号BNUMを初期化すると、処理をステップS110に移行させる。ステップS110〜ステップS112の処理は、図11の90°回転処理のステップS110〜ステップS112の処理と、略同様である。
すなわち、バッファ読み出し部105は、ステップS110で、バッファメモリ1230に対して読み出しアドレスRADRと、バッファ番号BNUMとを指定し、読み出しアドレスRADRおよびバッファ番号BNUMに従い、バッファメモリ1230からデータを読み出す。バッファ読み出し部105は、次のステップS111で、読み出しアドレスRADRを1だけインクリメントし、次のステップS112で、読み出しアドレスRADRの値が値「Y/B−1」と一致するか否かを判定する。バッファ読み出し部105は、読み出しアドレスRADRの値が値「Y/B−1」と一致しないと判定した場合(ステップS112、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、読み出しアドレスRADRの値が値「Y/B−1」と一致すると判定した場合(ステップS112、「Yes」)、処理をステップS123に移行させる。
ステップS123で、バッファ読み出し部105は、バッファ番号BNUMを1だけデクリメントし、読み出しアドレスRADRを値「0」に初期化する。次のステップS124で、バッファ読み出し部105は、バッファ番号BNUMが値「0」であるか否かを判定する。バッファ読み出し部105は、バッファ番号BNUMが値「0」ではないと判定した場合(ステップS124、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、バッファ番号BNUMが値「0」であると判定した場合(ステップS124、「Yes」)、処理をステップS115に移行する。
ステップS115で、バッファ読み出し部105は、第1メモリ210上の画像データ31kにおける全列分の処理が完了したか否かを判定する。バッファ読み出し部105は、全列分の処理が完了したと判定した場合(ステップS115、「Yes」)、図13のフローチャートによる一連の処理を終了させる。また、バッファ読み出し部105は、全列分の処理が終了していないと判定した場合(ステップS115、「No」)、処理をステップS116に移行させ、第1変換部200に対して、第1メモリ210から画像データ31kの次の列の各データ「pL−qW」を読み出す指示を出す。バッファ読み出し部105は、ステップS116の処理後、処理をステップS100に戻す。
図14は、第1の実施形態に係る90°および270°回転処理のタイミングの例を示すタイミングチャートである。図14(a)は、書き込み部101による第2メモリ110への書き込み、図14(b)は、読み出し部102による第2メモリ110からの読み出しのタイミングの例をそれぞれ示す。図14(c)は、第2変換部103による第3メモリ111への書き込みのタイミングの例を示す。また、図14(d)は、バッファ書き込み部104によるバッファメモリ1230への書き込み、図14(e)は、バッファ読み出し部105によるバッファメモリ1230からの読み出しのタイミングの例をそれぞれ示す。
第1メモリ210から第1変換部200が読み出した、1列目のデータ「pL−qW」の、書き込み部101による第2メモリ110への書き込みが完了すると(図14(a))、読み出し部102により、第2メモリ110から、書き込みが完了したデータ「pL−qW」が第2変換部103の処理ブロック(Aバイト×Bライン)毎に読み出される(図14(b))。第2変換部103は、読み出し部102により読み出された、第2変換部103の処理ブロック分(Aバイト×Bライン)のデータ「pL−qW」を、画素単位で行方向に従い第3メモリ111に書き込む(図14(c))。バッファ書き込み部104は、第3メモリ111への処理ブロック分の書き込みが完了すると、第3メモリ111から、列毎に画素を読み出す。バッファ書き込み部104は、第3メモリ111から列毎に読み出した画素を、バッファメモリ1230に含まれる、列に対応するバッファ番号BNUMのラインメモリ1120に書き込む(図14(d))。
この、図14(b)〜図14(d)の処理を、Y/B回繰り返すことで、図14(a)に示した、第2メモリ110に対して書き込まれた1列目のデータ「pL−qW」のバッファメモリ1230への書き込みが完了する。バッファメモリ1230への1列目のデータ「pL−qW」の書き込みが完了すると、第1メモリ210から第1変換部200が読み出した2列目のデータ「pL−qW」の、第2メモリ110への書き込みが開始される(図14(a))。
また、バッファメモリ1230への1列目のデータ「pL−qW」の書き込みが完了すると、2列目のデータ「pL−qW」の第2メモリ110への書き込みと並行して、バッファメモリ1230からのデータの読み出しが開始される(図14(e))。バッファ読み出し部105は、読み出しアドレスRADRをインクリメントしながら指定したバッファ番号BNUMのラインメモリ1120からデータを読み出す。バッファ読み出し部105は、バッファ番号BNUM「0」〜「15」の各ラインメモリ1120について、画像の回転方向に従った順序でデータを読み出す。バッファ読み出し部105は、第2メモリ110に書き込まれた1列目のデータのバッファメモリ1230からの読み出しを、第2メモリ110に対する2列目のデータ「pL−qW」の書き込みが完了するまでの期間に完了させる。
以上の処理が、第1メモリ210上の画像データ31kの全列分の処理が完了するまで繰り返される。
(第2の実施形態)
次に、第2の実施形態について説明する。上述した第1の実施形態では、90°回転処理と270°回転処理とで、第1メモリ210からのデータの読み出し順を異ならせ、第2メモリ110からのデータの読み出し順を共通としていた。これに対して、第2の実施形態では、90°回転処理と270°回転処理とで、第1メモリ210からのデータ読み出し順を共通とし、第2メモリ110からのデータの読み出し順を異ならせる。
なお、第2の実施形態では、第1の実施形態で説明した画像形成システム1、ホストPC20およびプリンタ10の構成および機能をそのまま適用できる。また、第2の実施形態において、90°回転処理は、第1の実施形態で説明した90°回転処理と同一なので、ここでの説明を省略する。
図15−1〜図15−6、および、図16を用いて、第2の実施形態に係る、IJヘッド13の復路における270°回転処理について説明する。
図15−1は、印刷対象の画像データ30における、1スキャン分の画像データ31kが第1メモリ210に書き込まれた様子を模式的に示す。この図15−1(a)、図15−1(b)および図15−1(c)に示す各データ「pL−qW」の配置、ならびに、ラインの先頭側および後端側の画素の配置は、上述した図10−1(a)、図10−1(b)および図10−1(c)と同一であるので、ここでの説明を省略する。
さらに、第2の実施形態では、第1変換部200による、第1メモリ210からの画像データ31kの読み出し、および、第1変換部200に読み出された各データ「pL−qW」の書き込み部101による第2メモリ110への書き込み処理は、上述した第1の実施形態における90°回転処理の場合と同一である。図15−2は、書き込み部101により第2メモリ110に各データ「pL−qW」が書き込まれた様子を模式的に示す。
第2メモリ110に書き込まれた各データ「pL−qW」は、読み出し部102に読み出されて第2変換部103に渡される。第2の実施形態では、読み出し部102は、第2メモリ110上の各データ「pL−qW」を、左下のデータ「319L−nW」からバーストアクセスにより順次読み出し、第2変換部103の処理ブロック分のデータ「pL−qW」を第2変換部103に渡す。
図15−1(c)および図15−2において、第1メモリ210から最初に読み出された、1つの処理ブロックに相当するデータ「319L−nW」〜「304L−nW」を、実線太枠により示している。読み出し部101は、これらデータ「319L−nW」〜「304L−nW」をバーストアクセスにより読み出して、第2変換部103に渡す。
第2変換部103は、読み出し部102から渡された処理ブロック分のデータ「pL−qW」を第3メモリ111に書き込む。図15−3は、読み出し部102から渡された、第2メモリ110から最初に読み出された、処理ブロックに相当する各データ「319L−nW」〜「304L−nW」が第3メモリ111に書き込まれた様子を模式的に示す。図15−3の例では、第3メモリ111の左端の1列に、各データ「319L−nW」〜「304L−nW」における16個の画素#0がそれぞれ書き込まれる。この列の右隣の列は、各データ「319L−nW」〜「304L−nW」における16個の画素#1がそれぞれ書き込まれる。
1つの処理ブロックに含まれる各データ「pL−qW」に含まれる各画素の第3メモリ111に対する書き込みが完了すると、第2変換部103は、第3メモリ111から、書き込まれた各画素を列毎に読み出してバッファ書き込み部104に渡す。
図15−4は、バッファメモリ1230にデータ「319L−nW」〜「0L−nW」が書き込まれた様子を模式的に示す。この例では、図15−3に示される第3メモリ111に書き込まれる全データ「319L−nW」〜「304L−nW」が、バッファメモリ1230において、図15−4に実線太枠により示す、4バイト幅の1列に書き込まれる。
また、バッファ書き込み部104は、図15−4に示されるように、上述した90°回転処理の場合と同様にして、第2変換部103から渡された、第3メモリ111の画素#0の列、画素#1の列、…、画素#15の列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「0」で指定される位置に書き込む。
バッファ書き込み部104は、以降、上述した90°回転処理の場合と同様にして、バッファメモリ1230に対して昇順にアドレスADを指定する。バッファ書き込み部104は、第2変換部103から渡された第3メモリ111の画素#0〜#15の各列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「1」で指定される位置に書き込む。この処理をY/B回、すなわち20回繰り返すことで、第1メモリ210上の1スキャン分の画像データ31kにおける、後端の1列分の画像データがバッファメモリ1230に書き込まれる。
バッファ読み出し部105は、図15−4の矢印Fとして示されるように、各ラインメモリ1120をバッファ番号BNUMの降順に従い順次指定する。バッファ読み出し部105は、指定されたバッファ番号BNUMのラインメモリ1120に対して、バッファメモリ1230のアドレスを示すアドレスADを降順に指定し、当該ラインメモリ1120からアドレスADに従い画素を読み出す。
すなわち、第2の実施形態では、各ラインメモリ1120のアドレスAD「0」には、画像データ31kの第319ライン〜第304ラインのデータが書き込まれ、アドレスAD「15」には、画像データ31kの第15ライン〜第0ラインのデータが書き込まれる。270°回転処理では、第0ライン〜第15ラインのデータが先に必要となるため、アドレスADを降順で指定する。
バッファ読み出し部105は、読み出した各画素を、ヘッド駆動部1023を介して、IJヘッド13の各ノズル列130C、130M、130Yおよび130Kに、指定されたラインメモリ1120毎に供給する。
ここで、第2の実施形態に係る270°回転処理においては、読み出し部102は、第2メモリ110からのデータ「pL−qW」の読み出しを、第1メモリ210上の画像データ31kの右下隅のデータに対応するデータ「319LーnW」から開始している。そのため、図15−3に色を変えて示されるように、第3メモリ111の右端からZ列(13列)が、無効画素が書き込まれる領域となる。
したがって、図15−4に示されるように、バッファ番号BNUM「3」〜「15」で指定されるZ本(13本)の各ラインメモリ1120、1120、…に無効画素が書き込まれる(図中に色を変えて示す)。バッファ読み出し部105は、各ラインメモリ1120、1120、…からの画素の読み出しの際に、これら無効画素が書き込まれる各ラインメモリ1120のバッファ番号BNUM「3」〜「15」を指定しない。
図15−5は、読み出し部102から渡された、第2メモリ110から最後に読み出された処理ブロックに相当する各データ「15L−0W」〜「0L−0W」が第3メモリ111に書き込まれた様子を模式的に示す。図15−5の例では、第3メモリ111の左端の1列に、各データ「15L−0W」〜「0L−0W」における16個の画素#0がそれぞれ書き込まれる。この列の右隣の列は、各データ「15L−0W」〜「0L−0W」における16個の画素#1がそれぞれ書き込まれる。
1つの処理ブロックに含まれる各データ「pL−qW」に含まれる各画素の第3メモリ111に対する書き込みが完了すると、第2変換部103は、第3メモリ111から、書き込まれた各画素を列毎に読み出してバッファ書き込み部104に渡す。
図15−6は、バッファメモリ1230にデータ「0L−0W」〜「319L−0W」が書き込まれた様子を模式的に示す。この例では、図15−5に示される第3メモリ111に書き込まれる全データ「15L−0W」〜「0L−0W」が、バッファメモリ1230において、図15−6に実線太枠により示す、4バイト幅の1列に書き込まれる。
また、バッファ書き込み部104は、図15−6に示されるように、第2変換部103から渡された、第3メモリ111の画素#0の列、画素#1の列、…、画素#15の列の各画素を、バッファメモリ1230のバッファ番号BNUM「0」〜「15」でそれぞれ指定される各ラインメモリ1120の、アドレスAD「0」で指定される位置に書き込む。
バッファ書き込み部104は、以降、上述した図15−4による説明と同様にして、バッファメモリ1230に対してアドレスAD「1」〜「15」に対する書き込みを実行する。これにより、第1メモリ210上の1スキャン分の画像データ31kにおける1列分の画像データがバッファメモリ1230に書き込まれる。
バッファ読み出し部105は、図15−6の矢印Fとして示されるように、各ラインメモリ1120をバッファ番号BNUMの降順に従い順次指定する。バッファ読み出し部105は、指定されたバッファ番号BNUMのラインメモリ1120に対して、バッファメモリ1230のアドレスを示すアドレスADを降順に指定し、当該ラインメモリ1120からアドレスADに従い画素を読み出す。
バッファ読み出し部105は、読み出した各画素を、ヘッド駆動部1023を介して、IJヘッド13の各ノズル列130C、130M、130Yおよび130Kに、指定されたラインメモリ1120毎に供給する。
図16は、第2の実施形態に係る270°回転処理を示す一例のフローチャートである。なお、図16のフローチャートにおいて、上述した図11および図13のフローチャートと共通する部分には同一の符号を付して、詳細な説明を省略する。
図16において、ステップS100で、第1変換部200は、第1メモリ210に書き込まれた、1スキャン分の画像データ31kに対して第1の縦横変換処理を施す。すなわち、第1変換部200は、第1メモリ210に書き込まれた1スキャン分の画像データ31kを、処理単位毎に、左下から上方向に向けて読み出す。第1変換部200により第1メモリから読み出されたデータは、ホストPC20からプリンタ10に送信され、書き込み部101により、第2メモリ110の連続するアドレスに順次書き込まれる。
次のステップS130で、第1変換部200は、画像データ31kの全列分(Aバイト×Yライン×X/16)の処理が完了したか否か、すなわち、第1メモリ210からの読み出しと、第2メモリ110への書き込みとが完了したか否かを判定する。第1変換部200は、完了していないと判定した場合(ステップS130、「No」)、処理をステップS100に戻し、画像データ31kの次の列について処理を行う。一方、第1変換部200は、画像データ31kの全列分の処理が完了したと判定した場合(ステップS130、「Yes」)、処理をステップS102に移行する。
ステップS102〜ステップS107の処理は、上述した図13のフローチャートにおけるステップS102〜ステップS107の処理と略同様であるので、詳細な説明を省略する。なお、ステップS104の第2縦横変換処理は、第2変換部103により、第2メモリ110の左下からデータの読み出しを開始し、右上にてデータの読み出しが完了する処理となる。
図16において、バッファ書き込み部104は、ステップS107で、処理がY/B回繰り返されたと判定した場合(ステップS107、「Yes」)、処理をステップS131に移行させる。ステップS131で、バッファ読み出し部105は、バッファメモリ1230の読み出しアドレスRADRを値「B−1」に初期化する。
次のステップS120で、バッファ読み出し部105は、第1メモリ210上の画像データ31kにおいて現在処理対象としている列が、第1メモリ210上の後端列(読み出し処理を最初に行う列)であるか否かを判定する。バッファ読み出し部105は、後端列であると判定した場合(ステップS120、「Yes」)、処理をステップS121に移行させ、バッファ番号BNUMの値を値「B−Z−1」に初期化する。一方、バッファ読み出し部105は、現在処理対象としている列が後端列ではないと判定した場合(ステップS120、「No」)、処理をステップS122に移行させ、バッファ番号BNUMを値「B−1」に初期化する。
バッファ読み出し部105は、ステップS121またはステップS122でバッファ番号BNUMを初期化すると、処理をステップS110に移行させる。ステップS110で、バッファ読み出し部105は、バッファメモリ1230に対して読み出しアドレスRADRと、バッファ番号BNUMとを指定し、バッファメモリ1230に含まれる各ラインメモリ1120のうち、バッファ番号BNUMで指定されるラインメモリ1120の、読み出しアドレスRADRで指定する位置からデータを読み出す。バッファ読み出し部105は、データの読み出しを行うと、処理をステップS132に移行させる。
ステップS132で、バッファ読み出し部105は、読み出しアドレスRADRを1だけデクリメントする。次のステップS133で、バッファ読み出し部105は、読み出しアドレスRADRの値が値「0」であるか否かを判定する。バッファ読み出し部105は、読み出しアドレスRADRの値が値「0」ではないと判定した場合(ステップS133、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、読み出しアドレスRADRの値が値「0」であると判定した場合(ステップS133、「Yes」)、処理をステップS134に移行させる。
ステップS134で、バッファ読み出し部105は、バッファ番号BNUMを1だけデクリメントし、読み出しアドレスRADRを値「B−1」に初期化する。
次のステップS124で、バッファ読み出し部105は、バッファ番号BNUMが値「0」であるか否かを判定する。バッファ読み出し部105は、バッファ番号BNUMが値「0」ではないと判定した場合(ステップS124、「No」)、処理をステップS110に戻す。一方、バッファ読み出し部105は、バッファ番号BNUMが値「0」であると判定した場合(ステップS124、「Yes」)、処理をステップS115に移行する。
ステップS115で、バッファ読み出し部105は、第1メモリ210上の画像データ31kにおける全列分の処理が完了したか否かを判定する。バッファ読み出し部105は、全列分の処理が完了したと判定した場合(ステップS115、「Yes」)、図16のフローチャートによる一連の処理を終了させる。
一方、バッファ読み出し部105は、全列分の処理が終了していないと判定した場合(ステップS115、「No」)、処理をステップS135に移行させ、第2変換部103に対して、第2メモリ110から次の行の各データ「pL−qW」を読み出す指示を出す。バッファ読み出し部105は、ステップS135の処理後、処理をステップS102に戻す。
なお、第2の実施形態において、各処理のタイミングは、第1の実施形態において図14を用いて説明したタイミングを適用できるので、ここでの説明を省略する。
上述したように、第2の実施形態では、90°回転処理と、270°回転処理とで、第1変換部200の処理内容を変える必要が無い。そのため、IJヘッド13の往路および復路において、ホストPC20側では同じ処理を実行し、プリンタ10側で90°回転処理および270°回転処理のうち何れを実行するかを決定できる。
なお、第2の実施形態に係る270°回転処理は、第1メモリ210から最後に読み出される列のデータを、第2変換部103において最初に処理している。一方、第1の実施形態に係る270°回転処理では、第1メモリ210から最初に読み出される列のデータを、第2変換部103において最初に処理している。そのため、処理速度については、第1の実施形態による270°回転処理の方が有利である。
また、第2の実施形態に係る270°回転処理では、第1メモリ210から最後に読み出される列のデータを、第2変換部103において最初に処理するため、第2メモリ110は、少なくとも1スキャン分の画像データ31kを記憶可能な容量を必要とする。一方、第1の実施形態に係る270°回転処理では、第1メモリ210から最初に読み出される列のデータを、第2変換部103において最初に処理しているため、第2メモリ110は、少なくとも画像データ31kの第1メモリ210における1列分のデータを記憶可能な容量を持てば良く、メモリ容量の点で、有利である。
(第3の実施形態)
次に、第3の実施形態について説明する。第3の実施形態は、上述した第1の実施形態に係るプリンタ10の変換部1022において、バッファメモリ1230を2つ設け、この2つのバッファメモリ1230をトグルで切り替えるようにしたものである。
図17は、第3の実施形態に係る変換部1022’の一例の構成を示す。なお、図17において、上述した図8と共通する部分には同一の符号を付して、詳細な説明を省略する。
図17において、変換部1022’は、図8の変換部1022と比較して、2つのバッファメモリ1230aおよび1230bと、これらバッファメモリ1230aおよび1230bを切り替えるための切替部1232aおよび1232bと、を含む点が異なる。バッファメモリ1230aおよび1230bは、それぞれ図9−1、図9−2に示したバッファメモリ1230と同一の構成を有する。なお、図17において、バッファメモリ1230aおよび1230bは、それぞれバッファメモリ#1、バッファメモリ#2としても示されている。
また、バッファ制御部1231’は、図8のバッファ制御部1231の機能、すなわち、図9−1、図9−2のバッファ書き込み部104およびバッファ読み出し部105の機能に加え、切替部1232aおよび1232bを制御する機能を含む。バッファ制御部1231’は、バッファメモリ1232aおよび1232bのうち一方に書き込みが行われている期間は、他方からの読み出しが可能なように、切替部1232aおよび1232bをトグルで切り替える。
図18は、第3の実施形態に係る90°および270°回転処理のタイミングの例を示すタイミングチャートである。図18(a)〜図18(c)は、それぞれ上述した図14(a)〜図14(c)と同様、書き込み部101による第2メモリ110への書き込み、読み出し部102による第2メモリ110からの読み出し、第2変換部103による第3メモリ111への書き込みのタイミングの例をそれぞれ示す。
また、図18(d)は、バッファ制御部1231’によるバッファメモリ1230aおよび1230bへの書き込みのタイミングの例、図18(e)は、バッファ制御部1231’によるバッファメモリ1230aおよび1230bからの読み出しのタイミングの例をそれぞれ示す。なお、図18(d)および図18(e)において、バッファメモリ1230aをバッファ#1、バッファメモリ1230bをバッファ#2としてそれぞれ示している。
第1メモリ210から第1変換部200が読み出した、1列目のデータ「pL−qW」の、書き込み部101による第2メモリ110への書き込みが完了する(図18(a))。読み出し部102は、この1列目のデータ「pL−qW」の第2メモリ110への書き込みが完了した後の時点t1において、第2メモリ110から、書き込みが完了した1列目のデータ「pL−qW」の第2変換部103の処理ブロック毎の読み出しを開始する(図18(b))。
第2変換部103は、読み出し部102により読み出された、第2変換部103の処理ブロック分のデータを、画素単位で行方向に従い第3メモリ111に書き込む(図18(c))。バッファ書き込み部104は、例えば時点t1において、データの書き込み先をバッファメモリ1230aに設定する。第2変換部103は、第3メモリ111への処理ブロック分の書き込みが完了すると、第3メモリ111から列毎にデータを読み出す。バッファ書き込み部104は、第2変換部103により第3メモリ111から読み出されたデータを、バッファメモリ1230aに含まれる、列に対応するバッファ番号BNUMのラインメモリ1120に書き込む(図18(d))。
この、図18(b)〜図18(d)の処理を、Y/B回繰り返すことで、図18(a)に示した、第2メモリ110に対して書き込まれた1列目のデータ「pL−qW」のバッファメモリ1230aへの書き込みが完了する(時点t2)。
バッファ読み出し部105は、例えばこの時点t2において、データの読み出し元をバッファメモリ1230aに設定する。バッファ読み出し部105は、時点t2において、バッファメモリ1230aからの、書き込みが完了した当該1列目のデータ「pL−qW」の読み出しを開始する(図18(e))。
一方、書き込み部101は、時点t1において、第1メモリ210から第1変換部200が読み出した2列目のデータ「pL−qW」の、第2メモリ110への書き込みを開始する(図18(a))。
以降、第1列目の処理と同様にして、読み出し部102は、第2メモリ110からの、書き込みが完了した2列目のデータ「pL−qW」の第2変換部103の処理ブロック毎の読み出しを開始する(図18(b)、時点t2)。第2変換部103は、読み出し部102により読み出された、第2変換部103の処理ブロック分のデータを、画素単位で行方向に従い第3メモリ111に書き込む(図18(c))。
バッファ書き込み部104は、時点t2において、データの書き込み先をバッファメモリ1230aからバッファメモリ1230bに切り替える。第2変換部103は、第3メモリ111への処理ブロック分の書き込みが完了する毎に、第3メモリ111から列毎にデータを読み出す。バッファ書き込み部104は、第2変換部103により第3メモリ111から読み出されたデータを、バッファメモリ1230bに含まれる、列に対応するバッファ番号BNUMのラインメモリ1120に書き込む処理を行う(図18(d))。
一方、書き込み部101は、時点t2において、第1メモリ210から第1変換部200が読み出した3列目のデータ「pL−qW」の、第2メモリ110への書き込みを開始する(図18(a))。
このように、第3の実施形態では、時点t2において、バッファ読み出し部105による、バッファメモリ1230aからの、書き込みが完了した当該1列目のデータ「pL−qW」の読み出しと、バッファ書き込み部104による、バッファメモリ1230bに対する2列目のデータ「pL−qW」の書き込みと、を並行して実行することができる。
時点t3において、2列目のデータ「pL−qW」のバッファメモリ1230bへの書き込みが完了する。バッファ書き込み部104は、この時点t3において、データの書き込み先をバッファメモリ1230bからバッファメモリ1230aに切り替える。また、バッファ読み出し部105は、この時点t3において、データの読み出し元をバッファメモリ1230aからバッファメモリ1230bに切り替える。
時点t3以降も、上述と同様に、3列目のデータ「pL−qW」について、第2メモリ110からの読み出しと(図18(b))、第3メモリ111への書き込みと(図18(c))、が行われ、また、バッファメモリ1230aに対する書き込みと(図18(d))、バッファメモリ1230bからの読み出しと(図18(e))、が並行して実行される。
このように、第3の実施形態によれば、2つのバッファメモリ1230aおよび1230bの書き込みおよび読み出しをトグルで切り替えることで、バッファ書き込み部104による書き込み処理と、バッファ読み出し部105による読み出し処理とを並行して実行できる。そのため、バッファ読み出し部105から連続的にデータを出力することが可能となり、プリンタ10の印刷性能を向上できる。
なお、この第3の実施形態は、上述した第1の実施形態および第2の実施形態に適用可能である。
(第4の実施形態)
次に、第4の実施形態について説明する。第4の実施形態は、上述の第3の実施形態の構成に加えて、第2メモリ110として、第2変換部103の処理ブロック分の容量を有するメモリを2面、有し、この2面のメモリの第1面のメモリと第2面のメモリとをトグルで切り替えて用いる例である。図19は、第4の実施形態に係るSDRAM1007の構成例を示す。
図19の例では、SDRAM1007は、記憶領域内に、それぞれ、少なくとも第2変換部103の処理ブロック分のサイズを有する、それぞれ第1面のメモリおよび第2面のメモリとしてのメモリ領域1007aおよび1007bを含む。また、これらメモリ領域1007aおよび1007bは、SDRAM1007においてアドレスが連続する方向に、当該処理ブロック分のサイズを有する。なお、図19では、メモリ領域1007aおよび1007bを、それぞれメモリ領域#1、メモリ領域#2としても示されている。
MEMC1005’は、切替部1100aおよび1100bにより、これらメモリ領域1007aおよび1007bの書き込みおよび読み出しをトグルで切り替える。例えば、MEMC1005’は、メモリ領域1007aおよび1007bのうち一方に書き込みが行われている期間は、他方からの読み出しが可能なように、切替部11100aおよび1100bをトグルで切り替える。
なお、図19では、切替部1100aおよび1100bがMEMC1005’の外部に設けられているように示されているが、これはこの例に限定されない。すなわち、切替部1100aおよび1100bがMEMC1005’の内部に含まれる構成であってもよい。
図20は、第4の実施形態に係る90°回転および270°回転の例を示すタイミングチャートである。図20(a)は、書き込み部101によるメモリ領域1007aおよび1007bに対する書き込みのタイミングの例を示す。また、図20(b)は、読み出し部102によるメモリ領域1007aおよび1007bからの読み出しのタイミングの例を示す。なお、図20(a)および図20(b)においては、メモリ領域1007aおよび1007bを、それぞれR#1、R#2として示している。
図20(c)は、第2変換部103による第3メモリ111への書き込みのタイミングの例を示す。図20(d)は、バッファメモリ1230aおよび1230bへの書き込みのタイミングの例、図20(e)は、バッファメモリ1230aおよび1230bからの読み出しのタイミングの例をそれぞれ示す。なお、図20(d)および図20(e)において、バッファメモリ1230aをバッファ#1、バッファメモリ1230bをバッファ#2としてそれぞれ示している。
先ず、書き込み部101は、第1メモリ210すなわちSDRAM1007へのデータの書き込み先として、メモリ領域1007aを設定する。書き込み部101は、第1メモリ210から第1変換部200が読み出した1列目のデータ「pL−qW」における、1番目の処理ブロック分のデータを、メモリ領域1007aに書き込む(図20(a))。書き込み部101は、処理ブロック分のデータの書き込みが完了すると(時点t10)、データの書き込み先をメモリ領域1007aからメモリ領域1007bに切り替え、書き込みの完了を読み出し部102に通知する。書き込み部101は、第1メモリ210から第1変換部200が読み出した1列目のデータ「pL−qW」における2番目の処理ブロック分のデータをメモリ領域1007bに書き込む。
読み出し部102は、時点t10での書き込み部101からの書き込み完了の通知に応じて、第1メモリ210からのデータの読み出し元として、メモリ領域1007aを設定し、メモリ領域1007aから1番目の処理ブロックのデータを読み出す(図20(b))。第2変換部103は、読み出し部102により読み出された1番目の処理ブロック分のデータを第3メモリ111に書き込む(図20(c))。
バッファ書き込み部104は、例えば時点t10において、データの書き込み先をバッファメモリ1230aに設定する。第2変換部103は、第3メモリ111への1番目の処理ブロック分の書き込みが完了すると、第3メモリ111から列毎にデータを読み出す。バッファ書き込み部104は、第2変換部103により第3メモリ111から読み出されたデータを、バッファメモリ1230aに含まれる、列に対応するバッファ番号BNUMのラインメモリ1120に書き込む(図20(d))。
書き込み部101は、第1メモリ210から第1変換部200が読み出した1列目のデータ「pL−qW」における2番目の処理ブロック分のデータの、メモリ領域1007bへの書き込みが完了すると、データの書き込み先をメモリ領域1007bからメモリ領域1007aに切り替え、書き込みの完了を読み出し部102に通知する。書き込み部101は、第1メモリ210から第1変換部200が読み出した1列目のデータ「pL−qW」の3番目の処理ブロック分のデータをメモリ領域1007aに書き込む。
読み出し部102は、書き込み部101からの書き込み完了の通知に応じて、メモリ領域1007bから2番目の処理ブロック分のデータを読み出す(図20(b))。読み出し部102は、メモリ領域1007bからの2番目の処理ブロック分のデータの読み出しが完了すると、読み出し完了を書き込み部101に通知する。
第2変換部103は、読み出し部102により読み出された2番目の処理ブロック分のデータを第3メモリ111に書き込む(図20(c))。第2変換部103は、第3メモリ111への1番目の処理ブロック分の書き込みが完了すると、第3メモリ111から列毎に2番目の処理ブロック分のデータを読み出す。バッファ書き込み部104は、第2変換部103により第3メモリ111から読み出されたデータを、バッファメモリ1230aに含まれる、列に対応するバッファ番号BNUMのラインメモリ1120に書き込む(図20(d))。
この、図20(a)〜図20(d)の処理を、メモリ領域1007aおよび1007bを処理ブロックの書き込み毎にトグルで切り替えながら、Y/B回繰り返す。これにより、図20(a)に示した、第2メモリ110に対して書き込まれた1列目のデータ「pL−qW」のバッファメモリ1230aへの書き込みが完了する(時点t11)。
バッファ読み出し部105は、例えばこの時点t11において、データの読み出し元をバッファメモリ1230aに設定する。バッファ読み出し部105は、時点t11において、バッファメモリ1230aからの、書き込みが完了した当該1列目のデータ「pL−qW」の読み出しを開始する(図20(e))。
書き込み部101は、上述のようにして、データの書き込み先をメモリ領域1007aおよび1007bで切り替えながら、第1メモリ210から第1変換部200が読み出した1列目のデータ「pL−qW」を処理ブロック毎に、メモリ領域1007aおよび1007bに交互に書き込む。
書き込み部101は、当該1列目のデータ「pL−qW」の書き込みが完了すると、同様にして、第1メモリ210から第1変換部200が読み出した2列目のデータ「pL−qW」の処理ブロック毎の、メモリ領域1007aおよび1007bへの書き込みを実行する(図20(a))。書き込み部101は、2列目のデータ「pL−qW」における1番目の処理ブロック分の例えばメモリ領域1007aへの書き込みが完了すると(時点t11)、書き込みの完了を読み出し部102に通知する。書き込み部101は、処理ブロック分の書き込みの完了毎に、書き込み完了を読み出し部102に通知する。
読み出し部102は、書き込み部101からの書き込み完了の通知に応じて、時点t11において、メモリ領域1007aから2列目のデータ「pL−qW」の1番目の処理ブロック分の読み出しを開始する。読み出し部102は、メモリ領域1007aからの2列目のデータ「pL−qW」の1番目の処理ブロック分のデータの読み出しが完了すると、読み出し完了を書き込み部101に通知する。以降、メモリ領域1007aおよび1007bを交互に切り替えながら、2列目のデータ「pL−qW」の処理ブロック毎の読み出しを行う(図20(b))。
以下、同様にして、第2変換部103は、読み出し部102により処理ブロック毎に読み出されたデータを第3メモリ111に書き込む(図20(c))。第2変換部103は、第3メモリ111への処理ブロック毎の書き込みの完了に応じて、第3メモリ111から列毎でのデータの読み出しを実行する。
バッファ書き込み部104は、時点t11において、データの書き込み先をバッファメモリ1230aからバッファメモリ1230bに切り替える。第2変換部103は、第3メモリ111への処理ブロック分の書き込みが完了する毎に、第3メモリ111から列毎にデータを読み出す。バッファ書き込み部104は、第2変換部103により読み出されたデータを、バッファメモリ1230bに含まれる、列に対応するバッファ番号BNUMのラインメモリ1120に書き込む処理を行う(図20(d))。
書き込み部101は、当該2列目のデータ「pL−qW」の書き込みが完了すると、同様にして、第1メモリ210から第1変換部200が読み出した3列目のデータ「pL−qW」の処理ブロック毎の、メモリ領域1007aおよび1007bへの書き込みを実行する。書き込み部101は、2列目のデータ「pL−qW」における1番目の処理ブロック分の例えばメモリ領域1007aへの書き込みが完了すると(時点t12)、書き込みの完了を読み出し部102に通知する。読み出し部102は、書き込み部101からの書き込み完了の通知に応じて、時点t12において、メモリ領域1007aから2列目のデータ「pL−qW」の1番目の処理ブロック分の読み出しを開始する。
図21は、第4の実施形態に係る、書き込み部101および読み出し部102による、書き込み完了通知および読み出し完了通知のタイミングの例を示す。図21(a)は、メモリ領域1007aおよび1007bに対する書き込み処理時間が、読み出し処理時間よりも長い場合の例を示す。また、図21(b)は、メモリ領域1007aおよび1007bに対する書き込み処理時間が、読み出し処理時間よりも短い場合の例を示す。
なお、図21(a)および図21(b)において、メモリ領域1007aおよび1007bを、それぞれ領域#1、領域#2として示している。
図21(a)および図21(b)の何れにおいても、書き込み部101からの書き込み完了通知に応じて、読み出し部102による読み出し処理が開始される。図21(a)の例では、読み出し処理に要する時間が書き込み処理に要する時間よりも短いため、書き込み処理を、書き込み先のメモリ領域1007aおよび1007bを交互に切り替えながら、連続して実行できる。
一方、図21(b)の例では、読み出し処理に要する時間が書き込み処理に要する時間よりも長いため、書き込み部101は、書き込み先のメモリ領域1007aまたは1007bからの読み出しが完了した旨を示す読み出し完了通知を読み出し部102から受けるまで待機して、書き込み処理を開始する。
このように、書き込み完了通知および読み出し完了通知を用いることで、書き込み部101による書き込み処理、および、読み出し部102による読み出し処理の時間の短長に関わらず、メモリ領域1007aおよび1007bに対する書き込みおよび読み出しを、適切に制御することが可能である。
上述したように、第4の実施形態によれば、第2メモリ110としてのメモリ領域1007aおよび1007bを、第2変換部103の処理ブロック毎に切り替えて、第1の変換部200により第1メモリ210から読み出されたデータ「pL−qW」のメモリ領域1007aおよび1007bへの書き込み、および、メモリ領域1007aおよび1007bを実行している。
ここで、上述した第1の実施形態では、第2メモリ110として、1スキャンによる画像データ31kの1列分の容量が必要であり、第2の実施形態では、当該画像データ31k全体に対応する容量が必要となる。また、第3の実施形態では、第1変換部200で読み出された1列分のデータ「pL−qW」を書き込みながら、その前の列のデータ「pL−qW」を並行して読み出す必要があるため、当該画像データ31kの2列分の容量が必要となる。一方、第4の実施形態では、第2メモリ110としての容量は、第2変換部103の処理ブロックの2つ分(Aバイト×Bライン×2)があればよく、メモリ容量を削減できる。
また、第4の実施形態では、第1変換部200により第1メモリ210から読み出されたデータ「pL−qW」の1処理ブロック分のメモリ領域1007aへの書き込みが完了した時点で、当該メモリ領域1007aからのデータの読み出しを開始できる。そのため、処理開始から先頭のデータが出力できるまでの時間を短縮できる。
なお、この第4の実施形態は、上述した第1の実施形態および第2の実施形態に適用可能である。
(他の実施形態)
上述した第1〜第4の実施形態では、ホストPC20とプリンタ10とを含む画像形成システム1において、第1変換部200および第1メモリ210がホストPC20に含まれ、プリンタ10は、ホストPC20の第1変換部200により第1縦横変換処理を施された画像データに対して、第2変換部103により第2縦横変換処理を施していた。これはこの例に限定されず、第1変換部200をプリンタ10に含めた構成とすることも可能である。
この場合、例えば、第1変換部200は、プリンタ10からホストPC20に対して、ホストPC20が有する第1メモリ210に記憶される画像データの、処理単位での読み出しを第1メモリ210上での画像データの列毎に要求する。第1変換部200は、ホストPC20から送信された処理単位の画像データを、書き込み部101に渡す。
これに限らず、第1変換部200および第1メモリ210をプリンタ10に含ませてもよい。
なお、上述の各実施形態は、本発明の好適な実施の例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変形による実施が可能である。