(57)【特許請求の範囲】
【請求項１】
画像に対してｎ×ｍのマトリックスを用いて擬似中間調処理を施す擬似中間調手段と、
前記擬似中間調処理が施された画像を、符号化対象画素から距離ｎ×ａ（ａ＞０）だけ上方に離れた第１参照画素と、前記符号化対象画素から距離ｍ×ｂ（ｂ＞０）だけ左方に離れた第２参照画素とを用いて前記符号化対象画素を符号化する符号化手段と、
前記第１参照画素と前記第２参照画素が共に前記符号化対象画素と一致しない場合には、前記符号化対象画素を含む画素データ列の一部もしくは全部を格納する格納手段とを備え、
前記符号化手段は、前記第１参照画素と前記第２参照画素が共に前記符号化対象画素と一致しない場合には、前記格納手段が格納した第３参照画素を用いて前記符号化対象画素を符号化することを特徴とする画像処理装置。
【請求項２】
画像を圧縮する画像処理装置であって、
画像に対してディザマトリックスを用いて色変換処理を行い、色毎の画像データを生成する色変換手段と、
前記色毎の画像データを圧縮し、符号化する符号化手段と、
前記符号化手段による符号化データを出力する出力手段とを備え、
更に前記符号化手段は、
圧縮対象の列の画素データ列と、当該列と所定の位置関係にある列の画素データ列とを比較して、一致する画素データ列の長さを求め、当該一致する画素データ列として、前記比較内容を示すコマンドと共に、前記長さを示すコマンドを出力する第１のコマンド出力手段と、
前記長さが０の場合、圧縮対象の列の画素データ列と、当該列において所定の位置関係にある画素データ列とを比較して、一致する画素データ列の長さを求め、当該一致する画素データ列として、前記比較内容を示すコマンドと共に、前記長さを示すコマンドを出力する第２のコマンド出力手段と、
前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、圧縮対象の列の画素データ列の一部もしくは全部を格納する格納手段と、
前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、圧縮対象の画素データと前記格納手段に格納された画素データ列とを比較し、前記圧縮対象の画素データとして、一致する画素データの前記格納手段における位置を示すコマンドと共に、前記比較内容を示すコマンドを出力する第３のコマンド出力手段と、
前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、且つ、前記第３のコマンド出力手段による比較の結果、圧縮対象の画素データと一致する画素データが前記格納手段に存在しないと判断された場合、圧縮対象の画素データを示すコマンドを出力する第４のコマンド出力手段とを備え、
前記第１乃至４のコマンド出力手段の一部もしくは全部によるコマンドを含む符号化データを生成することを特徴とする画像処理装置。
【請求項３】
前記色変換手段は、画像に対してディザマトリックスを用いることで、赤、緑、青を用いた画像をシアン、マゼンタ、黄、黒を用いた画像に色変換し、前記符号化手段は、シアン、マゼンタ、黄、黒の各色の画像データに対して符号化を行うことを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記第３のコマンド出力手段は、前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、圧縮対象の画素データと前記格納手段に格納された画素データ列とを比較し、前記圧縮対象の画素データとして、一致する画素データの前記格納手段における位置を示すコマンドと共に、前記比較を示すコマンドを出力し、
更に、前記一致する画素データを前記格納手段に格納することを特徴とする請求項２に記載の画像処理装置。
【請求項５】
前記第４のコマンド出力手段は、前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、且つ、前記第３のコマンド出力手段による比較の結果、圧縮対象の画素データと一致する画素データが前記格納手段に存在しないと判断された場合、圧縮対象の画素データを示すコマンドを出力し、
更に、前記圧縮対象の画素データを前記格納手段に格納することを特徴とする請求項２に記載の画像処理装置。
【請求項６】
前記格納手段はキャッシュバッファであって、前記第３のコマンド出力手段は、圧縮対象の画素データとして、圧縮対象の画素データに対してキャッシュがヒットした前記キャッシュバッファの位置を示すコマンドと共に、前記比較内容を示すコマンドを出力することを特徴とする請求項２乃至５のいずれか１項に記載の画像処理装置。
【請求項７】
前記出力手段は、出力する符号化データの総ビット数が８の倍数となるように０を補填することを特徴とする請求項２に記載の画像処理装置。
【請求項８】
前記所定の位置関係は、前記ディザマトリックスの周期に応じたものであることを特徴とする請求項２に記載の画像処理装置。
【請求項９】
請求項２乃至８のいずれか１項に記載の画像処理装置による符号化データを復号する画像処理装置であって、
復号した画素データ列を格納する第１の格納手段と、
復号した画素データ列を所定個数分シフトして格納する第２の格納手段と、
前記第４のコマンド出力手段により出力されたコマンドが表す画素データを格納する第３の格納手段と、
前記第１乃至４のコマンド出力手段から出力されたコマンドの内容を特定し、特定した内容に応じて前記第１の格納手段、もしくは第２の格納手段、もしくは第３の格納手段に格納された画素データを用いて画像を復元する復元手段と
を備えることを特徴とする画像処理装置。
【請求項１０】
前記第１の格納手段はラインバッファであって、前記第１のコマンド出力手段により比較される夫々の画素データ列の間隔分のサイズを有するリングメモリであることを特徴とする請求項９に記載の画像処理装置。
【請求項１１】
前記第２の格納手段はシフトレジスタとセレクタにより構成されており、復号した画素データ列を、前記第２のコマンド出力手段により比較される夫々の画素データの間隔分シフトすることを特徴とする請求項９に記載の画像処理装置。
【請求項１２】
前記第３の格納手段はキャッシュメモリであることを特徴とする請求項９に記載の画像処理装置。
【請求項１３】
前記復号手段は、前記第１のコマンド出力手段により出力されたコマンドの場合、当該コマンドによって特定される前記第１の格納手段に格納された画素データ列を読み出して、前記第１の格納手段に格納された画素データ列の最後尾に追加して格納すると共に、前記第２の格納手段の先頭に格納することを特徴とする請求項９乃至１２のいずれか１項に記載の画像処理装置。
【請求項１４】
前記復号手段は、前記第２のコマンド出力手段により出力されたコマンドの場合、当該コマンドによって特定される個数分の画素データ列を前記第２の格納手段から読み出して、前記第１の格納手段に格納された画素データ列の最後尾に追加して格納すると共に、前記第２の格納手段の先頭に格納することを特徴とする請求項９乃至１２のいずれか１項に記載の画像処理装置。
【請求項１５】
前記復号手段は、前記第３のコマンド出力手段により出力されたコマンドの場合、当該コマンドによって特定される前記第３の格納手段に格納された画素データを読み出して、前記第１の格納手段に格納された画素データ列の最後尾に追加して格納すると共に、前記第３の格納手段の先頭に格納することを特徴とする請求項９乃至１２のいずれか１項に記載の画像処理装置。
【請求項１６】
前記復号手段は、前記第４のコマンド出力手段によって出力されたコマンドの場合、当該コマンドが表す画素データを前記第１の格納手段に格納された画素データ列の最後尾に追加して格納すると共に、前記第３の格納手段の先頭に格納することを特徴とする請求項９乃至１２のいずれか１項に記載の画像処理装置。
【請求項１７】
画像に対してｎ×ｍのマトリックスを用いて擬似中間調処理を施す擬似中間調工程と、
前記擬似中間調処理が施された画像を、符号化対象画素から距離ｎ×ａ（ａ＞０）だけ上方に離れた第１参照画素と、前記符号化対象画素から距離ｍ×ｂ（ｂ＞０）だけ左方に離れた第２参照画素とを用いて前記符号化対象画素を符号化する符号化工程と、
前記第１参照画素と前記第２参照画素が共に前記符号化対象画素と一致しない場合には、前記符号化対象画素を含む画素データ列の一部もしくは全部を格納する格納工程とを備え、
前記符号化工程では、前記第１参照画素と前記第２参照画素が共に前記符号化対象画素と一致しない場合には、前記格納工程で格納された第３参照画素を用いて前記符号化対象画素を符号化することを特徴とする画像処理方法。
【請求項１８】
画像を圧縮する画像処理方法であって、
画像に対してディザマトリックスを用いて色変換処理を行い、色毎の画像データを生成する色変換工程と、
前記色毎の画像データを圧縮し、符号化する符号化工程と、
前記符号化工程による符号化データを出力する出力工程とを備え、
更に前記符号化工程では、
圧縮対象の列の画素データ列と、当該列と所定の位置関係にある列の画素データ列とを比較して、一致する画素データ列の長さを求め、当該一致する画素データ列として、前記比較内容を示すコマンドと共に、前記長さを示すコマンドを出力する第１のコマンド出力工程と、
前記長さが０の場合、圧縮対象の列の画素データ列と、当該列において所定の位置関係にある画素データ列とを比較して、一致する画素データ列の長さを求め、当該一致する画素データ列として、前記比較内容を示すコマンドと共に、前記長さを示すコマンドを出力する第２のコマンド出力工程と、
前記第１のコマンド出力工程で求めた長さ、前記第２のコマンド出力工程で求めた長さが共に０の場合、圧縮対象の列の画素データ列の一部もしくは全部を所定の格納手段に格納する格納工程と、
前記第１のコマンド出力工程で求めた長さ、前記第２のコマンド出力工程で求めた長さが共に０の場合、圧縮対象の画素データと前記格納工程で格納された画素データ列とを比較し、前記圧縮対象の画素データとして、一致する画素データの前記格納工程で格納した位置を示すコマンドと共に、前記比較内容を示すコマンドを出力する第３のコマンド出力工程と、
前記第１のコマンド出力工程で求めた長さ、前記第２のコマンド出力工程で求めた長さが共に０の場合、且つ、前記第３のコマンド出力工程での比較の結果、圧縮対象の画素データと一致する画素データが前記格納工程で格納していないと判断された場合、圧縮対象の画素データを示すコマンドを出力する第４のコマンド出力工程とを備え、
前記第１乃至４のコマンド出力工程の一部もしくは全部によるコマンドを含む符号化データを生成することを特徴とする画像処理方法。
【請求項１９】
請求項１８に記載の画像処理方法による符号化データを復号する画像処理方法であって、
復号した画素データ列を第１の格納手段に格納する第１の格納工程と、
復号した画素データ列を所定個数分シフトして第２の格納手段に格納する第２の格納工程と、
前記第４のコマンド出力工程で出力されたコマンドが表す画素データを第３の格納手段に格納する第３の格納工程と、
前記第１乃至４のコマンド出力工程で出力されたコマンドの内容を特定し、特定した内容に応じて前記第１の格納工程、もしくは第２の格納工程、もしくは第３の格納工程で格納された画素データを用いて画像を復元する復元工程と
を備えることを特徴とする画像処理方法。
【請求項２０】
コンピュータに請求項１７乃至１９のいずれか１項に記載の画像処理方法を実行させるためのコンピュータプログラム。
【請求項２１】
請求項２０に記載のコンピュータプログラムを格納した、コンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画像を圧縮する、又はその符号を復号する画像処理装置、画像処理方法、プログラム、及び記憶媒体に関するものである。
【０００２】
【従来の技術】
データを圧縮する方法として以前のデータ系列と一致する場合には、一致するデータの長さを符号化し、一致しない場合にはデータ自体を符号化するという方法がある。
【０００３】
例えば，ＬＺ７７圧縮法では、所定の大きさの移動窓内の任意の位置のデータ系列と一致する場合には、一致するデータ系列の位置および一致する長さを符号化し、一致しない場合にはデータ自体を符号化する。
【０００４】
また画像データを圧縮する場合には、あらかじめ定められた１箇所または複数の箇所の位置、例えば符号化しようとしているデータの上あるいは左の位置のデータ系列と一致する場合には一致する長さを符号化し、一致しない場合にはデータ自体を符号化するという方法がある。
【０００５】
一方、特開平６−２４２９２４号公報に示されるように、最近出現したデータをキャッシュバッファに記憶し、キャッシュがヒットした場合には、一致したデータが記憶されているインデックスを符号化することで、データ自体を符号化する場合に較べて短い符号に符号化するという方法がある。
【０００６】
【発明が解決しようとする課題】
しかしながら上述の方法では、データ系列が一致する部分が少ない場合にデータ自体を符号化した符号が多くなり、圧縮率が著しく低下するという欠点がある。
【０００７】
一方、特開平６−２４２９２４号公報に開示されている方法では、以前のデータ系列と一致する場合であってもその冗長性を圧縮に利用することができず、高い圧縮率を得ることが困難であった。
【０００８】
本発明は以上の問題に鑑みて成されたものであり、以前の画像データ列と一致する場合にはその冗長性を利用して高い圧縮率を得るとともに、画像データ列が一致する部分が少ない場合においても、圧縮率の低下を極力抑えることを目的とする。
【０００９】
【課題を解決するための手段】
本発明の目的を達成するために、例えば本発明の画像処理装置は以下の構成を備える。
【００１０】
すなわち、画像に対してｎ×ｍのマトリックスを用いて擬似中間調処理を施す擬似中間調手段と、
前記擬似中間調処理が施された画像を、符号化対象画素から距離ｎ×ａ（ａ＞０）だけ上方に離れた第１参照画素と、前記符号化対象画素から距離ｍ×ｂ（ｂ＞０）だけ左方に離れた第２参照画素とを用いて前記符号化対象画素を符号化する符号化手段と、
前記第１参照画素と前記第２参照画素が共に前記符号化対象画素と一致しない場合には、前記符号化対象画素を含む画素データ列の一部もしくは全部を格納する格納手段とを備え、
前記符号化手段は、前記第１参照画素と前記第２参照画素が共に前記符号化対象画素と一致しない場合には、前記格納手段が格納した第３参照画素を用いて前記符号化対象画素を符号化することを特徴とする。
【００１１】
本発明の目的を達成するために、例えば本発明の画像処理装置は以下の構成を備える。
【００１２】
すなわち、画像を圧縮する画像処理装置であって、
画像に対してディザマトリックスを用いて色変換処理を行い、色毎の画像データを生成する色変換手段と、
前記色毎の画像データを圧縮し、符号化する符号化手段と、
前記符号化手段による符号化データを出力する出力手段とを備え、
更に前記符号化手段は、
圧縮対象の列の画素データ列と、当該列と所定の位置関係にある列の画素データ列とを比較して、一致する画素データ列の長さを求め、当該一致する画素データ列として、前記比較内容を示すコマンドと共に、前記長さを示すコマンドを出力する第１のコマンド出力手段と、
前記長さが０の場合、圧縮対象の列の画素データ列と、当該列において所定の位置関係にある画素データ列とを比較して、一致する画素データ列の長さを求め、当該一致する画素データ列として、前記比較内容を示すコマンドと共に、前記長さを示すコマンドを出力する第２のコマンド出力手段と、
前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、圧縮対象の列の画素データ列の一部もしくは全部を格納する格納手段と、
前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、圧縮対象の画素データと前記格納手段に格納された画素データ列とを比較し、前記圧縮対象の画素データとして、一致する画素データの前記格納手段における位置を示すコマンドと共に、前記比較内容を示すコマンドを出力する第３のコマンド出力手段と、
前記第１のコマンド出力手段により求めた長さ、前記第２のコマンド出力手段により求めた長さが共に０の場合、且つ、前記第３のコマンド出力手段による比較の結果、圧縮対象の画素データと一致する画素データが前記格納手段に存在しないと判断された場合、圧縮対象の画素データを示すコマンドを出力する第４のコマンド出力手段とを備え、
前記第１乃至４のコマンド出力手段の一部もしくは全部によるコマンドを含む符号化データを生成する。
【００１３】
本発明の目的を達成するために、例えば本発明の画像処理装置は以下の構成を備える。
【００１４】
すなわち、上記画像処理装置による符号化データを復号する画像処理装置であって、
復号した画素データ列を格納する第１の格納手段と、
復号した画素データ列を所定個数分シフトして格納する第２の格納手段と、
前記第４のコマンド出力手段により出力されたコマンドが表す画素データを格納する第３の格納手段と、
前記第１乃至４のコマンド出力手段から出力されたコマンドの内容を特定し、特定した内容に応じて前記第１の格納手段、もしくは第２の格納手段、もしくは第３の格納手段に格納された画素データを用いて画像を復元する復元手段と
を備える。
【００１５】
【発明の実施の形態】
以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
【００１６】
［第１の実施形態］
図１１に本実施形態の画像処理装置の基本構成を示す。本実施形態では画像処理装置として一般的なパーソナルコンピュータやワークステーションを用いる。
【００１７】
１１０１はＣＰＵで、ＲＡＭ１１０２やＲＯＭ１１０３に格納されたプログラムやデータを用いて本装置全体の制御を行うと共に、後述の画像圧縮処理も行う。１１０２はＲＡＭで、外部記憶装置１１０４や記憶媒体ドライブ１１０９からロードされたプログラムやデータ等を一時的に記憶するエリアを備えると共に、ＣＰＵ１１０１が各種の処理を実行する際に用いるワークエリアも備える。１１０３はＲＯＭで、本装置全体の制御プログラム（例えばブートプログラム）や制御データ（例えば本装置の設定データ）を格納する。１１０４はハードディスクなどの外部記憶装置で、記憶媒体ドライブ１１０９からインストールされたプログラムやデータなどを保存する。また、上述のワークエリアのサイズがＲＡＭ１１０２内に設けられなくなった場合に、不足分をファイルとして提供することもできる。１１０５，１１０６は夫々キーボード、マウスで、夫々ポインティングデバイスとして用いられ、各種の指示を本装置に入力することができる。１１０７は表示装置で、ＣＲＴや液晶画面などにより構成されており、画像や文字などを表示することができる。１１０８が画像入力装置で、ディジタルカメラやスキャナなどにより構成されており、撮像や取り込みなどの操作により画像をディジタルデータとしてＲＡＭ１１０２や外部記憶装置１１０４に入力することができる。
【００１８】
１１０９は記憶媒体ドライブで、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの記憶媒体からプログラムやデータなどを読み込み、読み込んだプログラムやデータをＲＡＭ１１０２や外部記憶装置１１０４等に出力する。１１１０はＩ／Ｆ（インターフェース）で、インターネットやＬＡＮなどを介して外部の機器から圧縮処理対象の画像を受信したり、逆に圧縮した画像を外部の機器に対して送信する等、外部の機器とのデータの送受信を行う際のＩ／Ｆとして機能する。１１１１はプリンタで、圧縮された画像を伸長して紙などの記録媒体に印刷を行う画像伸長装置として機能する。１１１２は上述の各部を繋ぐバスである。
【００１９】
図１は画像を印刷する際に用いるソフトウェア群とプリンタとの関係を示す概念図である。外部記憶装置１１０４内にはオペレーティングシステム２（以下、ＯＳ）、アプリケーション３、プリンタドライバ４，ポートドライバ６が格納されている。
【００２０】
ＯＳ２は図１に示した各部（プリンタ１１１１は除く）、及びアプリケーション３、プリンタドライバ４、ポートドライバ５などのソフトウェアを管理する。アプリケーション３は、例えばワードプロセッサのようなアプリケーションソフトウェアであり、操作者からキーボード１１０５やマウス１１０６を用いて指示された内容に従って文書の作成・印刷などを行う。４はプリンタドライバであり、アプリケーション３が発行した印刷指令をＯＳ２を介して受け取り、該印刷指令をプリンタ１１１１が解釈可能なプリンタコマンドに変換する。５はポートドライバであり、プリンタドライバ４が変換したプリンタコマンドをＯＳ２を介して受け取り、不図示のパラレルポートを介してプリンタ１１１１に送信する。そしてプリンタ１１１１は、ポートドライバ５から受信したプリンタコマンドに従って印刷を行う。
【００２１】
図２はプリンタ１１１１の基本構成を示すブロック図である。図中、１１はパラレルポートであり、ポートドライバ６から出力されたプリンタコマンドを受信する。１２はＦＩＦＯ（ファーストインファーストアウト）メモリであり、パラレルポート１１が受信したプリンタコマンドに含まれる符号化データ（詳細は後述）を記憶し、記憶したデータを先入れ先出しの順に復号回路１３に出力する。復号回路１３は、ＦＩＦＯメモリ１２に記憶された符号列データを復号し、復元した画像データをプリンタエンジン１４に出力する。プリンタエンジン１４はレーザビームプリンタエンジンであり、制御回路１５の指示により、復号回路１３が出力した画像データに従って印刷を行う。画像データはシアン、マゼンタ、黄、黒の各色ごとに面順次で出力される。１５は制御回路であり，例えば１チップＣＰＵで構成され、パラレルポート１１，ＦＩＦＯメモリ１２，復号回路１３，およびプリンタエンジン１４の制御を行う。
【００２２】
以下、印刷を行う際に、図１，２に示した各部の動作について以下、説明する。
【００２３】
操作者がキーボード１１０５やマウス１１０６を用いてアプリケーション３を操作して印刷データを生成し、更に、生成した印刷データを印刷する指示を入力すると、アプリケーション３からＯＳ２を介してプリンタドライバ４に印刷指令が渡される。プリンタドライバ４はアプリケーション３から発行された印刷指令に基づき、赤、緑、青の３色からなるＲＧＢ画像データを作成し、次いでＲＧＢ画像データを、シアン、マゼンタ、黄、黒の４色からなるＣＭＹＫ画像データに変換する。そして、プリンタドライバ４は、後述する符号化手順に基づき、作成した画像データから符号化データを生成し，用紙サイズ、画像データ（ビットマップデータ）のラインの長さとライン数などを指定する印刷制御コマンドとともに出力する。ポートドライバ５は、プリンタドライバ４が作成した，印刷制御コマンドおよび符号化データからなる一連のプリンタコマンドを、プリンタ１１１１に送信する。
【００２４】
制御回路１５はパラレルポート１１を経由してプリンタコマンドを受信する。受信したプリンタコマンドのうち印刷制御コマンドは、印刷制御のために制御回路１５の内部に保持される。また、受信したプリンタコマンドのうち符号化データは、ＦＩＦＯメモリ１２に格納される。その後、ページ終了コマンドの受信などにより、１ページを構成するプリンタコマンドの受信が完了したことを制御回路１５が検出したときに、プリンタエンジン１４に印刷の開始を指示する。印刷の開始が指示されると、プリンタエンジン１４は不図示の給紙カセットから用紙を給紙し、用紙が所定の位置に到達したときに、復号回路１３に画像データの出力を要求する。復号回路１３は、あらかじめＦＩＦＯメモリ１２から符号化データを読み出し、復号することで復元される画像データを内部のバッファに保持しておき、プリンタエンジン１４から画像データの出力を要求されたときに、内部のバッファに保持していた画像データを出力する。復号回路１３は、画像データを保持していたバッファに空きができたときに、ＦＩＦＯメモリ１２から引き続く符号化データを読み出し、復号して内部のバッファに保持する。このようにして符号化データは順次復号されて画像データとして出力され、１ページの画像データの出力が全て終了すると、印刷が完了する。
【００２５】
次に、図３および図４に示すテーブルを参照し、図１に示したプリンタドライバ４が生成する符号について説明する。
【００２６】
図３は、図１に示したプリンタドライバ４が生成する符号化データに含まれる各符号の一例を説明するテーブルである。なお、本実施形態で説明する各符号はビット単位で可変長であり、例えば２ビットから１８ビットまでのビット列で表現される。各符号はハフマン符号と同様に、先頭から順に調べることにより符号を識別することができるように構成されている。
【００２７】
図３に示すように、符号のビット列が「１」で開始する場合はＣＯＰＹ  ＵＰコマンドである。このコマンドは、あらかじめ決定された所定ライン上の位置から、＜バイト数＞が示す長さのバイト列を複写することを指示する。
【００２８】
また、符号のビット列が「０１」で開始する場合は，ＣＡＣＨＥコマンドである。このコマンドはキャッシュバッファ（本実施形態ではＣＰＵ１１０１内に設けるが、これに限定されるものではなく、ＣＰＵ１１０１の外部に設けても良いい）内で＜３ビットデータ＞が示す位置の１バイトのデータを指定する。
【００２９】
また、符号のビット列が「００１」で開始する場合はＲＡＷコマンドである。このコマンドは＜８ビットデータ＞の値を持つ１バイトのデータを指定する。
【００３０】
また、符号のビット列が「０００１」で開始する場合はＣＯＰＹ  ＬＥＦＴコマンドである。このコマンドは、あらかじめ決定された所定バイト左の位置から、＜バイト数＞が示す長さのバイト列を複写することを指示する。
【００３１】
また、符号のビット列が「００００」の場合はＥＯＢコマンドであり、符号化データの終了を指示する。
【００３２】
図４は上述のＣＯＰＹ  ＵＰコマンド、ＣＯＰＹ  ＬＥＦＴコマンドに後続する、長さを示す符号（＜バイト数＞）の一例を示すテーブルである。図４に示すように、符号のビット列が「１」である場合は１バイトの長さを指示する。
【００３３】
また、符号のビット列が「０１」で開始する場合は１ビットのデータ（０もしくは１の値を取る）が後続し、後続する１ビットのデータが０の場合はコマンド符号としては「０１０」となり、意味としては２バイトを意味することになる。一方、後続する１ビットのデータが１の場合はコマンド符号としては「０１１」となり、意味としては３バイトを意味することになる。つまり、符号のビット列が「０１」で開始する場合は、２バイト、もしくは３バイトの長さを意味することにある。
【００３４】
また符号のビット列が「００１」で開始する場合は２ビットのデータが後続するので４バイトから７バイトまでの長さを意味し、符号のビット列が「０００１」で開始する場合は３ビットのデータが後続するので８バイトから１５バイトまでの長さを意味し、符号のビット列が「００００１」で開始する場合は４ビットのデータが後続するので１６バイトから３１バイトまでの長さを意味し、符号のビット列が「０００００１」で開始する場合は５ビットのデータが後続するので３２バイトから６３バイトまでの長さを意味し、符号のビット列が「００００００１」で開始する場合は６ビットのデータが後続するので６４バイトから１２７バイトまでの長さを意味し、符号のビット列が「０００００００」で開始する場合は７ビットのデータが後続するので１２８バイトから２５５バイトまでの長さを意味する。
【００３５】
なお、これらの符号はあらかじめ多数の画像データで各コマンドの出現頻度を求めておき、ハフマン符号と同様に、出現頻度の高いコマンドに短い符号を、出現頻度の低いコマンドに比較的長い符号を割り当てることにより圧縮率を高くすることができる。
【００３６】
次に図５を参照し、ＲＡＷコマンドおよびＣＡＣＨＥコマンドの動作を説明するとともに、キャッシュバッファに格納されるデータについて説明する。図５は画像データと、この画像データがＲＡＷコマンド及びＣＡＣＨＥコマンドによりキャッシュバッファに格納される方法を説明する図である。
【００３７】
同図に示すように，１０バイトの画像データ００，０１，０２，０３，０４，０５，０６，０７，０８，０６が左から並んでいる。キャッシュバッファは８バイトの容量があり、最初は空である。
【００３８】
まず最初の画像データ００は符号００１  ００００００００すなわちＲＡＷ００コマンドに符号化することができ、このコマンドを符号化あるいは復号した結果、空であったキャッシュバッファの先頭にデータ００が格納される。
【００３９】
次の画像データ０１は符号００１  ０００００００１すなわちＲＡＷ０１コマンドに符号化することができ、このコマンドを符号化あるいは復号した結果、キャッシュバッファの先頭にデータ０１が格納され，先頭に格納されていたデータ００は次の位置に移動する。このようにして画像データ０７までの８バイトのデータが符号化あるいは復号されるとキャッシュバッファは埋め尽くされる。次の画像データ０８は符号００１  ０００１００００すなわちＲＡＷ０８コマンドに符号化することができ、このコマンドを符号化あるいは復号した結果、キャッシュバッファの先頭にデータ０８が格納され、すでに格納されていたデータ０７からデータ０１までの７バイトのデータは順次次の位置に移動し、キャッシュバッファの最後に格納されていたデータ００は失われる。
【００４０】
次の画像データ０６は同一のデータがキャッシュバッファの位置２に格納されているため、符号０１  ０１０すなわちＣＡＣＨＥ２コマンドに符号化することができ、このコマンドを符号化あるいは復号した結果、位置２に格納されていたデータ０６はキャッシュバッファの先頭に移動し、位置２より前に格納されていたデータ０８およびデータ０７は順次次の位置に移動する。位置２より後に格納されていたデータは変更されない。
【００４１】
なお，ＣＯＰＹ  ＵＰコマンドまたはＣＯＰＹ  ＬＥＦＴコマンドを符号化あるいは復号した場合は、キャッシュバッファに格納されているデータは変更されない。
【００４２】
次に図６を参照し、ＣＯＰＹ  ＵＰコマンドおよびＣＯＰＹ  ＬＥＦＴコマンドの動作について説明する。図６は、画像データと、この画像データをＣＯＰＹＵＰコマンド及びＣＯＰＹ  ＬＥＦＴコマンドに符号化する方法を説明する図である。同図に示すように、画像データを構成する画素列において、最下行には１０バイトの画像データ０１，２３，４５，６７，８９，ＡＢ，８９，ＡＢ，８９，ＡＢが左から並んでおり，その４行上には画像データ０１，２３，４５，６７，８９，ＡＢ，００，００，００，００が左から並んでいる。現在符号化あるいは復号しようとしている画像データは最下行であり，またＣＯＰＹ  ＵＰコマンドは４行上を，ＣＯＰＹ  ＬＥＦＴコマンドは２バイト左を参照するようにあらかじめ設定されているものとする。
【００４３】
なお、上記画像データがディザマトリクスを用いてディザ処理を施された画像である場合、隣接するデータには異なった処理が行われるため、隣接したデータよりもむしろディザマトリックスの周期だけ離れた位置のデータのほうが相関が高くなるという傾向がある。このためディザ処理を施された画像の場合、ＣＯＰＹ  ＵＰコマンドまたはＣＯＰＹ  ＬＥＦＴコマンドが参照する位置は、注目位置との相関が最も高くなるように定められる。すなわち、符号化しようとしている画像データを生成したときに使用されたディザマトリックスの周期に応じて定められる。
【００４４】
ここで最下行の画像データのうち、先頭の６バイト０１，２３，４５，６７，８９，ＡＢは，４行上の先頭６バイトと同一の並びであるので、符号１  ００１１０すなわちＣＯＰＹ  ＵＰ６コマンドに符号化することができる。また次の４バイト８９，ＡＢ，８９，ＡＢは同じ行の２バイト左から始まる４バイトと同一の並びであるので、符号０００１  ００１  ００すなわちＣＯＰＹ  ＬＥＦＴ４コマンドに符号化することができる。
【００４５】
次に図７に示すフローチャートを参照し、プリンタドライバ４の処理の詳細を説明する。図７はプリンタドライバ４が行うメインの処理のフローチャートである。
【００４６】
プリンタドライバ４がオペレーティングシステム２からの指令を受信すると、指令の種類が描画指令であるか否かを判定する（ステップＳ５）。指令の種類が描画指令であった場合は、処理をステップＳ６に進め、描画処理を行う（ステップＳ６）。具体的には、オペレーティングシステム２を経由してアプリケーション３から送信された文字、図形またはビットマップ等を赤、緑、青の３色を用いた各色８ビットの画像に変換し、ＲＡＭ１１０２に記録する。
【００４７】
一方、上記指令の種類が描画指令でなかった場合は、処理をステップＳ７に進め、更に、上記指令の種類がページ終了指令であるか否かを判定する（ステップＳ７）。指令の種類がページ終了指令であった場合には、処理をステップＳ８に進め、色変換処理を行う（ステップＳ８）。具体的にはステップＳ６においてＲＡＭ１１０２に記録された赤、緑、青の３色を用いた各色８ビットの画像を、所定のディザマトリックスを使用して，シアン、マゼンタ、黄、黒の４色からなる、例えば各色４ビットの画像に変換する。
【００４８】
次に、印刷条件指定コマンド、具体的には用紙サイズ、給紙カセット、解像度、階調数、１ラインのバイト数、１ページのライン数など印刷に必要な条件を指定するコマンド（印刷制御コマンド）を出力する（ステップＳ９）。
【００４９】
そして次に、ステップＳ１０からステップＳ１４までの処理をシアン、マゼンタ、黄、黒の各色ごとに繰り返し、各色毎の印刷制御コマンドを出力する。各ステップにおける具体的な処理としては、まずステップＳ８において使用したディザマトリックスに応じた圧縮パラメタ、すなわち符号化時に使用する、ＣＯＰＹＵＰコマンドおよびＣＯＰＹ  ＬＥＦＴコマンドが参照する位置を出力する（ステップＳ１０）。次に後述する符号化手順に従い、画像データを符号化する（ステップＳ１１）。このときに、ステップＳ１０にて出力した圧縮パラメタが指定する、ＣＯＰＹ  ＵＰコマンドおよびＣＯＰＹ  ＬＥＦＴコマンドが参照する位置を用いて符号化を行う。次にステップＳ１１にて符号化された画像データのサイズおよびライン数を指定するヘッダを出力する（ステップＳ１２）。次にステップＳ１１にて符号化された画像データを出力する（ステップＳ１３）。次にシアン、マゼンタ、黄、黒の各プレーンの処理が全て終了したか否かを判定する（ステップＳ１４）。シアン、マゼンタ、黄、黒の各プレーンの処理が全て終了していない場合は処理をステップＳ１０に戻し、次のプレーンの処理を行う。一方、シアン、マゼンタ、黄、黒の各プレーンの処理が全て終了すると、処理をステップＳ１５に進め、ページの終了を指定するコマンドを出力する（ステップＳ１５）。
【００５０】
一方、ステップＳ７における判断で、指令の種類がページ終了指令でなかった場合に、処理をステップＳ１６に進め、指令の種類に応じたその他の処理、例えばページ開始指令あるいはプリンタ能力問い合わせ指令等に対応する処理を行う（ステップＳ１６）。
【００５１】
次に、上記ステップＳ１１における符号化処理について、同処理の詳細を示すフローチャートを示す図８を参照して説明する。
【００５２】
まず、現在の位置、すなわち符号化する画素の位置を画像の左端上に設定する（ステップＳ２０）。次にＣＯＰＹ  ＵＰの参照位置が有効であるか否かを判定する（ステップＳ２１）。具体的にはＣＯＰＹ  ＵＰの参照位置が４行上である場合は、現在の位置が先頭行から４行以上である場合にＣＯＰＹ  ＵＰの参照位置が有効であると判定する。ＣＯＰＹ  ＵＰの参照位置が有効である場合には処理をステップＳ２２に進め、現在の位置から始まるバイト列（画素データ列）と、ＣＯＰＹ  ＵＰの参照位置から始まる画素データのバイト列を比較し、値が一致するバイト列の長さを求める（ステップＳ２２）。なおこの際に、行末に達した場合、及び長さが２５５バイトに達した場合には処理を打ち切るものとする。
【００５３】
次にステップＳ２２にて求めた長さが０であるか否かを判定する（ステップＳ２３）。０でない場合にはＣＯＰＹ  ＵＰコマンドに符号化できると判断されるので処理をステップＳ２９に進め、ＣＯＰＹ  ＵＰコマンド、すなわち符号１とそれに後続するバイト数（求めた長さ）を示す符号を出力し、処理をステップＳ３２に進める。
【００５４】
一方、ステップＳ２１にてＣＯＰＹ  ＵＰの参照位置が無効であると判定された場合、もしくはステップＳ２３にてステップＳ２２で求めた長さが０であると判定された場合は、処理をステップＳ２４に進め、ＣＯＰＹ  ＬＥＦＴの参照位置が有効であるか判定する（ステップＳ２４）。具体的にはＣＯＰＹ  ＬＥＦＴの参照位置が２バイト左である場合は、現在の位置が左端から２バイト以上離れている場合にＣＯＰＹ  ＬＥＦＴの参照位置が有効であると判定する。ＣＯＰＹＬＥＦＴの参照位置が有効である場合には処理をステップＳ２５に進め、現在の位置から始まるバイト列（画素データ列）と、ＣＯＰＹ  ＬＥＦＴの参照位置から始まるバイト列を比較し、一致するバイト列の長さを求める（ステップＳ２５）。なおこの際に、行末に達した場合、及び長さが２５５バイトに達した場合には処理を打ち切るものとする。
【００５５】
次に、ステップＳ２５にて求めた長さが０であるか否かを判定する（ステップＳ２６）。０でない場合にはＣＯＰＹ  ＬＥＦＴコマンドに符号化できると判断されるので処理をステップＳ３０に進め、ＣＯＰＹ  ＬＥＦＴコマンド、すなわち符号０００１とそれに後続するバイト数（求めた長さ）を示す符号を出力し、処理をステップＳ３２に進める。
【００５６】
一方、ステップＳ２４にてＣＯＰＹ  ＬＥＦＴの参照位置が無効であると判定された場合、もしくはステップＳ２６にてステップＳ２５で求めた長さが０であると判定された場合は、処理をステップＳ２７に進め、キャッシュバッファを検索し、現在の位置のバイト（画素データ）がキャッシュバッファに登録されているか否かを判定する（ステップＳ２７）。現在の位置のバイトがキャッシュバッファに登録されている場合、ＣＡＣＨＥコマンドに符号化できると判断されるので、処理をステップＳ３１に進め、ＣＡＣＨＥコマンド、すなわち符号０１とそれに後続する、キャッシュがヒットしたキャッシュバッファの位置を示す３ビットデータを出力し（ステップＳ３１）、キャッシュバッファを更新する（ステップＳ３７）。具体的には現在の位置のバイトをキャッシュバッファの先頭に格納するとともに、キャッシュバッファの先頭から、キャッシュがヒットしたキャッシュバッファの位置の手前までのデータを順次キャッシュバッファの次の位置に移動する処理を行う。
【００５７】
一方、ステップＳ２７にて現在の位置のバイトがキャッシュバッファに登録されていないと判定された場合には、処理をステップＳ２８に進め、ＲＡＷコマンド、すなわち符号００１とそれに後続する、現在の位置のバイトに等しい８ビットの生データを出力する（ステップＳ２８）。具体的には、現在の位置のバイトをキャッシュバッファの先頭に格納するとともに、キャッシュバッファの先頭からキャッシュバッファの最後の手前までのデータを順次キャッシュバッファの次の位置に移動する処理を行う。
【００５８】
次に、ＣＯＰＹ  ＵＰ、ＣＯＰＹ  ＬＥＦＴ、ＣＡＣＨＥ、あるいはＲＡＷコマンドで処理されたバイト数だけ現在の位置を進める（ステップＳ３２）。次に、全ての画像データを処理したか判定する（ステップＳ３３）。全ての画像データを処理していない場合には処理をステップＳ２１に戻し、上述の符号化処理を行う。また、全ての画像データを処理し終えた場合は、処理をステップＳ３４に進め、ＥＯＢコマンド、すなわち符号００００を出力し（ステップＳ３４）、更に、出力した符号の総ビット数が８の整数倍となるように（８の整数倍に達するまで）ビット０を出力する（ステップＳ３５）。
【００５９】
次に、復号回路１３について説明する。図９は復号回路１３の基本構成を示すブロック図である。同図において入力バッファ２１はＦＩＦＯメモリ１２から読み出した符号化データを格納する。入力バッファ２１は少なくとも４バイトのデータを格納することができ、バッファ２１に空きが生じ、かつＦＩＦＯメモリ１２にデータがある場合はＦＩＦＯメモリ１２からデータを読み出して格納する。入力バッファ２１はまた、ビットカウンタ２３に保持された、処理済ビット数が８以上になった場合には、不要になった処理済データを破棄する。
【００６０】
セレクタ２２は、例えば１８組の８入力セレクタであり、入力バッファ２１に格納された符号データを、ビットカウンタ２３が示す処理済ビット数に従って選択することにより、コマンドデコード回路２４が処理するために必要な、コマンドの開始位置合わせを行う。これは、入力バッファ２１がバイト単位にデータを保持するのに対し、コマンドはビット単位の可変長データであるため、８箇所の開始位置があるために必要なものである。
【００６１】
ビットカウンタ２３は、入力バッファ２１に格納された符号データのうち処理済みのビット数を格納する。ビットカウンタ２３はまた、コマンドデコード回路２４から出力された、コマンドのビット数をカウントし、ビットカウンタ２３に格納された値をカウントした値に更新する。ビットカウンタ２３はまた、入力バッファ２１が処理済データを破棄した場合には、格納している値から破棄したビット数を減算する。ビットカウンタ２３はまた、コマンドデコード回路２４がＥＯＢコマンドを復号したときに、コマンドデコード回路２４からＥＯＢ信号を受信し、ビットカウンタの下位３ビットが全て０であれば何もせず、そうでなければ格納している値に８を加算するとともに下位３ビットをクリアする処理を行う。
【００６２】
コマンドデコード回路２４は、例えばリードオンリーメモリ、あるいはワイヤードロジックにより構成され、セレクタ２２によって位置合わせが行われた、入力バッファ２１に格納された符号データを復号し、復号したコマンドに従ってキャッシュ出力回路２５，上コピー出力回路２６、左コピー出力回路２７、生データ出力回路２８、およびビットカウンタ２３に、前述の、あるいは後述する各種の信号を出力する。
【００６３】
キャッシュ出力回路２５は、コマンドデコード回路２４がＣＡＣＨＥコマンドを復号したときにキャッシュバッファの位置を示す３ビットのデータを受信し、キャッシュバッファ３６から該位置のデータを読み取って出力する。上コピー出力回路２６は、コマンドデコード回路２４がＣＯＰＹ  ＵＰコマンドを復号したときにコピーすべきバイト数を受信し、受信したバイト数に応じてラインバッファ３５からデータを読み取り、読み取ったデータを出力することを繰り返す。左コピー出力回路２７は、コマンドデコード回路２４がＣＯＰＹ  ＬＥＦＴコマンドを復号したときにコピーすべきバイト数を受信し、受信したバイト数に応じて可変段シフトレジスタ３９からデータを読み取り、読み取ったデータを出力することを繰り返す。生データ出力回路２８は、コマンドデコード回路２４がＲＡＷコマンドを復号したときに生データを示す８ビットのデータを受信し、受信したデータを出力する。
【００６４】
ライン長レジスタ２９は、受信した印刷制御コマンドに含まれる１ラインのバイト数を保持する。列カウンタ３０は、ラインバッファ３５の現在の列アドレスを保持し、ラインバッファ３５に書き込みが行われる毎にカウントアップし、またその結果、ライン長レジスタ２９が保持する１ラインのバイト数に達した場合には０に復帰する。行数レジスタ３１は、受信した圧縮パラメタに含まれるＣＯＰＹ  ＵＰコマンドが参照する位置を示すライン数を保持する。行カウンタ３２は、ラインバッファ３５の現在の行アドレスを保持し、列カウンタ３０がライン長レジスタ２９が保持する１ラインのバイト数に達して０に復帰する毎にカウントアップする。なお、行数レジスタ３１が保持するライン数に達した場合には０に復帰する。行カウンタ３２はまた、行数レジスタ３１にライン数が出力されたときには０に復帰する。
【００６５】
乗算回路３３は、行カウンタ３２が保持する現在の行アドレスと、ライン長レジスタ２９が保持する１ラインのバイト数との積を計算することにより、ラインバッファ３５の現在の行の先頭アドレスを出力する。加算回路３４は、乗算回路３３が出力する現在の行の先頭アドレスと、列カウンタ３０が保持する現在の列アドレスとの和を計算することにより、ラインバッファ３５の現在のアドレスを出力する。
【００６６】
ラインバッファ３５は、複数のラインの復号データを保持し、加算回路３４が出力するアドレスに従って復号データの入力または出力を行う。ラインバッファ３５は、行数レジスタ３１が保持するライン数によって指定されるサイズのリングメモリを構成する。
【００６７】
キャッシュバッファ３６は、キャッシュ出力回路２５または生データ出力回路２８が画像データを復号したときにこれを記憶し、またキャッシュ出力回路２５が参照するデータを出力する。段数レジスタ３８は、ＣＯＰＹ  ＬＥＦＴコマンドが参照する位置を示すバイトオフセット値を保持する。可変段シフトレジスタ３９は、シフトレジスタとセレクタによって構成され、段数レジスタ３８が保持するバイトオフセット値に等しい段数のシフトレジスタを構成し、出力された復号データを、段数レジスタ３８が保持するバイトオフセット値で指定された値より１だけ小さい回数遅延したデータを出力する。
【００６８】
以上の構成において、コマンドデコード回路２４がＣＯＰＹ  ＵＰコマンドをデコードすると、それに引き続く後続のバイト数をデコードし、上コピー出力回路２６にデコードしたバイト数を出力する。そしてラインバッファ３５において、現在の行よりも行数レジスタ３１に格納されたライン数上で、且つデコードされたバイト数分の復号データ群がラインバッファ３５から上コピー出力回路２６に読み出され、上コピー出力回路２６は読み出された復号データ群を加算回路３４が出力するアドレス（言い換えれば、現在の位置）から順に書き込む。一方、読み出された復号データ群は可変段シフトレジスタ３９に入力される（以下、先頭から）。そして可変段シフトレジスタ３９に既に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ３９の最終段からは、現在の位置の次の位置に対応する、ＣＯＰＹ  ＬＥＦＴコマンドが参照する位置の１バイトが出力される。次いで列カウンタ３０はカウントアップされる。このようにして、指定されたバイト数の処理が終了するまで、復号データの出力が行われる。
【００６９】
一方、コマンドデコード回路２４がＣＯＰＹ  ＬＥＦＴコマンドをデコードすると、それに引き続く後続のバイト数をデコードし、左コピー出力回路２７にデコードしたバイト数を出力する。そしてこのバイト数分、可変シフトレジスタ３９から復号データが可変段シフトレジスタ３９から読み取られ、左コピー出力回路２７に入力される。左コピー出力回路２７がこの復号データを出力すると、出力された復号データはラインバッファ３５の現在の位置（加算回路３４が出力するアドレス）に書き込まれるとともに、可変段シフトレジスタ３９に入力される。また可変段シフトレジスタ３９に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ３９の最終段からは現在の位置の次の位置に対応するＣＯＰＹ  ＬＥＦＴコマンドが参照する位置の１バイトが出力される。次いで列カウンタ３０はカウントアップされる。このようにして、指定されたバイト数の処理が終了するまで、復号データの出力が行われる。
【００７０】
コマンドデコード回路２４がＲＡＷコマンドをデコードすると、引き続く後続の８ビットの生データを生データ出力回路２８に出力する。生データ出力回路２８がこのデータを出力すると、出力された復号データは、ラインバッファ３５の現在の位置に書き込まれるとともに、可変段シフトレジスタ３９に入力され、また可変段シフトレジスタ３９に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ３９の最終段からは、現在の位置の次の位置に対応する，ＣＯＰＹ  ＬＥＦＴコマンドが参照する位置の１バイトが出力される。次いで列カウンタ３０はカウントアップされる。また、出力された復号データはキャッシュバッファ３６の先頭に記憶される。
【００７１】
コマンドデコード回路２４がＣＡＣＨＥコマンドをデコードすると、引き続く後続の３ビットのキャッシュバッファ内の位置を示すデータをキャッシュ出力回路２５に出力する。キャッシュ出力回路２５は指定された位置の復号データをキャッシュバッファ３６から読み取り、その復号データを出力する。出力された復号データはラインバッファ３５の現在の位置に書き込まれるとともに、可変段シフトレジスタ３９に入力される。また可変段シフトレジスタ３９に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ３９の最終段からは現在の位置の次の位置に対応するＣＯＰＹ  ＬＥＦＴコマンドが参照する位置の１バイトが出力される。次いで列カウンタ３０はカウントアップされる。出力された復号データはまた、キャッシュバッファ３６の先頭に記憶される。
【００７２】
次に図１０を参照し、キャッシュバッファ３６の構成について説明する。図１０はキャッシュバッファ３６の詳細な構成を示すブロック図である。
【００７３】
同図において５１は第１のシフトレジスタであり、８ビット８段のシフトレジスタによって構成される。第１のシフトレジスタ５１は生データ出力回路２８またはキャッシュ出力回路２５が出力した１バイトの画像データを８つまで記憶することができる。第１のシフトレジスタ５１を構成する各段のレジスタは制御回路５５からシフトパルスが入力された場合には前段のレジスタが記憶しているデータを記憶する。
【００７４】
５２は第２のシフトレジスタであり、１ビット８段のシフトレジスタによって構成される。第２のシフトレジスタ５２を構成する各段のレジスタは第１のシフトレジスタ５１の対応するレジスタにデータが記憶されているか否かを示す１ビットの情報を保持する。第２のシフトレジスタ５２を構成する各段のレジスタは、制御回路５５からシフトパルスが入力された場合には前段のレジスタが記憶しているデータを記憶する。
【００７５】
５３はセレクタであり、入力されたアドレス、すなわち参照すべきキャッシュバッファの位置にしたがって、第１のシフトレジスタ５１を構成する各段のレジスタのうちの１つが記憶しているデータを選択して出力する。
【００７６】
５４はデコーダであり、キャッシュバッファからの読み取りを指示する読取信号が入力されたときに、入力されたアドレス、すなわち参照すべきキャッシュバッファの位置にしたがって、第２のシフトレジスタ５２を構成する各段のレジスタのうちの１つをクリアする信号を出力する。
【００７７】
５５は制御回路であり、キャッシュバッファへの書き込みを指示する書込信号が入力されたときに、第２のシフトレジスタ５２に保持されている第１のシフトレジスタ５１の対応するレジスタにデータが記憶されているか否かを示す情報にしたがって第１のシフトレジスタ５１および第２のシフトレジスタ５２のシフトが必要な各段に対してシフトパルスを出力する。シフトパルスはそれ以前の段のいずれかにデータが記憶されていない段がある場合には出力されず、そうでない場合には出力される。
【００７８】
生データ出力回路２８が復号データを出力すると出力された復号データは第１のシフトレジスタ５１に入力されるとともに，制御回路５５に書込信号が入力される。データが記憶されている段は連続しているので、制御回路５５は先頭段および前段にデータが記憶されている段にシフトパルスを出力し、第１のシフトレジスタ５１の先頭段には入力された復号データが、第２のシフトレジスタ５２の先頭段にはデータが有効であることを示す値１がそれぞれ記憶されるとともに、前段にデータが記憶されている段には前段のデータが記憶される。
【００７９】
キャッシュ出力回路２５がキャッシュバッファの位置を示す情報を受信すると、受信されたキャッシュバッファの位置を示す情報すなわちアドレスはセレクタ５３およびエンコーダ５４に入力されるとともに、読取信号がエンコーダ５４に入力される。セレクタ５３は入力されたアドレスにしたがって第１のシフトレジスタ５１に記憶されているデータを選択して出力する。またエンコーダ５４は、入力されたアドレスにしたがってデータが出力された段に対してクリア信号を出力する。この結果、第２のシフトレジスタ５２のデータが出力された段のレジスタはクリアされる。
【００８０】
キャッシュ出力回路２５はセレクタ５３が出力したデータを読み取り、それを復号データとして出力すると、出力された復号データは第１のシフトレジスタ５１に入力されるとともに、制御回路５５に書込信号が入力される。データが記憶されている段は第２のシフトレジスタ５２のキャッシュバッファの読み取りが行われた段がクリアされたため不連続となっているので、制御回路５５は先頭段からキャッシュバッファの読み取りが行われた段までの段にシフトパルスを出力するので、第１のシフトレジスタ５１の先頭段には入力された復号データが、第２のシフトレジスタ５２の先頭段にはデータが有効であることを示す値１がそれぞれ記憶されるとともに、第１のシフトレジスタ５１および第２のシフトレジスタ５２の第２段からキャッシュバッファの読み取りが行われた段までの段には、その前段のデータが記憶される。
【００８１】
このようにしてキャッシュバッファ３６にはＲＡＷコマンドまたはＣＡＣＨＥコマンドを復号したデータが新しい順に記憶されるように維持される。
【００８２】
以上の説明の通り、本実施形態の画像処理装置は、以前のデータ系列と一致する部分は一致する長さを符号化するので、画像データのように同一データの系列が並ぶことが多いデータを高い圧縮率で符号化することができる。
【００８３】
また、以前のデータ系列と一致しない場合にはキャッシュバッファを検索し、キャッシュがヒットした場合にはキャッシュバッファの位置を符号化するので、データ自体を符号化する場合に較べて短い符号に符号化することができ、以前のデータ系列と一致する部分が少ない場合でも極力圧縮率の低下を防ぐことができる。
【００８４】
また、データ系列が一致した長さを符号化した場合には，キャッシュバッファを更新しないので、長いデータ系列によりキャッシュバッファが書き換わることによる圧縮率の低下を防ぐことができる。
【００８５】
［第２の実施形態］
第１の実施形態では復号処理をハードウェアで行っているが、これに限定されるものではなく、ソフトウェアで行っても良い。また、第１の実施形態では符号化（圧縮）処理をソフトウェアで行っているが、これに限定されるものではなく、専用のハードウェアを用いて行っても良い。又第１の実施形態では、符号化の単位データサイズは１バイトであったが、これに限定されるものではなく、例えば１画素あるいは２バイトであってもよい。
【００８６】
また第１の実施形態では、キャッシュバッファがフルのときに破棄するデータを選択する際に最も長い間参照されなかったデータを破棄する、いわゆるＬＲＵ法を用いているがこれに限定されるものではなく、例えば擬似ＬＲＵ法、あるいは擬似ランダム法などを用いてもよい。
【００８７】
［他の実施形態］
なお、本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。
【００８８】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはCPUやMPU）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００８９】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００９０】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明した（図７，８の一部もしくは全部の）フローチャートに対応するプログラムコードが格納されることになる。
【００９１】
【発明の効果】
以上詳細に説明したように、本発明では、以前の画像データ列と一致する場合にはその冗長性を利用して高い圧縮率を得るとともに、画像データ列が一致する部分が少ない場合においても、圧縮率の低下を極力抑えることができる。
【図面の簡単な説明】
【図１】画像を印刷する際に用いるソフトウェア群とプリンタとの関係を示す概念図である。
【図２】プリンタ１１１１の基本構成を示すブロック図である。
【図３】図１に示したプリンタドライバ４が生成する符号化データに含まれる書く符号の一例を説明するテーブルを示す図である。
【図４】ＣＯＰＹ  ＵＰコマンド、ＣＯＰＹ  ＬＥＦＴコマンドに後続する、長さを示す符号（＜バイト数＞）の一例を示すテーブルを示す図である。
【図５】画像データと、この画像データがＲＡＷコマンド及びＣＡＣＨＥコマンドによりキャッシュバッファに格納される方法を説明する図である。
【図６】画像データと、この画像データをＣＯＰＹ  ＵＰコマンド及びＣＯＰＹＬＥＦＴコマンドに符号化する方法を説明する図である。
【図７】プリンタドライバ４が行うメインの処理のフローチャートである。
【図８】ステップＳ１１における符号化処理の詳細を示すフローチャートである。
【図９】復号回路１３の基本構成を示すブロック図である。
【図１０】キャッシュバッファ３６の詳細な構成を示すブロック図である。
【図１１】本発明の実施形態における画像処理装置における基本構成を示すブロック図である。
【図１】
0003970007.tif 000002
【図２】
0003970007.tif 000003
【図３】
0003970007.tif 000004
【図４】
0003970007.tif 000005
【図５】
0003970007.tif 000006
【図６】
0003970007.tif 000007
【図７】
0003970007.tif 000008
【図８】
0003970007.tif 000009
【図９】
0003970007.tif 000010
【図１０】
0003970007.tif 000011
【図１１】
0003970007.tif 000012