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