以下、本発明を具体化した一実施形態を図1〜図19に基づいて説明する。図1に示すように、記録装置の一例である複合機11は、本体12とカバー13とを備える。本体12の下側部分がプリンター部14、上側部分がスキャナー部15になっている。プリンター部14は、例えばインクジェット記録方式を採用する。本体12の前側上段部には、操作パネル部17が設けられている。また、本体12の前側下部には、印刷済みの用紙Pが排出される排紙部18が設けられている。本体12において排紙部18の図1における右上位置には、メモリーカード19を挿抜可能なカードスロット20が設けられている。
図1に示すように、操作パネル部17にはその幅方向中央部に表示部21(例えば液晶ディスプレイ)が設けられている。また、操作パネル部17には、電源ボタン22、モード選択ボタン23、印刷/スキャンを開始するスタートボタン24、実行中の動作を中止するストップボタン25等が配設されている。モード選択ボタン23の操作によって、「メモリーカード」「コピー」「スキャン」等を含む5つモードのうち一つを選択でき、メモリーカード19から読み取った画像データに基づく写真等の印刷や、原稿のコピー印刷、原稿のスキャニングなどを行うことができる。
図3は、複合機11の電気的構成を示すブロック図である。複合機11は、全体的な制御を司る制御装置30を備える。制御装置30は、プリンター部14及びスキャナー部15を駆動制御する。制御装置30は、プリンター部14を構成するキャリッジモーター27、搬送手段を構成する搬送モーター28及び記録手段の一例である印刷ヘッド29(流体噴射ヘッド)を駆動制御することにより、プリンター部14に用紙P(媒体)への印刷を行わせる。
この制御装置30には、CPU31(中央処理装置)、ASIC32(Application SpecificIC)、ROM33、メモリーコントローラー34、DRAM(Dynamic Random Access Memory)からなるメインメモリー35及びモーター駆動回路36が備えられている。なお、DRAMとしては、SDRAM(Synchronous DRAM)、DDR SDRAM(Double-Data-Rate SDRAM)、DDR2 SDRAM、DDR3 SDRAMなどが用いられているが、その他、EDO DRAM(Extended Data Out DRAM)、バーストEDO DRAMなどを用いることができる。
ROM33には、プログラムや各種制御に必要な設定データなどが記憶されている。CPU31はROM33から読み出したプログラム(例えばファームウェア用プログラム)を実行してコマンド及び指令値をモーター駆動回路36に与えることによりキャリッジモーター27及び搬送モーター28を駆動制御する。これにより、プリンター部14における用紙の搬送制御、及び印刷ヘッド29を備える不図示のキャリッジを主走査方向へ移動させるキャリッジ制御が行われる。
また、複合機11は、通信インターフェイス(以下、「通信I/F37」という)を備える。例えば不図示のホスト装置(パーソナルコンピューター等)から転送されてきた印刷データは、通信I/F37が受信する。この通信I/F37に接続されたバス38には、制御装置30を構成するCPU31、ASIC32、ROM33、メモリーコントローラー34、メインメモリー35及びモーター駆動回路36が接続されるとともに、スキャナー入力回路41、メモリーカード入出力回路42及び操作パネル部17が接続されている。
スキャナー部15は、原稿を光学的に読み取るラインセンサー15aと、ラインセンサー15aからの読取信号(アナログ信号)をA/D変換して多階調のRGB画像データ(ラインデータ)として出力するA/D変換回路15bとを備える。スキャナー入力回路41は、CPU31の制御の下、スキャナー部15から入力されるRGB画像データに対してライン間補正処理及び解像度変換処理を施す。そして、これらの処理が施されたRGB画像データはASIC32に入力され、不図示の圧縮回路によりJPEG画像データに圧縮される。また、メモリーカード入出力回路42は、スロット20に挿着されたメモリーカード19から例えばJPEG画像データを読み込む。
メインメモリー35は、その一部の記憶領域が画像データ格納用のバッファーとして使用され、受信バッファー35aと第1格納部35b(中間バッファー)と第2格納部35c(印刷バッファー)とを備える。受信バッファー35aには、ホスト装置から受信した印刷データ、スキャナー部15経由及びメモリーカード入出力回路42経由のJPEG画像データなどが格納される。
ASIC32は、受信バッファー35aに格納された画像データ(印刷データ、JPEG画像データ等)に、その画像データ種に応じた画像処理を施すため、図3に示すJPEG解凍回路43、画像処理回路44、縦横変換装置45及びヘッド制御ユニット46を内蔵している。
JPEG解凍回路43は、受信バッファー35aから読み込んだJPEG画像データを解凍(伸張)してRGB画像データに展開し、その展開したRGB画像データを第1格納部35bに格納する。
画像処理回路44は、第1格納部35bから読み込んだRGB画像データに対して、解像度変換処理、色変換処理、ハーフトーン処理等を含む公知の画像処理を施す。ここで、解像度変換処理とは、RGB画像データの解像度を表示用解像度から印刷用解像度に変換する処理である。色変換処理とは、RGB画像データをRGB表色系からCMYK表色系のCMYK画像データへ色変換テーブル(図示せず)を参照して変換する処理である。ハーフトーン処理とは、CMYK画像データの画素の階調値(例えば256階調)を、印刷用の階調値(例えば2階調又は4階調など)に変換する処理である。第1格納部35bは、これらの各画像処理終了後の画像データをそれぞれ格納する3つの格納領域を備え、これらの画像処理を全て終了した最終の印刷イメージデータ(CMYK画像データ)は、第1格納部35bの最終段の格納領域に格納される。
縦横変換装置45は、第1格納部35bから読み込んだ印刷イメージデータに縦横変換処理を施す。縦横変換処理とは、印刷イメージデータの画素の並び順を、表示用の横方向(ライン方向)の並び順から、印刷ヘッド29のノズル配列(つまりインク噴射順序)に合わせた縦方向(ラスター方向)の並び順に変換する処理である。そして、縦横変換処理後のヘッドイメージデータは第2格納部35c(イメージバッファー)に格納される。
ヘッド制御ユニット46は、第2格納部35cに格納されたヘッドイメージデータを、印刷ヘッド29による印刷制御(噴射制御)が可能なヘッド制御データに変換する。ヘッド制御データは、ヘッド制御ユニット46から例えば1パス分(印刷ヘッドの1走査分)ずつ印刷ヘッド29へ転送される。印刷ヘッド29は不図示のヘッド駆動回路を内蔵し、ヘッド駆動回路がヘッド制御データに基づきインクの噴射制御を行う。
図2は、印刷ヘッドの底面(ノズル開口面)を示す。図2に示すように、印刷ヘッド29のノズル開口面29Aには、副走査方向(図2における上下方向)に一定のノズルピッチで配列された計180個のノズル♯1〜♯180よりなるノズル列が4色分(4列)形成されている。本例では、各ノズル列は、180個ずつのノズル29K,29C,29M,29Yを備え、黒(K)、シアン(C)、マゼンタ(M)、イエロー(Y)のインク滴の噴射に使用される。
また、印刷ヘッド29には、図2に示す各ノズル♯1〜♯180と対応する吐出駆動素子48がノズルと同数内蔵されている(但し、図2では印刷ヘッド29の外側に模式的に描いている)。吐出駆動素子48は、例えば圧電振動素子又は静電駆動素子からなる。印刷ヘッド29は、不図示のヘッド駆動回路により、ヘッド制御ユニット46から転送されたヘッド制御データに基づいて吐出駆動素子48の駆動制御を行って、ノズルからの噴射制御を行う。もちろん吐出駆動素子48はノズル通路内のインクを加熱するヒーターでもよく、ヒーターで加熱したインク内に沸騰により発生した気泡の膨張を利用してノズルからインク滴を吐出させる構成でもよい。
図2に示す印刷ヘッド29は、プリンター部14において主走査方向(図2における左右方向)に移動可能に設けられた不図示のキャリッジの下部に固定されている。キャリッジモーター27の駆動により、印刷ヘッド29はキャリッジと共に主走査方向に移動し、その移動途中でノズルからインク滴を1ドット間隔で噴射することにより、用紙Pに印刷が施される。
図4は、回転処理に係る部分の詳細な構成図を示す。図4に示すように、縦横変換装置45は、バス38に接続された回転ユニット50と、この回転ユニット50に接続されたSRAM80とを備える。メインメモリー35は、前述の第1格納部35bと第2格納部35cとを備える(但し図4では受信バッファー35aを省略している)。図4に示すように、第1格納部35bには回転ユニット50による回転処理前の印刷イメージデータPDが格納され、第2格納部35cには回転ユニット50による回転処理後のヘッドイメージデータHDが格納されるようになっている。なお、第1格納部35bの印刷イメージデータPDは、縦横変換装置45の上段の画像処理回路44が所定の画像処理を施して生成した図6に示す印刷イメージデータPDを、図5に示す状態に第1格納部35bに格納したものである。
図6は、印刷イメージデータPDのデータ構造を示す。図6に示す印刷イメージデータPDは、縦横変換装置45の上段の画像処理回路44が所定の画像処理を施して生成したものである。1パス分の印刷イメージデータPDのライン数は、ノズル1列当たりのノズル数(本例では180個)と同数の180ラインあるが、説明を簡単にするためにノズル数6個の6ラインの例で説明する。また、印刷ヘッド29の走査1回(1パス)分の印刷イメージデータにおける1ライン当たりの画素数は、M個とする。M個は、用紙に紙幅方向に印刷されるインクドットの最大数(最大ドット数)に相当し、用紙サイズや印刷範囲、印刷解像度にもよるが、例えば数千〜数万個ある。そして、バーストサイズBが、画素4個分(本例えでは8バイト)である場合、Mが、バーストサイズB(本例では8バイト(4画素分))で割り切れず、余りがでる場合を想定する。ここで、余りがでる例であれば、縦横変換装置45の効果的な作用を説明できるので、以下では説明を簡単にするため、印刷イメージデータPDの1ライン当たりの画素数を、バーストサイズBの画素数「4」(8バイト)で割って2画素(4バイト)余る10画素(20バイト)であると仮定して説明する。つまり、印刷イメージデータPDが、N行×M列=6行×10列の例で説明する。この場合、印刷イメージデータPDの1ライン当たりのデータサイズ、つまりラスターサイズを「R」とおく。1ライン当たり10画素の例である本例では、ラスターサイズR=20バイトである。
本実施形態の回転ユニット50は、回転処理における回転前の印刷イメージデータPDと回転後のヘッドイメージデータHDの格納領域において、データのラスターサイズR(行方向長)がバーストサイズBの自然数倍に一致しない場合においても、ダミーデータを不要とするためにアライン機能を有する回転処理をハードウェアで実現する。
図5(a)は、メインメモリー35(第1格納部35b)に格納された印刷イメージデータPDの格納状態を示し、図5(b)は、印刷イメージデータPDに回転処理(縦横変換)を施して生成されたヘッドイメージデータHDのメインメモリー35(第2格納部35c)における格納状態を示す。図5(a)では、印刷イメージデータを構成する各画素は、N行×M列のマトリクス状に配列されている。印刷イメージデータPDは、印刷ヘッド29が印刷のため主走査方向に1回移動(1パス)したときの印刷に用いられる1パス分のデータである。よって、回転処理時の印刷イメージデータPDは、ノズル1列分のノズル数(本例では180個)と同数の行数Nで、印刷ヘッド29が主走査したときに主走査方向に形成されるインクドットの最大ドット数と同数の列数Mを有する。このため、印刷イメージデータPDは、通常、数100行×数1000列ぐらいの画素数であるが、説明を簡単にするため、図5では前述のとおり、画素数6行×10列の画像データの例を示す。ここで、画素の符号「N-M」は、N行M列目の画素データを指す。なお、以下の説明では、画素1つ分のデータ単位を「セル」と呼ぶ場合もある。なお、本例の印刷ヘッド29は、1ノズル列当たり1色で4色印刷できるように4列のノズル列を有するので、印刷イメージデータPDをヘッドイメージデータHDに変換する回転処理はインク色毎に行われる。例えば回転ユニット50を色数と同数設けて並列処理したり、1つの回転ユニット50で複数色分の印刷イメージデータPDの回転処理を順番に行ったりしてもよい。
本例では、バースト転送1回分のデータサイズであるバーストサイズB(バイト)は、4画素分に相当する8バイトとする。第1格納部35bは、バーストサイズBを考慮して、行方向のサイズ(Byte)がバーストサイズの自然数倍のC・B(Byte)(但しCは自然数)に設定されている。図5において破線で囲む領域が、1回でバースト転送されるバーストサイズB(4画素分)のデータである。1回のバースト転送でバーストサイズのデータがJ回転送される。バーストサイズB分(行方向のA画素分)ずつのデータを連続してN回バースト転送することにより、A×A個分の画素データを1単位とするデータが転送される。
図5(a)に示すように、メインメモリー35(第1格納部35b)に格納された印刷イメージデータPDの1バースト目のデータ(画素データ「1-1」「1-2」「1-3」「1-4」)を回転処理後のヘッドイメージデータがメインメモリー35(第2格納部35c)に格納された格納状態で見ると、各画素データがばらばらの位置に格納されることが分かる。このように各画素データをばらばらの位置に格納するためには、メモリーアクセスが頻繁となり効率が低下する。そのため、本実施形態では、各画素データがばらばらの位置に格納される割に、メモリーアクセスが頻繁とならず効率よく回転処理が可能なハードウェアからなる縦横変換装置45(回転処理装置)を用いる。
図4に示す回転ユニット50は、メモリーコントローラー34に対して読出アドレスAR1とバーストサイズBと転送回数Jとを指定する。メモリーコントローラー34は、指定された読出アドレスAR1からバーストサイズBずつのデータ(A画素分)を連続してA回(J=Aの場合)転送する。これにより回転ユニット50は、A×Aの正方ブロックを第1格納部35bから読み出す。これを連続的に行って、A×Aの正方ブロックずつ読み出される。
また、回転ユニット50は、メモリーコントローラー34に対して書込アドレスAW1とバーストサイズBと転送回数Jとを指定する。メモリーコントローラー34は、指定された書込アドレスAW1からバーストサイズB(A画素分)ずつのデータを連続してA回転送する。これにより回転ユニット50は、A×Aの正方ブロックを第2格納部35cに書き込む。そして、これを連続的に行って、A×Aの正方ブロックずつ読み出される。
本実施形態ではバーストサイズBが32バイトであり、メモリーコントローラー34が32バイトバーストを行う構成である。但し、説明を簡単にするため、前述のとおり、バーストサイズBを8バイトとする8バイトバーストを行う例で説明する。もちろん、バーストサイズは適宜設定でき、例えば16バイトバースト、24バイトバースト、64バイトバーストなどを採用することもできる。また、バースト転送回数Jも適宜設定してよい。
以下、図4を用いて、回転ユニット50、メモリーコントローラー34及びSRAM80などの詳細な構成を説明する。
図4に示す回転ユニット50は、入力系として、第1アドレスコントローラー51と、入力インターフェイス(以下、「入力I/F52」と記す)と、入力バッファー53とを備える。なお、本実施形態では、第1アドレスコントローラー51と入力I/F52により、第1の転送手段の一例が構成される。
第1アドレスコントローラー51は、メインメモリー35の第1格納部32bに格納された印刷イメージデータPDから読み出すべき着目画素のリードアドレスAR0を生成する。そして、第1アドレスコントローラー51は、生成したリードアドレスAR0を入力I/F52へ送る。
入力I/F52は、第1アドレスコントローラー51からのリードアドレスAR0を基に読出アドレスAR1を生成するアドレス生成部60を備えている。そして、入力I/F52は、メモリーコントローラー34に対して読出アドレスAR1を指定してバースト転送でデータを読み出すバーストリードを要求する。また、入力I/F52は、リードアドレスAR0をポインターコントローラー54に送る。
メモリーコントローラー34は、バーストリードを行う機能を持つ読出転送部81(バーストリード処理部)を備えている。読出転送部81は、入力I/F52からバーストリード要求を受け付けると、読出アドレスAR1からバーストサイズB分のデータD1を順次読み出して、入力I/F52へバースト転送する。本例では、バーストサイズBは4画素分のデータサイズである。1回のバーストリード要求で4つの読出アドレスAR1を指定して連続4回のバースト転送が行われる。つまり、読出転送部81は、バーストリード要求で指定された読出アドレスAR1からバーストサイズB(4画素)分ずつ4回読出して回転ユニット50の入力I/F52へバースト転送する。
入力I/F52は、バースト転送されてきたデータD1を入力すると、データD1の読み出しに使用された対応するリードアドレスAR0と共にデータD1を入力バッファー53に格納する。
また、ポインターコントローラー54は、SRAM80へのデータD1の書込位置(書き込み先頭アドレス)を指すライトポインターWPを生成する第1ポインター生成部61と、SRAM80に書き込まれたデータD1からデータD2を構成する4つの画素の読出位置を指すリードポインターRPを生成する第2ポインター生成部62とを備えている。ライトポインターWPは、SRAM80の行方向におけるデータD1の書込開始位置を指すポインターである。また、リードポインターRPは、データD1のうち読出し対象のセルを指すポインターである。第1ポインター生成部61は、SRAM80にデータD1が書き込まれる度に、ライトポインターWPを次の書込開始位置にシフトさせる。本例では、SRAM80の行方向サイズが2・Bバイトの例で説明するものとし、2・Bバイトである場合、ライトポインターWPは、2つの書込位置を順番に切り換わる。
また、第2ポインター生成部62は、SRAM80内の各データD1のうち読み出すべきセルを指すリードポインターRPをリードアドレスAR0から生成する。第2ポインター生成部62は、各データD1に対応するリードアドレスAR0の下位3ビットを、行毎のリードポインターRPの位置として求める。
SRAMコントローラー55は、入力バッファー53に格納されたデータD1を順次読込んでSRAM80に書き込む処理を行う書込部63と、SRAM80に格納されたデータD1からリードポインターRPの指すセルを読み出す読出部64とを備える。
また、SRAMコントローラー55は、データD1のうちリードポインターRPの指すセルが、印刷イメージデータPDに属するセルでない場合にそのセルをマスクするための第1フラグF1を生成する第1フラグ生成部65を備える。印刷イメージデータPDの開始アドレス(先頭アドレス)とデータサイズが既知であるため、第1フラグ生成部65は、リードアドレスAR0から印刷イメージデータPDに属さない不定のセルを識別可能となっている。そして、第1フラグ生成部65は、リードポインターRPの指すセルが、印刷イメージデータPDの画素である場合には、そのセルに第1フラグF1としてマスクしない旨の「0」を設定し、印刷イメージデータPDの画素ではない不定のセルである場合には、その不定のセルに第1フラグF1としてマスクする旨の「1」を設定する。リードポインターRPは、各データD1に1つずつあるので、L個のリードポインターRPに対応する第1フラグF1を、F1K(但しKは、0,1,2,…L−1;但しLは2以上の自然数))とおく。ここで、Lは、データD1のライン数である。データD1が4ラインの本例では、4つのリードポインターRPが指す4つのセルには、第1フラグF1として、それぞれF1(0),F1(1),F1(2,F1(3)が設定される。SRAMコントローラー55は、読出部64が読み出したL個(本例では4個)のセルと第1フラグF1(K)(但しKは、0,1,2,…L−1)とをそれぞれ対応付けて出力バッファー56へ出力する。
回転ユニット50は、出力系として、出力バッファー56と、第2アドレスコントローラー57と、出力インターフェイス(以下、「出力I/F58」と記す)とを備えている。なお、本実施形態では、第2アドレスコントローラー57と出力I/F58により、書込手段の一例が構成される。
第2アドレスコントローラー57は、メインメモリー35の第2格納部35cにヘッドイメージデータHDの一部として格納すべきセルのライトアドレスAW0を生成する。つまり、SRAM80から読み出したL個のセルをメインメモリー35の第2格納部35cに書き込むためのライトアドレスAW0を生成する。
また、第2アドレスコントローラー57は、ライトアドレスAW0を基にミスアラインであるか否かを判定する判定部66を備えている。ここで、ミスアラインとは、書込み位置が前回の書込み位置と連続せず間に空きを置いて書込む必要があり、そのまま書き込むと本来空けるべき位置に書き込まれてしまうことを指す。第2アドレスコントローラー57は、ライトアドレスAW0の下位3ビットが「000」(2進数)であればミスアラインではないと判定し、「000」以外の値、つまり下位3ビットのうちいずれかのビットに「1」が存在すればミスアラインと判定する。
また、第2アドレスコントローラー57は、第2フラグF2を生成する第2フラグ生成部67を備えている。第2フラグ生成部67は、SRAM80から読み出されたセル(画素)の配列順が不適切である場合に、セルを適切な配列順に並び替えるミスアライン処理に用いるために第2フラグF2を生成する。第2フラグF2も、第1フラグF1と同様のマスクフラグであり、マスクしない旨の「0」と、マスクする旨の「1」のフラグ値をとる。第2フラグ生成部67は、値が「0」の第2フラグF2を生成する。第2アドレスコントローラー57は、ライトアドレスAW0と第2フラグF2とミスアライン判定結果とを出力I/F58へ送る。なお、判定部66を出力I/F58に設け、第2アドレスコントローラー57からのライトアドレスAW0を基に出力I/F58内の判定部66がミスラインであるか否かを判定する構成としてもよい。
出力I/F58は、ライトアドレスAW0を基に書込アドレスAW1を生成するアドレス生成部68と、ミスアライン処理のためのセルの配列順変更のためにセルをシフトさせるシフト処理部69と、第1フラグF1と第2フラグF2を用いて第3フラグF3を生成する第3フラグ生成部70とを備えている。
シフト処理部69は、ミスアライン処理のためのセルの配列順変更のためにセルをフラグF1,F2と共にシフトさせるシフト処理を行う。第3フラグ生成部70は、シフト処理でシフトさせた着目画素以外の画素に対応する第2フラグF2を「0」から「1」に変更する処理と、第1フラグF1と変更後の第2フラグF2との論理和を演算する論理和演算(OR演算)とを行って、第3フラグF3を生成する。ここで、第3フラグF3は、第1フラグF1や第2フラグF2と同様のマスクフラグであり、マスクしない旨の「0」と、マスクする旨の「1」のフラグ値をとる。
そして、出力I/F58は、メモリーコントローラー34に対して書込アドレスAW1を指定してバースト転送でデータD2を書き込むバーストライトを要求する。このとき、第3フラグF3が付されたデータD2がバーストライト要求される。
図4に示すメモリーコントローラー34は、バーストライト要求を受け付けると、データD2をバースト転送して、メインメモリー35の第2格納部35cにおける指定の書込アドレスAW1にデータD2を書き込む書込転送部82を備える。書込転送部82は、データD2に付された第3フラグF3が「0」の画素データについては書込み(上書き)を許容し、第3フラグF3が「1」の画素データについてはマスクしてその書込み(上書き)を禁止すマスク処理部82Aを備えている。
次に、回転ユニット50がSRAM80を用いて行う回転処理について説明する。
ラスターサイズRをオフセット量offsetとおくと、その値が20バイトである本例では、offsetは16進数で「0x14」になる。
ここで、図5(a)に示す例では、第1格納部35bの行方向サイズがバーストサイズBに合わせてその自然数倍のC・B(Byte)に設定されており、一方の印刷イメージデータPDのラスターサイズRが、バーストサイズBで割ると余りの画素ができる値となっている。この場合、図6に示す印刷イメージデータPDの1列目のN個(本例ではN=6)の画素データ「1-1」「2-1」「3-1」…「6-1」は、メインメモリー35の第1格納部35bに格納された状態では、1ライン進む毎に後方へ2個(4バイト)ずつずれる。このため、同一列に属する画素「1-1」「2-1」「3-1」…「6-1」が、バーストサイズBずつ転送される各データD1における4画素中の位置が同じにならない。そのため、従来技術のように、同一列に属する連続する4画素を含む4×4正方ブロックをSRAMでただ回転させるだけでは、縦横変換できない。本例の回転ユニット50は、メモリーコントローラー34の画素(セル)単位での上書きの禁止機能を利用することにより、従来技術のように印刷イメージデータPDにダミーデータを追加することなく、かつ縦横変換処理の効率の低下を招く頻繁なメモリーアクセスを回避しつつ、印刷イメージデータPDをヘッドイメージデータHDに変換する。なお、バーストサイズBに満たない余りの画素数は2個以外の値でもよい。もちろん、本例の縦横変換装置45は、余りの画素数が「0」となる印刷イメージデータPDも縦横変換可能である。
SRAM80はバーストサイズB及びバースト転送回数Jを考慮し、16バイト×8ライン×2面分用意する。一般化すれば、行方向にバーストサイズBの自然数Q倍の長さで、かつバースト転送回数Jの自然数S倍のライン数を格納可能な格納サイズを1面とし、これを2面用意する。
第1アドレスコントローラー51は、以下のようにリードアドレスAR0を求める。図6に示すように、印刷イメージデータPDの先頭画素、つまり1行(1ライン)・1列(1ラスター)目の画素データの格納位置を開始アドレスADst(先頭アドレス)とおく。また、ライン(行)が次の行にオフセットされる値(オフセット量)を「offset」とおく。このオフセット量offsetは、ラスターサイズRに等しい。これらの情報は、CPU31により第1アドレスコントローラー51に設定される。第1アドレスコントローラー51は、印刷イメージデータPD中のnライン目の先頭アドレスAD0を、以下の式で演算する。
AR0=ADst+offset*(n−1) … (1)
ここで、開始アドレスADstは、第1格納部35bにおいて印刷イメージデータPDが格納される先頭アドレスであり、任意のアドレスである。本例では説明を簡単にするため、開始アドレスADstを「0x0000」とする。
第1アドレスコントローラー51は、上記(1)式に基づいてリードアドレスAR0を生成する。このリードアドレスAR0は、メインメモリー35において、印刷イメージデータPDの1列目の画素データ、つまり「1-1」「2-1」「3-1」「4-1」「5-1」「6-1」の位置を指すアドレスである。これらの1列目の画素データ「1-1」「2-1」「3-1」「4-1」「5-1」「6-1」を行方向に配列するように縦横変換する。これらのライン先頭の画素データを選択するために、第1アドレスコントローラー51はリードアドレスAR0を生成する。つまり、ライン先頭の画素を含むバーストサイズB(4画素分)のデータD1が転送対象として選択されるように、第1アドレスコントローラー51はライン先頭の画素データの位置するアドレスをリードアドレスAR0として求める。
第1アドレスコントローラー51が生成するリードアドレスAR0は、あくまでライン先頭の画素(1列目の画素)のアドレスであり、これはライン先頭画素が必ずしもバースト転送されるデータD1(図5(a)における破線枠で囲まれたデータ)の先頭画素ではないので、データD1の先頭アドレスと必ずしも一致していない。第1アドレスコントローラー51は、生成したリードアドレスAR0を入力I/F52に送る。
入力I/F52は、第1アドレスコントローラー51から受け取ったリードアドレスAR0の下位3ビットをマスクすることにより読出アドレスAR1を演算する。読出アドレスAR1は、図5(a)の印刷イメージデータPDにおいて、破線で囲ったバーストサイズBのデータD1の先頭アドレスを指す。すなわち、バーストサイズBを2のm乗で表したときの指数mを用いて、リードアドレスAR0下位mビットをマスクして、読出アドレスAR1を生成する。ここで、リードアドレスAR0の下位3ビットをマスクした値は、その画素データが属するバーストサイズのデータD1(図5(a)の破線領域)の先頭アドレスを示し、下位3ビットは、そのデータD1の先頭アドレスを基準(0)としたときに対象の画素が、先頭アドレスから何バイト目に位置するかを示す。そして、入力I/F52は、メモリーコントローラー34に対して読出アドレスAR1を指定して、メインメモリー35からデータD1のバースト転送を要求するバーストリード要求を行う。また、入力I/F52は、第1アドレスコントローラー51から受け取ったリードアドレスAR0をポインターコントローラー54に渡す。
メモリーコントローラー34の読出転送部81は、入力I/F52から読出アドレスAR1とともにバーストリード要求を受け付けると、メインメモリー35の読出アドレスAR1からバーストサイズB分のデータD1を読み出し、入力I/F52へバースト転送する。入力I/F52は、メモリーコントローラー34から転送され入力したデータD1をリードアドレスAR0と共に入力バッファー53に格納する。
一方、ポインターコントローラー54では、第1ポインター生成部61がライトポインターWPを生成し、第2ポインター生成部62がリードポインターRPを生成する。ライトポインターWPとは、SRAM80へのデータD1の書込位置(書込アドレス)を指すポインターである。第1ポインター生成部61は、4×4画素の正方ブロック(4ライン分のデータD1)が書き込まれる度に、ライトポインターWPをバーストサイズB(4画素)分進んだ次の書込位置にシフトさせる。一方、リードポインターRPは、SRAM80に格納されたデータD1の中からその先頭アドレスを基準として読み出すべき画素データの相対位置(先頭アドレスから何バイト目)を指すポインターである。第2ポインター生成部62は、リードアドレスAR0の下位mビット(本例では下位3ビット)をリードポインターRPの値とする。
次に、縦横変換装置45の作用を図面に基づいて説明する。
まず、図7及び図8を用いて、メインメモリー35の第1格納部35bに格納された印刷イメージデータPDからバーストサイズBずつのデータD1のバーストリード(バースト転送)及びバーストリードしたデータD1をSRAM80へ書込む処理を説明する。
メインメモリー35の第1格納部35bには、図7(a)に示す状態に印刷イメージデータPDが格納されている。CPU31は、縦横変換装置45に対して、開始アドレスADstとオフセット量offset(=ラスターサイズR)を与える。第1アドレスコントローラー51は、開始アドレスADstとオフセット量offset(=R)とを用いて、前記(1)式に基づいて、リードアドレスAR0=ADst+offset*(n−1)(nはライン番号)を求める。
図7(a)において印刷イメージデータPDの1列目に属する画素(同図に薄い網掛が施された6個の画素)のうち最初の4ライン分の画素データ「1-1」「2-1」「3-1」「4-1」のリードアドレスAR0が、それぞれADst(0x0000)、ADst+offset(0x0014)、ADst+offset*2(0x0028)、ADst+offset*3(0x003C)が求められる。そして、入力I/F52は、メモリーコントローラー34に対して、リードアドレスAR0の下位3ビットをマスクして得た読出アドレスAR1を指示する。すなわち、メモリーコントローラー34に対しては、読出アドレスAR1が、「0x0000」、「0x0010」、「0x0028」、「0x0038」(16進数)として指示される。この結果、その指示された各読出アドレスAR1から図7(a)に破線枠で囲むバーストサイズB分の4つのデータD1が順番に回転ユニット50へバーストリードされる。
これに前後して、ポインターコントローラー54では、SRAM80のライトポインターWPの初期値を求めるとともに、リードアドレスAR0を基にその下位3ビットをSRAM80のリードポインターRPの初期値として求め、これをSRAMコントローラー55に送る。図7(b)において下向きの太線矢印で示すライトポインターWPの指す位置に各データD1を上側の行から順番(行アドレス「+0000」「+0010」「+0020」「+0030」の順番)に書き込む。図7(b)において、斜め太線矢印がリードポインターRPの位置である。4つのリードアドレスAR0の下位3ビットで示される4つのリードポインターRPは、各データD1において1列目の画素「1-1」「2-1」「3-1」「4-1」の位置を指している。すなわち、各データD1には上側の行から順番に、リードポインターRPとして、RP1=0x0、RP2=0x4、RP3=0x0、RP4=0x4が設定される。
また、SRAMコントローラー55によって、各データD1にはそれぞれを構成する画素毎に第1フラグF1が付される。セルが印刷イメージデータPDの有効ラインに属する画素データであれば第1フラグF1はマスクしない旨の「0」が付され、セルが有効ラインに属さなければ第1フラグF1はマスクする旨の「1」が付される。図7(b)の例では、4つのデータD1は全て4個の画素を有するので、各データD1には上側の行から順番に、それぞれを構成する各画素に、第1フラグF1(0=0、F1(1=0、F1(2=0、F1(3=0が付される。つまり、行アドレス「+0000」のデータD1には各画素に第1フラグF1(0=0が付され、行アドレス「+0010」のデータD1には各画素に第1フラグF 1(1=0が付され、行アドレス「+0020」のデータD1には各画素に第1フラグF1(2=0が付され、さらに行アドレス「+0030」のデータD1には各画素に第1フラグF1(3=0が付される。このように1回目のバーストリードによって、SRAM80にはライトポインターWPの指す位置に図7(b)に示す4×4画素の正方ブロックが格納される。各データD1の書込みが終わると、ライトポインターWPは図7(b)に太線矢印で示す書込位置「+0」から、同図に二点鎖線の矢印で示す書込位置「+8」にシフトする。
次に2回目のバーストリードが行われる。図8(a)において、印刷イメージデータPDの1回目のバーストリードの対象になった画素のリードアドレスAR0にバーストサイズB分の「8」を加算してリードアドレスAR0が演算される。すなわち、リードアドレスAR0が、それぞれADst+8(0x0008)、ADst+offset+8(0x001C)、ADst+offset*2+8(0x0030)、ADst+offset*3+8(0x0044)が求められる。そして、入力I/F52は、メモリーコントローラー34に対して、リードアドレスAR0の下位3ビットをマスクした読出アドレスAR1を指示する。すなわち、メモリーコントローラー34に対しては、読出アドレスAR1が、「0x0008」、「0x0018」、「0x0030」、「0x0040」(16進数)として指示される。この結果、その指示された各読出アドレスAR1から図8(a)に破線枠で囲むバーストサイズB分の4つのデータD1が順番に回転ユニット50へバーストリードされる。
そして、2回目にバーストリードされた各データD1は、図8(b)に破線枠で示すように、書込位置「+8」に上側の行から順番(行アドレス「+0000」「+0010」「+0020」「+0030」の順番)に書き込まれる。
また、SRAMコントローラー55によって、各データD1にはそれぞれを構成する画素毎に第1フラグF1が付される。図8(b)の例では、4つのデータD1は全て4個の画素を有するので、各データD1には上側の行から順番に、それぞれを構成する各画素に、第1フラグF1(1)=0、F1(2)=0、F1(3)=0、F1(4)=0が付される。つまり、行アドレス「+0000」のデータD1には各画素に第1フラグF1(1)=0が付され、行アドレス「+0010」のデータD1には各画素に第1フラグF1(2)=0が付され、行アドレス「+0020」のデータD1には各画素に第1フラグF1(3)=0が付され、さらに行アドレス「+0030」のデータD1には各画素に第1フラグF1(4)=0が付される。このように2回目のバーストリードによって、SRAM80にはライトポインターWPの指す位置に図8(b)に示す4×4画素の正方ブロックが格納される。各データD1のSRAM80への書込みが終わると、ライトポインターWPは図8(b)に太線矢印で示す書込位置「+8」から、同図に二点鎖線の矢印で示す書込位置「+0」にシフトする。
なお、印刷イメージデータPDの1ライン目〜4ライン目を読み出す場合は、その読み出すライン数が4の倍数なので、第1フラグF1はリセット(=0)のままである。しかし、後述する5ライン目と6ライン目を読み出す場合、その読み出すライン数が4の倍数にならず半端なラインはダミーデータとなり、第1フラグF1がセット(=1)される。つまり、読み出すライン数が、1回のバーストリード要求で実施されるバースト転送回数であるJ(本例ではJ=4)の倍数にならない場合、転送すべきライン以外の半端なラインはダミーデータとなり、このダミーデータのセルをマスクする第1フラグF1が有効な値「1」にセットされる。
次に、SRAMコントローラー55の読出部64がSRAM80からデータを読み出す処理について図9を用いて説明する。読出部64は、図9(a)に示すように、リードポインターRP1〜RP4が指す画素データを読み出し、出力バッファー56へ転送する。すなわち、図9(a)に示す1回目の読出しでは、画素データ「1-1」「2-1」「3-1」「4-1」が読み出され、出力バッファー56へ転送される。画素データを読み出した後、リードポインターRPをカウントアップする。その結果、リードポインターRPが図9(b)に示す位置に1つ進む。
図9(b)に示す2回目の読出しでは、リードポインターRP1〜RP4が指す画素データを読み出し、出力バッファー56へ転送する。すなわち、画素データ「1-2」「2-2」「3-2」「4-2」が読み出され、出力バッファー56へ転送される。画素データを読み出した後、リードポインターRPをカウントアップする。その結果、リードポインターRPが図9(c)に示す位置に1つ進む。図9(c)に示すように、いずれかのラインのリードポインターRPがライトポインターWPに追いついた場合は、読み出しを一旦停止する。その後、メインメモリー35からデータがロードされてライトポインターWPが進めば、読出部64による画素データの読み出しを再開する。
図10(a)に示すように、メインメモリー35から転送されたデータD1が、SRAM80のそのときのライトポインターWPの指す書込位置に書き込まれると、ライトポインターWPが進む。ライトポインターWPが進めばSRAM80からの画素データの読み出しが再開される。そして、読出部64が、図10(a)に示すように、リードポインターRP1〜RP4が指す画素データを読み出し、出力バッファー56へ転送する。すなわち、画素データ「1-3」「2-3」「3-3」「4-3」が読み出され、出力バッファー56へ転送される。こうして各ラインのリードポインターRPを進めながら、リードポインターRPの指す画素データを読み出す処理を、4ライン分の画素データを全て処理するまで繰り返す。
例えば図10(a)までの読出処理によって、図10(b)に示すように、1回目の読み出しで画素データ「1-1」「2-1」「3-1」「4-1」が読み出され、2回目の読み出しで画素データ「1-2」「2-2」「3-2」「4-2」が読み出され、さらに3回目の読み出しで画素データ「1-3」「2-3」「3-3」「4-3」が読み出される。そして、各回の読出しデータには、各画素データに第1フラグF1(0)〜F1(3)が付される。1ライン目〜4ライン目であるので、このときの第1フラグF1(0)〜F1(3)はマスクしない旨の値「0」になる。
SRAMコントローラー55による4画素分ずつの読出しデータD2は、各画素に対応する第1フラグF1(0)〜F1(3)と共に出力バッファー56に格納される。出力I/F58は、出力バッファー56から読出しデータD2を第1フラグF1(0)〜F1(3)と共に入力する。
第2アドレスコントローラー57は、メインメモリー35の第2格納部35cへデータD2を書き込む際のライトアドレスAW0を生成する。第2アドレスコントローラー57には、CPU31から第2格納部35cに対するデータD2を書き込む際の開始アドレスADst(先頭番地)とオフセット量OFSとが与えられている。第2アドレスコントローラー57は、1回目のライトアドレスAW0を開始アドレスADstとし、2回目以降においては現在のライトアドレスAW0にオフセット量OFSを加えて、次のライトアドレスAW0を演算する。ここで、オフセット量OFSは、処理ライン数×2で与えられる。本例では、ノズル数「6」なので処理ライン数が「6」となり、その2倍の「0x000C」がオフセット量OFS(=0x000C)となる。
また、第2アドレスコントローラー57では、判定部66がライトアドレスAW0を基にミスアラインであるか否かを判定する。判定部66はライトアドレスAW0の下位mビットが全て「0」であるとミスアラインではないと判定し、下位mビットのいずれかのビットに「1」が存在するとミスアラインであると判定する。例えば図10(b)の1回目読出しデータD2(=「1-1」「2-1」「3-1」「4-1」の画素データ)のときには、ライトアドレスAW0=0x0000でありその下位3ビットが「000」なので、判定部66によりミスアラインではないと判定される。第2アドレスコントローラー57は、ライトアドレスAW0と第2フラグF2とミスアライン判定結果とを出力I/F58へ送る。
出力I/F58のアドレス生成部68は、ライトアドレスAW0の下位3ビットをマスクして、書込アドレスAW1を生成する。このとき、ライトアドレスAW0=0x0000なので、書込アドレスAW1=0x0000が求められる。そして、出力I/F58では、第3フラグ生成部70が、第1フラグF1(0)〜F1(3)(=「0000」)と第2フラグF2(0)〜F2(3)(=「0000」)の論理和演算(OR演算)を行って、第3フラグF3(0)〜F3(3)(=「0000」)を生成する。このとき、ミスアライン判定結果からミスアラインではないので、シフト処理部69によるシフト処理は行われない。
出力I/F58は、メモリーコントローラー34に対して、書込アドレスAW1を指定して、第3フラグF3(0)〜F3(3)付きのデータD2のバーストライトを要求する。この結果、図11に示すように、1回目読出しデータD2(=「1-1」「2-1」「3-1」「4-1」の画素データ)が、第2格納部35cの開始アドレスADstに書き込まれる。このようにミスアラインとならない場合は、SRAM80からの画素の読出し順のままデータD2はバースト転送され、第2格納部35cの書込アドレスAW1に書き込まれる。
2回目以降の読出しデータD2を書き込む際の処理は次のように行われる。第2アドレスコントローラー57は、現在のリードアドレスAR0にオフセット量OFSを加算して、次のライトアドレスAW0を求める。このため、2回目の読出しデータD2を書き込む際は、リードアドレスAR0=ADst+OFS=「0x000C」が求められる。また、判定部66は、ライトアドレスAW0(=「0x000C」)の下位3ビットが「100」(2進数)となり、いずれかのビットに「1」が存在するので、ミスアラインと判定する。ミスアラインの場合は2回に分けてバーストライト処理を行う。
まずミスアラインと判定した場合は、このとき第2格納部35cの次の書込アドレスAW1に書き込むべき画素データ以外の画素データの上書きを防ぐため、第2フラグ生成部67が第2フラグF2(0)〜F2(3)を生成する。この時点では第2フラグF2(0)〜F2(3)は、マスク無し状態(値「0」)で生成される。第2アドレスコントローラー57は、ライトアドレスAW0と第2フラグF2(0)〜F2(3)とミスアライン判定結果とを、出力I/F58へ送る。
以下、図12及び図13に基づいて、ミスアライン処理を説明する。ミスアライン処理では2回に分けてバーストライト処理(書込処理)が行われる。まず図12に基づいてミスアライン処理の1回目の書込み処理を説明する。
出力I/F58は、図12(a)に示すように、出力バッファー56から入力した第1フラグF1(0)〜F1(3)付きの2回目読出しデータD2に、第2アドレスコントローラー57からの第2フラグF2(0)〜F2(3)を付す。今回のライトアドレスAW0は「0x000C」である。アドレス生成部68は、ライトアドレスAW0=0x000Cの下位3ビットをマスクして、書込アドレスAW1=0x0008を生成する。
出力I/F58では、ミスアライン判定結果がミスアラインである場合、シフト処理部69がシフト処理を行う。シフト処理部69は、ライトアドレスAW0の下位mビットをシフト値にして、データD2を構成する4つの画素データをシフトさせるシフト処理を行う。図12(b)に示すように、ライトアドレスAW0の下位3ビットをシフト値にしてシフト処理を行う。ライトアドレスAW0が「0x000C」でその下位3ビットは「100」(=4バイト)であるので、シフト処理部69は、図12(b)に示すように、データD2を構成する4つの画素データを、4バイト(2画素)分だけ図12(b)における右方向(SRAM80からの画素データ読出し順序で後側)へシフトさせる。このとき、右方向へシフトアウトされた画素データ「3-2」「4-2」は、左方向からシフトインされる。シフト処理の結果、画素データ「1-2」「2-2」「3-2」「4-2」が、図12(c)に示すように画素データ「3-2」「4-2」「1-2」「2-2」の順番になる。この画素データのシフト処理に伴って、第3フラグ生成部70により、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)もシフト処理される。第1フラグF1(0)〜F1(3)は、シフト後も全て「0」である。一方、第2フラグF2(0)〜F2(3)は、シフトアウトされた第2フラグF2(2),F2(3)が「1」(マスク)としてシフトインされる(図12(c)参照)。この第2フラグF2のシフトインのときに、「0」(マスク無し)から「1」(マスク有り)に変更する処理は、第3フラグ生成部70が行う。
さらに第3フラグ生成部70は、シフト処理後の第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)との論理和演算(OR演算)を行う。この論理和演算の結果、図12(c)に示すように、第3フラグF3(0)〜F3(3)(=「1100」)が生成される。そして、出力I/F58は、メモリーコントローラー34に対して、書込アドレスAW1(=0x0008)を指定して、第3フラグF3(0)〜F3(3)付きのシフト後のデータD2のバーストライトを要求する。メモリーコントローラー34の書込転送部82は、バーストライト要求を受け付けると、書込アドレスAW1にシフト後のデータD2を書き込むに当たり、マスク処理部82Aにマスク処理を行わせる。マスク処理部82Aは、第3フラグF3が「1」である画素データ「3-2」「4-2」をマスクするとともに、第3フラグF3が「0」である画素データ「1-2」「2-2」をマスクしない。このため、図12(d)に示すように、第2格納部35cの書込アドレスAW1には、画素データ「3-2」「4-2」は上書きされず(図12(d)では「dqm」と記載)、画素データ「1-2」「2-2」が上書きされる。この結果、画素データ「1-2」「2-2」は、画素データ「4-1」に対して2画素(つまり画素「5-1」「6-1」)分空けた正しい位置に書き込まれる。
続いてミスアライン処理の2回目の書込み処理を図13に基づいて説明する。第2アドレスコントローラー57はミスアライン処理1回目のライトアドレスAW0=0x000Cに、バーストサイズB(=「0x0008」)を加えてミスアライン処理の2回目のライトアドレスAW0=0x0014を生成する。アドレス生成部68は、今回のライトアドレスAW0=0x0014の下位3ビット「100」(2進数)をマスクして、書込アドレスAW1=0x0010を生成する。
このミスアライン処理の2回目では、図13(a)に示すように、シフト後の2回目読出しデータD2及びシフト後の第1フラグF1(0)〜F1(3)を用いると共に、第2フラグF2(0)〜F2(3)はミスアライン処理の1回目の第2フラグF2(0)〜F2(3)をビット反転させ、「0011」にする。そして、第3フラグ生成部70は、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)との論理和演算(OR演算)を行う。この論理和演算の結果、図13(b)に示すように、第3フラグF3(0)〜F3(3)(=「0011」)が生成される。そして、出力I/F58は、メモリーコントローラー34に対して、書込アドレスAW1(=0x0010)を指定して、第3フラグF3(0)〜F3(3)付きのデータD2のバーストライトを要求する。メモリーコントローラー34の書込転送部82は、バーストライト要求を受け付けると、書込アドレスAW1にデータD2を書き込むに当たり、マスク処理部82Aにマスク処理を行わせる。マスク処理部82Aは、第3フラグF3が「0」である画素データ「3-2」「4-2」をマスクせず、第3フラグF3が「1」である画素データ「1-2」「2-2」をマスクする。このため、図13(c)に示すように、第2格納部35cの書込アドレスAW1には、画素データ「3-2」「4-2は上書きされ、画素データ「1-2」「2-2」は上書きされない(図13(c)では「dqm」と記載)。
そして、3回目以降の読出しデータD2について、同様の処理を繰り返す。1ライン目〜4ライン目のデータD2の書込み処理を終えると、メインメモリー35の第2格納部35cには、図13(d)に示すように、データD2中の画素データが縦横変換された場合の適切な位置に書き込まれる。
次に残りライン数が4の倍数でない場合、つまり図14に示す例では残りライン数が破線枠で囲む5ライン目〜6ライン目の2ラインである場合の処理について説明する。まずメインメモリー35の第1格納部35bからのデータD1の読出し(バーストリード)処理及びSRAM80からの画像データの読出し処理を説明する。
図15(a)に示す第1格納部35bにおいて着目画素「5-1」「6-1」を含む破線枠で囲まれた各データD1を読み出す。このとき、第1アドレスコントローラー51は、リードアドレスAR0=ADst+offset*4(=0x0050)とAR0=ADst+offset*5(=0x0064)を求める。入力I/F52のアドレス生成部60は、リードアドレスAR0の下位3ビットをマスクして、読出アドレスAR1=0x0050,0x0060を演算する。そして、入力I/F52は、メモリーコントローラー34に対して読出アドレスAR1を指定してバーストリードを要求する。メモリーコントローラー34の読出転送部81は、メインメモリー35の第1格納部35bの指定された読出アドレスAR1からデータD1を順次読出して回転ユニット50にバースト転送する。入力I/F52は、メモリーコントローラー34からバースト転送されたデータD1を入力バッファー53に格納する。
そして、ポインターコントローラー54の第1ポインター生成部61は、SRAM80へのデータD1の書込位置を指すライトポインターWPを生成する。SRAMコントローラー55の書込部63は、ライトポインターWPの指す書込位置にデータD1を書き込む。
ポインターコントローラー54の第2ポインター生成部62は、リードアドレスAR0の下位3ビットをSRAM80のリードポインターRPの初期値として生成する。但し、第1格納部35bにおいて画素データが存在しない箇所では、リードポインターRPの初期値は「0x0」にされる。よって、リードポインターRPの初期値は、RP1=0x0,RP2=0x4,RP3=0x0,RP4=0x0として演算される。そして、SRAMコントローラー55は、リードポインターRPの指す読出位置からバーストサイズB(4画素)分のデータD1を読み出す。
SRAMコントローラー55の第1フラグ生成部65によって、各データD1にはそれぞれを構成する画素毎に第1フラグF1が付される。セルが印刷イメージデータPDの有効ラインに属する画素データであれば第1フラグF1はマスクしない旨の「0」が付され、セルが有効ラインに属さなければ第1フラグF1はマスクする旨の「1」が付される。図15(b)の例では、4つのデータD1は最初の2つのデータD1が全て4個の画素を有するが、下側の2つのデータはセルが画素データの存在しない不定なので、各データD1には上側の行から順番に、それぞれを構成する各画素に、第1フラグF1(0=0、F1(1=0、F1(2=1、F1(3=1が付される。つまり、行アドレス「+0000」のデータD1には各画素に第1フラグF1(0=0が付され、行アドレス「+0010」のデータD1には各画素に第1フラグF1(1=0が付され、行アドレス「+0020」のデータD1には各セルに第1フラグF1(2=1が付され、さらに行アドレス「+0030」のデータD1には各セルに第1フラグF1(3=1が付される。
このように残りライン数が4の倍数にならない5〜6ライン目についても、1〜4ライン目と同様にSRAM80に対するデータD1の書込みとデータD2の読出しを行うが、SRAM80への書込処理は有効ラインのみ実施するため、有効でないラインに対するSRAM80には前処理時のデータが残っているため不定となる。また、有効でないラインの第1フラグF1は「1」(マスク有効)となる。
そして、SRAM80からの1回目の読出しでは、SRAM80から図15(b)に示すリードポインターRPの指す画素データを読み出す。この1回目の読出しでは、図15(c)に示すように、画素データ(セル)「5-1」「6-1」「不定」「不定」が読み出される。このとき、各セルには、第1フラグF1(0)〜F1(3)が「0011」と付される。
各データD1のSRAM80への書込みが終わると、ライトポインターWPがシフトされ、ライトポインターWPの指す次の書込位置にデータD1が書き込まれる。その結果、SRAM80には図16(a)に示す状態にデータD1が書き込まれる。SRAMコントローラー55は、このライトポインターWPの指す書込位置への書込部63によるデータD1の書込処理と並行し、リードポインターRPを進めながら(カウントアップしながら)、リードポインターRPの指す読出位置から画素データを読出す読出部64によるデータD2の読出処理を行う。
データD2の読出処理の結果、図16(b)に示すように、1回目の読出しでセル「5-1」「6-1」「不定」「不定」が読み出され、各セルにそれぞれ第1フラグF1(0)=0,F1(1)=0,F1(2)=1,F1(3)=1が付される。続く2回目の読出しでセル「5-2」「6-2」「不定」「不定」が読み出され、各セルにそれぞれ第1フラグF1(0)=0,F1(1)=0,F1(2)=1,F1(3)=1が付される。さらに3回目の読出しでセル「5-3」「6-3」「不定」「不定」が読み出され、各セルにそれぞれ第1フラグF1(0)=0,F1(1)=0,F1(2)=1,F1(3)=1が付される。各読出しデータD2は読み出された順番に出力バッファー56へ転送される。出力I/F58は、出力バッファー56から第1フラグF1(0)〜F1(3)付きのデータD2を順番に読み込む。また、出力I/F58は、第2アドレスコントローラー57からライトアドレスAW0及び第2フラグF2(0)〜F2(3)を受け付ける。
次に5〜6ライン目の読出しデータD2のメインメモリー35の第2格納部35cへの保存(書込み)について、図17〜図19に基づいて説明する。まず5〜6ライン目の1回目の読出しデータD2の第2格納部35cへの書込み処理を図17に基づいて説明する。ライトアドレスAW0は、AW0=ADst+((現在のライン番号÷4)×8)により演算される。図17(a)に示すように、1回目の読出しデータD2のときは、ライトアドレスAW0=ADst+8=0x0008なので、下位3ビットが「000」(2進数)になり、ミスアラインではないと判定される。このため、1回目読出しデータD2の各セルには、第2フラグF2(0)〜F2(3)が値「0」(マスク無し)で付される。ミスアラインではないのでシフト処理は行われない。第3フラグ生成部70は、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)の論理和演算(OR演算)を行って、第3フラグF3(0)〜F3(3)を求める。そして、データD2の各セルに第3フラグF3(0)=0,F3(1)=0,F3(2)=1,F3(3)=1が付される。
そして、リードアドレスAR0の下位3ビットをマスクした書込アドレスAW1=0x0008を指定してバーストライトが要求される。その結果、メモリーコントローラー34によって、図17(c)に破線枠で示すように、書込アドレスAW1にデータD2が書き込まれる。このとき、第3フラグF3(2)=1,F3(3)=1に対応するセルはマスクされるため、画素データ「1-2」「2-2」は上書きされず残ることになる。
次に第2アドレスコントローラー57は、今回のライトアドレスAW0にオフセット量OFSを加えて、次のライトアドレスAW0を演算する。次のライトアドレスAW0は、AW0=0x0008+OFS(=0x0C)=0x0014と求められる。
図18に示すように、2回目読出しデータD2を書き込むときには、今回のライトアドレスAW0=0x0014なので、下位3ビットが「1 00」(2進数)になり、ミスアラインであると判定される。ミスアライン処理の場合は2回に分けてバーストライト処理(書込処理)を行う。
まずミスアライン処理の1回目では、今回の書込アドレスAW1に書き込むべき画素データ以外の画素データの上書きを防ぐため、第2フラグ生成部67が第2フラグF2(0)〜F2(3)を生成する。この時点では第2フラグF2(0)〜F2(3)は、マスク無し状態(値「0」)で生成される。ライトアドレスAW0と第2フラグF2(0)〜F2(3)とが、第2アドレスコントローラー57から出力I/F58へ送られる。
出力I/F58は、図18(a)に示すように、出力バッファー56から入力した第1フラグF1(0)〜F1(3)付きの2回目読出しデータD2に、第2アドレスコントローラー57からの第2フラグF2(0)〜F2(3)を付す。今回のライトアドレスAW0は「0x0014」である。アドレス生成部68は、ライトアドレスAW0=0x0014の下位3ビットをマスクして、書込アドレスAW1=0x0010を生成する。
出力I/F58では、ミスアラインであると判定された場合、シフト処理部69がシフト処理を行う。すなわち、シフト処理部69は、図18(b)に示すように、ライトアドレスAW0の下位3ビットをシフト値にして、データD2を構成する4つの画素データをシフトさせるシフト処理を行う。ライトアドレスAW0が「0x0014」であるので、下位3ビットは「100」(=4バイト)である。よって、シフト処理部69が、図18(b)に示すように、データD2を構成する4つの画素データを、4バイト(2画素)分だけシフトさせる。このとき、同図の右方向へシフトアウトされたセル「不定」「不定」は、左方向からシフトインされる。シフト処理の結果、画素データ「5-2」「6-2」「不定」「不定」が、図18(b)に示すように画素データ「不定」「不定」「5-2」「6-2」の順番になる。この画素データのシフト処理に伴い、第3フラグ生成部70により、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)もシフト処理される。第1フラグF1(0)〜F1(3)は、シフト後にはF1(0)=1,F1(1)=1,F1(2)=0,F1(3)=0になる。一方、第2フラグF2(0)〜F2(3)は、シフトインされた第2フラグF2(2),F2(3)が「1」(マスク有効)になる(図18(b)参照)。
さらに第3フラグ生成部70は、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)との論理和演算(OR演算)を行う。この論理和演算の結果、第3フラグF3(0)〜F3(3)(=「1100」)が生成される。そして、出力I/F58は、メモリーコントローラー34に対して、書込アドレスAW1(=0x0010)を指定して、第3フラグF3(0)〜F3(3)付きのシフト後のデータD2のバーストライトを要求する。メモリーコントローラー34の書込転送部82は、バーストライト要求を受け付けると、図18(d)に示すように、書込アドレスAW1(=0x0010)にシフト後のデータD2を書き込む。このとき、マスク処理部82Aが、第3フラグF3(0)=1,F3(1)=1であるセル「不定」「不定」をマスクするため、画素データ「3-2」「4-2」は上書きされず残る。
続いてミスアライン処理の2回目の書込み処理を図19に基づいて説明する。第2アドレスコントローラー57はミスアライン処理の1回目のライトアドレスAW0=0x0014に、バーストサイズB(=「0x0008」)を加えてミスアライン処理の2回目のライトアドレスAW0=0x001Cを生成する。アドレス生成部68は、今回のライトアドレスAW0=0x001Cの下位3ビット「100」(2進数)をマスクして、書込アドレスAW1=0x0018を生成する。
このミスアライン処理の2回目では、図19(a)に示すように、2回目読出しデータのシフト後のデータD2及び1回目と同じ第1フラグF1(0)〜F1(3)を用いると共に、第2フラグF2(0)〜F2(3)はミスアライン処理の1回目の第2フラグF2(0)〜F2(3)をビット反転させ、「0011」にする。そして、第3フラグ生成部70は、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)との論理和演算(OR演算)を行う。この論理和演算の結果、図19(b)に示すように、第3フラグF3(0)=1,F3(1)=1,F3(2)=1,F3(3)=1が生成される。そして、出力I/F58は、メモリーコントローラー34に対して、書込アドレスAW1(=0x0018)を指定して、第3フラグF3(0)〜F3(3)付きのデータD2のバーストライトを要求する。メモリーコントローラー34の書込転送部82は、バーストライト要求を受け付けると、書込アドレスAW1にデータD2を書き込むに当たり、マスク処理部82Aにマスク書影を行わせる。マスク処理部82Aは、第3フラグF3が「1」であるセル「不定」「不定」「5-2」「6-2」をマスクする。このため、図19(c)に破線枠で示す画素データ「1-3」「2-3」「3-3」「4-3」は上書きされず残る。
そして、3回目以降の読出しデータD2について、同様の処理を繰り返すことにより、バースト転送でアライン処理を行いながら回転処理が進められる。5〜6ライン目のデータD2の書込み処理によって、メインメモリー35の第2格納部35cには、図19(d)に網掛けで示す画素データが書き込まれる。こうして、第1格納部35bに格納されていた印刷イメージデータPDが縦横変換されたヘッドイメージデータHDが第2格納部35cに格納される。
以上詳述したように、本実施形態によれば、以下に示す効果を得ることができる。
(1)SRAM80に書き込んだデータD1からリードポインターRPの指す画素データを選択することによりデータD2を読み出す構成とした。この結果、行余りの画素のある印刷イメージデータPDでも、ダミーデータを追加することなく、バースト転送を効率よく行うことができる。このため、印刷イメージデータPDの格納に必要な第1格納部35bの使用容量、及びヘッドイメージデータHDの格納に必要な第2格納部35cの使用容量をそれぞれ低減できる。従って、メインメモリー35の使用容量を節約でき、他のデータの格納に使用可能な格納領域を増やすことができる。このとき、バースト転送時のメモリーアクセスが頻繁になることもないので、縦横変換処理の処理速度もさほど落とさずに済む。
(2)バーストサイズB(バイト)を2の累乗に表したときの指数をm(但しmは自然数)とした場合、着目画素のリードアドレスAR0の下位mビット(本例では下位3ビット)をマスクすることにより読出アドレスAR1を生成した。よって、適切な読出アドレスAR1を指定して第1格納部35bから回転ユニット50へ適切なデータD1をバースト転送することができる。
(3)リードアドレスAR0の下位mビット(本例では下位3ビット)をリードポインターRPの初期値として設定するので、SRAM80に格納されたデータD1から適切な画素データを選択し、適切なデータD2を読み出すことができる。
(4)ミスアライン処理であるか否かを判定部66により判定するので、ミスアラインでない場合と、ミスアラインである場合とを分けて、第2格納部35cへの適切なデータD2の書込みを行うことができる。
(5)ライトアドレスAW0の下位mビット(本例では下位3ビット)をマスクして書込アドレスAW1を求めるので、データD2を第2格納部35cの適切な書込位置に書き込むことができる。
(6)第1フラグF1(0)〜F1(3)を生成し、データD2を構成するセルが印刷イメージデータPDの有効ラインに属する画素であれば「0」(マスク無効)を付し、有効ラインではないセルであって不定であれば「1」(マスク有効)を付す。よって、ミスアラインでないデータD2をそのまま書き込むバーストライト要求を行えば、第2格納部35cの適切な書込位置にデータD2を書き込むことができる、
(7)ミスアライン処理のときには、2回に分けてデータD2の書込み処理を行うことにより、不適切なセルにより必要な画素データが上書きされることを回避できる。
(8)判定部66がミスアラインであると判定した際のミスアライン処理では、ライトアドレスAW0の下位mビット(下位3ビット)をシフト値としてデータD2を構成する画素(セル)をシフトさせるので、画素が適切な位置に存在するデータD2に変更することができる。例えば他の画素の書込位置を確保するため空きを設ける必要がある場合、シフト処理でデータD2内の画素をシフトさせてその配列順を変更することにより、データD2を第2格納部35cに書き込む際に他の画素の書込位置を空けて画素を書き込むことができる。
(9)ミスアライン処理のときには、セルのシフト処理に伴って、第3フラグ生成部70が、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)をシフトさせ、シフトインさせた第2フラグF2については「1」に変更した。よって、第3フラグ生成部70が、第1フラグF1(0)〜F1(3)と第2フラグF2(0)〜F2(3)との論理和演算(OR演算)を行うことにより、適切な第3フラグF3(0)〜F3(3)を生成することができる。
(10)第3フラグF3(0)〜F3(3)を付けてデータD2のバーストライトを要求するので、第2格納部35cに先に書き込んだ必要な画素データへの不要なセルによる上書きを回避することができる。
(11)ミスアライン処理の2回目では、1回目のシフト後のデータD2を用い、第1フラグF1を1回目と同じ値とし、第2フラグF2を1回目の値のビット反転としたうえで、第1フラグF1と第2フラグF2との論理和演算を行って第3フラグF3を生成する。よって、2回目のバーストライト処理で、1回目の書込位置でマスクした画素を、2回目の書込位置では書き込むことができる。
(12)搬送モーター28の駆動により搬送される用紙に印刷ヘッド29がインク滴を噴射して画像を形成するプリンター部14を有する複合機11に縦横変換装置45を設けたので、複合機11においてバースト転送速度の低減を抑えつつ、メインメモリー35の格納領域を有効活用できる。
なお、上記実施形態は以下の形態に変更することもできる。
・転送単位(処理単位)は、4×4画素に限定されず、例えば8×8画素、16×16画素、32×32画素、64×64画素の単位でもよい。また、転送単位は、A×A画素の正方ブロックに限定されず、A×D画素(A≠D)の矩形ブロックでもよい。すなわち、縦横変換処理(回転処理)できる限りにおいて適宜な転送単位を設定できる。
・第1及び第2の転送手段の転送方式は、バースト転送方式に限定されない。ダイレクトメモリーアクセス転送(DMA転送)で用いられる他の転送方式も採用できる。例えばサイクルスチール転送方式、デマンド転送方式などを採用してもよい。また、第1の転送手段と第2の転送手段で異なる転送方式を採用してもよい。
・アドレス生成方法は、適宜変更してもよい。要するに、目的のアドレスを生成できる方法であれば、他の演算式を用いた演算によりアドレスを生成してもよい。
・印刷イメージデータPDとヘッドイメージデータHDは、同一のメインメモリー35(例えばDRAM)に格納することに限定されず、異なるDRAMに格納する構成としてもよい。
・回転ユニット50は、ハードウェアの構成に限定されず、その一部にソフトウェアの部分を含みハードウェアとソフトウェアとの協働により構成されてもよい。さらには処理速度が多少低下するが、ソフトウェアにより構成されもよい。
・前記実施形態では、記録装置の一例として、インクジェット式のプリンター部14を備えた複合機が採用されているが、インク以外の他の流体を噴射したり吐出したりする流体噴射装置を採用してもよい。また、微小量の液滴を吐出させる液体噴射ヘッド等を備える各種の液体噴射装置に流用可能である。この場合、液滴とは、上記液体噴射装置から吐出される液体の状態を言い、粒状、涙状、糸状に尾を引くものも含むものとする。また、ここでいう液体とは、液体噴射装置が噴射させることができるような材料であればよい。例えば、物質が液相であるときの状態のものであればよく、粘性の高い又は低い液状体、ゾル、ゲル水、その他の無機溶剤、有機溶剤、溶液、液状樹脂、液状金属(金属融液)のような流状体、また物質の一状態としての液体のみならず、顔料や金属粒子などの固形物からなる機能材料の粒子が溶媒に溶解、分散または混合されたものなどを含む。また、液体の代表的な例としては上記実施形態で説明したようなインクや液晶等が挙げられる。ここで、インクとは一般的な水性インクおよび油性インク並びにジェルインク、ホットメルトインク等の各種液体組成物を包含するものとする。液体噴射装置の具体例としては、例えば液晶ディスプレイ、EL(エレクトロルミネッセンス)ディスプレイ、面発光ディスプレイ、カラーフィルタの製造などに用いられる電極材や色材などの材料を分散または溶解のかたちで含む液体を噴射する液体噴射装置を挙げることができる。また、バイオチップ製造に用いられる生体有機物を噴射する液体噴射装置、精密ピペットとして用いられ試料となる液体を噴射する液体噴射装置、捺染装置やマイクロディスペンサ等であってもよい。さらに、時計やカメラ等の精密機械にピンポイントで潤滑油を噴射する液体噴射装置、光通信素子等に用いられる微小半球レンズ(光学レンズ)などを形成するために紫外線硬化樹脂等の透明樹脂液を基板上に噴射する液体噴射装置、基板などをエッチングするために酸又はアルカリ等のエッチング液を噴射する液体噴射装置を採用してもよい。そして、これらのうちいずれか一種の液体噴射装置に本発明を適用することができる。また、流体は、トナーなどの粉粒体でもよい。なお、本明細書でいう流体には、気体のみからなるものは含まないものとする。
・記録装置の一例として複合機を採用したが、記録装置はスキャナー機能を備えないプリンターでもよい。また、記録装置は、インクジェット記録方式に限定されずワイヤインパクト式記録装置、熱転写式記録装置、電子写真式記録装置等であってもよい。また、これらの記録装置は、モノクロ記録装置を採用してもよい。
・画像データ処理装置はプリンターへの適用に限定されない。画像データの縦横変換処理(回転処理)が行われる情報処理装置に広く適用できる。画像データの縦横変換処理(回転処理)が行われる構成であれば、例えばスキャナー装置、デジタルカメラ、プロジェクター、デジタルフォトフレーム等に、画像データ処理装置を採用してもよい。