(57)【要約】【課題】インクヘッドの主走査方向とノズルの配置方向が異なる印刷装置において、ハーフトーン処理によって生成された印刷データを、少ないバッファ容量で記憶する。【解決手段】印刷装置１００のデータ回転ユニット５００は、デコード処理の結果生成された印刷データをライン毎に読み込むと、所定のアドレス計算を行うことで、これを、８×８画素の正方ブロック毎に、イメージバッファＩＢ内に縦方向に蓄積する。そして、１列分の正方ブロックの書き込みが完了する度に、各正方ブロックについて回転処理を行う。回転処理を行った印刷データについては、元の正方ブロックの位置に書き戻す。【選択図】図２９
2008221769.tif 000002
【特許請求の範囲】
【請求項１】
インクドットを形成するノズルが第１の方向に複数備えられたインクヘッドを、該第１の方向と異なる第２の方向に移動させることによって複数のラインを同時に印刷する印刷装置であって、
前記インクヘッドが有するノズルの数に応じた幅と、前記ラインの長さに応じた高さとに対応する記憶領域を有するバッファと、
前記インクドットを形成するか否かを表す情報が記録された印刷データを、前記ノズルの数よりも少ない所定のライン数ごとに取得する取得部と、
前記取得した印刷データを前記所定のライン数に相当する幅で分割して複数の正方ブロックを生成するブロック生成部と、
前記各正方ブロックを、前記バッファに対して前記高さの方向に書き込む書込部と、
前記各正方ブロックに含まれる前記印刷データの記録方向を、前記ラインの方向からこれと垂直の方向に回転させて元の正方ブロックの位置に書き戻す回転処理を行う回転処理部と、
前記バッファ内の前記各正方ブロックについて前記回転処理が行われた後に、前記バッファから前記幅の方向に前記印刷データを順次読み出して、前記インクヘッドに該印刷データを供給する印刷データ供給部と
を備える印刷装置。
【請求項２】
請求項１に記載の印刷装置であって、
前記取得部は、前記印刷データを所定のバースト長で取得するものであり、
前記所定のライン数は、前記バースト長に応じて設定されている
印刷装置。
【請求項３】
請求項１または請求項２に記載の印刷装置であって、
前記取得部は、前記所定のライン数に達するまで、前記印刷データを１ライン単位で取得するものであり、
前記ブロック生成部は、前記取得部によって前記１ライン単位で取得された印刷データを、前記所定のライン数に相当する幅で分割し、
前記書込部は、前記分割された１ライン分の印刷データを、前記ノズルの数に応じた幅だけオフセットさせながら前記バッファに書き込む
印刷装置。
【請求項４】
請求項１ないし請求項３のいずれかに記載の印刷装置であって、
前記回転処理部は、前記各正方ブロックが、前記バッファに１列分書き込まれるたびに、前記回転処理を行う
印刷装置。
【請求項５】
請求項４に記載の印刷装置であって、
前記取得部は、前記回転処理部によって前記回転処理が実行されているのと同時に、次の印刷データを取得し、
前記書込部は、前記次の印刷データに基づいて生成された正方ブロックを、前記バッファ内の、前記回転処理の対象となっている列の隣の列に書き込む
印刷装置。
【請求項６】
請求項１ないし請求項５のいずれかに記載の印刷装置であって、
前記インクヘッドには、前記ノズルが所定のピッチだけ間隔を空けて配置されており、
前記取得部は、前記印刷データを、前記ピッチに相当する間隔を空けつつ前記所定のライン数ごとに取得する
印刷装置。
【請求項７】
インクドットを形成するノズルが第１の方向に複数備えられたインクヘッドを、該第１の方向と異なる第２の方向に移動させることによって複数のラインを同時に印刷する印刷制御方法であって、
前記インクヘッドが有するノズルの数に応じた幅と、前記ラインの長さに応じた高さとに対応する記憶領域を有するバッファを用意し、
前記インクドットを形成するか否かを表す情報が記録された印刷データを、前記ノズルの数よりも少ない所定のライン数ごとに取得し、
前記取得した印刷データを前記所定のライン数に相当する幅で分割して複数の正方ブロックを生成し、
前記各正方ブロックを、前記バッファに対して前記高さの方向に書き込み、
前記各正方ブロックに含まれる前記印刷データの記録方向を、前記ラインの方向からこれと垂直の方向に回転させて元の正方ブロックの位置に書き戻す回転処理を行い、
前記バッファ内の前記各正方ブロックについて前記回転処理が行われた後に、前記バッファから前記幅の方向に前記印刷データを順次読み出して、前記インクヘッドに該印刷データを供給する
印刷制御方法。
【請求項８】
インクドットを形成するノズルが第１の方向に複数備えられたインクヘッドを、該第１の方向と異なる第２の方向に移動させることによって複数のラインを同時に印刷する印刷制御を行うためのコンピュータプログラムであって、
前記インクヘッドが有するノズルの数に応じた幅と、前記ラインの長さに応じた高さとに対応する記憶領域を有するバッファを用意する機能と、
前記インクドットを形成するか否かを表す情報が記録された印刷データを、前記ノズルの数よりも少ない所定のライン数ごとに取得する機能と、
前記取得した印刷データを前記所定のライン数に相当する幅で分割して複数の正方ブロックを生成する機能と、
前記各正方ブロックを、前記バッファに対して前記高さの方向に書き込む機能と、
前記各正方ブロックに含まれる前記印刷データの記録方向を、前記ラインの方向からこれと垂直の方向に回転させて元の正方ブロックの位置に書き戻す回転処理を行う機能と、
前記バッファ内の前記各正方ブロックについて前記回転処理が行われた後に、前記バッファから前記幅の方向に前記印刷データを順次読み出して、前記インクヘッドに該印刷データを供給する機能と
をコンピュータに実現させるコンピュータプログラム。
【請求項９】
請求項８に記録されたコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷媒体にドットを形成するための印刷データを生成する技術に関する。
【背景技術】
【０００２】
印刷装置の印刷解像度は年々高くなっており、デジタルカメラで撮影した画像の解像度を上回ることが少なくない。こうした場合には、印刷しようとする画像データの１画素が、印刷上の単位であるドットの複数の集合に対応することになる。例えば、印刷しようとする画像の解像度が３６０ｄｐｉ×３６０ｄｐｉで、印刷解像度が１４４０ｄｐｉ×７２０ｄｐｉの場合には、画像データの１画素は、４×２個のドットの集合（以下、こうしたドットの集合を「ブロック」と呼ぶ）に対応することになる。
【０００３】
このように、入力解像度よりも出力解像度が高い場合には、画像データの１画素の階調値を、ブロック内のドットの配置によりコード化しようとする手法が考えられる。このコード化の最も単純な手法としては、ブロック内のドットの集合に対して面積階調の考え方を適用する手法がある。この手法は、全てのピクセルにドットが形成されていない状態から全てのピクセルにドットが形成されている状態まで、多段階（４×２のブロックの場合は、９段階）のコード値で階調を表現する手法である（濃度パターン法ともいう）。これに対して、出願人は、下記特許文献１〜３に記載されているように、組織的ディザ法の考え方を４×２個のドットの集合に対して局所的に適用し、組織的ディザ法による画質を維持したまま高速な印刷処理を実現する手法を提案している。かかる手法は、極めて高速なハーフトーン処理を実現し、かつ従来の組織的ディザ法と比べても遜色ない画質を実現する画期的なものである。
【０００４】
【特許文献１】特開２００７−２８２６２号公報
【特許文献２】特開２００６−２１７５３７号公報
【特許文献３】特開２００６−２３１６９９号公報
【０００５】
上記特許文献に記載された印刷装置のインクヘッドには、副走査方向に複数のノズルが備えられている。そのため、インクヘッドを１回、主走査方向に移動させることにより、同時に複数のラインを印刷することができる。このような印刷を実現するため、従来の印刷装置は、前述したハーフトーン処理によって生成された印刷データを２種類のバッファに記憶していた。一つは、ハーフトーン処理によって生成された印刷データをライン毎に記憶するバッファである。もう一つは、このバッファに記憶された印刷データを、インクヘッドのノズルの配置に対応させて並べ直し、その並べ直した後の印刷データを記憶するバッファである。前者のバッファと後者のバッファとでは、記憶されているデータの内容自体には実質的な差はなく、データの並び順が異なるだけである。そのため、このような印刷装置に対しては、印刷データの記憶効率の改善が望まれていた。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述した問題を踏まえ、本発明が解決しようとする課題は、インクヘッドの主走査方向とノズルの配置方向が異なる印刷装置において、ハーフトーン処理によって生成された印刷データを、少ないバッファ容量で記憶することにある。
【課題を解決するための手段】
【０００７】
上記課題を踏まえ、本発明の一態様である印刷装置を次のように構成した。すなわち、
インクドットを形成するノズルが第１の方向に複数備えられたインクヘッドを、該第１の方向と異なる第２の方向に移動させることによって複数のラインを同時に印刷する印刷装置であって、
前記インクヘッドが有するノズルの数に応じた幅と、前記ラインの長さに応じた高さとに対応する記憶領域を有するバッファと、
前記インクドットを形成するか否かを表す情報が記録された印刷データを、前記ノズルの数よりも少ない所定のライン数ごとに取得する取得部と、
前記取得した印刷データを前記所定のライン数に相当する幅で分割して複数の正方ブロックを生成するブロック生成部と、
前記各正方ブロックを、前記バッファに対して前記高さの方向に書き込む書込部と、
前記各正方ブロックに含まれる前記印刷データの記録方向を、前記ラインの方向からこれと垂直の方向に回転させて元の正方ブロックの位置に書き戻す回転処理を行う回転処理部と、
前記バッファ内の前記各正方ブロックについて前記回転処理が行われた後に、前記バッファから前記幅の方向に前記印刷データを順次読み出して、前記インクヘッドに該印刷データを供給する印刷データ供給部とを備えることを要旨とする。
【０００８】
本発明の印刷装置は、所定のライン数毎に読み込んだ印刷データを、正方ブロックに分割し、これをバッファに列方向に書き込む。そして、この正方ブロック単位で印刷データの記録方向を回転させ、これを、バッファ内の元の正方ブロックの位置に書き戻す。このような構成であれば、同一のバッファ内で、印刷データの蓄積と、その回転処理とを行うことができる。この結果、インクヘッドの主走査方向とノズルの配置方向が異なる印刷装置であっても、少ないバッファ容量で印刷データを記憶することが可能になる。
【０００９】
上記構成の印刷装置において、前記取得部は、前記印刷データを所定のバースト長で取得するものであり、前記所定のライン数は、前記バースト長に応じて設定されているものとしてもよい。
【００１０】
このような構成であれば、データ転送のバースト長に応じて正方ブロックのサイズが決まるので、バッファへの印刷データの記録、および回転処理を効率的に行うことが可能になる。
【００１１】
上記構成の印刷装置において、前記取得部は、前記所定のライン数に達するまで、前記印刷データを１ライン単位で取得するものであり、前記ブロック生成部は、前記取得部によって前記１ライン単位で取得された印刷データを、前記所定のライン数に相当する幅で分割し、前記書込部は、前記分割された１ライン分の印刷データを、前記ノズルの数に応じた幅だけオフセットさせながら前記バッファに書き込むものとしてもよい。
【００１２】
このような構成であれば、印刷データを１ライン毎に取得しながら、徐々に、バッファ内に正方ブロックを形成することができる。
【００１３】
上記構成の印刷装置において、前記回転処理部は、前記各正方ブロックが、前記バッファに１列分書き込まれるたびに、前記回転処理を行うものとしてもよい。
【００１４】
このような構成であれば、所定のライン数の印刷データについての正方ブロックの生成がすべて終了した段階で、回転処理を行うことができる。そのため、効率的に回転処理を行うことが可能になる。
【００１５】
上記構成の印刷装置において、前記取得部は、前記回転処理部によって前記回転処理が実行されているのと同時に、次の印刷データを取得し、前記書込部は、前記次の印刷データに基づいて生成された正方ブロックを、前記バッファ内の、前記回転処理の対象となっている列の隣の列に書き込むものとしてもよい。
【００１６】
このような構成であれば、１列分の回転処理と、次の列の正方ブロックの生成・記録とを同時に行うことができる。この結果、印刷データを効率的に記憶することが可能になる。
【００１７】
上記構成の印刷装置において、前記インクヘッドには、前記ノズルが所定のピッチだけ間隔を空けて配置されており、前記取得部は、前記印刷データを、前記ピッチに相当する間隔を空けつつ前記所定のライン数ごとに取得するものとしてもよい。
【００１８】
このような構成であれば、所定のピッチだけ間隔をずらしつつ印刷を行う、いわゆる、インタレース印刷時においても、少ないバッファ容量で印刷データの回転を行うことができる。
【００１９】
なお、本発明は、上述した印刷装置としての構成のほか、印刷制御方法や、コンピュータプログラムとしても構成することができる。このコンピュータプログラムは、コンピュータが読取可能な記録媒体に記録されていてもよい。記録媒体としては、例えば、フレキシブルディスクやＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、光磁気ディスク、メモリカード、ハードディスク等の種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００２０】
以下、上述した本発明の作用・効果を一層明らかにするため、本発明の実施の形態を実施例に基づき次の順序で説明する。
（Ａ）印刷装置の構成：
（Ｂ）印刷処理：
（Ｃ）初期化処理：
（Ｄ）ハーフトーン処理：
（Ｄ−１）エンコード処理：
（Ｄ−２）デコード処理：
（Ｅ）印刷データ回転処理： 
（Ｆ）効果：
【００２１】
（Ａ）印刷装置の構成：
図１は、本発明の実施例としての印刷装置１００を示す説明図である。印刷装置１００は、複合機タイプの印刷装置であり、光学的に画像を読み込むスキャナ１１０や、画像データの記録されたメモリカードＭＣを挿入するためのメモリカードスロット１２０、デジタルカメラ等の機器を接続するＵＳＢインタフェース１３０を備えている。印刷装置１００は、スキャナ１１０によって取り込んだ画像や、メモリカードＭＣから読み込んだ画像、ＵＳＢインタフェース１３０を介してデジタルカメラから読み込んだ画像を印刷用紙Ｐに印刷することができる。また、印刷装置１００は、印刷装置ケーブル等によって接続された図示していないパーソナルコンピュータから入力した画像の印刷も行うことができる。
【００２２】
印刷装置１００は、印刷対象の画像の選択や、印刷用紙の種類、用紙サイズの設定など、印刷に関する種々の設定操作をユーザから受け付けるための操作パネル１４０を備えている。操作パネル１４０の中央部には、液晶モニタ１４５が備えられている。印刷装置１００は、液晶モニタ１４５に、メモリカードＭＣ等から入力した画像の一覧や種々のグラフィカルインタフェース（ＧＵＩ）を表示する。
【００２３】
図２は、印刷装置１００の内部構成を示す説明図である。図示するように、印刷装置１００は、印刷用紙Ｐに印刷を行う機構として、インクカートリッジ２１２を搭載したキャリッジ２１０や、キャリッジ２１０を主走査方向に移動させるキャリッジモータ２２０、印刷用紙Ｐを副走査方向に搬送する紙送りモータ２３０を備えている。
【００２４】
キャリッジ２１０には、シアン（Ｃ）、マゼンタ（Ｍ）、イエロ（Ｙ）、ブラック（Ｋ）、の各インクが収容されたインクカートリッジ２１２が搭載されている。キャリッジ２１０は、これらの色のインクを印刷用紙Ｐに吐出するノズルが形成されたインクヘッド２１１を備えている。インクカートリッジ２１２からインクヘッド２１１に供給されたインクは各ノズル内のピエゾ素子を駆動することで印刷用紙Ｐに吐出される。なお、本実施例では、インクカートリッジ２１２に４種類のインクが収容されているものとしたが、ライトシアンやライトマゼンタ、クリアインク等のインクが収容されていてもよい。
【００２５】
インクヘッド２１１には、インクの色毎にノズル列が副走査方向に配列されている。１組のノズル列には、８０個のノズルが一定のピッチ（例えば、１２０分の１インチ＝０．２１ｍｍ）で配列されている。つまり、キャリッジが１回、主走査されると最大８０本のラスタラインが一定のピッチ間隔を空けて同時に印刷用紙Ｐ上に形成される。このピッチ間隔は、印刷用紙Ｐ上に形成される隣接したラスタ間のピッチの整数倍である。ここで、ノズル列を構成するノズルの数をａ［個］（ａは正の整数）、およびノズル間のドットピッチをｋ［個］（ｋはａと互いに素の関係にある整数）、ノズル密度をＤ［個／インチ］とした場合に、１回の主走査が終わる度に、ａ／（Ｄ・ｋ）相当の一定の距離だけ副走査方向へ印刷用紙Ｐを搬送すると、副走査方向に隣接するラスタラインが、異なるノズルによって形成されることになる。そのため、個々のノズルの特性やピッチにばらつきが多少ある場合でも、このようなばらつきに起因するバンディングの発生を抑えることができる。このような印刷方法をインタレース印刷という。
【００２６】
本実施例の印刷装置１００は、制御ユニット１５０によって各ノズル内のピエゾ素子に印加する電圧波形を制御することにより、印刷用紙Ｐに４種類のサイズのドットを形成することができる。以下では、４種類のサイズのドットを、ドットの形成されない場合も含め、サイズの小さい順に、「ドット無し」、「Ｓドット」、「Ｍドット」、「Ｌドット」という。各サイズのドットは、１ドット当たり、それぞれ、１．５ｐｌ（ピコリットル）、３ｐｌ、７ｐｌのインクによって形成される。なお、本実施例では、４種類のドットを形成可能であるものとしたが、２種類や３種類、あるいは５種類以上のドットを形成可能としてもよい。
【００２７】
キャリッジ２１０は、プラテン２７０の軸方向と並行に設置された摺動軸２８０に移動自在に保持されている。キャリッジモータ２２０は、制御ユニット１５０からの指令に応じて駆動ベルト２６０を回転させることで、プラテン２７０の軸方向と平行に、すなわち、主走査方向にキャリッジ２１０を往復動させる。紙送りモータ２３０は、制御ユニット１５０からの指令に応じてプラテン２７０を回転させることで、プラテン２７０の軸方向と垂直に印刷用紙Ｐを搬送する。
【００２８】
印刷装置１００は、上述したインクヘッド２１１やキャリッジモータ２２０、紙送りモータ２３０の動作を制御するための制御ユニット１５０を備えている。制御ユニット１５０には、図１に示したスキャナ１１０やメモリカードスロット１２０、ＵＳＢインタフェース１３０、操作パネル１４０、液晶モニタ１４５が接続されている。
【００２９】
制御ユニット１５０は、ＣＰＵ１５１とＳＤＲＡＭ１５２とＲＯＭ１５３と画像処理ユニット１５５とを備えている。本実施例では、ＳＤＲＡＭ１５２が一度に入出力できるデータ数の単位（バースト長）は、８ワード（＝１６バイト）であるものとする。
【００３０】
ＲＯＭ１５３には、印刷装置１００の動作を全般的に制御するための制御プログラムが記憶されている。ＣＰＵ１５１は印刷装置１００の電源投入時に、この制御プログラムをＳＤＲＡＭ１５２にロードして実行する。ＣＰＵ１５１は、この制御プログラムの実行により、後述する印刷処理や初期化処理等の様々な処理を行う。
【００３１】
ＲＯＭ１５３には、制御プログラムの他、後述する初期化処理時に使用されるディザマトリックスデータＤＭやドット発生量テーブルＤＧＴが記憶されている。ＳＤＲＡＭ１５２には、この初期化処理によって生成される種々のテーブルが記憶される。
【００３２】
画像処理ユニット１５５は、メモリカードＭＣ等から入力した画像データを印刷に適したデータに変換するための回路である。画像処理ユニット１５５は、色変換ユニット３００と、ハーフトーン処理ユニット４００と、データ回転ユニット５００とを備えている。色変換ユニット３００は、ＲＧＢ形式の画像データ（以下、「ＲＧＢ画像」という）をＣＭＹＫ形式の画像データ（以下、「ＣＭＹ画像」という）に変換する回路である。ハーフトーン処理ユニット４００は、ＣＭＹ画像を、ドットの粗密によって印刷画像を表す印刷データに変換する回路である。データ回転ユニット５００は、印刷データ内の各データの並びを、インクヘッド２１１に備えられたノズルの並びに沿って並べ替える回路である。
【００３３】
ヘッドコントロールユニット１５６は、画像処理ユニット１５５によって生成された印刷データに基づき、印刷機構（インクヘッド２１１、キャリッジモータ２２０、紙送りモータ２３０）を制御して印刷用紙Ｐに印刷を行う回路である。印刷データには、各サイズのドットの大きさが、それぞれ、「００（ドット無し）」、「０１（Ｓドット）」、「１０（Ｍドット）」、「１１（Ｌドット）」という２ビットのデータ（以下、「ドットサイズ値」という）によって記録されている。ヘッドコントロールユニット１５６は、このドットサイズ値に応じて、インクヘッド２１１内のピエゾ素子に印加する電圧波形を調整することで、サイズの異なるドットの打ち分けを行う。
【００３４】
図３は、画像処理ユニット１５５の詳細な構成を示す説明図である。色変換ユニット３００は、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されている画像データの色を、キャリッジ２１０に備えられたインクの各色についての階調値の組み合わせによって表現された色に変換する回路である。前述したように、印刷装置１００は、Ｃ，Ｍ，Ｙ，Ｋのインクを用いて画像を印刷する。そこで、色変換ユニット３００は、ＲＧＢ各色によって表現された画像データを、これらの階調値によって表現された画像データに変換する。
【００３５】
色変換ユニット３００は、ＳＤＲＡＭ１５２に記憶された色変換テーブルＬＵＴと呼ばれるテーブルを参照することで前述した色変換を行う。この色変換テーブルＬＵＴには、ＲＧＢの階調値とＣＭＹＫの階調値とが予め対応付けて記憶されている。色変換ユニット３００は、この色変換テーブルＬＵＴを参照することにより、ＲＧＢ画像を、迅速にＣＭＹ画像に変換することができる。色変換後のＣＭＹ画像は、各色、２５６段階（０〜２５５）の階調値を有する。
【００３６】
ハーフトーン処理ユニット４００は、色変換ユニット３００によって生成されたＣＭＹ画像を、各サイズのドットの配置を表す印刷データに変換する回路である。印刷装置１００は、吐出するインク滴のサイズを最大４段階に調整することができるにすぎず、各色２５６階調のＣＭＹＫ形式のデータをそのまま用いることはできない。そのため、印刷装置１００は、ハーフトーン処理ユニット４００によって、ＣＭＹＫ形式の階調値を、単位面積あたりのドットの粗密を表す印刷データに変換することで中間調の色を表現するのである。
【００３７】
図４は、印刷データの例を示す説明図である。この図では、ＣＭＹＫ形式の画像データの最も左上の画素（１，１）の色（例えばシアン）の階調値が「５２」の場合に、これを印刷データに変換した例を図の左下に示した。このように、本実施例では、１つの画素の階調値が入力されると、４×２ドットのドット群の中で、ＳドットやＭドット、Ｌドットなどを配置してその階調値が表す色を印刷用紙上に表現する。本実施例では、この４×２ドットのドット群のことを、「ブロック」と呼ぶことがある。ただし、この「ブロック」は、後述する印刷データ回転処理で説明する「正方ブロック」とは全く異なるものである。
【００３８】
ここで、印刷データの生成方法を簡単に説明する。印刷データ内の各ドットの配置は、大域的なディザマトリックスデータＤＭ（図７（ａ）参照）からハーフトーン処理対象の画素の位置に応じて切り出された局所的な閾値群（図７（ｂ）参照）と、その画素の階調値ＴＤに対応する各サイズのドットの発生量（図９参照）との関係から決定される。つまり、図９に示したドット発生量テーブルＤＧＴによって、入力階調値ＴＤに応じた各サイズのドットの発生量を求め、その各ドットの発生量と閾値群内の閾値とを比較していき、１ブロック内に配置する各サイズのドットの個数を求める。そして、その個数分のドットを大きなサイズのドットから閾値群内の閾値の低い場所に配置していくことで印刷データが生成される。本実施例では、このような一連の処理を行うために、エンコードテーブルＥＴや、プレデコードテーブルＤＴ１、ポストデコードテーブルＤＴ２、順序値テーブルＳＴと呼ばれる種々のテーブルを予め生成しておき、これらのテーブルを順次参照することで、印刷データの生成を効率的に行う。印刷データを生成するための詳細な処理内容については後で説明する。
【００３９】
本実施例では、ＣＭＹＫ形式の画像中の画素の階調値が同一の場合であっても、その画素の位置が異なれば、図７（ａ）に示したディザマトリックスデータＤＭ内で参照される閾値群が異なるため、異なる印刷データが生成される。例えば、図４において、ＣＭＹ画像の最も左上の画素以外に、もう一つ、「５２」の階調値を有する画素（ｊ，１）を示している。この画素に対応する印刷データの例を図の右下に示したが、かかる印刷データは、先に示した印刷データとは異なるドット配置を有している。つまり、本実施例では、階調値の値が同じであっても、ハーフトーン処理対象となる画素の位置に応じて生成する印刷データを変化させるので、従来の濃度パターン法よりも高画質な画像の出力を行うことが可能になる。
【００４０】
上述したように、本実施例では、出力画像のドット群の単位を４×２としたため、例えば、入力画像の解像度が、３６０ｄｐｉ×３６０ｄｐｉであれば、印刷用紙に出力される出力解像度は、１４４０ｄｐｉ×７２０ｄｐｉとなる。ドット群の横方向の解像度が縦方向の解像度よりも高いものとしたのは、階調変化に対する人間の目の追従性が縦方向よりも横方向に敏感であるためである。また、印刷用紙Ｐを副走査方向に移動させる制御よりも、キャリッジ２１０を主走査方向に移動させる制御の方が比較的容易であるため、横方向の解像度を縦方向の解像度よりも高くしている。しかし、もちろん、ドット群のサイズは、４×２以外にも、縦横比が同一となる４×４や２×２などとすることも可能である。なお、本実施例では、ＲＧＢ形式あるいはＣＭＹＫ形式の画像の構成要素の最小単位を「画素」といい、印刷用紙Ｐに形成される出力画像の構成要素の最小単位を「ドット」というものとする。ここで、ＲＧＢ形式あるいはＣＭＹＫ形式の入力画像を、例えば、３６０ｄｐｉ×３６０ｄｐｉから１４４０ｄｐｉ×７２０ｄｐｉに高解像度化した上で、その中の複数の画素を４×２や２×２の画素群としてまとめ、その複数の画素を代表する画素（例えば、画素群内の画素の階調値を平均化したもの）を１つの「画素」として扱うものとしてもよい。
【００４１】
説明を図３に戻す。ハーフトーン処理ユニット４００は、エンコードユニット４１０とデコードユニット４２０とを備えている。
【００４２】
ハーフトーン処理ユニット４００は、色変換ユニット３００からＣＭＹＫ形式の画像データを入力すると、この画像データをエンコードユニット４１０に入力する。エンコードユニット４１０は、このとき、ＣＭＹ画像を１ライン単位で入力する。
【００４３】
エンコードユニット４１０は、入力された画像データを構成する各画素の階調値（８ビット）を、ＳＤＲＡＭ１５２に記憶されたエンコードテーブルＥＴ（図１０参照）を参照して、各色５ビットのデータで表されるエンコード値ＥＶに変換する。かかる変換処理を、以下、「エンコード処理」という。エンコード処理によって得られるエンコード値ＥＶは、印刷用紙上に、どのような印刷データ（図４参照）を形成するかを間接的に指し示す値である。「間接的」というのは、このエンコード値ＥＶを後述するデコード処理によって、対応するデコードテーブルに基づき変換した結果、最終的に印刷データに変換されるからである。こうしたエンコード処理の過程で参照されるエンコードテーブルＥＴの生成方法や、エンコード処理の詳細な方法については後で説明する。
【００４４】
画像処理ユニット１５５は、ＳＤＲＡＭ１５２よりも高速に読み書きを行うことのできるＳＲＡＭ１５６を備えている。エンコードユニット４１０は、１ライン分のＣＭＹ画像をエンコード値ＥＶに変換するにあたり、ＳＤＲＡＭ１５２内のエンコードテーブルＥＴからその１ライン分のエンコード処理に必要なデータのみをこのＳＲＡＭ１５６に一時的に入力し、この部分的なエンコードテーブルＥＴを参照することでエンコード処理を行う。詳細は後述するが、例えば、ＣＭＹ画像の最上部のラインをエンコード処理する場合には、ＳＲＡＭ１５６には、図１０に示すエンコードテーブルＥＴのブロック番号０から１２７（ブロック番号の最大値は、「８１９１」）までのデータが入力される（図１８参照）。１ライン分のエンコード処理においては、エンコードテーブルＥＴ内の一部のブロックが繰り返し使用されるため、ＳＲＡＭ１５６に予め必要なデータだけを入力することで、効率的にエンコード処理を行うことが可能になる。なお、本実施例では、エンコードユニット４１０は、１ライン単位でエンコード処理を行うものとするが、２ライン単位やそれ以上の単位、あるいは、画像全体について一括してエンコード処理を行うものとしてもよい。
【００４５】
エンコードユニット４１０は、８ビットで表されるＣＭＹ階調値を５ビットのエンコード値ＥＶに変換すると、このエンコード値ＥＶを、ＳＤＲＡＭ１５２の所定領域に確保した中間バッファＢＦに格納する。本実施例では、メモリカードＭＣ等から入力した画像データを、８ビットのデータから５ビットのデータに変換してＳＤＲＡＭ１５２に記憶するので、ＳＤＲＡＭ１５２の使用容量を削減することができる。
【００４６】
デコードユニット４２０は、中間バッファＢＦからエンコード値ＥＶを読み込み、ＳＤＲＡＭ１５２に記憶されたプレデコードテーブルＤＴ１（図１２参照）、ポストデコードテーブルＤＴ２（図８参照）、および、順序値テーブルＳＴ（図７（ｄ）参照）を順次参照することで、このエンコード値ＥＶを、図４に示したような４×２ドットの印刷データに変換する。かかる変換処理のことを、「デコード処理」という。デコード処理の過程で参照される上述した各テーブルの生成方法や、デコード処理の詳細については後で説明する。なお、デコード処理もエンコード処理と同様、１ライン単位で行われるため、プレデコードテーブルＤＴ１や順序値テーブルＳＴ内の必要なデータのみが、ＳＲＡＭ１５６に入力される。
【００４７】
デコードユニット４２０は、エンコード値ＥＶを印刷データに変換すると、この印刷データをデータ回転ユニット５００に転送する。
【００４８】
データ回転ユニット５００は、主走査方向に沿った印刷データの並びを、ノズルの配置方向に沿って並び替える回路である。デコードユニット４２０から１ライン単位で印刷データを取得し、取得した印刷データを、ＳＤＲＡＭ１５２内のイメージバッファＩＢに一時的に記録する。このとき、データ回転ユニット５００は、後述する印刷データ回転処理を行うことで、イメージバッファＩＢ内の印刷データの並びを、インクヘッド２１１のノズルの配置に応じて回転させる。データ回転ユニット５００は、印刷データ回転処理の実行時に用いられる設定レジスタやカウンタ、ＳＲＡＭを備えている。イメージバッファＩＢに記憶された回転後の印刷データは、ヘッドコントロールユニット１５６に供給され、インクの吐出制御に用いられる。データ回転ユニット５００は、本願の「取得部」や「ブロック生成部」、「書込部」、「回転処理部」に対応する。データ回転ユニット５００が行う処理の内容については、「（Ｅ）印刷データ回転処理」と記載した項目で詳しく説明する。 
【００４９】
（Ｂ）印刷処理：
図５は、印刷処理のフローチャートである。この印刷処理は、操作パネル１４０を介してユーザから所定の印刷操作を受け付けた場合に、ＣＰＵ１５１が実行する処理である。
【００５０】
この印刷処理が実行されると、ＣＰＵ１５１は、まず、図３に示したエンコードテーブルＥＴやプレデコードテーブルＤＴ１、ポストデコードテーブルＤＴ２、順序値テーブルＳＴを生成するための初期化処理を行う（ステップＳ１０）。かかる初期化処理の詳細な説明は後述する。
【００５１】
初期化処理が完了すると、ＣＰＵ１５１は、ユーザによって指定された画像データをメモリカードＭＣ等から入力する（ステップＳ２０）。そして、入力した画像データを、画像処理ユニット１５５に出力する。すると、画像処理ユニット１５５では、色変換ユニット３００による色変換処理（ステップＳ３０）、および、ハーフトーン処理ユニット４００によるハーフトーン処理（ステップＳ４０）が行われ、印刷データが生成される。ハーフトーン処理の詳細については後述する。
【００５２】
ハーフトーン処理ユニット４００は、印刷データを生成すると、この印刷データをデータ回転ユニット５００に転送する。データ回転ユニット５００は、印刷データを取得すると、この印刷データをイメージバッファＩＢに一時的に記憶し、印刷データ回転処理を行う（ステップＳ５０）。印刷データ回転処理の詳細については後述する。回転処理後の印刷データは、ヘッドコントロールユニット１５６によってイメージバッファＩＢから読み込まれる。ヘッドコントロールユニット１５６は、印刷データを読み込むと、この印刷データに基づき、印刷用紙に対するインクの吐出制御を行う（ステップＳ６０）。この結果、印刷用紙に対して画像が印刷される。
【００５３】
（Ｃ）初期化処理：
図６は、上述した印刷処理のステップＳ１０で実行される初期化処理の詳細を示すフローチャートである。上述したように、この初期化処理は、ハーフトーン処理ユニット４００がハーフトーン処理時に参照する種々のテーブルを生成するための処理である。
【００５４】
この初期化処理が実行されると、まず、ＣＰＵ１５１は、ＲＯＭ１５３から、ディザマトリックスデータＤＭをＳＤＲＡＭ１５２に入力し（ステップＳ１００）、このディザマトリックスデータＤＭに基づき、順序値テーブルＳＴの生成を行う（ステップＳ１１０）。順序値テーブルＳＴは、後述するデコード処理において、４×２個の要素を有するブロック内に、各サイズのドットを配置する順序を決定するためのテーブルである。
【００５５】
図７は、ディザマトリックスデータＤＭのデータ構造および順序値テーブルＳＴの生成方法を示す説明図である。図７（ａ）には、ディザマトリックスデータＤＭのデータ構造を示している。本実施例のディザマトリックスデータＤＭには、横５１２×縦１２８の配列内に０から６５５３５までの計６５５３６個の閾値が万遍なく記録されている（各閾値の図示は省略）。このディザマトリックスデータＤＭは、従来のハーフトーン技術として知られた組織的ディザ法で用いられるディザマトリックスと同種のテーブルである。そのため図示したディザマトリックスデータＤＭにおいても、画像データが０から６５５３５までの階調値を有すると仮定した場合において、この画像データを２値化する際に、白黒ドットの分散性が高まるように各閾値が配置されている。このようなディザマトリックスデータＤＭとしては、例えば、ブルーノイズ特性を有するマトリックスを採用することができる。なお、本実施例では、ディザマトリックスデータＤＭのサイズを５１２×１２８としたが、１２８×３２や１０２４×２５６など、種々のサイズを適用することができる。
【００５６】
上記ステップＳ１１０では、このディザマトリックスデータＤＭから、順序値テーブルＳＴの生成を行う。まず、ＣＰＵ１５１は、ディザマトリックスデータＤＭを、４×２個の閾値を１つのブロックとして、計８１９２（＝（５１２／４）×（１２８／２））個のブロックに分割し、各ブロックに対してブロック番号を与える。本実施例では、図７（ａ）に示すように、ディザマトリックスデータＤＭの最も左上に位置するブロックにブロック番号「０」を与え、その右隣に位置するブロックにブロック番号「１」、以下、右下端のブロックにかけて、順にブロック番号を与える。
【００５７】
図７（ｂ）には、ブロック番号「０」のブロックに記録された各閾値を閾値群として示している。図７（ｃ）には、この閾値群を元に生成される順序値データを示している。ＣＰＵ１５１は、図７（ｂ）に示した閾値群内のすべての要素について同時に、階調値を０から６５５３５まで上げていき、その階調値が、閾値を上回った順序を０から７までの値によって記録することで、図７（ｃ）の順序値データを生成する。図７（ｂ）の場合には、２３，４７２，１０１０，１３２２、…、の順に、階調値が閾値を超えることになるため、ブロック番号「０」に対応する順序値データは、図７（ｃ）のようになる。
【００５８】
ＣＰＵ１５１は、すべてのブロックについて順序値データを生成すると、これを、ブロック番号毎に記録して順序値テーブルＳＴを生成する。図７（ｄ）には、最終的に生成された順序値テーブルＳＴの一部を示している。ＣＰＵ１５１は、こうして生成した順序値テーブルＳＴをＳＤＲＡＭ１５２に記憶する。
【００５９】
説明を図６に戻す。ＣＰＵ１５１は、順序値テーブルＳＴを生成すると、次に、後述するデコード処理において用いられるポストデコードテーブルＤＴ２の生成を行う（ステップＳ１２０）。
【００６０】
図８は、ポストデコードテーブルＤＴ２の一例を示す説明図である。図示するように、このポストデコードテーブルＤＴ２には、０から１６４までのインデックス値に対応付けて、１６ビットのドット数データが記録されている。ドット数データは、２ビットのドットサイズ値を、サイズの大きなドットから右詰めに８つ連結させたデータである。この１６５個のドット数データは、１ブロック内に発生する各サイズのドットの数の組み合わせのすべてを表している。
【００６１】
ここで、１つのブロック内に発生する各サイズのドットの組み合わせの数が１６５個に収まる理由を説明する。ブロック内の１つのドットのサイズは、上述したように、「ドット無し」、「Ｓドット」、「Ｍドット」、「Ｌドット」の４つの状態を取り得る。従って、１ブロック内におけるこれらのドットの組合せは、これら４つの状態を、重複を許容して８回選択した時の組合せの数に等しくなる。つまり、重複組み合わせの演算式を表す下記式（１）によってドットの組み合わせの数を求めることができる。このことから、最大でも１６５通り（０〜１６４）の組合せしか出現しないことになる。従って、ドット数データに対応するインデックス値は、０から１６４までの値となる。
【００６２】
４Ｈ８（＝４＋８−１Ｃ８）＝１６５  ・・・（１）
（ｎＨｒは、ｎ個の物の中から重複を許してｒ回選択するときの重複組合せ数を求める演算子であり、ｎＣｒは、ｎ個の物の中から重複を許さずにｒ回選択するときの組合せ数を求める演算子である。）
【００６３】
ＣＰＵ１５１は、図８に示したポストデコードテーブルＤＴ２を次のように生成する。すなわち、まず、ＣＰＵ１５１は、１ブロック内に発生するＳドット、Ｍドット、Ｌドットの各サイズのドットの数をすべて「０」とし、これを、インデックス値「０」に対応するドット数データとしてポストデコードテーブルＤＴ２に記録する。この場合、１ブロック内の８つのドットのサイズがすべて「ドット無し（００）」となるから、ドット数データとしては、「００００００００００００００００」となる。
【００６４】
次に、ＣＰＵ１５１は、Ｓドットの数を１から８まで順番に増やし、それぞれの発生個数をドット数データとしてインデックス値１から８までに記録する。つまり、Ｓドットの数が１の場合は、ドット数データは、「０００００００００００００００１」となり、Ｓドットの数が８の場合は、「０１０１０１０１０１０１０１０１」となる。
【００６５】
続いて、ＣＰＵ１５１は、Ｍサイズのドットの数を「１」とし、発生するドットの合計が８個以内になるように、Ｓサイズのドットの数を、０から７まで増加させる。そして、それぞれのドットの発生個数の組み合わせをインデックス値「９」以降に記録する。
【００６６】
更に、ＣＰＵ１５１は、Ｍサイズのドットの数を「２」とし、Ｓサイズのドットの数を０から６まで増加させる。そして、それぞれの発生個数をポストデコードテーブルＤＴ２に記録する。以下、同様にして、Ｌサイズのドットの数が「８」になるまで、各サイズのドットの数を変化させることにより、ポストデコードテーブルＤＴ２の生成を行う。ＣＰＵ１５１は、こうして生成したポストデコードテーブルＤＴ２をＳＤＲＡＭ１５２に記憶する。なお、ドット数データには、それぞれ固有のインデックス値が割り当てられていればよく、その対応関係については特に規定はない。
【００６７】
ここで、説明を再び図６に戻す。ＣＰＵ１５１は、ポストデコードテーブルＤＴ２の生成を完了すると、後述するエンコードテーブルＥＴやプレデコードテーブルＤＴ１の生成で用いられるドット発生量テーブルＤＧＴをＲＯＭ１５３からＳＤＲＡＭ１５２に入力する（ステップＳ１３０）。
【００６８】
図９は、ドット発生量テーブルＤＧＴの一例を示す説明図である。図示するように、このドット発生量テーブルＤＧＴには、横軸に示した入力階調値ＴＤに応じて、Ｓドット、Ｍドット、Ｌドットの発生量がそれぞれ縦軸に定義されている。この図によれば、入力階調値ＴＤが０から７０程度までは、Ｓドットのみが発生し、その後、入力階調値ＴＤが１２０程度までは、ＳドットとＭドットの両者が発生することがわかる。また、入力階調値ＴＤが１１０程度になると、ＳドットとＭドットに加えて、Ｌドットが発生するようになり、入力階調値ＴＤが概ね１８０以降になると、Ｌドットのみが発生することがわかる。なお、縦軸に示すドット発生量は、図７に示したディザマトリックスデータＤＭ内の各閾値との比較が可能なように、０から６５５３５までの値をとる。
【００６９】
図９には、Ｓドット，Ｍドット，Ｌドットの発生量とともに、これらのドットが印刷用紙に形成される際に吐出されるインクの総重量の変化を示した。図示したインク総重量の変化によれば、入力階調値ＴＤが増加するにつれ、インクの総重量が徐々に増加していくことになる。各サイズのドット発生量は、かかる総重量の変化にあわせて、それぞれの発生量が設定されている。なお、このドット発生量テーブルＤＧＴは、印刷装置１００がサポートしている印刷用紙の種類に応じて複数種類のテーブルがＲＯＭ１５３に記憶されている。印刷用紙は、その材質によってインクの吸収率や光の反射率が異なり、このような特性に応じてインクのドット発生量が設定されているためである。従って、ＣＰＵ１５１は、ユーザによって設定された印刷用紙Ｐの種類に応じて、その種類に応じたドット発生量テーブルＤＧＴをＲＯＭ１５３から入力する。こうすることで、選択された印刷用紙Ｐに適した印刷を行うことが可能になる。
【００７０】
説明を図６に戻す。上記ステップＳ１３０によってドット発生量テーブルＤＧＴを入力すると、ＣＰＵ１５１は、このドット発生量テーブルＤＧＴとステップＳ１００で入力したディザマトリックスデータＤＭとを用いて、エンコードテーブルＥＴとプレデコードテーブルＤＴ１を生成する処理を行う（ステップＳ１４０）。以下では、かかるステップＳ１４０による処理を、単純に「テーブル生成処理」という。
【００７１】
テーブル生成処理は複雑な処理であるため、詳細な説明は後に記述するものとし、ここでは、このテーブル生成処理によって生成されるエンコードテーブルＥＴとプレデコードテーブルＤＴ１のデータ構造について説明する。
【００７２】
図１０は、エンコードテーブルＥＴのデータ構造を示す説明図である。このエンコードテーブルＥＴには、０から８１９１までのブロック番号と、０から３１までの５ビットのエンコード値ＥＶとに対応付けて、０から２５５までのいずれかの階調値が記録されている。以下では、エンコードテーブルＥＴに記録されている階調値を、「階調閾値」という。上述したように、このエンコードテーブルＥＴは、図３に示したエンコードユニット４１０が、ＣＭＹ画像の８ビットの階調値を、その画素の位置、すなわち、ブロック番号に応じて、５ビットのエンコード値ＥＶに変換するためのテーブルである。
【００７３】
ここで、このエンコードテーブルＥＴを用いた階調値からエンコード値ＥＶへの変換方法を簡単に説明する。まず、エンコードユニット４１０は、エンコード処理の対象とするＣＭＹ画像中の画素が、ディザマトリックスデータＤＭ中のどのブロックに該当するかを計算する。そして、そのブロック番号に該当するエンコードテーブルＥＴの中の行を参照し、その行の階調閾値とその画素の階調値とを階調閾値の低い方から順に比較していく。この比較の結果、参照した階調閾値が、その画素の階調値を初めて超えた場合に、その階調閾値に対応するエンコード値ＥＶが、変換後のエンコード値ＥＶとなる。例えば、ブロック番号が「３」で、処理対象の画素の階調値が「１９９」であれば、図１０の場合には、エンコード値ＥＶは、「１６」となる。つまり、このエンコードテーブルＥＴには、各エンコード値に対応付けて、そのエンコード値に対応する階調値の範囲が階調閾値というパラメータにより記録されていることになる。
【００７４】
図１１は、ＣＭＹ画像の階調値に応じてエンコードテーブルＥＴから取得されるエンコード値ＥＶの変化の例を模式的に示す説明図である。図１１には、ブロック番号が「Ｘ１」から「Ｘ５」までの５つのブロックについて、階調値に応じたエンコード値ＥＶの変化の例を示している。図示の便宜のため、エンコード値の変化は、ブロック毎に縦軸をずらして描いている。図示するように、各ブロックとも、階調値が増加すれば、エンコード値ＥＶの値も増加しているが、その増加の態様や変化数（ステップ数）は、ブロック毎に異なっている。各ブロックにおけるエンコード値ＥＶの値は、印刷データ（図４参照）を間接的に示す値である。そのため、ＣＭＹ画像の中で、同じ階調値を有する画素があっても、その画素の位置が異なれば、適用するブロック番号も異なり、異なるエンコード値ＥＶが取得される。この結果、それらの画素に対応する印刷用紙上の位置には、異なる配置のドットが形成されることになる。
【００７５】
図１２は、プレデコードテーブルＤＴ１のデータ構造を示す説明図である。図示するように、このプレデコードテーブルＤＴ１には、ブロック番号とエンコード値ＥＶとに対応付けて、図８に示したポストデコードテーブルＤＴ２のインデックス値が記録されている。図３に示したデコードユニット４２０は、そのデコード処理時に、中間バッファＢＦに記憶されたエンコード値ＥＶを読み込み、このポストデコードテーブルＤＴ２を参照することで、エンコード値ＥＶをインデックス値に変換する。なお、インデックス値の範囲は、本来、０から１６４までであるが、図１２には、「２５５」というインデックス値が記録されている部分がある。しかし、これは、単なるダミーのデータであり、デコード処理時には参照されない部分である。
【００７６】
ここでデコード処理の内容を簡単に説明する。デコードユニット４２０は、まず、図１２に示したプレデコードテーブルＤＴ１を参照してエンコード値ＥＶをインデックス値に変換する。そして、図８のポストデコードテーブルＤＴ２を参照して、インデックス値に対応するドット数データを取得する。デコードユニット４２０は、こうして取得したドット数データと、図７に示した順序値テーブルＳＴとに基づき図４に示した印刷データを生成する。こうすることで、デコードユニット４２０は、エンコード値ＥＶに基づき印刷データを生成することができる。このデコード処理についての詳細な説明は後述する。
【００７７】
以上、本実施例における初期化処理の流れについて説明した。次に、上述したステップＳ１４０におけるテーブル生成処理の詳細について説明する。
【００７８】
図１３は、図６のステップＳ１４０で実行されるテーブル生成処理（エンコードテーブル及びプレデコードテーブル生成処理）の詳細を示すフローチャートである。この処理が実行されると、ＣＰＵ１５１は、まず、ＳＤＲＡＭ１５２に、すべての要素を「２５５」に設定したエンコードテーブルＥＴとプレデコードテーブルＤＴ１を用意する（ステップＳ２００）。
【００７９】
すべての要素を「２５５」に設定したエンコードテーブルＥＴとプレデコードテーブルＤＴ１を用意すると、ＣＰＵ１５１は、現在の処理対象とするブロック番号Ｎを「０」とし（ステップＳ２１０）、更に、以降の処理で用いられる変数として、エンコード値ＥＶを「０」とし、現在のブロック内に発生する各サイズ（Ｓドット，Ｍドット，Ｌドット）のドット数をそれぞれ「０」とする（ステップＳ２２０）。そして、更に、現在の入力階調値ＴＤを「０」とする（ステップＳ２３０）。
【００８０】
続いて、ＣＰＵ１５１は、上記ステップＳ２２０で設定した入力階調値ＴＤに基づき、現在のブロック内に発生する各サイズのドット数を決定するドット数カウント処理を実行する（ステップＳ２４０）。
【００８１】
図１４は、ドット数カウント処理の詳細を示すフローチャートである。かかる処理では、まず、ＣＰＵ１５１は、上記ステップＳ２３０で設定された入力階調値ＴＤに対応する各サイズのドット発生量をドット発生量テーブルＤＧＴ（図９参照）から取得する（ステップＳ４００）。
【００８２】
各サイズのドット発生量を取得すると、ＣＰＵ１５１は、現在のブロック番号Ｎに対応する閾値群をディザマトリックスデータＤＭ（図７参照）から取得する。そして、これからカウントを行う各サイズのドットのカウント数（ｄｏｔＬ，ｄｏｔＭ，ｄｏｔＳ）をそれぞれ「０」とし、すべてのドットの総カウント数ｎを「０」とする（ステップＳ４１０）。
【００８３】
カウント数および総カウント数を設定すると、ＣＰＵ１５１は、現在の総カウント数ｎに応じて、ｎ番目に低い閾値を閾値群から読み込む。そして、上記ステップＳ４００で取得したＬドットのドット発生量が、この閾値よりも大きいか否かを判断する（ステップＳ４２０）。この判断の結果、Ｌドットの発生量が、ｎ番目に低い閾値よりも大きければ（ステップＳ４２０：Ｙｅｓ）、Ｌドットのカウント数ｄｏｔＬをインクリメントする（ステップＳ４３０）。すなわち、この場合、４×２の印刷データ内に発生するＬドットの数が１つ増加することになる。
【００８４】
Ｌドットのカウント数ｄｏｔＬをインクリメントすると、ＣＰＵ１５１は、現在の総カウント数ｎが「７」であるかを判断する（ステップＳ４４０）。その結果、総カウント数ｎが「７」であれば、閾値群内の閾値を全て参照したことになり、ドット数のカウントが終了したと判断できるので、処理を後述するステップＳ５００に進める。一方、ステップＳ４４０において、総カウント数ｎが「７」でなければ、次に低い閾値とドット発生量との比較を続行するため、総カウント数ｎをインクリメントし（ステップＳ４５０）、処理を上記ステップＳ４２０に戻す。
【００８５】
上記ステップＳ４２０において、Ｌドットの発生量が、ｎ番目に低い閾値以下であれば（ステップＳ４２０：Ｎｏ）、ＣＰＵ１５１は、次に、ドット発生量テーブルＤＧＴから取得したＭサイズとＬサイズのドット発生量の累積値が、ｎ番目に低い閾値を超えたか否かを判断する（ステップＳ４６０）。その結果、ＭサイズとＬサイズのドット発生量の累積値が、ｎ番目に低い閾値よりも大きいと判断した場合には（ステップＳ４６０：Ｙｅｓ）、Ｍドットのカウント数ｄｏｔＭをインクリメントする（ステップＳ４７０）。すなわち、この場合、４×２の印刷データ内に配置するＭドットの数が１つ増加することになる。
【００８６】
Ｍドットのカウント数ｄｏｔＭをインクリメントすると、ＣＰＵ１５１は、上述したステップＳ４４０に処理を移行する。こうすることで、総カウント数ｎが「７」に達していない場合には、総カウント数ｎがインクリメントされ（ステップＳ４５０）、上記ステップＳ４２０に処理が戻されることになる。
【００８７】
上記ステップＳ４６０において、ＭドットとＬドットのドット発生量の累積値が、ｎ番目に低い閾値以下であると判断されれば（ステップＳ４６０：Ｎｏ）、次に、ＣＰＵ１５１は、ドット発生量テーブルＤＧＴから取得したＳドットとＭドットとＬドットのドット発生量の累積値が、ｎ番目に低い閾値を超えたか否かを判断する（ステップＳ４８０）、その結果、かかるドット発生量の累積値が、ｎ番目に低い閾値よりも大きいと判断した場合には（ステップＳ４８０：Ｙｅｓ）、Ｓドットのカウント数ｄｏｔＳをインクリメントする（ステップＳ４９０）。すなわち、この場合、４×２の印刷データ内に配置するＳドットの数が１つ増加することになる。
【００８８】
Ｓドットのカウント数をインクリメントすると、ＣＰＵ１５１は、上述したステップＳ４４０に処理を移行する。こうすることで、総カウント数ｎが「７」に達していない場合には、総カウント数ｎが１つインクリメントされ（ステップＳ４５０）、上記ステップＳ４２０に処理が戻されることになる。
【００８９】
上記ステップＳ４８０において、ＳドットとＭドットとＬドットのドット発生量の累積値が、ｎ番目に低い閾値以下であると判断された場合（ステップＳ４８０：Ｎｏ）、もしくは、上記ステップＳ４４０において、総カウント数が「７」であり、８個の閾値をすべて参照したと判断した場合には（ステップＳ４４０：Ｙｅｓ）、ＣＰＵ１５１は、最後に、各サイズのドットの数を、これまでカウントした値に確定する（ステップＳ５００）。
【００９０】
図１５は、上述したドット数カウント処理の具体例を示す説明図である。図１５（ａ）に示すように、ここでは、ドット発生量テーブルＤＧＴにおいて、現在の入力階調値ＴＤに対応するＬドットのドット発生量が「４０９」、Ｍドットが「１５５０」、Ｓドットが「１３０４」だとし、現在のブロックに対応する閾値群が、図７（ｂ）に示した閾値群であったとする。
【００９１】
この場合、まず、図１４のステップＳ４２０では、閾値群内の最も低い閾値「２３」と、Ｌドットのドット発生量「４０９」とが比較される。そうすると、このドット発生量「４０９」の方が、閾値「２３」よりも大きいので、ステップＳ４２０では、「Ｙｅｓ」と判定され、ステップＳ４３０によってＬドットのカウント数がインクリメントされて「１」になる。そうすると、ステップＳ４５０によって、総カウント数ｎがインクリメントされるため、続くステップＳ４２０では、２番目に低い閾値「４７２」とＬドットのドット発生量「４０９」が比較される。この場合、閾値「４７２」よりもドット発生量「４０９」の方が小さくなるので、ステップＳ４２０では、「Ｎｏ」と判定され、処理がステップＳ４６０に進む。この時点で、Ｌドットのカウント数は、図１５（ｂ）に示すように「１」で確定することになる。
【００９２】
ステップＳ４６０では、Ｌドットのドット発生量とＭドットのドット発生量の累積値「１９５９（＝４０９＋１５５０）」と、２番目に低い閾値「４７２」とが比較される。この結果、ＬドットとＭドットのドット発生量の累積値「１９５９」の方が、閾値「４７２」よりも大きいため、ステップＳ４６０では「Ｙｅｓ」と判断され、ステップＳ４７０によってＭドットのカウント数がインクリメントされ「１」となる。そうすると、更に、次の閾値「１０１０」が参照される。しかし、この場合においても、依然として、閾値「１０１０」より、ドット発生量の累積値「１９５９」の方が大きいため、結局、７番目に低い閾値「２２４０」が参照されるまで、Ｍサイズのカウント数はインクリメントされる。この結果、Ｍサイズのカウント数は、図１５（ｃ）に示すように「５」で確定する。
【００９３】
７番目に低い閾値「２２４０」が参照されると、ステップＳ４６０では、「Ｎｏ」と判定されるため、次に、ステップＳ４８０において、ＬドットとＭドットとＳドットのドット発生量の累積値「３２６３（＝４０９＋１５５０＋１３０４）」と、７番目に低い閾値「２２４０」とが比較される。この結果、ドット発生量の累積値「３２６３」の方が７番目に低い閾値よりも大きいため、ステップＳ４８０では「Ｙｅｓ」と判定され、ステップＳ４９０によってＳドットのカウント数がインクリメントされて「１」になる。そうすると、次に、最も値の高い閾値「３２６２」が参照される。
【００９４】
ＬドットとＭドットとＳドットのドット発生量の累積値「３２６３」は、８番目の閾値「３２６２」よりも依然として大きい。そのため、ステップＳ４８０では、再度、「Ｙｅｓ」と判定されて、ステップＳ４９０によってＳサイズのドットのカウント数がインクリメントされ、図１５（ｄ）に示すように「２」となる。すると、現在の総カウント数ｎは「７」であるため、ステップＳ４４０において、「Ｙｅｓ」と判定され、各サイズのドットのカウント数が確定する。すなわち、以上で示した例では、Ｌドットが１個、Ｍドットが５個、Ｓドットが２個となる。
【００９５】
以上、図１５を用いて説明したように、上述したドット数カウント処理では、最初に、Ｌドットの発生数が決定され、つづいて、Ｍサイズ、Ｓサイズのドットの発生数が決定される。各サイズの発生数を決定する際には、各サイズのドット発生量を加算しつつ閾値との比較を行っていくので、最終的には、図１５（ｄ）に示すように、各サイズのドットの数は、ブロック内に各サイズのドットが重複せずにＬドットから順に配置することが可能な数になる。
【００９６】
説明を図１３に戻す。図１３のステップＳ２４０、すなわち、図１４に示したドット数カウント処理が実行されて、各サイズのドット数が確定すると、次に、ＣＰＵ１５１は、前回の入力階調値ＴＤにおける各サイズのドット数に対して、今回の入力階調値ＴＤにおける各サイズのドット数のいずれかが変化したかを判定する（ステップＳ２５０）。例えば、前回のカウント処理によって、Ｓドットが２個、Ｍドットが５個、Ｌドットが１個であった場合に、今回のカウント処理によって、Ｓドットが２個、Ｍドットが４個、Ｌドットが２個となれば、ＭドットとＬドットのカウント数が変化していることになるので、上記ステップＳ２５０では、変化あり（Ｙｅｓ）と判定される。
【００９７】
上記ステップＳ２５０において、変化ありと判定されれば（ステップＳ２５０：Ｙｅｓ）、現在のブロック番号Ｎおよびエンコード値ＥＶに対応する各サイズのドット数を、上記ステップＳ２４０でカウントされた値に更新する（ステップＳ２６０）。そして、ステップＳ２００において用意したエンコードテーブルＥＴの現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、階調閾値として、現在の入力階調値ＴＤをセットする（ステップＳ２７０）。
【００９８】
エンコードテーブルＥＴに階調閾値をセットすると、続いて、ＣＰＵ１５１は、予め作成しておいたポストデコードテーブルＤＴ２（図８参照）を参照し、上記ステップＳ２６０で更新した各サイズのドットの数と同数のドット数を有するインデックス値を取得する。例えば、上記ステップＳ２６０において、Ｓドットが０個、Ｍドットが２個、Ｌドットが６個であるとされれば、取得されるインデックス値は、図８を参照すると「１６０」になる。こうして、インデックス値を取得すると、ＣＰＵ１５１は、ステップＳ２００において用意したプレデコードテーブルＤＴ１の現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、そのインデックス値をセットする（ステップＳ２８０）。
【００９９】
エンコードテーブルＥＴへの階調閾値の記録、および、プレデコードテーブルＤＴ１へのインデックス値の記録を完了すると、ＣＰＵ１５１は、現在のエンコード値ＥＶをインクリメントする（ステップＳ２９０）。つまり、このステップＳ２９０では、上記ステップＳ２５０においていずれかのサイズのドットの数が変化したと判断される毎にエンコード値ＥＶが変化していくことになる。換言すれば、１ブロック内に発生するドットの態様が変化する度にエンコード値ＥＶが変化していくことになる。
【０１００】
上記ステップＳ２９０によって、エンコード値ＥＶをインクリメントした後、もしくは、上記ステップＳ２５０において、いずれのサイズのドット数も変化していないと判断された場合には（ステップＳ２５０：Ｎｏ）、ＣＰＵ１５１は、現在の入力階調値ＴＤが「２５５」を超えたか否かを判断する（ステップＳ３００）。その結果、入力階調値ＴＤが「２５５」を超えていなければ（ステップＳ３００：Ｎｏ）、現在の入力階調値ＴＤをインクリメントした上で（ステップＳ３１０）、処理を上記ステップＳ２４０に戻す。こうすることで、現在のブロックについて入力階調値ＴＤを０から２５５まで変化させながら、入力階調値ＴＤとエンコード値ＥＶの対応関係をエンコードテーブルＥＴに記録することができる。また、これと同時に、エンコード値ＥＶとインデックス値の対応関係をプレデコードテーブルＤＴ１に記録することができる。
【０１０１】
一方、上記ステップＳ３００において、現在の入力階調値ＴＤが「２５５」を超えていれば（ステップＳ３００：Ｙｅｓ）、ＣＰＵ１５１は、全てのブロックについて上述した処理が完了したかを判断し（ステップＳ３２０）、完了していなければ（ステップＳ３２０：Ｎｏ）、現在のブロック番号Ｎをインクリメントした上で（ステップＳ３４０）、処理を上記ステップＳ２２０に戻す。こうすることで、全てのブロックについて、入力階調値ＴＤとエンコード値ＥＶの対応関係をエンコードテーブルＥＴに記録し、エンコード値とインデックス値の対応関係をプレデコードテーブルＤＴ１に記録することができる。全てのブロックについて上述した処理が完了していれば（ステップＳ３２０：Ｙｅｓ）、当該テーブル生成処理を終了する。
【０１０２】
以上、図６のステップＳ１４０に示したテーブル生成処理の詳細について説明した。ＣＰＵ１５１は、このテーブル生成処理を実行することにより、図１０に示したエンコードテーブルＥＴと、図１２に示したプレデコードテーブルＤＴ１とを生成することができる。以下では、この初期化処理によって生成された種々のテーブルを用いて実行されるハーフトーン処理の詳細な処理内容について説明する。
【０１０３】
（Ｄ）ハーフトーン処理：
図１６は、図５に示した印刷処理のステップＳ４０で実行されるハーフトーン処理のフローチャートである。このハーフトーン処理は、上述した初期化処理において生成した各テーブル（エンコードテーブルＥＴ、プレデコードテーブルＤＴ１、ポストデコードテーブルＤＴ２、順序値テーブルＳＴ）を順次参照することで、ＣＭＹ画像の各画素について、それぞれ印刷データを生成する処理である。
【０１０４】
画像処理ユニット１５５は、まず、このハーフトーン処理を実行すると、図３に示したエンコードユニット４１０を用いて、処理対象の画素の各色（Ｃ，Ｍ，Ｙ，Ｋ）の階調値をそれぞれエンコード値ＥＶに変換するエンコード処理を行う（ステップＳ８００）。
【０１０５】
（Ｄ−１）エンコード処理：
図１７は、エンコード処理の詳細を示すフローチャートである。このエンコード処理は、入力画素の階調値を、エンコード値ＥＶに変換するための処理である。
【０１０６】
このエンコード処理が実行されると、エンコードユニット４１０は、まず、ＣＭＹ画像をライン毎に色変換ユニット３００から入力し、その中から１画素ずつＸ方向（右方向）に階調値ＧＶを取得する（ステップＳ８０２）。
【０１０７】
階調値ＧＶを取得すると、エンコードユニット４１０は、その画素が属するブロック番号の計算を行う（ステップＳ８０４）。ここで、本実施例では、図４に示したように、１つの階調値ＧＶを、４×２個のドットで表現するものとした。この４×２個のドットは、図７に示したディザマトリックスＤＭの４×２の要素、すなわち、１ブロックに相当する。従って、ＣＭＹ画像内の処理対象の画素の位置がわかれば、その画素の位置に対応するディザマトリックスＤＭ内のブロックの位置を容易に求めることができる。
【０１０８】
図１８は、ブロック番号の計算方法の概念を示す説明である。図７（ａ）に示したディザマトリックスデータＤＭは、横方向に１２８ブロック、縦方向に６４ブロックの計８１９２個のブロックを有する。そのため、１枚の入力画像データを、１２８画素×６４画素を単位として分割し、かかる単位内の各画素に対して、ブロック番号が０から８１９１まで割り振られるように、ブロック番号の計算を行う。すなわち、図１８のように、１枚の入力画像データのなかに、ディザマトリックスＤＭがタイル状に並べられているものとして、ブロック番号の計算を行う。
【０１０９】
具体的には、エンコード処理を行おうとする現在の画素の座標を（Ｘ，Ｙ）とした場合に、現在の画素のＹ座標が「０」であり、Ｘ座標が、「０」から「１２７」までの間は、ブロック番号が「０」から「１２７」まで、順番に割り振られることになる。その後、Ｙ座標が変化せず、現在の画素のＸ座標が、「１２８」になった時点で、ブロック番号は、再び、「０」となる。このように、画像のＸ方向に対して、ブロック番号が「０」から「１２７」まで繰り返して適用された後に、現在の画素の座標が、（０，１）になった時点で、ブロック番号は「１２８」となる。そして、その後、Ｙ座標が「１」の間は、「１２８」から「２５５」までのブロック番号が繰り返して割り振られることになる。つまり、ブロック番号Ｎは、エンコード処理を行う対象画素の座標を（Ｘ，Ｙ）とすると、下記式（２）によって求めることができる。ただし、下記式（２）において、「％」は、剰余を求める演算子であるものとする。
【０１１０】
Ｎ＝（Ｘ％１２８）＋（Ｙ％６４）＊１２８  …（２）
【０１１１】
図１９は、ブロック番号の他の計算方法の概念を示す説明図である。図１８に示したブロック番号の計算例では、１枚の画像データ内に複数のディザマトリックスＤＭがタイル状に等しく並べられることを想定してブロック番号の計算を行っている。これに対して、図１９では、タイル状に配置されたディザマトリックスデータＤＭのうち、偶数行のディザマトリックスデータＤＭを、奇数行のディザマトリックスデータＤＭに対してＸ方向に６４画素ずらして並べている。このように、ディザマトリックスＤＭをずらして画像内に配置するものとすれば、ディザマトリックスＤＭの繰り返しパターンの傾向が出力画像に現れることを抑制できるため、画質を向上させることができる。
【０１１２】
本実施例では、エンコードユニット４１０は、ライン単位でＣＭＹ画像を入力するものとしたため、図１８や図１９を参照すれば、最初のラインについては、ブロック番号が０から１２７が繰り返して適用されることになる。従って、本実施例では、エンコードユニット４１０がエンコード処理を実行するにあたり、入力したラインのＹ座標に応じて予めエンコードテーブルＥＴの必要な部分についてのみＳＲＡＭ１５６に入力しておく。こうすることで、各画素の階調値を取得する度に、ＳＲＡＭ１５６よりもアクセス速度の遅いＳＤＲＡＭ１５２にエンコードテーブルＥＴを読みに行く必要が無くなり、処理を高速化することが可能になる。
【０１１３】
図１７のステップＳ８０４によって、ブロック番号の計算が完了すると、エンコードユニット４１０は、これから求めようとするエンコード値ＥＶの値を「０」に初期化する（ステップＳ８０６）。そして、図１０に示したエンコードテーブルＥＴ（実際には、ＳＲＡＭ１５６に読み込まれた部分的なエンコードテーブル）を参照して、ステップＳ８０４で算出されたブロック番号および現在のエンコード値ＥＶに対応する階調閾値ＧＶｔを取得する（ステップＳ８０８）。
【０１１４】
階調閾値ＧＶｔを取得すると、エンコードユニット４１０は、この階調閾値ＧＶｔと、ステップＳ８０２で入力した処理対象の画素の階調値ＧＶとを比較し、この階調値ＧＶが階調閾値ＧＶｔ以上であるかを判定する（ステップＳ８１０）。この判定の結果、階調値ＧＶが階調閾値ＧＶｔ以上であれば（ステップＳ８１０：Ｙｅｓ）、現在のエンコード値ＥＶに「１」を加算し（ステップＳ８１２）、加算後のエンコード値ＥＶがその最大値ＥＶｍａｘ以上となったかを判定する（ステップＳ８１４）。最大値ＥＶｍａｘは、上述した最大ステップ数から「１」を差し引いた値である（例えば、図１７のエンコードテーブルを参照している場合には「２０」）。エンコード値ＥＶが最大値ＥＶｍａｘ以上となれば（ステップＳ８１４：Ｙｅｓ）、その時点で、エンコード値ＥＶは最大値ＥＶｍａｘに確定する（ステップＳ８１６）。
【０１１５】
上記ステップＳ８１４において、エンコード値ＥＶがその最大値ＥＶｍａｘ未満であると判定されれば（ステップＳ８１４：Ｎｏ）、エンコードユニット４１０は、処理をステップＳ８０８に戻し、加算後のエンコード値ＥＶに対応する階調閾値ＧＶｔを取得して、再び、階調閾値ＧＶｔと階調値ＧＶとの比較を行う。こうして、比較を繰り返した結果、ステップＳ８１０において、初めて階調値ＧＶが、階調閾値ＧＶｔ未満となれば（ステップＳ８１０：Ｎｏ）、そのときのエンコード値ＥＶの値が、エンコード結果のエンコード値ＥＶとして確定する（ステップＳ８１６）。
【０１１６】
以上で説明したエンコード処理によれば、図１０に示したエンコードテーブルＥＴを参照することにより、入力画素の階調値を、その画素が属するブロックに応じて、５ビットのエンコード値に変換することができる。エンコードユニット４１０は、このエンコード処理を、ＣＭＹ画像の全画素について実行する。
【０１１７】
説明を図１６に戻す。上述したエンコード処理によって、エンコードユニット４１０は階調値をエンコード値ＥＶに変換すると、その値を、ＳＤＲＡＭ１５２内の中間バッファＢＦにバッファリングする（ステップＳ８２０）。上述したエンコード処理の結果、この中間バッファＢＦには、８ビットの階調値ではなく、５ビットのエンコード値ＥＶが格納される。そのため、ＳＤＲＡＭ１５２の記憶容量を大幅に削減することができる。インタレース印刷を行う際には、中間バッファＢＦには、ノズルピッチ間に存在するラインが予め間引かれて、エンコード値ＥＶがバッファリングされることになる。
【０１１８】
エンコードユニット４１０によってエンコード値ＥＶが中間バッファＢＦにバッファリングされると、次に、デコードユニット４２０が、このエンコード値ＥＶに基づき、図４に示した印刷データを生成するデコード処理を実行する（ステップ８４０）。
【０１１９】
（Ｄ−２）デコード処理：
図２０は、デコード処理の詳細なフローチャートである。このデコード処理が実行されると、デコードユニット４２０は、まず、中間バッファＢＦに蓄積されたエンコード値ＥＶを読み出す（ステップＳ８２２）。このときデコードユニット４２０は、１ライン分に相当するエンコード値ＥＶを中間バッファＢＦから読み出す。ただし、インタレース印刷を行う場合には、デコードユニット４２０は、ノズルピッチ間に存在するラインを読み飛ばす。
【０１２０】
エンコード値ＥＶを読み出した後、デコードユニット４２０は、処理対象のエンコード値ＥＶの生成元である画素が属するブロック番号の計算を行う（ステップＳ８２４）。エンコード値ＥＶは、エンコード処理された順序で中間バッファＢＦにバッファリングされているため、この順序通りにエンコード値ＥＶを読み出せば、そのエンコード値ＥＶに対応するブロック番号も上述した計算方法によって自ずと算出することができる。なお、デコード処理においても、ＳＤＲＡＭ１５２に記憶されたプレデコードテーブルＤＴ１および順序値テーブルＳＴの中から、デコード処理に必要なブロック番号に該当する部分のみを予めＳＲＡＭ１５６に入力しておくものとする。
【０１２１】
ブロック番号の計算を行うと、デコードユニット４２０は、図１２に示したプレデコードテーブルＤＴ１（実際には、ＳＲＡＭ１５６に入力された部分的なプレデコードテーブルＤＴ１）を参照して、ステップＳ８２２において取得したエンコード値ＥＶと、ステップＳ８２４によって求めたブロック番号とに対応したインデックス値を取得する（ステップＳ８２６）。そして、更に、ポストデコードテーブルＤＴ２を参照して、このインデックス値に対応するドット数データを取得する（ステップＳ８２８）。このポストデコードテーブルＤＴ２については、テーブル全体を予めＳＲＡＭ１５６に入力しておくものとする。ポストデコードテーブルＤＴ２は比較的容量が少ないため（１６５×１６ビット＝３３０バイト）、ＳＲＡＭ１５６の容量を圧迫することはないからである。ポストデコードテーブルＤＴ２からドット数データを取得すると、デコードユニット４２０は、各サイズのドットをブロック内に配置して印刷データを生成する印刷データ生成処理を実行する（ステップＳ８３０）。
【０１２２】
図２１は、印刷データ生成処理の詳細なフローチャートである。図２２は、この印刷データ生成処理によるドットの配置工程を模式的に示す説明図である。図２１に示すように、この印刷データ生成処理が実行されると、デコードユニット４２０は、まず、現在のブロックに対応する順序値データ（図７（ｃ）参照）を、ＳＲＡＭ１５６に部分的に記憶された順序値テーブルＳＴ（図７（ｄ）参照）から取得する（ステップＳ９００）。そして、これからドットを配置するブロック内の全要素に対して、「ドット無し」を表すドットサイズ値「００」を設定して初期化し（ステップＳ９１０）、これからドットを配置しようとするブロック内の位置を、図２２（ａ）に示す「ａ」の位置（最も左上の位置）に設定する（ステップＳ９２０）。
【０１２３】
ドットを配置しようとする位置を設定すると、デコードユニット４２０は、現在のドット位置に対応する順序値を順序値データから取得する（ステップＳ９３０）。図２２（ｂ）には、順序値テーブルＳＴから入力した順序値データの一例を示している。図示した例では、現在の位置「ａ」に対応する順序値は、「５」となるため、上記ステップＳ９３０では、この値「５」が取得される。
【０１２４】
次に、デコードユニット４２０は、ポストデコードテーブルＤＴ２から取得したドット数データから、ステップＳ９３０で取得した順序値に対応するドットサイズ値を取得する（ステップＳ９４０）。具体的には、ドット数データの下位ビット側から２ビット毎に、ステップＳ９３０で取得した順序値の値分だけ数え、その位置に記録されたドットサイズ値を取得する。図２２（ｃ）には、ポストデコードテーブルＤＴ２から取得したドット数データの一例を示している。かかる図において、順序値「５」に対応するドットサイズ値は、ドットサイズデータの下位ビットから数えて６つめのドットサイズ値「０１」である。ドットサイズ値「０１」は、Ｓサイズのドットであることを表す。
【０１２５】
ドットサイズ値を取得すると、ＣＰＵ１５１は、取得したドットサイズ値を、ブロック内の現在の位置に設定する（ステップＳ９５０）。つまり、図２２（ｄ）に示すように、現在の位置が「ａ」の位置であれば、かかる位置に、図２２（ｃ）のドット数データから取得されたドットサイズ値「０１」を設定する。
【０１２６】
現在の位置にドットサイズ値を設定すると、ＣＰＵ１５１は、全ての位置についてドットサイズ値の設定が終了したか否かを判断する（ステップＳ９６０）。その結果、全ての位置についてドットサイズ値の設定が終了していれば（ステップＳ９６０：Ｙｅｓ）、当該印刷データ生成処理を終了する。一方、終了していなければ、ブロック内の現在の位置をａ，ｂ，ｃ，ｄ，・・・の順（図２２（ａ）参照）に移動し（ステップＳ９７０）、処理を上記ステップＳ９３０に戻すことで、他の位置についてドットサイズ値の設定を行う。
【０１２７】
以上で説明した印刷データ生成処理が、中間バッファＢＦにバッファリングされたすべてのエンコード値ＥＶについて完了すれば、デコードユニット４２０によるデコード処理が完了する。デコード処理によって生成された印刷データは、ＳＤＲＡＭ１５２のバースト長に合わせて、８ワード（１６バイト）毎にデータ回転ユニット５００に転送される。具体的には、図２２（ｄ）に示した４×２ドットの印刷データを横方向に２個並べ、これらを、上半分のラインと下半分のラインとに２分割する。そうすると、各ラインのデータが２バイト（１６ビット）であるため、これを８個分まとめたデータが１回のバースト転送でデータ回転ユニット５００に転送される。インタレース印刷を行う場合には、デコード処理時にすでに、ノズルピッチ間に存在するラインが読み飛ばされている。そのため、データ回転ユニット５００に転送される印刷データについても、ノズルピッチ間に存在する印刷データは予め間引かれている。なお、上述した印刷データ生成処理においてデコードユニット４２０は、順序値テーブルＳＴを参照することで、ドットの配置を行うものとした。これに対して、デコードユニット４２０は、ディザマトリックスデータＤＭ内の該当するブロックを直接参照して、閾値の低い要素から順にドットを発生させることで、ドットの配置を行うものとしてもよい。
【０１２８】
（Ｅ）印刷データ回転処理： 
次に、図５に示した印刷処理のステップＳ５０で実行される印刷データ回転処理について説明する。図２３および図２４は、印刷データ回転処理の概念を示す説明図である。図２３には、印刷データが回転されることなくイメージバッファＩＢに記憶されている様子を示している。一方、図２４には、印刷データが回転されてイメージバッファＩＢに記憶されている様子を示している。これらの図には、イメージバッファＩＢ内のメモリ空間に、「０」から「６３」まで番号を付した印刷データが記憶されている例を示している。
【０１２９】
図２を用いて説明したように、インクヘッド２１１には、複数のノズルが副走査方向に配置されているため、キャリッジ２１０が１回主走査されると複数のラスタラインが同時に印刷用紙に印刷される。従って、インクヘッド２１１には、ライン毎に印刷データを供給するのではなく、イメージバッファＩＢからノズル数分の印刷データを垂直方向に読み出して供給する必要がある。このとき、図２３に示すように、印刷データがイメージバッファＩＢに、アドレスの方向に従って記憶されていると、アドレスをスキップしながら（図２３の例では、印刷データ８個分だけスキップしながら）データを読み出す必要がある。そのため、印刷データの読み込み効率が低下し、印刷速度が低下してしまうことになる。
【０１３０】
しかし、図２４に示すように、印刷データが９０度回転されてイメージバッファＩＢに記憶されていると、アドレス方向に従って印刷データを読み出すだけで、その印刷データをそのままインクヘッドに供給することが可能になる。従って、本実施例では、データ回転ユニット５００によって、イメージバッファＩＢに記憶される印刷データの回転を行うものとした。これにより、データの読み込み効率が高まり、印刷速度を向上させることが可能になる。
【０１３１】
図２５は、イメージバッファＩＢ内のメモリ空間の様子と、データ回転ユニット５００内のレジスタ（図３参照）に設定されるパラメータを示す説明図である。イメージバッファＩＢのメモリ空間は、ノズル１列分の印刷データを記憶可能な幅と、１ライン分の印刷データを記憶可能な高さとに対応する領域を有している。データ回転ユニット５００内のレジスタには、ＣＰＵ１５１によって、先頭アドレスＬＡと、ノズル数ＮＮと、オフセットアドレスＦＡと、ラインデータ数ＬＮとが設定される。先頭アドレスＬＡは、ＳＤＲＡＭ１５２内に確保されたイメージバッファＩＢの先頭のアドレスを示す。ノズル数ＮＮは、インクヘッド２１１に配置された１列分のノズルの数である。これは、キャリッジ２１０の一度の主走査で印刷用紙Ｐに形成されるラインの数と同じである。オフセットアドレスＦＡは、ノズル数ＮＮに２バイトを乗算した値であり、ノズル数ＮＮ分のアドレスをスキップするためのパラメータである。ラインデータ数ＬＮは、ハーフトーン処理ユニット４００から取得される１ライン分のデータ量を表す。これらのパラメータは、図１６に示したハーフトーン処理に先立って、入力した画像データのサイズに応じてＣＰＵ１５１によって設定される。
【０１３２】
本実施例の印刷装置１００が備えるＳＤＲＡＭ１５２は、バースト長が８ワード（１６バイト）である。図２２（ｄ）に示した１つの印刷データは、１ワード（１６ビット）のデータを有しており、この１つの印刷データが１つの画素を表している。そのため、本実施例のＳＤＲＡＭ１５２を用いれば、１回のバースト転送で、８画素分に相当するデータ量を転送することができる。そこで、本実施例では、８×８画素分の印刷データを、以下で説明する印刷データ回転処理の単位として扱う。以下では、この８×８画素の印刷データを、「正方ブロック」というものとする。図２５に示したイメージバッファＩＢのメモリ空間には、この正方ブロックが、ｍ×ｎ個、記憶されている例を示している。なお、本実施例では、ＳＤＲＡＭ１５２のバースト長が８ワードであるため、８×８画素分の印刷データを印刷データ回転処理の単位としたが、バースト長が１６ワードであれば、１６×１６画素分の印刷データを印刷データ回転処理の単位とすることができる。もちろん、他のバースト長であっても、それに合わせて正方ブロックのサイズを変動させることが可能である。
【０１３３】
図２６は、データ回転ユニット５００が実行する印刷データ回転処理のフローチャートである。この処理が開始されると、まず、データ回転ユニット５００は、印刷データ回転処理に使用するレジスタとカウンタの値を初期化する（ステップＳ６００）。具体的には、イメージバッファＩＢ内のデータの記憶先のアドレスを示すアドレスレジスタＡＤＲの値を「０」、アドレスを一時的に保存するためのアドレス保存レジスタＡＲＥＧの値を「０」、１ライン分のデータ量をカウントする第１カウンタＣＮＴ１の値を「０」、８ライン分のデータ量をカウントする第２カウンタＣＮＴ２を「０」、ノズル数をカウントする第３カウンタＣＮＴ３を「０」とする。
【０１３４】
レジスタとカウンタの値を初期化すると、データ回転ユニット５００は、ハーフトーン処理ユニット４００から１ライン分の印刷データを入力する（ステップＳ６０５）。そして、入力した印刷データから８画素分のデータ（１６バイト）をアドレスレジスタＡＤＲが示すイメージバッファＩＢのアドレスに書き込む（ステップＳ６１０）。１６バイト分のデータをイメージバッファＩＢに書き込むと、データ回転ユニット５００は、次に書き込むべきアドレスの計算を下記式（３）に従って計算する（ステップＳ６１５）。下記式（３）によれば、次に書き込むべきアドレスは、オフセットアドレスＦＡに「８（画素）」を乗じて得た値を現在のアドレスに加算した値となる。
【０１３５】
ＡＤＲ＝ＡＤＲ＋ＦＡ＊８  ・・・（３）
【０１３６】
次に、データ回転ユニット５００は、第１カウンタＣＮＴ１に「１６（バイト）」を加算することで、書き込まれたデータのバイト数をカウントする（ステップＳ６２０）。データ回転ユニット５００は、第１カウンタＣＮＴ１の値が「ＬＮ」に達するまで、すなわち、１ライン分のデータが書き込まれるまで、上述したステップＳ６１０からステップＳ６２０までの処理を繰り返す（ステップＳ６２５）。
【０１３７】
図２７は、１ライン分の印刷データの書き込みが完了したイメージバッファＩＢの状態を模式的に表す説明図である。図示するように、１ライン分の印刷データの書き込みが完了すると、イメージバッファＩＢ内は、１ライン分の印刷データがｎ個に分割され、これらが、アドレスの方向とは垂直の方向に書き込まれた状態になる。図２７に示したステップ番号は、図２に示した各処理との対応関係を示している。
【０１３８】
説明を図２６に戻す。１ライン分の印刷データの書き込みが完了すると、データ回転ユニット５００は、第１カウンタＣＮＴ１をリセットして、その値を「０」に戻す（ステップＳ６３０）。そして、次に印刷データを書き込むべきアドレスを下記式（４）に従って計算する（ステップＳ６３５）。下記式（４）によれば、次に書き込むべきアドレスは、オフセットアドレスＦＡに第２カウンタＣＮＴ２の値を乗じて得た値を、現在のアドレス保存レジスタＡＲＥＧに保存されているアドレスに加算した値となる。
【０１３９】
ＡＤＲ＝ＡＲＥＧ＋ＦＡ＊ＣＮＴ２  ・・・（４）
【０１４０】
アドレスの計算を終えると、データ回転ユニット５００は、第２カウンタＣＮＴ２の値を１つインクリメントする（ステップＳ６４０）。そして、インクリメントされた第２カウンタＣＮＴ２が、「８」になったかを判断する（ステップＳ６４５）。このステップＳ６４５では、８ライン分の印刷データをイメージバッファＩＢに書き込んだかを判断している。８ライン分の印刷データの書き込みが完了していなければ（ステップＳ６４５：Ｎｏ）、データ回転ユニット５００は、処理を上記ステップＳ６０５に戻す。こうすることで、次のラインを読み込み、そのデータをイメージバッファＩＢに書き込みことができる。図２８は、２本目のラインが読み込まれてイメージバッファＩＢに書き込まれた様子を示している。
【０１４１】
上記ステップＳ６４５において、第２カウンタＣＮＴ２が「８」になったと判断されれば（ステップＳ６４５：Ｙｅｓ）、８ライン分の印刷データが読み込まれ、これが、ｎ個の正方ブロックに分割されてイメージバッファＩＢに書き込まれたことになる。そこで、データ回転ユニット５００は、これらの正方ブロックをそれぞれ回転させるブロック回転処理を実行する（ステップＳ６５０）。
【０１４２】
図２９は、ブロック回転処理の概念を模式的に示す説明図である。図２９には、イメージバッファＩＢに記憶された最初の正方ブロックの回転処理が既に完了した様子を示すとともに、２番目の正方ブロックについて回転処理を行っている様子を示している。このブロック回転処理では、まず、データ回転ユニット５００は、回転対象となる１つの正方ブロックをイメージバッファＩＢから制御ユニット１５０のＳＲＡＭにコピーする。そして、コピーした正方ブロックから列毎にデータを読み込み、これをイメージバッファＩＢ内の元の正方ブロックの位置に、アドレスの方向に沿って書き戻す。データ回転ユニット５００は、この回転処理を、イメージバッファＩＢに縦方向に記録されたｎ個の正方ブロック全てについて行う。この処理が完了すれば、８ライン分のデータの回転処理が終了することになる。
【０１４３】
なお、データ回転ユニット５００は、ブロック回転処理を実行している間にも、次のラインの印刷データを読み込んで、イメージバッファＩＢの次の列に書き込む処理を行う。すなわち、図２６のステップＳ６５０においてブロック回転処理が実行されると、この処理の終了を待つことなく、処理を次のステップに進める。回転処理後の印刷データは、元の正方ブロックの位置に書き戻されるため、次のラインの印刷データの書き込み先と書き込み先の領域が重複することがないからである。こうすることで、正方ブロックの回転処理と印刷データの入力とを同時並列的に行うことができるので、処理速度を向上させることが可能になる。
【０１４４】
説明を図２６に戻す。ｎ個の正方ブロックについて回転処理が終了すると、データ回転ユニット５００は、第２カウンタＣＮＴ２をリセットして値を「０」に戻す（ステップＳ６５５）。そして、次に印刷データを書き込むべきアドレスを計算する（ステップＳ６６０）。具体的には、アドレス保存レジスタＡＲＥＧに、ＳＤＲＡＭのバースト長と同じ値である「１６」を加えたアドレスが、次にデータを書き込むべきアドレスになる。アドレスの計算を終えると、データ回転ユニット５００は、アドレス保存レジスタＡＲＥＧの値に、同じく、「１６」を加算し（ステップＳ６６５）、更に、第３カウンタＣＮＴ３の値に「８（ライン）」を加算する（ステップＳ６７０）。
【０１４５】
第３カウンタＣＮＴ３を加算した後、データ回転ユニット５００は、その第３カウンタＣＮＴ３の値がノズル数ＮＮに達したかを判断する（ステップＳ６７５）。第３カウンタＣＮＴ３の値がノズル数ＮＮに達していない場合には（ステップＳ６７５：Ｎｏ）、データ回転ユニット５００は、処理をステップＳ６０５に戻す。こうすることで、データ回転ユニット５００は、イメージバッファＩＢに対して、次の列の正方ブロックを蓄積することができる。図３０は、イメージバッファＩＢ内に、２列目の正方ブロックが書き込みが開始された様子を示していている。
【０１４６】
上記ステップＳ６７５において、第３カウンタＣＮＴ３の値が、ノズル数ＮＮに達したと判断された場合には（ステップＳ６７５：Ｙｅｓ）、当該印刷データ回転処理は終了する。上述した処理により、データ回転ユニット５００は、１主走査当たりに必要とされる印刷データの並び替えおよび蓄積を行うことができる。こうしてイメージバッファＩＢに蓄積された印刷データは、ヘッドコントロールユニット１５６によって読み込まれ、１主走査分の印刷に供されることになる。データ回転ユニット５００は、上述した印刷データ回転処理を全てのラインについて行うことで、出力画像１枚分の印刷データの並び替えを行うことができる。
【０１４７】
（Ｆ）効果：
以上で説明した本実施例の印刷装置１００のデータ回転ユニット５００は、デコード処理の結果生成された印刷データをライン毎に読み込むと、所定のアドレス計算を行うことで、これを、８×８画素の正方ブロック毎に、イメージバッファＩＢ内に縦方向に蓄積する。そして、１列分の正方ブロックの書き込みが完了する度に、各正方ブロックについて回転処理を行い、回転処理後の印刷データを、元の正方ブロックの位置に書き戻す。そのため、本実施例によれば、従来のように、ライン毎に印刷データを蓄積するバッファと、回転後の印刷データを蓄積するバッファの２種類のバッファをＳＤＲＡＭ１５２内に用意する必要がない。そのため、少ないメモリ容量で、印刷データの記憶を行うことが可能になる。
【０１４８】
また、本実施例では、１列分の正方ブロックについてブロック回転処理を実施している間にも、次の印刷データを読み込んでこれをイメージバッファＩＢに書き込む。そのため、より効率的に印刷データの記憶を行うことが可能になる。
【０１４９】
更に、本実施例では、ＳＤＲＡＭ１５２のバースト長に合わせて正方ブロックのサイズを規定した。そのため、ＳＤＲＡＭ１５２に対するアクセス効率を落とすことなく、印刷データの回転を行うことが可能になる。この結果、印刷速度を全体として向上させることができる。
【０１５０】
更に、本実施例で採用したハーフトーン処理によれば、次のような効果が生じる。すなわち、図２２（ｄ）に示した印刷データの生成結果と、図２２（ｂ）に示した４×２の順序値データとを対比してみると、サイズの大きなドットから順に、ドットが重複無く順序値の低い位置に配置されていることがわかる。順序値が低いということは、その順序値に対応する閾値の値が低いということになる（図７（ｂ）参照）。図７（ａ）に示したディザマトリックスデータＤＭは、組織的ディザ法におけるディザパターンとしての性質上、閾値は、その値が低いほど分散性よく配置されており、その値が高くなるほど、既に配置された閾値の場所を避けるように配置されている。そのため、図２２（ｄ）に示した印刷データでは、最も大きなサイズのドットから優先的に、低い順序値、すなわち、低い閾値の場所に配置されることになり、大きなサイズのドットほど、分散性がよく配置されることになる。従って、本実施例におけるドットの配置方法によれば、印刷用紙上で目立つことになる大きなドットの分散性を最も高めることができるため、出力画像の画質を大幅に向上させることが可能になる。
【０１５１】
また、従来の濃度パターン法では、階調値のみに応じて画一的に多値化を行うため、実質的な階調数が低減してしまう可能性があった。しかし、本実施例では、ディザマトリックス内のどのブロックが何階調になるのか特別な規則性がないため、ブロック毎にエンコード値の取り得る値が異なることになる（図１１参照）。この結果、従来の多値化手法よりも大幅に出力画像の画質を向上させることができる。このような効果は、ディザマトリックスデータＤＭとしてドットを良好に分散させることのできるブルーノイズ特性を有するディザマトリックスを採用することにより、より顕著に現れる。
【０１５２】
また、本実施例では、ハーフトーン処理に用いる各種テーブルを、ディザマトリックスデータＤＭとドット発生量テーブルＤＧＴとに基づき生成するものとしたため、ディザマトリックスデータＤＭ内の閾値の配置について適宜最適化を図ることにより、比較的容易に出力画像の画質を向上させることができる。つまり、本実施例のように、ブロック毎にそのブロックの位置に応じたハーフトーン処理を行うことのできるテーブルの構造を用いれば、従来の多値化で用いられていた画一的な変換テーブルよりも柔軟に画質の向上を図ることが可能になる。
【０１５３】
また、本実施例のハーフトーン処理によれば、エンコードテーブルＥＴと、プレデコードテーブルＤＴ１と、ポストデコードテーブルＤＴ２と、順序値テーブルＳＴとを順次参照していくことで、ＣＭＹ画像に対するハーフトーン処理が完了する。従って、誤差拡散法などの他のハーフトーン処理のように、誤差を分散させるような複雑な演算を行うことがない。この結果、極めて高速なハーフトーン処理を実現することができる。また、本実施例のハーフトーン処理では、ハーフトーン処理の対象の画素の位置がわかれば、１画素単位で印刷データを生成することができる。そのため、一定のノズルピッチを空けてラインを形成するインタレース印刷時においても、ノズルの位置に対応する画素のみを容易に印刷データに変換することができる。
【０１５４】
また、本実施例では、ハーフトーン処理を、エンコード処理とデコード処理との２段階の処理に分割し、エンコード処理の結果生成されたエンコード値ＥＶを、ＳＤＲＡＭ１５２内の中間バッファＢＦに一時的に蓄積するものとした。従って、デコード処理以降に、印刷機構によるドットの形成に時間を要する場合であっても、エンコード処理の結果得られたエンコード値ＥＶを、ＳＤＲＡＭ１５２にバッファリングすることで、早期にエンコード処理のみを終了させることができる。この結果、ＣＰＵ１５１を印刷に関する処理から迅速に解放することが可能になる。また、この中間バッファＢＦには、各色８ビット（２５５階調）のデータ容量を有するＣＭＹ画像のデータが、エンコード処理によって、各色５ビットのエンコード値ＥＶに減縮されて記憶されるため、ＳＤＲＡＭ１５２の記憶容量を大幅に削減することができる。この結果、印刷装置１００の製造コストを削減することが可能になる。
【０１５５】
なお、本実施例では、図５に示したように、印刷処理が実行される度に初期化処理を実行するものとして説明したが、初期化処理は、その他のタイミングで実行するものとしてもよい。例えば、印刷装置１００の電源投入時に実行されるものとしてもよいし、ユーザによって、印刷用紙や印刷モードの設定が変更された際に実行されるものとしてもよい。
【０１５６】
以上、本発明の実施例について説明したが、本発明はこのような実施例に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができることはいうまでもない。例えば、ハードウェアによって実現した機能は、ソフトウェアによって実現してもよい。もちろん、その逆も可能である。
【図面の簡単な説明】
【０１５７】
【図１】実施例としての印刷装置を示す説明図である。
【図２】印刷装置の内部構成を示す説明図である。
【図３】画像処理ユニットの詳細な構成を示す説明図である。
【図４】印刷データの一例を示す説明図である。
【図５】印刷処理のフローチャートである。
【図６】初期化処理の詳細を示すフローチャートである。
【図７】ディザマトリックスデータのデータ構造および順序値テーブルの生成方法を示す説明図である。
【図８】ポストデコードテーブルの一例を示す説明図である。
【図９】ドット発生量テーブルの一例を示す説明図である。
【図１０】エンコードテーブルのデータ構造を示す説明図である。
【図１１】エンコード値の変化の例を模式的に示す説明図である。
【図１２】プレデコードテーブルのデータ構造を示す説明図である。
【図１３】テーブル生成処理の詳細を示すフローチャートである。
【図１４】ドット数カウント処理の詳細を示すフローチャートである。
【図１５】ドット数カウント処理の具体例を示す説明図である。
【図１６】ハーフトーン処理のフローチャートである。
【図１７】エンコード処理の詳細を示すフローチャートである。
【図１８】ブロック番号の計算方法の概念を示す説明である。
【図１９】ブロック番号の他の計算方法の概念を示す説明図である。
【図２０】デコード処理の詳細なフローチャートである。
【図２１】印刷データ生成処理の詳細なフローチャートである。
【図２２】ドットの配置工程を模式的に示す説明図である。
【図２３】印刷データ回転処理の概念を示す説明図である。
【図２４】印刷データ回転処理の概念を示す説明図である。
【図２５】イメージバッファ内のメモリ空間の様子とデータ回転ユニット内のレジスタに設定されるパラメータの種類とを示す説明図である。
【図２６】印刷データ回転処理のフローチャートである。
【図２７】１ライン分の印刷データの書き込みが完了したイメージバッファの状態を模式的に表す説明図である。
【図２８】２本目のラインが読み込まれてイメージバッファＩＢに書き込まれた様子を示す説明図である。
【図２９】ブロック回転処理の概念を模式的に示す説明図である。
【図３０】イメージバッファ内に２列目の正方ブロックの書き込みが開始された様子を示す説明図である。
【符号の説明】
【０１５８】
１００…印刷装置
１１０…スキャナ
１２０…メモリカードスロット
１３０…ＵＳＢインタフェース
１４０…操作パネル
１４５…液晶モニタ
１５０…制御ユニット
１５１…ＣＰＵ
１５２…ＳＤＲＡＭ
１５３…ＲＯＭ
１５５…画像処理ユニット
１５６…ヘッドコントロールユニット
２１０…キャリッジ
２１１…インクヘッド
２１２…インクカートリッジ
２２０…キャリッジモータ
２３０…紙送りモータ
２６０…駆動ベルト
２７０…プラテン
２８０…摺動軸
３００…色変換ユニット
４００…ハーフトーン処理ユニット
５００…データ回転ユニット
４１０…エンコードユニット
４２０…デコードユニット
ＩＢ…イメージバッファ
ＭＣ…メモリカード
ＢＦ…中間バッファ
ＤＭ…ディザマトリックスデータ
ＥＴ…エンコードテーブル
ＳＴ…順序値テーブル
ＤＴ１…プレデコードテーブル
ＤＴ２…ポストデコードテーブル
ＤＧＴ…ドット発生量テーブル
ＬＵＴ…色変換テーブル
【図１】
2008221769.tif 000003
【図２】
2008221769.tif 000004
【図３】
2008221769.tif 000005
【図４】
2008221769.tif 000006
【図５】
2008221769.tif 000007
【図６】
2008221769.tif 000008
【図７】
2008221769.tif 000009
【図８】
2008221769.tif 000010
【図９】
2008221769.tif 000011
【図１０】
2008221769.tif 000012
【図１１】
2008221769.tif 000013
【図１２】
2008221769.tif 000014
【図１３】
2008221769.tif 000015
【図１４】
2008221769.tif 000016
【図１５】
2008221769.tif 000017
【図１６】
2008221769.tif 000018
【図１７】
2008221769.tif 000019
【図１８】
2008221769.tif 000020
【図１９】
2008221769.tif 000021
【図２０】
2008221769.tif 000022
【図２１】
2008221769.tif 000023
【図２２】
2008221769.tif 000024
【図２３】
2008221769.tif 000025
【図２４】
2008221769.tif 000026
【図２５】
2008221769.tif 000027
【図２６】
2008221769.tif 000028
【図２７】
2008221769.tif 000029
【図２８】
2008221769.tif 000030
【図２９】
2008221769.tif 000031
【図３０】
2008221769.tif 000032