(57)【特許請求の範囲】
【請求項１】
画像データがライン単位で符号化された符号データの先頭に識別符号が配置された複数のライン符号データを、該画像データの先頭ライン側から終端ライン側に向けた順番で記憶する第１の記憶手段と、
前記第１の記憶手段から前記ライン符号データを読み出す第１の読み出し手段と、
前記第１の読み出し手段で読み出された前記ライン符号データから前記識別符号を認識し、該識別符号に基づき前記ライン符号データをライン単位で記憶する第２の記憶手段と、
前記第２の記憶手段から前記ライン符号データを読み出す第２の読み出し手段と、
前記第２の読み出し手段で読み出された前記ライン符号データを復号する復号手段と、
前記復号手段で前記ライン符号データが復号された復号画像データをライン単位で記憶する第３の記憶手段と、
前記第３の記憶手段に記憶された前記復号画像データをライン単位で読み出す第３の読み出し手段と
を有し、
前記画像データを１８０度回転させて出力する場合に、
前記第１の読み出し手段は、
前記第１の記憶手段から、前記ライン符号データを、前記終端ライン側から前記先頭ライン側に向けて読み出すと共に、各ラインを終端側から先頭側に向けて読み出し、
前記第２の読み出し手段は、
前記第２の記憶手段から、前記ライン符号データを、該ライン符号データに含まれる前記識別符号の位置から該ライン符号データによるラインの終端側に向けて読み出し、
前記第３の読み出し手段は、
前記第３の記憶手段から、前記復号画像データを、画素単位でラインの終端側から先頭側に向けて読み出す
ことを特徴とする画像処理装置。
【請求項２】
前記識別符号は、前記符号データに用いられない符号の組み合わせからなる
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記第２の記憶手段は、前記ライン符号データを前記ラインよりデータ長が短い所定単位毎に区切って記憶する
ことを特徴とする請求項１または請求項２に記載の画像処理装置。
【請求項４】
前記第２の記憶手段は、前記識別符号を前記所定単位の先頭に配置するように前記ライン符号データを記憶する
ことを特徴とする請求項３に記載の画像処理装置。
【請求項５】
前記ライン符号データは、前記符号データの終端に他の識別符号が配置される
ことを特徴とする請求項１乃至請求項４の何れか１項に記載の画像処理装置。
【請求項６】
前記符号データは、前記画像データのうち該符号データが含むラインの情報のみを用いて符号化された
ことを特徴とする請求項１乃至請求項５の何れか１項に記載の画像処理装置。
【請求項７】
前記符号データは、可変長符号化を用いて符号化された
ことを特徴とする請求項１乃至請求項６の何れか１項に記載の画像処理装置。
【請求項８】
前記符号データは、動的な辞書を用いて符号化された
ことを特徴とする請求項７に記載の画像処理装置。
【請求項９】
前記符号データは、ランレングス符号化方式を用いて符号化された
ことを特徴とする請求項８に記載の画像処理装置。
【請求項１０】
前記画像データを０度回転させて出力する場合に、
前記第１の読み出し手段は、
前記第１の記憶手段から、前記ライン符号データを、前記先頭ライン側から前記終端ライン側に向けて読み出すと共に、各ラインを先頭側から終端側に向けて読み出し、
前記第２の読み出し手段は、
前記第２の記憶手段から、前記ライン符号データを、該ライン符号データに含まれる前記識別符号の位置から該ライン符号データによるラインの終端側に向けて読み出し、
前記第３の読み出し手段は、
前記第３の記憶手段から、前記復号画像データを、画素単位でラインの先頭側から終端側に向けて読み出し、
前記第１の読み出し手段、前記第２の読み出し手段および前記第３の読み出し手段は、
前記画像データ毎に、前記０度回転時の読み出し処理と前記１８０度回転時の読み出し処理とを切り替える
ことを特徴とする請求項１乃至請求項９の何れか１項に記載の画像処理装置。
【請求項１１】
第１の読み出し手段が、画像データがライン単位で符号化された符号データの先頭に識別符号が配置された複数のライン符号データを、該画像データの先頭ライン側から終端ライン側に向けた順番で記憶する第１の記憶手段から前記ライン符号データを読み出す第１の読み出しステップと、
第２の記憶手段が、前記第１の読み出し手段で読み出された前記ライン符号データから前記識別符号を認識し、該識別符号に基づき前記ライン符号データをライン単位で記憶する第２の記憶ステップと、
第２の読み出し手段が、前記第２の記憶手段から前記ライン符号データを読み出す第２の読み出しステップと、
復号手段が、前記第２の読み出しステップで読み出された前記ライン符号データを復号する復号ステップと、
第３の記憶手段が、前記復号ステップで前記ライン符号データが復号された復号画像データをライン単位で記憶する第３の記憶ステップと、
第３の読み出し手段が、前記第３の記憶手段に記憶された前記復号画像データをライン単位で読み出す第３の読み出しステップと
を有し、
前記画像データを１８０度回転させて出力する場合に、
前記第１の読み出しステップは、
前記第１の記憶手段から、前記ライン符号データを、前記終端ライン側から前記先頭ライン側に向けて読み出すと共に、各ラインを終端側から先頭側に向けて読み出し、
前記第２の読み出しステップは、
前記第２の記憶手段から、前記ライン符号データを、該ライン符号データに含まれる前記識別符号の位置から該ライン符号データによるラインの終端側に向けて読み出し、
前記第３の読み出しステップは、
前記第３の記憶手段から、前記復号画像データを、画素単位でラインの終端側から先頭側に向けて読み出す
ことを特徴とする画像処理方法。
【請求項１２】
用紙の表面および裏面にそれぞれ印字可能な印字手段と、
請求項１０に記載の画像処理装置と
を有し、
前記第１の読み出し手段、前記第２の読み出し手段および前記第３の読み出し手段は、
前記印字手段が前記用紙の表面に印字する際には前記０度回転時の読み出し処理を行い、該用紙の裏面に印字する際には前記１８０度回転時の読み出し処理を行う
ことを特徴とする画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像データを１８０度回転させて出力する際に用いて好適な画像処理装置および画像処理方法、ならびに、画像形成装置に関する。
【背景技術】
【０００２】
プリンタ装置などの画像形成装置は画像データを一時的にメモリに記憶する。この場合、画像データをそのままメモリに格納しようとすると、大容量のメモリが必要になり価格が上昇してしまう。これに対処するため、画像データを圧縮してメモリに格納するようにしている。
【０００３】
このようなプリンタ装置における印字処理は、例えば次のように行われる。プリンタ装置は、コンピュータなどで作成されネットワークなどを介して受け取ったＰＤＬ(Page Description Language)を解析して描画部が実行可能な中間言語を生成し、この中間言語を描画部が解析して、バンドメモリに対して階調処理後の画像を描画する。描画された画像データは、２値画像の圧縮符号化アルゴリズムにより圧縮符号化し、生成された符号データをメモリに格納する。その後、印字動作時に、ＣＭＹＫ各版毎に遅延させてメモリから符号データを読み込んで復号し、ＣＭＹＫ各版に対応するデータのプリンタエンジンに転送し、印字する。
【０００４】
また、用紙の両面に印字可能なプリンタ装置が知られている。このようなプリンタ装置では、用紙の裏面側に対する印刷に際して、元の画像データに対して１８０度回転させた画像データを用い、表面の印刷地に対して用紙を反転させて裏面に対する印字を行うことができる。
【０００５】
従来、この両面印刷のように、画像データを１８０度回転させて逆の順番で出力する必要がある場合には、画像データを圧縮符号化した符号データを一旦メモリ上に展開し、展開したデータに対して逆順での読み出しを行なっていた。このため、圧縮符号化した符号データを復号して展開するために、符号データより大きいサイズのメモリ空間が必要であった。また、展開されたデータのメモリへの書き込み動作とメモリからの読み出し動作が必要となり、処理速度が低下してしまう。
【０００６】
これを改善するため、例えば特許文献１に示された画像データ圧縮・伸張装置は、１ページ分の画像データを複数個の矩形ブロックに分割し、分割したブロック単位で圧縮してデータ管理をするようにしている。また、特許文献２においては、画像データをＮ×Ｎブロック単位に符号化し、その符号長をブロック毎に管理し、可変長な符号を管理可能にし、ブロック符号毎にメモリアクセスを可能とすることで、９０度単位の回転を可能としていた。
【０００７】
また、特許文献３においては、Ｎ×Ｎのブロック単位に圧縮された符号をブロックライン毎に符号長を求め、ブロックライン単位に符号を管理する。これにより、可変長な符号を管理可能にし、ブロック符号毎にメモリアクセスを可能とすることで、９０度単位の回転を可能としていた。
【０００８】
さらに、特許文献４では、両面印字の高速化と省メモリ化とを図るために、図５０に例示されるように、画像データ８００が符号化された符号８０１に対して０度回転の画像データ８０２を得る復号と、１８０度回転の画像データ８０３を得る復号とをそれぞれ行う技術が開示されている。特許文献４によれば、図５１に例示されるように、符号化の際に画像データ８００をライン単位に符号化して符号８０１’を生成する。復号時に、符号８０１’を最終ラインから復号して上下反転した中間画像８０４を作成し、さらにその画像を左右反転することにより、１８０度回転された画像データ８０３を得る。
【０００９】
また、符号を順方向にも逆方向にも復号可能な符号化方式として、特許文献５が知られている。特許文献５は、特に動画データの圧縮符号化に使用される。テレビジョン放送など電波により符号を受け取る際には符号の損失が多く発生する。例えば画像データの順方向から復号している際に符号の破損損失によるエラーが発生した場合に、符号の後方から破損していない部分まで遡って復号することで、画質の劣化を抑える。
【００１０】
さらに、特許文献６においては、ノンスタック方式で両面印字する方法が記載されている。このノンスタック方式は、表面を印字後に、用紙を反転装置により反転させ、表面を印字した用紙の裏面を印字することにより両面印字を実現している。
【００１１】
さらにまた、特許文献７には、注目画素の値を周辺画素から予測式により、予測する予測符号化方式による圧縮方式が開示されている。
【００１２】
ところで、近年では、プリンタ装置などでも、内部における画像データの転送をバスを介して行う構成が多くなってきている。図５２は、内部バスを介して画像データを転送するようにされた、従来技術によるプリンタ装置５００の一例の構成を示す。
【００１３】
プリンタ装置５００は、メモリコントローラを内蔵したＣＰＵ(Central Processing Unit)と、画像処理用のＡＳＩＣ(Application Specific Integrated Circuit)と、パネルコントローラ用のＡＳＩＣと、メインメモリ６３０と、プログラムが格納されるＲＯＭ６４０とを有する。
【００１４】
メモリコントローラ内蔵のＣＰＵは，ＣＰＵ６００、ＣＰＵ  Ｉ／Ｆ６０１、メモリアービタ（ＡＲＢ）６０２、メモリコントローラ６０３、ＤＭＡ(Direct Memory Access)コントローラ６０４、バスコントローラ６０５および通信コントローラ６０６を有する。メモリコントローラ内蔵ＣＰＵ、画像処理用のＡＳＩＣおよびパネルコントローラ用のＡＳＩＣは、それぞれバス６１３を介して互いに通信可能とされている。通信コントローラ６０６は、ネットワークを介して例えばコンピュータ（ＰＣ）６５０と通信を行う。
【００１５】
メモリアービタ６０２は、メインメモリ６３０とメモリコントローラ内蔵ＣＰＵの各部とのアクセス調停を行う。通信コントローラ６０６は、ネットワークなどによる通信を制御する。バスコントローラ６０５は、バス６１３に接続される各部とのバス調停を行う。メモリコントローラ６０３は、メインメモリ６３０に対するアクセス制御を行う。ＣＰＵ  Ｉ／Ｆ６０１は、メモリアービタ６０２とＣＰＵ６００との間の通信を制御する。
【００１６】
メインメモリ６３０は、ＰＤＬ(Page Description Language)データ領域６３０Ａ、画像データ領域６３０Ｂ、回転後画像データ領域６３０Ｃおよびページ符号データ領域６３０Ｄを有する。
【００１７】
画像処理用のＡＳＩＣは、バスＩ／Ｆ６０７、符号化部６０８、復号部６０９、エンジンコントローラ６１０および回転部７００を有する。バスＩ／Ｆ６０７は、バス６１３と画像処理用のＡＳＩＣとの間の通信を制御する。符号化部６０８は、メインメモリ６３０の画像データ領域６３０Ｂに格納される画像データを圧縮符号化する。復号部６０９は、メインメモリ６３０のページ符号領域６３０Ｄに格納されるページ符号を復号する。回転部７００は、画像データに対して１８０度回転処理を施す。エンジンコントローラ６１０は、プリンタエンジン６６０を制御する。
【００１８】
パネルコントローラ用のＡＳＩＣは、バスＩ／Ｆ６１１およびパネルコントローラ６１２を有する。バスＩ／Ｆ６１１は、バス６１３とパネルコントローラ用のＡＳＩＣとの間の通信を制御する。パネルコントローラ６１２は、オペレーションパネル６２１を制御する。
【００１９】
図５３および図５４を用いて、図５２に例示したプリンタ装置５００における、１８０度回転処理を行う際のデータの流れについて説明する。図５３において、コンピュータ６５０で作成されたＰＤＬデータが、経路Ａに従いメモリアービタ６０２などを介してメインメモリ６３０のＰＤＬデータ領域６３０Ａに格納される。ＣＰＵ６００は、経路Ｂに示されるように、メインメモリ６３０のＰＤＬデータ領域６３０Ａから、メモリアービタ６０２などを介してＰＤＬデータを読み出す。ＣＰＵ６００は、このＰＤＬデータを解析して画像データを描画し、描画された画像データを経路Ｃに従いメインメモリ６３０の画像データ領域６３０Ｂに格納する。
【００２０】
画像データ領域６３０Ｂに格納された画像データは、１８０度の回転処理を行うために画像データ領域６３０Ｂから読み出され、経路Ｄに従い、バス６１３を介して回転部７００に供給される。回転部７００で１８０度の回転処理を施された回転後画像データは、経路Ｅに従い、再びバス６１３を介してメインメモリ６３０に供給され、回転後画像データ領域６３０Ｃに格納される。そして、この回転後画像データ領域６３０Ｃに格納された回転後画像データが、経路Ｆに従い、バス６１３を介して符号化部６０８に供給される。符号化部６０８で符号化された回転後画像データは、経路Ｇに従い再びバス６１３を介してメインメモリ６３０に供給され、ページ符号データ領域６３０Ｄに格納される。
【００２１】
次いで、図５４に例示されるように、経路符号化された回転後画像データがメインメモリ６３０のページ符号データ領域６３０Ｄから読み出され、経路Ｈに従いバス６１３を介して復号部６０９に供給され、復号されてエンジンコントローラ６１０に供給される。
【発明の概要】
【発明が解決しようとする課題】
【００２２】
しかしながら、特許文献１および特許文献２においては、１ページの画像データを細かなブロック単位に管理するために、各ブロック毎のアドレスを記憶する大きなメモリ領域が必要であり、処理が複雑になるという問題点があった。また、元の画像データが細かくブロックに分割されるために、圧縮率が低下するという問題点があった。
【００２３】
また、特許文献３においては、ブロックライン単位にアドレスを記憶する必要があり、かつ回転時にブロックライン符号の内部のアドレスを求める処理が複雑であるという問題点があった。
【００２４】
さらに、特許文献４においては、図５５に示されるように、ライン符号データの終端に、ラインＴＡＧとして各ラインの符号長が記述されている。１８０度回転処理時には、先ずこのラインＴＡＧから符号長を読み込み、そのラインの先端の符号のアドレスを求め、そこから順次１ラインの符号を読み込み復号している。そのため、符号を転送するＤＭＡは、１ライン分の符号はシリアルに読み込む一方で、符号のアドレスを飛び飛びにランダムアクセスすることになる。したがって、符号を転送するＤＭＡの効率が大きく落ち、共通バスやメモリのメモリアクセス性能が劣化してしまうという問題点があった。
【００２５】
さらにまた、特許文献５では、符号の逆方向からの復号が可能である一方で、符号を順方向および逆方向の両方向から復号できるような符号ファーマットにする必要があり、符号サイズが大きくなり、圧縮率が良くないという問題点があった。
【００２６】
また、特許文献７に記載されるような予測符号化方式は、符号化を周辺画素から予測式により予測することで符号化を行うため、基本的に、逆方向から符号を復号することはできないという問題点があった。これは、逆方向から復号を行おうとしても、復号に用いる周辺画素が未だ復号されていないからである。このように、予測符号化方式により符号化した画像データは、符号化した順方向からしか復号できない。
【００２７】
さらに、図５２〜図５４を用いて説明した従来システムでの両面印字では、図５６に例示されるように、偶数ページ目の符号化処理時に回転処理のために大容量のバス転送が発生し、印字速度が低下してしまうという問題点があった。図５６の例では、符号化処理における奇数ページ目（１ページ目、３ページ目および５ページ目）では、バス６１３におけるデータ転送量がそれぞれ１９２ＭＢ、２５６ＭＢおよび６４ＭＢであるのに対して、偶数ページ目（２ページ目および４ページ目）ではデータ転送量が５１２ＭＢにもなっている。
【００２８】
本発明は、上記に鑑みてなされたものであって、圧縮符号化を行う画像データに対する１８０度の回転処理を効率的に行うことを目的とする。
【課題を解決するための手段】
【００２９】
上述した課題を解決し、目的を達成するために、本発明は、画像データがライン単位で符号化された符号データの先頭に識別符号が配置された複数のライン符号データを、画像データの先頭ライン側から終端ライン側に向けた順番で記憶する第１の記憶手段と、第１の記憶手段からライン符号データを読み出す第１の読み出し手段と、第１の読み出し手段で読み出されたライン符号データから識別符号を認識し、識別符号に基づきライン符号データをライン単位で記憶する第２の記憶手段と、第２の記憶手段からライン符号データを読み出す第２の読み出し手段と、第２の読み出し手段で読み出されたライン符号データを復号する復号手段と、復号手段でライン符号データが復号された復号画像データをライン単位で記憶する第３の記憶手段と、第３の記憶手段に記憶された復号画像データをライン単位で読み出す第３の読み出し手段とを有し、画像データを１８０度回転させて出力する場合に、第１の読み出し手段は、第１の記憶手段から、ライン符号データを、終端ライン側から先頭ライン側に向けて読み出すと共に、各ラインを終端側から先頭側に向けて読み出し、第２の読み出し手段は、第２の記憶手段から、ライン符号データを、ライン符号データに含まれる識別符号の位置からライン符号データによるラインの終端側に向けて読み出し、第３の読み出し手段は、第３の記憶手段から、復号画像データを、画素単位でラインの終端側から先頭側に向けて読み出すことを特徴とする。
【００３０】
また、本発明は、第１の読み出し手段が、画像データがライン単位で符号化された符号データの先頭に識別符号が配置された複数のライン符号データを、画像データの先頭ライン側から終端ライン側に向けた順番で記憶する第１の記憶手段からライン符号データを読み出す第１の読み出しステップと、第２の記憶手段が、第１の読み出し手段で読み出されたライン符号データから識別符号を認識し、識別符号に基づきライン符号データをライン単位で記憶する第２の記憶ステップと、第２の読み出し手段が、第２の記憶手段からライン符号データを読み出す第２の読み出しステップと、復号手段が、第２の読み出しステップで読み出されたライン符号データを復号する復号ステップと、第３の記憶手段が、復号ステップでライン符号データが復号された復号画像データをライン単位で記憶する第３の記憶ステップと、第３の読み出し手段が、第３の記憶手段に記憶された復号画像データをライン単位で読み出す第３の読み出しステップとを有し、画像データを１８０度回転させて出力する場合に、第１の読み出しステップは、第１の記憶手段から、ライン符号データを、終端ライン側から先頭ライン側に向けて読み出すと共に、各ラインを終端側から先頭側に向けて読み出し、第２の読み出しステップは、第２の記憶手段から、ライン符号データを、ライン符号データに含まれる識別符号の位置からライン符号データによるラインの終端側に向けて読み出し、第３の読み出しステップは、第３の記憶手段から、復号画像データを、画素単位でラインの終端側から先頭側に向けて読み出すことを特徴とする。
【発明の効果】
【００３１】
本発明によれば、圧縮符号化した画像データに対する１８０度の回転処理を効率的に行うこことができるという効果を奏する。
【図面の簡単な説明】
【００３２】
【図１】図１は、本発明の第１の実施形態に適用可能な画像形成装置の一例の構成を示す略線図である。
【図２】図２は、電装・制御部の一例の構成を示すブロック図である。
【図３】図３は、処理の全体的な流れを示す略線図である。
【図４】図４は、符号化の際のデータフローを示す略線図である。
【図５】図５は、復号の際のデータフローを示す略線図である。
【図６】図６は、本発明の第１の実施形態による全体の処理を示す略線図である。
【図７】図７は、符号化部の一例の構成を示すブロック図である。
【図８】図８は、復号部の一例の構成を示すブロック図である。
【図９】図９は、本発明の第１の実施形態に適用可能な符号フォーマットを示す略線図である。
【図１０】図１０は、１８０度回転復号時の符号データと符号ラインメモリとの関係を示す略線図である。
【図１１】図１１は、０度回転復号時の符号データと符号ラインメモリとの関係を示す略線図である。
【図１２】図１２は、符号化処理部の一例の構成を示すブロック図である。
【図１３】図１３は、復号処理部の一例の構成を示すブロック図である。
【図１４】図１４は、符号化する画像データの例を示す略線図である。
【図１５】図１５は、本発明の第１の実施形態の符号化方法により符号化された符号データの一例を示す略線図である。
【図１６】図１６は、ライン符号データの例を示す略線図である。
【図１７】図１７は、符号化処理の一例を示すフローチャートである。
【図１８】図１８は、ライン単位の符号化処理の一例を示すフローチャートである。
【図１９】図１９は、辞書の探索を説明するための略線図である。
【図２０】図２０は、辞書更新の例を示す略線図である。
【図２１】図２１は、辞書探索処理の一例のを示すフローチャートである。
【図２２】図２２は、辞書更新処理の一例を示すフローチャートである。
【図２３】図２３は、ＥＳＣ辞書更新処理の一例を示すフローチャートである。
【図２４】図２４は、インデクス符号化処理の一例を示すフローチャートである。
【図２５】図２５は、インデクス符号テーブルの例を示す略線図である。
【図２６】図２６は、ＥＳＣ符号化処理の一例を示すフローチャートである。
【図２７】図２７は、符号出力処理の一例を示すフローチャートである。
【図２８】図２８は、復号処理の一例を示すフローチャートである。
【図２９】図２９は、１８０度回転復号処理の一例を示すフローチャートである。
【図３０】図３０は、１８０度回転ライン復号処理の一例を示すフローチャートである。
【図３１】図３１は、１８０度回転符号入力処理の一例を示すフローチャートである。
【図３２】図３２は、ＥＳＣ復号処理の一例を示すフローチャートである。
【図３３】図３３は、インデクス復号処理の一例を示すフローチャートである。
【図３４】図３４は、インデクス逆符号テーブルの例を示す略線図である。
【図３５】図３５は、インデクス値により辞書をアクセスして画像データを求めることを説明するための略線図である。
【図３６】図３６は、ラインメモリ反転出力処理の一例を示すフローチャートである。
【図３７】図３７は、０度回転復号処理の一例を示すフローチャートである。
【図３８】図３８は、０度回転ライン復号処理の一例を示すフローチャートである。
【図３９】図３９は、０度回転符号入力処理の一例を示すフローチャートである。
【図４０】図４０は、ラインメモリ出力処理の一例を示すフローチャートである。
【図４１】図４１は、本発明の第２の実施形態による符号フォーマットの例を示す略線図である。
【図４２】図４２は、本発明の第２の実施形態によるライン符号データの例を示す略線図である。
【図４３】図４３は、本発明の第２の実施形態による１８０度回転復号時の符号データと符号ラインメモリとの関係を示す略線図である。
【図４４】図４４は、本発明の第２の実施形態による０度回転復号時の符号データと符号ラインメモリとの関係を示す略線図である。
【図４５−１】図４５−１は、本発明の第２の実施形態によるライン符号化処理の一例を示すフローチャートである。
【図４５−２】図４５−２は、本発明の第２の実施形態によるライン符号化処理の一例を示すフローチャートである。
【図４６】図４６は、ランレングス符号化処理の一例を示すフローチャートである。
【図４７】図４７は、本発明の第２の実施形態による１８０度回転ライン復号処理の例を示すフローチャートである。
【図４８】図４８は、ランレングス復号処理の一例を示すフローチャートである。
【図４９】図４９は、本発明の第２の実施形態による０度回転ライン復号処理の例を示すフローチャートである。
【図５０】図５０は、従来技術を説明するための略線図である。
【図５１】図５１は、従来技術を説明するための略線図である。
【図５２】図５２は、従来技術によるプリンタ装置の一例の構成を示すブロック図である。
【図５３】図５３は、従来技術によりプリンタ装置における１８０度回転処理を行う際のデータの流れについて説明するための略線図である。
【図５４】図５４は、従来技術によりプリンタ装置における１８０度回転処理を行う際のデータの流れについて説明するための略線図である。
【図５５】図５５は、従来技術による符号の例を示す略線図である。
【図５６】図５６は、従来技術を説明するための略線図である。
【発明を実施するための形態】
【００３３】
＜第１の実施形態＞
以下に添付図面を参照して、本発明に係る画像形成装置の第１の実施形態を詳細に説明する。図１は、本発明の第１の実施形態に適用可能な画像形成装置の一例の構成を示す。
【００３４】
画像形成装置本体２１は、現像器１〜現像器４、光学ユニット５、帯電器８、感光ベルト１８、転写ドラム１７、レジストローラ１１、転写ローラ１２、除電器１４、定着器１５、クリーナ１６、排紙ローラ１３、給紙カセット６および７、排紙センサ２６、ならびに、切替器３５を主たる構成部品としいる。反転送紙装置２２は搬送ローラ３３、３４、３７、用紙センサ３０、３１および３２、ソレノイド２７、ソレノイド２８、ならびに、切替器３６を主たる構成部品としている。
【００３５】
画像形成装置本体２１および用紙反転装置２２の動作について説明する。ここには示していないホストからの印字開始信号により、帯電器８は感光ベルト１８を一様に帯電させる。光学ユニット５はホストから送られてくる印字データによって、感光ベルト１８の上に潜像を描く。描かれた潜像は、現像器１〜現像器４の何れか一つにより現像され、感光ベルト１８の上に現像器の中の着色粒子を塗布する。
【００３６】
感光ベルト１８はここには示さない駆動源によって回転し、転写ドラム１７の上に感光ベルト１８の上に着色粒子を転写する。感光ベルト１８はイレーズランプ２５によって除電され、感光ベルト１８上に残った余剰の着色粒子はクリーナ１９によって除去され、再び帯電器８により帯電される。カラー印字の場合には、現像器を切り替えながらこの工程を複数回繰り返す。
【００３７】
転写ドラム１７上には、単色、または複数色の着色粒子により可視画像が形成され、所望の転写が終了する時点、あるいは事前に給紙カセット６、あるいは給紙カセット７から、用紙２３が給紙ローラ９、あるいは給紙ローラ１０により引出され、レジストローラ１１のところで待機する。用紙センサ２９で用紙を検出した後、所定の時間をおいて給紙ローラ９あるいは給紙ローラ１０は停止する。
【００３８】
転写ドラム１７上に形成した可視像の位置が用紙上への転写位置と合致するタイミングを見計らって、レジストローラ１１の所に待機していた用紙は再び搬送を開始し、転写ローラ１２の所で可視像を用紙側に転写する。除電器１４により、用紙は転写ドラム１７より剥離し、定着器１５により、着色粒子が用紙に定着される。片面のみの印字の場合は、切替器３５は動作せず、用紙は排紙トレー２４側に排出される。  
【００３９】
両面印字の場合は、ソレノイド２７が動作し、切替器３５が図１で言う右側に動き、用紙を用紙反転部２０内に誘導し、搬送ローラ３３により用紙を反転装置下部の用紙反転部２０に搬送する。用紙反転部２０では用紙センサ３２が用紙を検出したら所定量だけ用紙を図１で言う左方向に送り、ソレノイド２８を動作させ、切替器３６が図１で言う上側に動き、搬送ローラ３４を逆転させて用紙の後端部を本体給紙口付近の搬送ローラ３７の手前まで送る。
【００４０】
その後、タイミングを見計らって搬送ローラ３４を回転させ、用紙を搬送ローラ３７へ送り、搬送ローラ３７はレジストローラ１１のところまで紙が送られたら待機する。その後は片面印字の場合と同じ手順で転写、剥離、定着を行い、切替器３５を動作させず、排紙トレー２４側に用紙を排出して両面印字終了となる。なお、電装・制御部５０は、画像形成装置２１の全体を制御する。
【００４１】
図２は、電装・制御部５０の一例の構成を示す。電装・制御部５０は、メモリコントローラを内蔵したＣＰＵ(Central Processing Unit)部５１と、画像処理用のＡＳＩＣ(Application Specific Integrated Circuit)５２と、パネルコントローラ用のＡＳＩＣ５３と、メインメモリ１３０と、プログラムが格納されるＲＯＭ１４０とを有する。メモリコントローラ内蔵のＣＰＵ部５１、画像処理用のＡＳＩＣ５２およびパネルコントローラ用のＡＳＩＣ５３は、それぞれバス１１３を介して互いに通信可能とされている。
【００４２】
メモリコントローラ内蔵のＣＰＵ部５１は、ＣＰＵ１００、ＣＰＵ  Ｉ／Ｆ１０１、メモリアービタ（ＡＲＢ）１０２、メモリコントローラ１０３、ＤＭＡ(Direct Memory Access)コントローラ１０４、バスコントローラ１０５および通信コントローラ１０６を有する。ＣＰＵ１００は、ＲＯＭ１４０に記憶されるプログラムに従い、画像形成装置２１の全体を制御すると共に、例えばコンピュータ（ＰＣ）１５０で作成されネットワークを介して送信されたＰＤＬデータを解析してバンドデータの描画を行う。描画されたバンドデータは、メインメモリ１３０の画像データ領域１３０Ｂに格納される。
【００４３】
メモリアービタ１０２は、メインメモリ１３０とメモリコントローラ内蔵ＣＰＵの各部とのアクセス調停を行う。通信コントローラ１０６は、ネットワークなどによる通信を制御する。バスコントローラ１０５は、バス１１３に接続される各部とのバス調停を行う。メモリコントローラ１０３は、メインメモリ１３０に対するアクセス制御を行う。ＣＰＵ  Ｉ／Ｆ１０１は、メモリアービタ１０２とＣＰＵ１００との間の通信を制御する。
【００４４】
メインメモリ１３０は、ＰＤＬ(Page Description Language)データ領域１３０Ａ、画像データ領域１３０Ｂおよびページ符号領域１３０Ｃを有する。
【００４５】
画像処理用のＡＳＩＣ５２は、バスＩ／Ｆ１０７、符号化部１０８、復号部１０９およびエンジンコントローラ１１０を有する。バスＩ／Ｆ１０７は、バス１１３と画像処理用のＡＳＩＣ５２との間の通信を制御する。符号化部１０８は、メインメモリ１３０の画像データ領域１３０Ｂに格納される画像データを圧縮符号化する。画像データが圧縮符号化されたページ符号データは、メインメモリ１３０のページ符号領域１３０Ｃに格納される。復号部１０９は、メインメモリ１３０のページ符号領域１３０Ｃから読み出したページ符号データを復号し、エンジンコントローラ１１０に供給する。エンジンコントローラ１１０は、プリンタエンジン１６０を制御する。
【００４６】
プリンタエンジン１６０は、図１で示したように、ノンスタック方式の両面印字を行なう。このノンスタック方式は、用紙の表面を印字後に、用紙を反転機構により反転させ、表面を印字した用紙の裏面に印字することにより、両面印字を実現している。したがって、電装・制御部５０は、両面印字時には、表面、裏面と交互に画像データを順次、プリンタエンジン１６０に転送する。そして、裏面の印字時に、用紙の表面に対して１８０度回転した画像データをプリンタエンジン１６０に転送する。これは、反転機構により用紙が反転しているためである。
【００４７】
パネルコントローラ用のＡＳＩＣ５３は、バスＩ／Ｆ１１１およびパネルコントローラ１１２を有する。バスＩ／Ｆ１１１は、バス１１３とパネルコントローラ用のＡＳＩＣとの間の通信を制御する。パネルコントローラ１１２は、オペレーションパネル１２１を制御する。オペレーションパネル１２１は、表示部や各種操作子が設けられ、ユーザに対して画像形成装置２１の状態を通知したり、ユーザ操作を受け付ける。
【００４８】
図３は、処理の全体的な流れを示す。なお、ＣＰＵ１００は、プログラムにより描画コマンド生成部および描画処理部を構成する。コンピュータ１５０において印字データ（ＰＤＬデータ）が生成され、通信コントローラ１０６がコンピュータ１５０から送信されたＰＤＬデータを受け取る。ＰＤＬデータは、メインメモリ１３０のＰＤＬデータ領域１３０Ａに記憶される。ＣＰＵ１００は、描画コマンド生成部で、ＰＤＬデータ領域１３０Ａに記憶されるＰＤＬデータを解析し、描画コマンドを生成する。描画コマンドは、例えばメインメモリ１３０のＰＤＬデータ領域１３０Ａに記憶される。
【００４９】
ＣＰＵ１００の描画処理部は、メインメモリ１３０のＰＤＬデータ領域１３０Ａから描画コマンドを受け取り、メインメモリ１３０の画像データ領域１３０Ｂに対して画像データ（バンドデータ）を描画する。
【００５０】
メインメモリ１３０の画像データ領域１３０Ｂに記憶されたバンドデータは、符号化部１０８で符号化され、バンド毎の符号データとされてメインメモリ１３０のページ符号領域１３０Ｃに記憶される。復号部１０９は、ページ符号領域１３０Ｃから各バンド毎の符号データからなる１ページ分の符号データを読み出して復号し、プリンタエンジン１６０に供給する。プリンタエンジン１６０は、復号部１０９から供給されたデータに従い印字を行う。
【００５１】
図４は、符号化の際のデータフローを示す。コンピュータ１５０で作成されたＰＤＬデータは、ネットワークを介して画像形成装置２１に供給され、経路ａに従い、メモリアービタ１０２を介してメインメモリ１３０のＰＤＬデータ領域１３０Ａに記憶される。ＣＰＵ１００は、経路ｂに従いＰＤＬデータ領域１３０ＡからＰＤＬデータを読み出し、読み出したＰＤＬデータを解析し、経路ｃに従い、画像データをメインメモリ１３０の画像データ領域１３０Ｂに描画する。
【００５２】
符号化部１０８は、経路ｄに従い、バス１１３を介してメインメモリ１３０の画像データ領域１３０Ｂから画像データを読み込み、符号化する。画像データを符号化した１ページ分のページ符号データは、経路ｅに従い、バス１１３を介してメインメモリ１３０のページ符号領域１３０Ｃに格納される。
【００５３】
図５は、復号の際のデータフローを示す。復号部１０９は、経路ｆに従い、メインメモリ１３０のページ符号領域１３０Ｃからページ符号データを読み込んで復号し、エンジンコントローラ１１０に転送する。ここで、復号部１０９は、０度回転の復号については符号の先頭から符号を読み込み、復号する。また、１８０度回転の復号については符号の終端から先端へ向かって符号を読み込み、復号する。
【００５４】
エンジンコントローラ１１０は、復号部１０９から復号された画像データを受け取り、プリンタエンジン１６０に転送する。
【００５５】
図６は、本第１の実施形態による全体の処理を示す。図６（ａ）は符号化処理、図６（ｂ）は復号処理、図６（ｃ）は各処理でのバス１１３におけるデータ転送量を示す。上述のように、１８０度の回転処理を、メインメモリ１３０のページ符号領域１３０Ｃからのページ符号の読み出し方向を切り替えることで行っているため、回転処理が必要な偶数ページの符号化処理が小さくなる。具体的には、２ページ目の符号化処理と１ページ目の復号処理とで重なる場合と、４ページ目の符号化処理と３ページ目の復号処理とで重なる場合とにおいて、バス１１３におけるデータ転送量が増大しない。
【００５６】
図６（ｃ）の例では、符号化処理の奇数ページ目（１ページ目、３ページ目および５ページ目）で、バス１１３のデータ転送量がそれぞれ１９２ＭＢ、２５６Ｍおよび６４ＭＢであるのに対して、偶数ページ目（２ページ目および４ページ目）でもそれぞれ２５６ＭＢとなっている。従来技術において図５６（ｃ）を用いて説明した例に比べて、バス１１３における偶数ページ目のデータ転送量が半分となっている。
【００５７】
図７は、符号化部１０８の一例の構成を示す。コントローラ２０２は、この符号化部１０８を制御する。アービタ２００は、バスＩ／Ｆ１０７と接続され、画像データの読み込みと符号の書き込みの調整を行なう。画像データ読み込み部２０１は、アービタ２００を介してメインメモリ１３０の画像データ領域１３０Ｂからライン単位で画像データを読み込み、符号化処理部２０３に転送する。符号化処理部２０３は、画像データを符号化し、符号データを符号書き込み部２０４に転送する。符号書き込み部２０４は、符号化処理部２０３から符号データを受け取り、アービタ２００を介してメインメモリ１３０のページ符号領域１３０Ｃに書き込む。
【００５８】
図８は、復号部１０９の一例の構成を示す。コントローラ３０２は、復号部１０９を制御する。アービタ３００は、バスＩ／Ｆ１０７と接続され、符号データの読み込みの調整を行なう。符号アドレス生成部３０１は、アービタ３００を介してメインメモリ１３０のページ符号領域１３０Ｃからページ符号データを読み込むためのページ符号メモリのアドレスを生成する。上述した図５のように、０度回転復号時は、符号のスタートアドレスから終端まで順次アドレスを生成し、１８０度回転復号時は、符号の終端アドレスから符号のスタートアドレスへ逆方向に順次アドレスを生成する。
【００５９】
ラインマーカ認識部３０３は、１８０度回転復号時にアービタ３００から符号データを受け取り、図９の符号フォーマットにおける図９（ｃ）のラインマーカを符号データのワードの上位２０ビットと比較し、一致しない場合は符号ラインメモリ３０４に当該ワードを順次書き込む。一方、一致する場合は、当該ワードを符号ラインメモリ３０４に書き込み、書き込んだ１ライン分の符号数を復号処理部３０６に通知し、符号ラインメモリ３０４に記憶される符号データを復号するように、復号処理部３０６に通知する。図９の符号フォーマットの詳細については、後述する。
【００６０】
図１０は、１８０度回転復号時の符号データと符号ラインメモリ３０４との関係を示す。符号ラインメモリ３０４は、複数ライン分の符号データを格納することができる。図１０は、符号ラインメモリ３０４をアクセス単位である１ワード（３２ビット）毎に区切って示している。
【００６１】
なお、図１０および後述する図１１などにおいて、「１ライン目の０」などの表記は、ラインメモリカウンタのカウント値を表す。すなわち、１ラインをワード単位で区切ってラインメモリに記憶した際の、ラインメモリに対する書き込みまたは読み出し順のワード単位での順番を示す。すなわち、「１ライン目の０」は、１ライン目をワード単位で区切ったときに０番目、すなわち最初に書き込みまたは読み出しがなされる順番を示す。
【００６２】
図１０（ａ）は、符号データの構成例を示す。ライン符号データは、１ライン目から順に１ワード毎に並べられる。各ラインの先頭にはラインマーカが配され、ラインの終端にはライン終端符号が配される。１ワードに対してライン終端符号の後が余った場合は、例えばＮＯＰとして所定のビットが詰め込まれる。
【００６３】
１ライン目の復号時の符号ラインメモリ３０４の内容は、図１０（ｂ）における一番下の符号から１０ライン目の４ワード目の符号データから順次、１０ライン目の０ワード目の符号データまでを格納する。図１０（ｂ）〜図１０（ｄ）において、左側はメモリのアドレス、右側は格納されるデータ順を示す。このように、逆順に１ライン分の符号データが格納される。復号処理部３０６は、符号ラインメモリ３０４の終端の４ワード目から、３ワード目、２ワード目、１ワード目、０ワード目と、逆順に符号データを読み込むことにより、正確に１ラインを復号する。
【００６４】
２ライン目の復号時の符号ラインメモリ３０４の内容も同様に、図１０（ｃ）に例示されるように、９ライン目の５ワード目の符号から順次、９ライン目の０ワード目までの符号を格納する。１０ライン目の復号時の符号ラインメモリ３０４の内容も、図１０（ｄ）に例示されるように、同様である。
【００６５】
このように、符号データは、可変長符号であるため、ライン毎にワード数が異なる。この符号ラインメモリ３０４があることにより、この復号部１０９は、メインメモリ１３０のページ符号領域１３０Ｃから読み出したページ符号データを、終端から先端に向けて順次符号を受け取ることが可能となる。これにより、メインメモリ１３０のアクセス効率が上がり、メインメモリ１３０の転送スピードを上げることができる。また、バス１１３を介してのＤＭＡの転送効率も向上する。
【００６６】
一方、０度回転復号時は、アービタ３００から符号データを受け取り、符号ラインメモリ３０４に、図９（ｄ）に示される符号フォーマットのライン終端符号を見つけるまで、順次符号を書き込んでいく。
【００６７】
図１１は、０度回転復号時の符号データと符号ラインメモリ３０４との関係を示す。符号データの内容を示す図１１（ａ）は、上述の図１０（ａ）と共通である。１ライン目の復号時の符号ラインメモリ３０４の内容は、図１１（ｂ）における一番下の符号から１ライン目の０ワード目の符号から順次、１ライン目の３ワード目の符号までを格納する。このように、順次１ライン分の符号が格納される。図１１（ｂ）〜図１１（ｄ）において、左側はメモリのアドレス、右側は格納されるデータ順を示す。図１１（ｃ）は９ライン目、図１１（ｄ）は１０ライン目をそれぞれ示す。復号処理部３０６は、符号ラインメモリ３０４の終端の０ワード目から、１ワード目、２ワード目、３ワード目と順次符号データを読み込むことにより、正確に１ラインを復号する。
【００６８】
符号読み込み部３０５は、１８０度回転復号時に、図１０を用いて説明したように、符号ラインメモリ３０４に格納された符号データを逆順で、順次読み込み、復号処理部３０６に転送する。また、符号読み込み部３０５は、０度回転復号時には、図１１を用いて説明したように、符号ラインメモリに格納された符号データを順次読み込み、復号処理部３０６に転送する。復号処理部は、符号ラインメモリ３０４から読み出された符号データを順次復号し、画像ラインメモリ３０７に転送する。
【００６９】
ライン反転読み込み部３０８は、１８０度回転復号時に、画像ラインメモリ３０７に格納された画像データをラインの後端から先頭側へと読み込み、エンジンコントローラ１１０に転送する。また、ライン反転読み込み部３０８は、０度回転復号時には、画像ラインメモリ３０７に格納された画像データを順方向に読み込み、エンジンコントローラ１１０に転送する。
【００７０】
＜ＭＴＦ符号化方式を用いた構成＞
図１２は、符号化処理部２０３の一例の構成を示す。本第１の実施形態では、画像データの符号化をＭＴＦ符号化方式を用いて行う。ＭＴＦ符号化方式は、特許第４０００２６６号公報に開示されるように、小さい動的な辞書をＭＴＦ(Move To Front)制御することにより、辞書と一致したインデックス値を符号化する符号化方式である。このＭＴＦ符号化方式による符号化は、既出の文字の中で前回出現した文字が、今回出現する確率が最も高いと見做す符号化方法である。
【００７１】
ＭＴＦ符号化方式は、次のように動作する。入力される値が取り得る全ての値を保持するリストを持っており、入力された値とそのリスト中の値を比較し、同じ値を持つリスト中の位置をシンボルとして符号を生成する。次いで、この比較対象となった値をリスト中から削減し、その入力値をリストの先頭へもってくる。
【００７２】
例えば、５つの文字「ａ」、「ｂ」、「ｄ」、「ｏ」および「Ｙ」から作られている文字系列を例にとって説明する。先ず、この５つの文字に対するリストＲ＝｛ａ，ｂ，ｄ，ｏ，Ｙ｝を作成し、各文字に対してシンボル０、１、２、３および４を与える。次に、入力文字系列（例えば｛Ｙｄｂｂａａａａｄｏｏ｝）を１文字ずつ調べ、対応するリストのシンボルを出力し、その文字をリストの先頭へ移動する作業を、入力系列全ての文字を出力するまで繰り返し、最終的に、出力系列｛４，３，３，０，３，０，０，０，２，４，０｝が得られる。  
【００７３】
画像データ読み込み部２０１は、メインメモリ１３０の画像データ領域１３０Ｂから画像データを読み込み、ＭＴＦ符号化処理部２１０に転送する。ＭＴＦ符号化処理部２１０は、この例では３２個のデータを格納する辞書を持ち、画像データ読み込み部２０１から読み込んだデータを、ＭＴＦ処理により辞書のデータと比較し、一致した場合、一致したインデクス値をハフマン符号化処理部２１１に転送し、一致しなかった場合は、読み込んだデータをＥＳＣ（エスケープ）データとして、ハフマン符号化処理部に２１１に転送する。
【００７４】
ハフマン符号化処理部２１１は、ＭＴＦ符号化処理部２１０から転送されたインデクス値またはＥＳＣデータに対してハフマン符号化処理を行い、符号書き込み部２０４に転送する。符号書き込み部２０４は、ハフマン符号化処理部２１１から転送された符号データを外部に転送する。転送された符号データは、メインメモリ１３０のページ符号データ領域１３０Ｃに格納される。
【００７５】
図１３は、復号処理部３０６の一例の構成を示す。符号読み込み部３０５は、メインメモリ１３０のページ符号データ領域１３０Ｃから符号データを読み込み、ハフマン復号処理部３１０に転送する。ハフマン復号処理部３１０は、符号読み込み部から転送された符号データのハフマン符号を復号し、ＭＴＦ復号化処理部３１１に転送する。
【００７６】
ＭＴＦ復号化処理部３１１は、この例では３２個のデータを格納する辞書を持ち、ハフマン復号処理部３１０から転送された符号データがインデクス値である場合は、復号されたインデクス値により辞書を読み込み、ＭＴＦ処理により画像データを求め、画像データ書き込み部３１２に転送する。また、ハフマン復号処理部３１０から転送された符号データがＥＳＣデータの場合は、直接的に画像データ書き込み部３１２に転送する。画像データ書き込み部３１２は、ＭＴＦ復号化処理部３１１から転送された画像データを外部に転送する。転送された画像データは、メインメモリ１３０の画像データ領域１３０Ｂに格納される。
【００７７】
＜符号化処理＞
次に、本第１の実施形態による符号化処理について、より詳細に説明する。図１４は、符号化する画像データの例を示す。このように、ライン単位の画像データを符号化する。図１５は、図１４の画像データが符号化された符号データの一例を示す。このように、ライン単位に符号化され、先頭にラインマーカが配置され、続けてライン符号データが配置され、終端にライン終端符号が配置される。
【００７８】
本第１の実施形態に適用可能な符号フォーマットについて、図９を用いて説明する。図９（ｃ）は、ラインの先頭を識別するための識別符号であるラインマーカを示す。ラインマーカは符号長が２０ビットで、２進数の値「１」が２０個連なってなる。図９（ｃ）では、１６進表記としている。ラインマーカのビット配列は、他の符号をどのように組み合わせても発生しないパターンが選択される。こうすることで、符号を先頭から復号しなくても、符号の中からラインマーカを容易に検出可能である。
【００７９】
そして、図１６に示すライン符号データの例のように、ラインマーカの検出と、ライン単位の符号データの復号を容易にするために、ライン単位の符号をワード単位で切り分けている。
【００８０】
図９（ａ）は、インデクス符号を示す。３２個の符号にそれぞれインデクスが対応付けられており、小さい値の符号ほど確率が高いため、短い符号長が割り当てられる。図９（ｂ）はＥＳＣデータのヘッダであるＥＳＣヘッダを示す。ＥＳＣデータは、データ値が辞書に無い場合の生データであり、この例では１６ビット単位に符号化するために１６ビットのデータとなっている。
【００８１】
図９（ｄ）は、ライン終端符号を示す。ライン終端符号は、各ライン符号データの終端を示す符号であり、図１６に例示したライン符号データのように、ライン毎にワード単位で切り分けたライン符号データの終端を判定するために用いる。
【００８２】
図１７は、符号化処理の一例を示すフローチャートである。ステップＳ１０で、ラインカウンタのカウント値ＩＹと符号カウンタのカウント値をクリアする。ステップＳ１１で、ライン単位に符号化を行う。次のステップＳ１２で処理したラインのカウント値ＩＹをカウントアップし、次のステップＳ１３でカウント値ＩＹが画像の高さで処理したか否かを判定し、処理したと判定された場合、処理を終了する。処理が終了していないと判定された場合は、処理がステップＳ１１に戻される。
【００８３】
図１８は、図１７のステップＳ１１におけるライン単位の符号化処理の一例のフローチャートを示す。ステップＳ２０で、符号バッファ＝０すなわち空に初期化され、ポインタ値＝６４ビットにそれぞれ初期化する。次のステップＳ２１でラインマーカを符号化する。すなわち、値「０ｘＦＦＦＦＦ（１６進表記）」をラインマーカの符号データとし、符号サイズを２０ビットとする。ステップＳ２２で、ラインマーカの符号データが出力される。
【００８４】
次のステップＳ２３で、画像データを１６ビット単位に読み込み、次のステップＳ２４で、読み込んだ画像データと一致する辞書の値を探索する。図１９に例を示す。この例では、画像データの値が「０ｘ５５５５」とされ、辞書から値「０ｘ５５５５」を探索する。その結果、１４番目の辞書データと一致することが確認され、インデックス値を「１４」としている。入力データと一致する辞書の値が存在する場合、フラグＨＩＴＦＬＧ＝１とする。一致する値が存在しない場合は、フラグＨＩＴＦＬＧ＝０とされる。
【００８５】
次のステップＳ２５で、入力データと一致する辞書の値が存在するか否かが判定され、一致する値が存在する場合（フラグＨＩＴＦＬＧ＝１）、処理がステップＳ２６に移行されてインデクス値を符号化し、次のステップＳ２７で辞書を更新する。図２０は、辞書更新の例を示す。この例では、入力データが１４番目の辞書データと一致したので、辞書の１番目〜１４番目のデータを１つずつ後方にずらし、一致した入力データを０番目の辞書に格納する。
【００８６】
一方、ステップＳ２５で入力データと一致する辞書の値が存在しないと判定されたら、処理はステップＳ２８に移行され、ＥＳＣ符号化処理を行なう。そして、ステップＳ２９で画像データを読み込まれたデータとし、次のステップＳ３０でＥＳＣ辞書の更新処理が行われる。
【００８７】
ステップＳ２７またはステップＳ３０の辞書更新処理が終了すると、処理がステップＳ３１に移行され、１ライン分を処理したか否かが判定される。若し、未だ１ライン分を処理していないと判定された場合は、処理はステップＳ２３に戻される。
【００８８】
一方、１ライン分の処理が終了したと判定された場合、処理はステップＳ３２に移行される。ステップＳ３２では、ライン終端符号の符号化が行われる。すなわち、値「０ｘＦ７」をライン終端符号の符号データとし、符号サイズを８ビットとする。次にステップＳ３３で、ライン終端符号が出力される。
【００８９】
次のステップＳ３４で、符号バッファが空か否かが判定され、空であれば図１８のフローチャートによる一連の符号化処理が終了される。空でないと判定されたら、処理はステップＳ３５に移行され、符号バッファ内のデータが３２ビットだけ右シフトされて出力符号バッファに格納され、次のステップＳ３６で、出力符号バッファのデータが出力される。そして、次のステップＳ３７で符号カウンタのカウント値が１だけカウントアップされ、図１８のフローチャートによる一連の処理が終了される。
【００９０】
図２１は、図１８のステップＳ２４における辞書探索処理の一例のフローチャートを示す。ステップＳ４０でインデクス値Ｉ＝０とされ、次のステップＳ４１でＩ番目の辞書データが読み込まれた画像データと一致するか否かが判定され、一致しない場合、ステップＳ４２でインデクス値Ｉが１だけカウントアップされ、次のステップＳ４３でインデクス値Ｉ＜３２であれば処理がステップＳ４１に戻される。インデクス値Ｉ≧３２であれば、処理がステップＳ４６に移行されてフラグＨＩＴＦＬＧ＝０とされる。一方、ステップＳ４１で一致すると判定されたら、処理がステップＳ４４に移行され、一致したインデクス値Ｉを値ＤＩＣＴＮＵＭとし、次のステップＳ４５でフラグＨＩＴＦＬＧ＝１とする。
【００９１】
図２２は、図１８のステップＳ２７における辞書更新処理の一例のフローチャートを示す。ステップＳ５０でインデクス値Ｉ＝１とされ、次のステップＳ５１で（Ｉ−１）番目の辞書データをＩ番目の辞書データとし、次のステップＳ５２でインデクス値Ｉが１だけカウントアップされ、次のステップＳ５３でインデクス値Ｉ＜値ＤＩＣＴＮＵＭか否かが判定される。インデクス値Ｉ＜値ＤＩＣＴＮＵＭであれば、処理がステップＳ５１に戻される。一方、インデクス値Ｉ≧値ＤＩＣＴＮＵＭであれば、処理がステップＳ５４に移行され、ＤＩＣＴＮＵＭ番目の辞書データが０番目の辞書データとされる。
【００９２】
図２３は、図１８のステップＳ３０におけるＥＳＣ辞書更新処理の一例のフローチャートを示す。ステップＳ６０でインデクス値Ｉ＝１とされ、次のステップＳ６１で（Ｉ−１）番目の辞書データをＩ番目の辞書データとし、次のステップＳ６２でインデクス値Ｉが１だけカウントアップされ、次のステップＳ６３でインデクス値Ｉ＜３２か否かが判定される。インデクス値Ｉ＜３２であれば、処理がステップＳ６１に戻される。一方、インデクス値Ｉ≧３２であれば、処理がステップＳ６４に移行され、画像データが０番目の辞書データとされる。
【００９３】
図２４は、図１８のステップＳ２６におけるインデクス符号化処理の一例のフローチャートを示す。ステップＳ７０で、図９に示した符号フォーマットに基づき、図２５に例示されるインデクス符号とインデクス符号サイズと対応付けたインデクス符号テーブルにより、インデックス値の符号値と符号長を求める。すなわち、インデクス符号テーブルより、インデクス符号[ＤＩＣＴＮＵＭ]を符号データとし、符号サイズをインデクス符号サイズ[ＤＩＣＴＮＵＭ]とする。これら符号データおよび符号サイズを、ステップＳ７１の符号出力処理で可変長符号化する。
【００９４】
図２６は、図１８のステップＳ２８におけるＥＳＣ符号化処理の一例のフローチャートを示す。ステップＳ７５でＥＳＣヘッダの値「０」を符号データとし、符号サイズを３ビットとして、次のステップＳ７６の符号出力処理で符号データおよび符号サイズを可変長符号化する。次のステップＳ７７で読み込まれた画像データを符号データとし、符号サイズを１６ビットとして、次のステップＳ７８の符号出力処理で符号データおよび符号サイズを可変長符号化する。
【００９５】
図２７は、上述のステップＳ７１、ステップＳ７６およびステップＳ７８における符号出力処理の一例のフローチャートを示す。符号出力処理は、符号サイズの長さの可変長の符号データをワードサイズ（この例では３２ビット）に纏めて出力する。符号バッファは６４ビットであり、符号サイズの長さの可変長の符号データ順次付加していく。符号ポインタは、符号バッファの中の有効な符号の終端を示す。
【００９６】
ステップＳ８０で、符号ポインタから符号サイズを減じた値が新たな符号ポインタとする。すなわち、符号バッファに符号データを付加するために、符号サイズ分、符号ポインタを更新している。次のステップＳ８１で、符号データを符号ポインタで移動させて位置を合わせて、符号バッファに付加する。次のステップＳ８２で、符号ポインタ≦３２であるか否かを判定し、符号ポインタ＞３２であれば、符号出力処理を終了する。
【００９７】
一方、符号ポインタ≦３２であれば、ステップＳ８３〜ステップＳ８７で、符号バッファの上位３２ビットが出力される。すなわち、ステップＳ８３で符号バッファが３２ビット右シフトされて出力符号バッファとされ、次のステップＳ８４で出力符号バッファが出力される。次のステップＳ８５で、符号ポインタに３２が加算され、次のステップＳ８６で符号バッファが３２ビット左シフトされる。そして、次のステップＳ８７で、符号カウンタが１だけカウントアップされ、図２７のフローチャートによる一連の符号出力処理が終了される。
【００９８】
＜復号処理＞
次に、本第１の実施形態による復号処理について説明する。図２８は、復号処理の一例のフローチャートを示す。印字モードとして両面印字が指定されているものとする。ステップＳ１００で、処理枚数を示すカウンタのカウント値Ｐが０に初期化されると共に、用紙の表面および裏面を示すフラグＳＦＬＡＧが０に初期化される。なお、フラグＳＦＬＡＧは、値が０で表面、１で裏面をそれぞれ示す。
【００９９】
次のステップＳ１０１で、フラグＳＦＬＡＧの値に基づき、これから行う印字が裏面の印字であるか否かが判定される。若しフラグＳＦＬＡＧ＝１であり裏面の印字であると判定されたら、処理はステップＳ１０２に移行され、１８０度回転復号処理を行なう。そして、次のステップＳ１０３でフラグＳＦＬＡＧ＝０として処理をステップＳ１０６に移行させる。
【０１００】
一方、ステップＳ１０１で、フラグＳＦＬＡＧ＝０であり表面の印字であると判定されたら、処理はステップＳ１０４に移行され、０度回転復号処理を行なう。そして、次のステップＳ１０５でフラグＳＦＬＡＧ＝１として処理をステップＳ１０６に移行させる。
【０１０１】
ステップＳ１０６では、カウント値Ｐが１だけカウントアップされ、次のステップＳ１０７で全枚数の処理が終了したか否かが判定される。若し、終了していないと判定されたら、処理がステップＳ１０１に戻される。一方、終了していると判定されたら、図２８のフローチャートによる一連の復号処理が終了される。
【０１０２】
図２９は、図２８ステップＳ１０２における１８０度回転復号処理の一例のフローチャートを示す。ステップＳ１１０でラインカウンタのカウント値ＩＹが０とされ、次のステップＳ１１１でライン符号データの先頭アドレスとライン符号データのワード数とが加算されて符号終端アドレスとされて、処理がステップＳ１１２に移行される。
【０１０３】
ステップＳ１１２で、ラインメモリカウンタのカウント値ＬＭが０とされる。このラインメモリカウンタのカウント値ＬＭは、図１０における符号ラインメモリ３０４における、ワード単位での読み出し順番を示す。このステップＳ１１２からステップＳ１１６までの処理で、図１０を用いて説明したようにライン符号データの終端アドレスから順次ライン符号データを読み込み、符号ラインメモリ３０４に１ライン分のライン符号データを読み込む。すなわち、ステップＳ１１３で終端符号アドレスの１ワードの符号データを読み込み、読み込んだ符号データを、次のステップＳ１１４で、符号ラインメモリ３０４のラインメモリカウンタのカウント値が示す位置に書き込む。次のステップＳ１１５で終端符号アドレスから１を減じた値が新たな終端符号アドレスとされる。
【０１０４】
そして、ステップＳ１１６で、ラインマーカを認識したか否かが判定される。これにより、ラインの先頭が認識される。すなわち、符号データの上位２０ビットの値が「０ｘＦＦＦＦＦ」であるか否かが判定される。若し、ラインマーカではないと判定されたら、処理はステップＳ１１７に移行され、ラインメモリカウンタのカウント値ＬＭが１だけカウントアップされ、処理がステップＳ１１３に戻される。
【０１０５】
一方、ステップＳ１１６で、ラインマーカが認識されたと判定されたら、処理はステップＳ１１８に移行され、１８０度回転のライン復号処理がなされ、さらに次のステップＳ１１９でラインメモリ反転出力処理が行われる。
【０１０６】
そして、次のステップＳ１２０でラインカウンタのカウント値ＩＹが１だけカウントアップされ、次の処理ステップＳ１２１でカウント値ＩＹが画像の高さ未満であるか否かが判定される。カウント値ＩＹが画像の高さ未満であると判定されたら、処理はステップＳ１１２に戻される。一方、カウント値ＩＹが画像の高さに達したと判定されたら、図２９のフローチャートによる一連の処理が終了される。
【０１０７】
図３０は、図２９のステップＳ１１８における１８０度回転ライン復号処理の一例のフローチャートを示す。ステップＳ１３０で、符号バッファ＝０（ビット）すなわち空に初期化され、符号ポインタ＝６４（ビット）に初期化される。符号バッファは、可変長符号を一時的に記憶するバッファであり、符号ポインタは符号バッファの終端を示す。
【０１０８】
次のステップＳ１３１で、１８０度回転符号入力処理が行われてライン符号データが入力されて符号バッファに記憶され、次のステップＳ１３２で符号バッファが２０ビット左シフトされると共に、符号ポインタの値が２０減ぜられる。これにより、符号バッファからラインマーカが取り除かれ、ＭＳＢ(Most Significant Bit)にラインマーカの次の符号の先頭が来る。そして、符号ポインタにラインマーカの符号長分を加算することで、符号の終端を示すようにする。
【０１０９】
次のステップＳ１３３で、１８０度回転符号入力処理が行われてライン符号データが入力され符号バッファに記憶され、次のステップＳ１３４で符号バッファが５６ビット右シフトされて符号データが切り出される。これにより、符号の先頭の８ビットが符号データとして切り出される。
【０１１０】
次のステップＳ１３５で、切り出された符号がライン終端符号か否か、すなわち、切り出された符号データの値が「０ｘＦ７」であるか否かが判定される。若し、切り出された符号がライン終端符号であると判定されたら、図３０のフローチャートによる一連の処理が終了される。
【０１１１】
一方、ライン終端符号ではないと判定されたら、処理はステップＳ１３６に移行され、符号バッファが６１ビット右シフトされ、現在の符号の先頭の３ビットを符号データとして切り出す。次のステップＳ１３７で、切り出した符号データの値が「０」であるか否かが判定される。若し、「０」ではないと判定されたら、処理はステップＳ１３８に移行され、インデクス復号処理が行われる。一方、「０」であると判定されたら、処理はステップＳ１３９に移行され、ＥＳＣ復号処理が行われる。ステップＳ１３８またはステップＳ１３９の処理が終了したら、処理がステップＳ１３３に戻される。
【０１１２】
図３１は、図３０のステップＳ１３１およびステップＳ１３３における１８０度回転符号入力処理の一例のフローチャートを示す。この１８０度回転符号入力処理は、符号バッファの有効符号位置が３２ビットより大きくなった場合は、符号ラインメモリから１ワード（３２ビット）の符号データを読み込み、符号バッファに付加する。
【０１１３】
ステップＳ１４０で、符号ポインタが示す符号バッファの有効符号位置が３２ビット以上であるか否かが判定される。若し、３２ビット未満であると判定されたら、図３１のフローチャートによる一連の処理が終了される。
【０１１４】
一方、３２ビット以上であると判定されたら、処理はステップＳ１４１に移行され、符号ラインメモリ３０４からラインメモリカウンタのカウント値ＬＭで示される位置の１ワードの符号が読み出され、入力符号バッファに記憶される。次のステップＳ１４２で、カウント値ＬＭから１が減ぜられて処理がステップＳ１４３に移行され、符号ポインタ値から３２ビットが減ぜられて符号ポインタが更新される。そして、次のステップＳ１４４で、読み込んだ符号データを符号ポインタが示す位置に合わせ、符号バッファに追加する。
【０１１５】
図３２は、図３０のステップＳ１３９におけるＥＳＣ復号処理の一例のフローチャートを示す。ステップＳ１５０で、符号バッファが３ビット左シフトされると共に、符号ポインタの値が３だけ減ぜられてＥＳＣヘッダが取り除かれる。そして、次のステップＳ１５１で図３１で説明した１８０度回転符号入力処理が行われ、次のステップＳ１５２で符号バッファが４８ビット右シフトされて符号データが切り出され、切り出された符号データが画像データとされる。
【０１１６】
次のステップＳ１５３で、符号バッファが１６ビット左シフトされると共に、符号ポインタの値から１６ビットが減ぜられて符号ポインタが更新される。そして、次のステップＳ１５４でＥＳＣ辞書の更新処理が行われる。
【０１１７】
ＥＳＣ辞書が更新されると、処理はステップＳ１５５に移行され、画像ラインメモリ３０７のラインメモリ画素カウンタのカウント値ＬＭＰが示す位置に画像データを書き込み、次のステップＳ１５６でラインメモリ画素カウンタが１だけカウントアップされて、図３２のフローチャートによる一連の処理が終了される。なお、ラインメモリ画素カウンタは、ラインメモリにおいて画素単位のカウントを行う。この例では、１画素のデータ長が１６ビットであるので、ラインメモリ画素カウンタは、カウント値ＬＭＰを１６ビット毎に計数することになる。
【０１１８】
図３３は、図３０のステップＳ１３８におけるインデクス復号処理の一例のフローチャートを示す。ステップＳ１６０で、符号バッファが５６ビット右シフトされる。これにより、符号データから８ビットが切り出されてアドレス値とされる。次のステップＳ１６１で、図３４に例示されるインデクス逆符号とインデクス逆符号サイズと対応付けたインデクス逆符号テーブルをアドレス値で参照することで、値ＤＩＣＴＮＵＭを求めてインデクス値とすると共に、符号サイズを求める。
【０１１９】
次のステップＳ１６２で、符号バッファが符号サイズだけ左シフトされると共に、符号ポインタの値から符号サイズが減じられた値で符号ポインタが更新される。そして、次のステップＳ１６３で、図３５に例示されるようにしてインデクス値の値ＤＩＣＴＮＵＭにより辞書をアクセスして画像データを求める。すなわち、ＤＩＣＴＮＵＭ番目の辞書の値を画像データとする。そして、ステップＳ１６４で辞書を更新する。
【０１２０】
次のステップＳ１６５で、画像ラインメモリ３０７におけるラインメモリ画素カウンタのカウント値ＬＭＰが示す位置に画像データを書き込み、次のステップＳ１６６でカウント値ＬＭＰが１だけカウントアップされて、図３２のフローチャートによる一連の処理が終了される。
【０１２１】
図３６は、図２９のステップＳ１１９におけるラインメモリ反転出力処理の一例のフローチャートを示す。ステップＳ１７０でラインメモリ画素カウンタのカウント値ＬＭＰから１が減ぜられ、次のステップＳ１７１で、画像ラインメモリ３０７のカウント値ＬＭＰが示す位置の画像データを読み込み、データＯＤＡＴＡとする。次のステップＳ１７２で、データＯＤＡＴＡをエンジンコントローラ１１０に転送する。そして、次のステップＳ１７３でラインメモリ画素カウンタのカウント値ＬＭＰが０より大きいか否かが判定され、０より大きいと判定されたら処理がステップＳ１７０に戻される。ラインメモリ画素カウンタのカウント値ＬＭＰが０であると判定されたら、図３６のフローチャートによる一連の処理が終了される。
【０１２２】
図３７は、図２８のステップＳ１０４における０度回転復号処理の一例のフローチャートを示す。ステップＳ１８０でラインカウンタのカウント値ＩＹが０とされると共に、ラインメモリカウンタのカウント値ＬＭが０とされる。次のステップＳ１８１で符号始点アドレスの１ワードの符号データを読み込んで符号データとし、この符号データを次のステップＳ１８２で符号ラインメモリ３０４のラインメモリカウンタのカウント値ＬＭが示す位置に書き込む。次のステップＳ１８３で、始点符号アドレスに対して１が加算され、さらに次のステップＳ１８４でラインメモリカウンタのカウント値ＬＭに１が加算される。次のステップＳ１８５で符号終端アドレスの１ワードの符号を読み込み、符号データとする。
【０１２３】
そして、ステップＳ１８６で、ラインマーカを認識したか否かが判定される。これにより、ラインの先頭が認識される。すなわち、符号データの上位２０ビットの値が「０ｘＦＦＦＦＦ」であるか否かが判定される。若し、ラインマーカではないと判定されたら、処理がステップＳ１８２に戻される。
【０１２４】
一方、ステップＳ１８６で、ラインマーカが認識されたと判定されたら、処理はステップＳ１８７に移行され、０度回転のライン復号処理がなされ、さらに次のステップＳ１８８でラインメモリ出力処理が行われる。
【０１２５】
そして、次のステップＳ１８９でラインカウンタのカウント値ＩＹが１だけカウントアップされ、次の処理ステップＳ１９０でカウント値ＩＹが画像の高さ未満であるか否かが判定される。カウント値ＩＹが画像の高さ未満であると判定されたら、処理はステップＳ１８１に戻される。一方、カウント値ＩＹが画像の高さに達したと判定されたら、図３７のフローチャートによる一連の処理が終了される。
【０１２６】
図３８は、図３７のステップＳ１８７における０度回転ライン復号処理の一例のフローチャートを示す。ステップＳ２００で、符号バッファ＝０（ビット）すなわち空に初期化され、符号ポインタ＝６４（ビット）に初期化される。符号バッファは、可変長符号を一時的に記憶するバッファであり、符号ポインタは符号バッファの終端を示す。
【０１２７】
次のステップＳ２０１で、０度回転符号入力処理が行われてライン符号データが入力されて符号バッファに記憶され、次のステップＳ２０２で符号バッファが２０ビット左シフトされると共に、符号ポインタの値が２０減ぜられる。これにより、符号バッファからラインマーカが取り除かれ、ＭＳＢ(Most Significant Bit)にラインマーカの次の符号の先頭が来る。そして、符号ポインタにラインマーカの符号長分を加算することで、符号の終端を示すようにする。
【０１２８】
次のステップＳ２０３で、０度回転符号入力処理が行われてライン符号データが入力され符号バッファに記憶され、次のステップＳ２０４で符号バッファが５６ビット右シフトされて符号データが切り出される。これにより、符号の先頭の８ビットが符号データとして切り出される。
【０１２９】
次のステップＳ２０５で、切り出された符号がライン終端符号か否か、すなわち、切り出された符号データの値が「０ｘＦ７」であるか否かが判定される。若し、切り出された符号がライン終端符号であると判定されたら、図３８のフローチャートによる一連の処理が終了される。
【０１３０】
一方、ライン終端符号ではないと判定されたら、処理はステップＳ２０６に移行され、符号バッファが６１ビット右シフトされ、現在の符号の先頭の３ビットを符号データとして切り出す。次のステップＳ２０７で、切り出した符号データの値が「０」であるか否かが判定される。若し、「０」ではないと判定されたら、処理はステップＳ２０８に移行され、インデクス復号処理が行われる。一方、「０」であると判定されたら、処理はステップＳ２０９に移行され、ＥＳＣ復号処理が行われる。ステップＳ２０８またはステップＳ２０９の処理が終了したら、処理がステップＳ２０３に戻される。
【０１３１】
図３９は、図３８のステップＳ２０１およびステップＳ２０３における０度回転符号入力処理の一例のフローチャートを示す。この０度回転符号入力処理は、符号バッファの有効符号位置が３２ビットより大きくなった場合は、符号ラインメモリから１ワード（３２ビット）の符号データを読み込み、符号バッファに付加する。
【０１３２】
ステップＳ２１０で、符号ポインタが示す符号バッファの有効符号位置が３２ビット以上であるか否かが判定される。若し、３２ビット未満であると判定されたら、図３９のフローチャートによる一連の処理が終了される。
【０１３３】
一方、３２ビット以上であると判定されたら、処理はステップＳ２１１に移行され、符号ラインメモリ３０４からラインメモリカウンタのカウント値ＬＭで示される位置の符号が読み出され、入力符号バッファに記憶される。次のステップＳ２１２で、ラインメモリカウンタのカウント値ＬＭに１が加算されて処理がステップＳ２１３に移行され、符号ポインタ値から３２ビットが減ぜられて符号ポインタが更新される。そして、次のステップＳ２１４で、読み込んだ符号データを符号ポインタが示す位置に合わせ、符号バッファに追加する。
【０１３４】
図４０は、図３７のステップＳ１８８におけるラインメモリ出力処理の一例のフローチャートを示す。ステップＳ２２０で、ワークカウンタのカウント値ＷＣが０とされる。このワークカウンタは、画素（１６ビット）毎にカウント値ＷＣを計数する。次のステップＳ２２１で、画像ラインメモリ３０７のワークカウンタのカウント値ＷＣが示す位置の画像データを読み込み、データＯＤＡＴＡとする。次のステップＳ２２２で、データＯＤＡＴＡをエンジンコントローラ１１０に転送する。そして、次のステップＳ２２３でワークカウンタのカウント値ＷＣに１が加算される。ステップＳ２２４でワークカウンタのカウント値ＷＣがラインメモリ画素カウンタのカウント値ＬＭＰ未満であるか否かが判定され、カウント値ＬＭＰ未満であると判定されたら処理がステップＳ１７０に戻される。ワークカウンタのカウント値ＷＣがラインメモリカウンタのカウント値ＬＭＰ以上であると判定されたら、図４０のフローチャートによる一連の処理が終了される。
【０１３５】
以上説明したように、本第１の実施形態では、ライン符号データに対し、ラインマーカを先頭に配置し、ライン終端符号を終端に配置している。そのため、ライン符号データをラインメモリにワード単位で区切って格納した場合であっても、逆順からの読み出しが容易に行える。したがって、画像データを１８０度回転するための構成を別途に設ける必要が無く、画像データの１８０度回転時のバス１１３におけるデータ転送量を削減することができる。
【０１３６】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。上述の第１の実施形態では、画像データの符号化をＭＴＦ符号化方式を用いて行った。これに対して、本第２の実施形態では、画像データの符号化をランレングス符号を用いて行う。なお、本第２の実施形態において、ハードウェア構成は上述の第１の実施形態と共通して適用可能なので、ここでの説明を省略する。
【０１３７】
＜符号フォーマット＞
図４１は、本第２の実施形態による符号フォーマットの例を示す。本第２の実施形態では、ライン符号データは、ライン符号ヘッダと、ライン符号ヘッダに続けて配置されるランレングス符号と、ランレングス符号に続けて配置されるライン終端符号とからなる。図４１（ａ）は、ライン符号ヘッダの例を示す。ライン符号ヘッダは、ラインの先頭を識別するための識別符号であって、符号長が１２ビットで、２進数の値「１」が１２個連なってなる。ライン符号ヘッダのビット配列は、他の符号をどのように組み合わせても発生しないパターンが選択される。そのため、符号を先頭から復号しなくても、符号の中からライン符号ヘッダを容易に検出可能である。また、図４１（ｃ）に示すライン終端符号は、各ラインの符号の終端を示す。ここで、図８の復号部１０９の構成におけるラインマーカ認識部３０３をライン符号ヘッダを認識するライン符号ヘッダ認識部と読み替えるものとする。
【０１３８】
本第２の実施形態でも、上述の第１の実施形態と同様に、図４２に例示するライン符号データの例のように、ライン符号ヘッダの検出と、ライン単位の符号データの復号を容易にするために、ライン単位の符号をワード単位で切り分けている。
【０１３９】
図４１（ｂ）は、ランレングス符号の例を示す。ランレングス符号は、値「０」または値「１」が連続するランレングス値を符号化する。ランレングス符号Ｌ０の反転符号は、ランレングスの「０」および「１」の状態を反転する。符号化を行う際に、先頭を値「０」から始めると好ましいため、値「１」から始まる画像データを符号化する場合は、この反転符号で値「１」から始まることを宣言してから、長さを表すランレングス符号Ｌ１およびＬ２で符号化する。ランレングス符号Ｌ１およびＬ２は、値「０」または値「１」のランレングスを表す。ランレングス符号Ｌ１は、１個から８個までの連続する値の数を示し、ランレングス符号Ｌ２は、９個から７２個までの連続する値の数を示す。ランレングス符号Ｌ２の先頭の２ビットの値「１０」は、ランレングス符号Ｌ２を識別するために用いる。
【０１４０】
図４３（ａ）〜図４３（ｄ）は、１８０度回転復号時の符号データと符号ラインメモリ３０４との関係を示し、図４４（ａ）〜図４４（ｄ）は、０度回転復号時の符号データと符号ラインメモリ３０４との関係を示す。このように、本第２の実施形態における符号データと符号ラインメモリ３０４との関係は、上述の第１の実施形態における符号データと符号ラインメモリ３０４との関係に対し、ラインマーカをライン符号ヘッダに置き換えた以外は、共通である。
【０１４１】
＜符号化処理＞
本第２の実施形態における符号化処理について説明する。上述の第１の実施形態で図１７のフローチャートを用いて説明した処理と同様にして、ライン単位での処理が行われる。図４５−１および図４５−２は、図１７のステップＳ１１における、本第２の実施形態によるライン符号化処理の一例のフローチャートを示す。なお、図４５−１および図４５−２のフローチャートにおいて、符号「１」、「２」および「３」は、対応する符号に処理が移行することを示す。
【０１４２】
ステップＳ２３０で、各変数などの初期化が行われ、フラグＩＮＩＴＦＬＧ＝０、値ＯＬＤ＿ｂｉｔ＝０、ランレングス＝１、符号バッファ＝０（空の状態）および符号ポインタ＝６４とされる。次のステップＳ２３１で、ライン符号ヘッダ「０ｘＦＦＦ」を符号データにし、符号サイズを１２ビットとする。次のステップＳ２３２で、図２７を用いて説明したようにして、ライン符号ヘッダの符号データを出力する。
【０１４３】
次のステップＳ２３３で、画像データをワード単位で読み込む。そして、次のステップＳ２３４で、フラグＩＮＩＴＦＬＧ＝０で、且つ、読み込んだワードデータ値のＭＳＢが「１」であるか否かが判定される。若し、フラグＩＮＩＴＦＬＧ＝０、または、読み込んだワードデータ値のＭＳＢが「１」ではないと判定されたら、処理はステップＳ２３７に移行される。一方、フラグＩＮＩＴＦＬＧ＝０、且つ、読み込んだワードデータ値のＭＳＢが「１」であると判定されたら、処理はステップＳ２３５に移行される。
【０１４４】
ステップＳ２３５では、反転符号「０ｘＦ８」を符号データとし、符号サイズが８ビットとされ、次のステップＳ２３６で、図２７を用いて説明したようにして、符号データが出力される。
【０１４５】
次のステップＳ２３７で、フラグＩＮＩＴＦＬＧ＝１とされ、さらに次のステップＳ２３８で値Ｘ＝０とされる。そして、次のステップＳ２３９で、ワードデータ値からＸビット目のビット値を切り出す。次のステップＳ２４０で、ステップＳ２３９で切り出されたビット値が値ＯＬＤ＿ｂｉｔと等しいか否かが判定される。若し、等しいと判定されたら、処理はステップＳ２４１に移行され、ランレングスが１だけ加算される。一方、切り出されたビット値が値ＯＬＤ＿ｂｉｔと等しくないと判定されたら、処理はステップＳ２４２に移行され、ランレングス符号化処理が行われる。
【０１４６】
ステップＳ２４１またはステップＳ２４２の処理が終了すると、処理がステップＳ２４３に移行され、Ｓ２３９で切り出されたビット値が値ＯＬＤ＿ｂｉｔとされる。さらに、次のステップＳ２４４で、値Ｘに１が加算される。そして、次のステップＳ２４５で、値Ｘがワードビット数未満であるか否かが判定される。若し、値Ｘがワードビット数未満であると判定されたら、処理がステップＳ２３９に戻される。
【０１４７】
一方、値Ｘがワードビット数以上であると判定されたら、処理はステップＳ２４６に移行され、１ライン分のワード数を処理したか否かが判定される。若し、未だ１ライン分のワード数を処理していないと判定されたら、処理はステップＳ２３３に戻され、画像データから次のワードが読み込まれる。
【０１４８】
１ライン分のワード数を処理したと判定されたら、処理はステップＳ２４７に移行され、ライン終端符号「０ｘＦ０」を符号データとし、符号サイズを８ビットとして、次のステップＳ２４８で図２７を用いて説明したようにして符号出力処理が行われる。
【０１４９】
符号出力処理が終了すると、処理がステップＳ２４９に移行され、符号バッファが空か否かが判定される。若し、空であると判定されたら、この図４５−１および図４５−２のフローチャートによる一連の処理が終了される。一方、符号バッファが空ではないと判定されたら、処理はステップＳ２５０に移行され、符号バッファを３２ビット右シフトさせて出力符号バッファとし、次のステップＳ２５１で出力符号バッファを出力する。そして、処理はステップＳ２５２に移行され、符号カウンタが１だけカウントアップされて図４５−１および図４５−２のフローチャートによる一連の処理が終了される。
【０１５０】
図４６は、図４５−１および図４５−２のステップＳ２４２におけるランレングス符号化処理の一例のフローチャートを示す。ステップＳ２６０で、ランレングスが８以下であるか否かが判定される。若し、８以下であると判定されたら、処理はステップＳ２６１に移行され、ランレングスから１が減ぜられ、次のステップＳ２６２で４ビットのランレングス値を符号データとし、符号サイズを４ビットとする。そして、次のステップＳ２６３で図２７を用いて説明したようにして符号出力処理が行われる。そして、処理がステップＳ２７３に移行されてランレングスが１とされ、図４６のフローチャートによる一連の処理が終了される。
【０１５１】
一方、上述のステップＳ２６０でランレングスが８を超えると判定されたら、処理がステップＳ２６４に移行され。ランレングスが７２以下であるか否かが判定される。若し、７２以下であると判定されたら、処理がステップＳ２６５に移行され、ランレングスから９が減ぜられ、処理がステップＳ２６６に移行される。ステップＳ２６６では、２ビットの値「０ｂ１１」と、６ビットのランレングスとによる８ビットを符号データとし、符号サイズを８ビットとする。そして、処理がステップＳ２６７に移行され、図２７を用いて説明したようにして符号出力処理が行われる。符号出力処理が終了すると、処理が上述のステップＳ２７３に移行される。
【０１５２】
一方、上述のステップＳ２６４でランレングスが７２を超えると判定されたら、処理がステップＳ２６８に移行される。ステップＳ２６８では、２ビットの値「０ｂ１０」と、１０進数の値「７２」のランレングスを示す６ビットの値「０ｂ１１１１１１」とによる８ビットを符号データとし、符号サイズを８ビットとする。そして、処理がステップＳ２６９に移行され、図２７を用いて説明したようにして符号出力処理が行われる。
【０１５３】
符号化処理が終了すると、処理がステップＳ２７０に移行され、反転符号「０ｘＦＦ００」を符号データとし、符号サイズを８ビットとする。すなわち、この反転符号により、ランレングスが継続していることを示す。そして、処理がステップＳ２７１に移行され、図２７を用いて説明したようにして符号出力処理が行われる。符号出力処理が終了すると、処理がステップＳ２７２に移行され、ランレングスから７２が減ぜられて処理がステップＳ２６０に戻される。
【０１５４】
＜復号処理＞
次に、本第２の実施形態による復号処理について説明する。上述の第１の実施形態で図２８のフローチャートを用いて説明した処理と同様にして、ライン単位での処理が行われる。そして、両面印字の場合に、ステップＳ１０１においてフラグＳＦＬＡＧ＝１であり裏面印字であると判定されたら、ステップＳ１０２の１８０度回転復号処理が、図２９と同様にして行われる。
【０１５５】
図４７は、図２９のステップＳ１１８における、本第２の実施形態による１８０度回転ライン復号処理の例を示すフローチャートである。ステップＳ２８０で、各変数などの初期化が行われ、フラグＣＯＬＯＲＦＬＧ＝０、符号バッファ＝０および符号ポインタ＝６４とされると共に、ラインメモリ画素カウンタのカウント値ＬＭＰ＝０とされる。次のステップＳ２８１で、図３１を用いて説明したようにして１８０度回転符号入力処理が行われ、次のステップＳ２８２で、符号バッファが１２ビット左シフトされると共に、符号ポインタから１２が減ぜられる。これにより、符号データからライン符号ヘッダが取り除かれる。
【０１５６】
次のステップＳ２８３で、図３１を用いて説明したようにして１８０度回転符号入力処理が行われ、次のステップＳ２８４で符号バッファが６０ビット右シフトされて符号データが読み込まれる。これにより、次の符号の先頭の４ビットが符号データとして切り出される。符号データが切り出されると、処理がステップＳ２８５に移行され、符号データの値が８未満であるか否かが判定される。すなわち、このステップＳ２８５で、符号がランレングス符号Ｌ１であるか否かが判定される。
【０１５７】
若し、８未満でありランレングス符号Ｌ１であると判定されたら、処理はステップＳ２８６に移行され、符号データの値に１が加算された値がランレングスとされる。そして、次のステップＳ２８７で、ランレングスの復号処理が行われる。
【０１５８】
ステップＳ２８７でランレングスが復号されると、処理がステップＳ２８８に移行され、符号バッファが４ビット左シフトされると共に、符号ポインタから４が減ぜられる。そして、処理がステップＳ２９４に移行され、フラグＣＯＬＯＲＦＬＧ＝０であるか否かが判定される。若し、フラグＣＯＬＯＲＦＬＧ＝０であると判定されたら、ステップＳ２９５でフラグＣＯＬＯＲＦＬＧ＝１とされ、処理がステップＳ２８３に戻される。一方、フラグＣＯＬＯＲＦＬＧ＝０ではないと判定されたら、ステップＳ２９６でフラグＣＯＬＯＲＦＬＧ＝０とされ、処理がステップＳ２８３に戻される。
【０１５９】
上述のステップＳ２８５で、符号データの値が８以上であると判定されたら、処理はステップＳ２８９に移行され、符号データの値が１５未満であるか否かが判定される。すなわち、このステップＳ２８９で、符号がランレングス符号Ｌ２であるか否かが判定される。若し、１５未満であるとされ、ランレングス符号Ｌ２であると判定されたら、処理はステップＳ２９０に移行され、符号バッファが５６ビット右シフトされて符号データが読み込まれ、次のステップＳ２９１で符号データの値から１２８が減ぜられた値が符号データとされる。そして、処理がステップＳ２９２のランレングス復号処理に移行される。
【０１６０】
ステップＳ２９２でのランレングス復号処理が終了すると、処理はステップＳ２９３に移行され、符号バッファが８ビット左シフトされると共に、符号ポインタから８が減ぜられる。そして、処理が上述のステップＳ２９４に移行される。
【０１６１】
上述のステップＳ２８９で、符号データの値が１６以上であると判定されたら、処理はステップＳ２９７に移行され、符号バッファが５６ビット右シフトされて符号データが読み込まれる。そして、次のステップＳ２９８で、符号データが値「０ｘＦ８」、すなわち反転符号であるか否かが判定される。若し、反転符号ではないと判定されたら、符号データがライン終端符号であると判断できるため、この図４７のフローチャートによる一連の処理が終了される。
【０１６２】
一方、符号が反転符号であると判定されたら、処理がステップＳ２９９に移行され、フラグＣＯＬＯＲＦＬＧ＝０であるか否かが判定される。若し、フラグＣＯＬＯＲＦＬＧ＝０であると判定されたら、ステップＳ３００でフラグＣＯＬＯＲＦＬＧ＝１とされ、フラグＣＯＬＯＲＦＬＧ＝０ではないと判定されたら、ステップＳ３０１でフラグＣＯＬＯＲＦＬＧ＝０とされる。
【０１６３】
ステップＳ３００またはステップＳ３０１の処理の後、処理がステップＳ３０２に移行され、符号バッファが８ビット左シフトされると共に、符号ポインタから８が減ぜられる。そして、処理がステップＳ２８３に戻される。
【０１６４】
図４８は、上述のステップＳ２８７およびステップＳ２９２のランレングス復号処理の一例のフローチャートを示す。ステップＳ３１０で、画像ラインメモリ３０７におけるラインメモリ画素カウンタのカウント値ＬＭＰが示す位置に、フラグＣＯＬＯＲＦＬＧの値を書き込む。次のステップＳ３１１で、ラインメモリ画素カウンタのカウント値ＬＭＰに１が加算されると共に、ランレングスから１が減じられる。そして、次のステップＳ３１２でランレングスが０より大きいか否かが判定される。若し、０より大きいと判定されたら、処理がステップＳ３１０に戻される。一方、ランレングスが０であると判定されたら、図４８のフローチャートによる一連の処理が終了される。このように、ランレングスの長さ分、現在のフラグＣＯＬＯＲＦＬＧが示す値で画像ラインメモリ３０７にして描画していく。
【０１６５】
図４９は、図３７のステップＳ１８７における、本第２の実施形態による０度回転ライン復号処理の例を示すフローチャートである。ステップＳ３２０で、各変数などの初期化が行われ、フラグＣＯＬＯＲＦＬＧ＝０、符号バッファ＝０および符号ポインタ＝６４とされると共に、ラインメモリカウンタのカウント値ＬＭ＝０、ラインメモリ画素カウンタのカウント値ＬＭＰ＝０とされる。次のステップＳ３２１で、図３９を用いて説明したようにして０度回転符号入力処理が行われ、次のステップＳ３２２で、符号バッファが１２ビット左シフトされると共に、符号ポインタから１２が減ぜられる。これにより、符号データからライン符号ヘッダが取り除かれる。
【０１６６】
次のステップＳ３２３で、図３９を用いて説明したようにして０度回転符号入力処理が行われ、次のステップＳ３２４で符号バッファが６０ビット右シフトされて符号データが読み込まれる。これにより、次の符号の先頭の４ビットが符号データとして切り出される。符号データが切り出されると、処理がステップＳ３２５に移行され、符号データの値が８未満であるか否かが判定される。すなわち、このステップＳ３２５で、符号がランレングス符号Ｌ１であるか否かが判定される。
【０１６７】
若し、８未満でありランレングス符号Ｌ１であると判定されたら、処理はステップＳ３２６に移行され、符号データの値に１が加算された値がランレングスとされる。そして、次のステップＳ３２７で、ランレングスの復号処理が行われる。
【０１６８】
ステップＳ３２７でランレングスが復号されると、処理がステップＳ３２８に移行され、符号バッファが４ビット左シフトされると共に、符号ポインタから４が減ぜられる。そして、処理がステップＳ３３４に移行され、フラグＣＯＬＯＲＦＬＧ＝０であるか否かが判定される。若し、フラグＣＯＬＯＲＦＬＧ＝０であると判定されたら、ステップＳ３３５でフラグＣＯＬＯＲＦＬＧ＝１とされ、処理がステップＳ３２３に戻される。一方、フラグＣＯＬＯＲＦＬＧ＝０ではないと判定されたら、ステップＳ３３６でフラグＣＯＬＯＲＦＬＧ＝０とされ、処理がステップＳ３２３に戻される。
【０１６９】
上述のステップＳ３２５で、符号データの値が８以上であると判定されたら、処理はステップＳ３２９に移行され、符号データの値が１５未満であるか否かが判定される。すなわち、このステップＳ３２９で、符号がランレングス符号Ｌ２であるか否かが判定される。若し、１５未満であるとされ、ランレングス符号Ｌ２であると判定されたら、処理はステップＳ３３０に移行され、符号バッファが５６ビット右シフトされて符号データが読み込まれ、次のステップＳ３３１で符号データの値から１２８が減ぜられた値が符号データとされる。そして、処理がステップＳ３３２のランレングス復号処理に移行される。
【０１７０】
ステップＳ３３２でのランレングス復号処理が終了すると、処理はステップＳ３３３に移行され、符号バッファが８ビット左シフトされると共に、符号ポインタから８が減ぜられる。そして、処理が上述のステップＳ３３４に移行される。
【０１７１】
上述のステップＳ３２９で、符号データの値が１６以上であると判定されたら、処理はステップＳ３３７に移行され、符号バッファが５６ビット右シフトされて符号データが読み込まれる。そして、次のステップＳ３３８で、符号データが値「０ｘＦ８」、すなわち反転符号であるか否かが判定される。若し、反転符号ではないと判定されたら、符号データがライン終端符号であると判断できるため、この図４９のフローチャートによる一連の処理が終了される。
【０１７２】
一方、符号が反転符号であると判定されたら、処理がステップＳ３３９に移行され、フラグＣＯＬＯＲＦＬＧ＝０であるか否かが判定される。若し、フラグＣＯＬＯＲＦＬＧ＝０であると判定されたら、ステップＳ３４０でフラグＣＯＬＯＲＦＬＧ＝１とされ、フラグＣＯＬＯＲＦＬＧ＝０ではないと判定されたら、ステップＳ３４１でフラグＣＯＬＯＲＦＬＧ＝０とされる。
【０１７３】
ステップＳ３４０またはステップＳ３４１の処理の後、処理がステップＳ３４２に移行され、符号バッファが８ビット左シフトされると共に、符号ポインタから８が減ぜられる。そして、処理がステップＳ３２３に戻される。
【０１７４】
以上説明したように、本第２の実施形態では、ライン符号データに対し、ライン符号ヘッダを先頭に配置し、ライン終端符号を終端に配置している。そのため、ライン符号データをラインメモリにワード単位で区切って格納した場合であっても、逆順からの読み出しが容易に行える。したがって、画像データを１８０度回転するための構成を別途に設ける必要が無く、画像データの１８０度回転時のバス１１３におけるデータ転送量を削減することができる。また、ランレングス符号化を用いても、上述したＭＴＦ符号化方式を用いた場合と同様にして、符号化および復号処理が可能である。
【符号の説明】
【０１７５】
１００  ＣＰＵ
１０２  メモリアービタ
１０７  バスＩ／Ｆ
１０８  符号化部
１０９  復号部
１１０  エンジンコントローラ
１１３  バス
１３０  メインメモリ
２０１  画像データ読み込み部
２０３  符号化処理部
２０４  符号書き込み部
２１０  ＭＴＦ符号化処理部
２１１  ハフマン符号化処理部
３０３  ラインマーカ認識部
３０４  符号ラインメモリ
３０５  符号読み込み部
３０６  復号処理部
３０７  画像ラインメモリ
３０８  ライン反転読み込み部
３１０  ハフマン復号処理部
３１１  ＭＴＦ復号化処理部
【先行技術文献】
【特許文献】
【０１７６】
【特許文献１】特開平８−３１７２２５号公報
【特許文献２】特許第３４３７３４６号公報
【特許文献３】特開２００１−１９７４９６号公報
【特許文献４】特開２００７−２１４８０２号公報
【特許文献５】特許第４１３１９７７号公報
【特許文献６】特開２００２−２００７９２号公報
【特許文献７】特許第２８８８１８６号公報
【図１】
0005509957.tif 000002
【図２】
0005509957.tif 000003
【図３】
0005509957.tif 000004
【図４】
0005509957.tif 000005
【図５】
0005509957.tif 000006
【図６】
0005509957.tif 000007
【図７】
0005509957.tif 000008
【図８】
0005509957.tif 000009
【図９】
0005509957.tif 000010
【図１０】
0005509957.tif 000011
【図１１】
0005509957.tif 000012
【図１２】
0005509957.tif 000013
【図１３】
0005509957.tif 000014
【図１４】
0005509957.tif 000015
【図１５】
0005509957.tif 000016
【図１６】
0005509957.tif 000017
【図１７】
0005509957.tif 000018
【図１８】
0005509957.tif 000019
【図１９】
0005509957.tif 000020
【図２０】
0005509957.tif 000021
【図２１】
0005509957.tif 000022
【図２２】
0005509957.tif 000023
【図２３】
0005509957.tif 000024
【図２４】
0005509957.tif 000025
【図２５】
0005509957.tif 000026
【図２６】
0005509957.tif 000027
【図２７】
0005509957.tif 000028
【図２８】
0005509957.tif 000029
【図２９】
0005509957.tif 000030
【図３０】
0005509957.tif 000031
【図３１】
0005509957.tif 000032
【図３２】
0005509957.tif 000033
【図３３】
0005509957.tif 000034
【図３４】
0005509957.tif 000035
【図３５】
0005509957.tif 000036
【図３６】
0005509957.tif 000037
【図３７】
0005509957.tif 000038
【図３８】
0005509957.tif 000039
【図３９】
0005509957.tif 000040
【図４０】
0005509957.tif 000041
【図４１】
0005509957.tif 000042
【図４２】
0005509957.tif 000043
【図４３】
0005509957.tif 000044
【図４４】
0005509957.tif 000045
【図４５−１】
0005509957.tif 000046
【図４５−２】
0005509957.tif 000047
【図４６】
0005509957.tif 000048
【図４７】
0005509957.tif 000049
【図４８】
0005509957.tif 000050
【図４９】
0005509957.tif 000051
【図５０】
0005509957.tif 000052
【図５１】
0005509957.tif 000053
【図５２】
0005509957.tif 000054
【図５３】
0005509957.tif 000055
【図５４】
0005509957.tif 000056
【図５５】
0005509957.tif 000057
【図５６】
0005509957.tif 000058