(57)【要約】      （修正有）【課題】回転の対象となっている画像に適用可能な描画処理を実現する。【解決手段】描画処理装置は、非回転の画像を表す第１の中間コードを生成し、１８０度回転の画像を表す第２の中間コードを生成する中間コード生成部と、非回転を示しているときには第１の描画処理を実行し、１８０度回転を示しているときには第２の描画処理を実行し、９０度回転を示しているときには第３の描画処理を実行し、２７０度回転を示しているときには第４の描画処理を実行する画像描画部とを備える。第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、第３の描画処理は、第２のマップに基づいて、第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する。【選択図】図１
2020203433.tif 000002
【特許請求の範囲】
【請求項１】
ページ記述言語で記述されたＰＤＬデータを解析し、符号化された画像データと、前記画像データの回転角度を表す角度データとを取得するＰＤＬ解析部と、
前記角度データが非回転又は９０度回転を示しているときには非回転の画像を表す第１の中間コードを生成し、前記角度データが１８０度回転又は２７０度回転を示しているときには１８０度回転の画像を表す第２の中間コードを生成する中間コード生成部と、
前記角度データが非回転を示しているときには第１の描画処理を実行し、前記角度データが１８０度回転を示しているときには第２の描画処理を実行し、前記角度データが９０度回転を示しているときには第３の描画処理を実行し、前記角度データが２７０度回転を示しているときには第４の描画処理を実行する画像描画部と、
を備え、
前記第１の描画処理は、前記第１の中間コードを使用して非回転の画像を描画し、
前記第２の描画処理は、前記第２の中間コードを使用して１８０度回転の画像を描画し、
前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、前記第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、
前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第２のマップに基づいて、前記第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する描画処理装置。
【請求項２】
請求項１記載の描画処理装置であって、
前記画像データは、Ｎ−１（Ｎは２以上の整数）行目からＮ行目への差分を示すデルタデータを含み、２次元的に配列された複数の画素を示す画像データをデルタ行符号化により符号化されており、
前記描画処理装置は、さらに、
Ｌ個（Ｌは２以上の整数）のプロセッサと、
前記２次元的に配列された複数の画素を列方向にＭ（ＭはＬ以下の整数）個に分割し、第１乃至第Ｍのブロックを含むＭブロックの画素群を生成するブロック生成部と、
前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記Ｍブロックの各々の内部で列方向にデルタデータを累積し、前記Ｍブロックの各々の最終行の画像データを復号するための累積デルタを生成するデルタ累積部と、
を備え、
前記第１の中間コードは、前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記Ｍブロックの画素群のそれぞれにおいて、デルタデータが第１の閾値以上のサイズを有している行ラインと最初の行ラインにおいては、前記デルタデータを用いてＮ番目の行ラインの画像データをデコードし、デルタデータが前記第１の閾値よりも小さいサイズを有しているときには、前記デルタデータを使用することによってＮ番目の行ラインの画像データを保持し、
前記第２の中間コードは、前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記Ｍブロックの画素群のそれぞれにおいて、デルタデータが第２の閾値以上のサイズを有している行ラインと最後の行ラインにおいては、前記デルタデータを用いてＮ番目の行ラインの画像データをデコードし、デルタデータが前記第２の閾値よりも小さいサイズを有しているときには、前記デルタデータを使用してＮ行目からＮ−１行目への差分を示す反転デルタデータを生成することによってＮ番目の行ラインの画像データを保持し、
前記第１の描画処理は、前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記第１の中間コード中の前記デコードされていない行ラインの画像データを、前記デルタデータを使用してデコードし、前記第１の中間コード中のデコードされた画像データを所定の方向に描画し、
前記第２の描画処理は、前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記第２の中間コード中の前記デコードされていない行ラインの画像データを、前記反転デルタデータを使用してデコードし、前記第２の中間コード中のデコードされた画像データを前記所定の方向と反対の方向に描画し、
前記第３の描画処理は、前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記第１の中間コード中の前記デコードされていない行ラインの画像データを、前記デルタデータを使用してデコードし、前記第１の中間コード中のデコードされた画像データを前記第１のマップに基づいて描画し、
前記第４の描画処理は、前記Ｍブロックに対してＭ個のプロセッサをそれぞれ割り当てて並列処理を可能とし、前記第２の中間コード中の前記デコードされていない行ラインの画像データを、前記反転デルタデータを使用してデコードし、前記第２の中間コード中のデコードされた画像データを前記第２のマップに基づいて描画する描画処理装置。
【請求項３】
請求項１記載の描画処理装置であって、
前記画像データは複数の画素の色情報を含む少なくとも１つの第１のタイプの部分画像と、単一の画素の色情報と反復数とを含む少なくとも１つの第２のタイプの部分画像とを含む複数の部分画像を有し、前記複数の部分画像を構成する画素ラインの少なくとも一部が第２の特定部分と、第２の特定部分の直前に先行する第１の特定部分とを有し、
前記第１の中間コードは、第１のタイプのノードと第２のタイプのノードとを含み、前記第１のタイプのノードと前記第２のタイプのノードの少なくとも一方が第１の方向に連結されて前記画素ラインを構成し、
前記第１のタイプのノードは、前記角度データが非回転を示しているときには前記第１の特定部分と前記第２の特定部分の双方が前記第１のタイプであるとの判定が肯定的な場合に前記第１の特定部分の色情報と前記第２の特定部分の色情報とを第１の方向に結合して生成され、前記判定が否定的な場合に前記第２の特定部分の色情報を使用して生成され、
前記第２のタイプのノードは、前記角度データが非回転を示しているときには前記第１の特定部分と前記第２の特定部分の双方が前記第２のタイプであって前記双方の色情報が一致するとの判定が肯定的な場合に前記単一の画素の色情報と前記双方の反復数の和とを使用して生成され、前記判定が否定的な場合に前記第２の特定部分の色情報と反復数とを使用して生成され、
前記第２の中間コードは、前記第１のタイプのノードと前記第２のタイプのノードとを含み、前記第１のタイプのノードと前記第２のタイプのノードの少なくとも一方が前記第１の方向と逆方向に連結されて前記画素ラインを構成し、
前記第１のタイプのノードは、前記角度データが１８０度回転を示しているときには前記第１の特定部分と前記第２の特定部分の双方が前記第１のタイプであるとの判定が肯定的な場合に前記第１の特定部分の色情報と前記第２の特定部分の色情報とを前記第１の方向と逆方向に結合して生成され、前記判定が否定的な場合に前記第２の特定部分の色情報を使用して生成され、
前記第２のタイプのノードは、前記角度データが１８０度回転を示しているときには前記第１の特定部分と前記第２の特定部分の双方が前記第２のタイプであって前記双方の色情報が一致するとの判定が肯定的な場合に前記単一の画素の色情報と前記双方の反復数の和とを使用して生成され、前記判定が否定的な場合に前記第２の特定部分の色情報と反復数とを使用して生成され、
前記第１の描画処理は、前記第１の中間コードを使用して前記画素ラインを生成し、前記画素ラインを第２の方向に連結して前記画像データによって表される画像を描画し、
前記第２の描画処理は、前記第２の中間コードを使用して前記画素ラインを生成し、前記画素ラインを第２の方向と逆方向に連結して前記画像データによって表される画像を描画し、
前記第３の描画処理は、前記第１の中間コードを使用して前記画素ラインを生成し、前記画素ラインを第２の方向に連結して前記画像データによって表される画像を前記第１のマップに基づいて描画し、
前記第４の描画処理は、前記第２の中間コードを使用して前記画素ラインを生成し、前記画素ラインを第２の方向と逆方向に連結して前記画像データによって表される画像を前記第２のマップに基づいて描画する描画処理装置。
【請求項４】
ページ記述言語で記述されたＰＤＬデータを解析し、符号化された画像データと、前記画像データの回転角度を表す角度データとを取得するＰＤＬ解析工程と、
前記角度データが非回転又は９０度回転を示しているときには非回転の画像を表す第１の中間コードを生成し、前記角度データが１８０度回転又は２７０度回転を示しているときには１８０度回転の画像を表す第２の中間コードを生成する中間コード生成工程と、
前記角度データが非回転を示しているときには第１の描画処理を実行し、前記角度データが１８０度回転を示しているときには第２の描画処理を実行し、前記角度データが９０度回転を示しているときには第３の描画処理を実行し、前記角度データが２７０度回転を示しているときには第４の描画処理を実行する画像描画工程と、
を備え、
前記第１の描画処理は、前記第１の中間コードを使用して非回転の画像を描画し、
前記第２の描画処理は、前記第２の中間コードを使用して１８０度回転の画像を描画し、
前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、前記第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、
前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第２のマップに基づいて、前記第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する描画処理方法。
【請求項５】
ページ記述言語で記述されたＰＤＬデータを解析し、符号化された画像データと、前記画像データの回転角度を表す角度データとを取得するＰＤＬ解析部、
前記角度データが非回転又は９０度回転を示しているときには非回転の画像を表す第１の中間コードを生成し、前記角度データが１８０度回転又は２７０度回転を示しているときには１８０度回転の画像を表す第２の中間コードを生成する中間コード生成部、及び
前記角度データが非回転を示しているときには第１の描画処理を実行し、前記角度データが１８０度回転を示しているときには第２の描画処理を実行し、前記角度データが９０度回転を示しているときには第３の描画処理を実行し、前記角度データが２７０度回転を示しているときには第４の描画処理を実行する画像描画部として描画処理装置を機能させ、
前記第１の描画処理は、前記第１の中間コードを使用して非回転の画像を描画し、
前記第２の描画処理は、前記第２の中間コードを使用して１８０度回転の画像を描画し、
前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、前記第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、
前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第２のマップに基づいて、前記第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する描画処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、描画処理装置、描画処理方法及び描画処理プログラムに関し、特に画像データの回転を伴う描画処理技術に関する。
【背景技術】
【０００２】
画像形成装置（たとえばプリンター、多機能プリンター、又は複合機（Ｍｕｌｔｉｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ））は、大きなメモリ領域を使用して高解像度で画像を処理する。メモリ領域は、各ページの印刷ジョブを複数のバンドに分割した後に中間コードに変換することによって節約される。中間コードは、メモリ領域に記憶される一方、記憶された中間コードをビットマップ画像にラスタライズすることによってページ毎に印刷を実行する。中間コードの生成方法として、たとえば特許文献１及び特許文献２において、本願発明者は、非回転の画像に適用可能な非回転高速デルタ行（Ｆａｓｔ  Ｄｅｌｔａ  Ｒｏｗ）描画処理及び高速ランレングス圧縮描画処理を提案している。一方、近年の画像形成装置には、複数のコアを有する中央処理装置（ＣＰＵ）が広く採用されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第９８００７６０号明細書
【特許文献２】米国特許第９７１０２０４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本願発明者は、さらに研究を進め、ページ記述言語で記述されている印刷ジョブに含まれている画像に適用可能な高速デルタ行描画処理及び高速ランレングス圧縮描画処理を創作した。
【０００５】
本発明は、このような状況に鑑みてなされたものであり、回転の対象となっている画像に適用可能な描画処理を実現するための技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の描画処理装置は、ページ記述言語で記述されたＰＤＬデータを解析し、符号化された画像データと、前記画像データの回転角度を表す角度データとを取得するＰＤＬ解析部と、前記角度データが非回転又は９０度回転を示しているときには非回転の画像を表す第１の中間コードを生成し、前記角度データが１８０度回転又は２７０度回転を示しているときには１８０度回転の画像を表す第２の中間コードを生成する中間コード生成部と、前記角度データが非回転を示しているときには第１の描画処理を実行し、前記角度データが１８０度回転を示しているときには第２の描画処理を実行し、前記角度データが９０度回転を示しているときには第３の描画処理を実行し、前記角度データが２７０度回転を示しているときには第４の描画処理を実行する画像描画部とを備え、前記第１の描画処理は、前記第１の中間コードを使用して非回転の画像を描画し、前記第２の描画処理は、前記第２の中間コードを使用して１８０度回転の画像を描画し、前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、前記第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第２のマップに基づいて、前記第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する。
【０００７】
本発明の描画処理方法は、ページ記述言語で記述されたＰＤＬデータを解析し、符号化された画像データと、前記画像データの回転角度を表す角度データとを取得するＰＤＬ解析工程と、前記角度データが非回転又は９０度回転を示しているときには非回転の画像を表す第１の中間コードを生成し、前記角度データが１８０度回転又は２７０度回転を示しているときには１８０度回転の画像を表す第２の中間コードを生成する中間コード生成工程と、前記角度データが非回転を示しているときには第１の描画処理を実行し、前記角度データが１８０度回転を示しているときには第２の描画処理を実行し、前記角度データが９０度回転を示しているときには第３の描画処理を実行し、前記角度データが２７０度回転を示しているときには第４の描画処理を実行する画像描画工程とを備え、前記第１の描画処理は、前記第１の中間コードを使用して非回転の画像を描画し、前記第２の描画処理は、前記第２の中間コードを使用して１８０度回転の画像を描画し、前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、前記第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第２のマップに基づいて、前記第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する。
【０００８】
本発明の描画処理プログラムは、ページ記述言語で記述されたＰＤＬデータを解析し、符号化された画像データと、前記画像データの回転角度を表す角度データとを取得するＰＤＬ解析部、前記角度データが非回転又は９０度回転を示しているときには非回転の画像を表す第１の中間コードを生成し、前記角度データが１８０度回転又は２７０度回転を示しているときには１８０度回転の画像を表す第２の中間コードを生成する中間コード生成部、及び前記角度データが非回転を示しているときには第１の描画処理を実行し、前記角度データが１８０度回転を示しているときには第２の描画処理を実行し、前記角度データが９０度回転を示しているときには第３の描画処理を実行し、前記角度データが２７０度回転を示しているときには第４の描画処理を実行する画像描画部として描画処理装置を機能させ、前記第１の描画処理は、前記第１の中間コードを使用して非回転の画像を描画し、前記第２の描画処理は、前記第２の中間コードを使用して１８０度回転の画像を描画し、前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第１のマップに基づいて、前記第１の中間コードを使用して再現される非回転の画像を９０度回転させることによって９０度回転の画像を描画し、前記第３の描画処理は、主走査方向と副走査方向を入れ替えるための第２のマップに基づいて、前記第２の中間コードを使用して再現される１８０度回転の画像を９０度回転させることによって２７０度回転の画像を描画する。
【発明の効果】
【０００９】
本発明によれば、回転の対象となっている画像に適用可能な描画処理を実現するための技術を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１実施形態に係る画像形成システム１０の機能構成を示すブロック図である。
【図２】第１実施形態に係る典型的なデルタ行符号化処理の内容を表す概略図である。
【図３】第１実施形態に係る典型的なデルタ行符号化データを示す図である。
【図４】第１実施形態に係るレンダリング処理の内容を示すフローチャートである。
【図５】第１実施形態に係る非回転並行デルタ行描画処理を示すフローチャートである。
【図６】第１実施形態に係る並列デルタ累積処理を表す模式図である。
【図７】第１実施形態に係る並列デルタ累積処理の結果を表す模式図である。
【図８】第１実施形態に係る第２の行ブロックの先頭行ＦＲ２の更新処理を表す模式図である。
【図９】第１実施形態に係る第２の行ブロックの最終行の更新処理を示す模式図である。
【図１０】第１実施形態に係る第３及び第４の先頭行の更新処理を示す模式図である。
【図１１】第１実施形態に係る他の典型的なデルタ行復号処理の結果の一例を表す模式図である。
【図１２】第１実施形態に係る典型的な画像描画処理の内容を表す模式図である。
【図１３】第１実施形態に係る典型的な画像描画処理の内容を表す模式図である。
【図１４】第１実施形態に係る１８０度回転並行デルタ行描画処理の内容を示すフローチャートである。
【図１５】第１実施形態に係る１８０度回転並列デルタ累積処理の内容を表す模式図である。
【図１６】第１実施形態に係る反転デルタ生成処理の結果を表す模式図である。
【図１７】第１実施形態に係る各最終ライン更新処理の結果を表す模式図である。
【図１８】第１実施形態に係る反転デルタ生成処理の方法を表す模式図である。
【図１９】第１実施形態に係る１８０度回転の画像描画処理の内容を表す概略図である。
【図２０】第２実施形態に係るレンダリング処理の内容を示すフローチャートである。
【図２１】第２実施形態に係る非回転高速デルタ行描画処理を示すフローチャートである。
【図２２】第２実施形態に係る高速デルタ行描画処理の画像復号処理を示すフローチャートである。
【図２３】第２実施形態に係る高速デルタ行描画処理の画像復号処理を示すフローチャートである。
【図２４】第２実施形態に係る高速デルタ行画像復号処理を示すフローチャートである。
【図２５】第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。
【図２６】第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。
【図２７】第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。
【図２８】第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。
【図２９】第２実施形態に係る復号画像の画像描画処理の内容を示すフローチャートである。
【図３０】第２実施形態に係る画像描画処理の内容を表す概略図である。
【図３１】第２実施形態に係る画像描画処理の内容を表す概略図である。
【図３２】第２実施形態に係る画像描画処理の内容を表す概略図である。
【図３３】第２実施形態に係る画像描画処理の内容を表す概略図である。
【図３４】第２実施形態に係る１８０度回転高速デルタ行描画処理を示すフローチャートである。
【図３５】第２実施形態に係る１８０度回転高速デルタ行描画処理のＩＦＤＲ復号処理（ステップＳ８１０）を示すフローチャートである。
【図３６】第２実施形態に係るＩＦＤＲ復号処理を示すフローチャートである。
【図３７】第２実施形態に係るラインノード生成処理の内容を示すフローチャートである。
【図３８】第２実施形態に係るＩＦＤＲ復号処理の内容を表す概略図である。
【図３９】第２実施形態に係る反転デルタ生成処理の内容を表す概略図である。
【図４０】第２実施形態に係るワークバッファ更新処理の内容を表す概略図である。
【図４１】第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。
【図４２】第２実施形態に係るワークバッファ更新処理の内容を表す概略図である。
【図４３】第２実施形態に係るワンライン生成処理の内容を表す概略図である。
【図４４】第２実施形態に係るワークバッファ更新処理の内容を表す概略図である。
【図４５】第２実施形態に係る最終ライン生成処理の内容を示すフローチャートである。
【図４６】第２実施形態に係る最終ライン生成処理の内容を表す概略図である。
【図４７】第２実施形態に係る１８０度回転の画像描画処理の内容を表す概略図である。
【図４８】第２実施形態に係る復号画像の９０度回転画像描画処理の内容を示すフローチャートである。
【図４９】第２実施形態に係る９０度回転画像描画処理の内容を表す概略図である。
【図５０】第２実施形態に係る９０度回転画像描画処理の内容を表す概略図である。
【図５１】第２実施形態に係る２７０度回転画像描画処理の内容を表す概略図である。
【図５２】本発明の第３実施形態に係るレンダリング処理の内容を示すフローチャートである。
【図５３】ＲＵＮ−ＬＥＮＧＴＨ符号化画像ＲＬＤ１の一例を表す模式図である。
【図５４】第３実施形態に係る非回転高速ＲＬ描画処理の概要を示す説明図である。
【図５５】典型的な画像ノード生成処理の内容の一例を表す模式図である。
【図５６】第３実施形態に係る画像復号処理の一例を示すフローチャートである。
【図５７】第３実施形態に係る画像ノード生成の内容を示すフローチャートである。
【図５８】第３実施形態に係る第１の画像ノード生成処理の内容を示すフローチャートである。
【図５９】第３実施形態に係る画像ノード生成処理の内容の一例を表す模式図である。
【図６０】第３実施形態に係る部分画像結合処理の内容を示すフローチャートである。
【図６１】第３実施形態に係る画像ノード生成処理の内容の一例を表す模式図である。
【図６２】第３実施形態に係る第２の画像ノード生成処理の内容を示すフローチャートである。
【図６３】ＲＬ符号化画像ＲＬＤ２の画像ノードが生成される様子を示している。
【図６４】第３実施形態に係る平均連続数更新処理の内容を示すフローチャートである。
【図６５】第３の画素ラインＬ３に係る画像ノード生成処理の内容の一例を表す模式図である。
【図６６】第３実施形態に係る非回転復号画像描画処理（ステップＳ７７００）の内容を示すフローチャートである。
【図６７】第３実施形態に係る画像描画処理の内容を表す概略図である。
【図６８】第３実施形態に係る画像描画処理の内容を表す概略図である。
【図６９】第３実施形態に係る画像描画処理の内容を表す概略図である。
【図７０】第３実施形態に係る１８０度回転高速ＲＬ描画処理の概要を示す説明図である。
【図７１】ＲＬ符号化画像ＲＬＤ３の画像ノードが生成される様子を示している。
【図７２】第３の画素ラインＬ３に係る画像ノード生成処理の内容の一例を表す模式図である。
【図７３】第３実施形態に係る１８０度回転復号画像描画処理の内容を示すフローチャートである。
【図７４】第３実施形態に係る画像描画処理の内容を表す概略図である。
【図７５】第３実施形態に係る画像描画処理の内容を表す概略図である。
【図７６】第３実施形態に係る９０度回転復号画像描画処理の内容を示すフローチャートである。
【図７７】第３実施形態に係る９０度回転画像描画処理の内容を表す概略図である。
【図７８】第３実施形態に係る９０度回転画像描画処理の内容を表す概略図である。
【図７９】第３実施形態に係る２７０度回転画像描画処理の内容を表す概略図である。
【発明を実施するための形態】
【００１１】
Ａ．実施形態：
以下、本発明を実施するための形態（以下、「実施形態」という）を、図面を参照して説明する。
【００１２】
図１は、本発明の第１実施形態に係る画像形成システム１０の機能構成を示すブロック図である。画像形成システム１０は、画像形成装置１００とパーソナルコンピュータ２００とを備える。パーソナルコンピュータ２００は、ネットワーク（この例ではＬＡＮ）を介して画像形成装置１００と接続されている。
【００１３】
画像形成装置１００は、制御部１１０と、画像形成部１２０と、操作表示部１３０と、記憶部１４０と、通信インターフェース部１５０とを備える。パーソナルコンピュータ２００は、制御部２１０と、符号化部２２０と、操作表示部２３０と、記憶部２４０と、通信インターフェース部２５０とを備える。
【００１４】
パーソナルコンピュータ２００の符号化部２２０は、デルタ行符号化又はランレングス符号化を用いてＲＧＢ画像データを符号化し、符号化画像データを生成する。ＲＧＢ画像データは、単に画像データとも呼ばれ、２次元的に配列された複数の画素を示すＲＧＢの各色のビットマップ（ピクセルマップとも呼ばれる。）データである。制御部２１０は、符号化画像データを使用してＰＤＬデータを生成し、ＰＤＬデータを格納する印刷ジョブを生成する。
【００１５】
通信インターフェース部１５０と通信インターフェース部２５０とは、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）プロトコルを用いて通信する。画像形成装置１００は、通信インターフェース部１５０と通信インターフェース部２５０とを介してパーソナルコンピュータ２００から印刷ジョブを受信する。
【００１６】
制御部１１０は、ＰＤＬ解析部１１１を有している。ＰＤＬ解析部１１１は、ＰＤＬ解析処理を実行し、ＰＤＬデータを含む印刷ジョブの受信に応じて、ページ記述言語で記述されたＰＤＬデータを解析する。これにより、制御部１０は、ＰＤＬデータに含まれるテキスト（文字）やイメージ、ベクターグラフィックス、ソフトマスクといったオブジェクトを抽出し、２５６階調のＲＧＢ画像データやフィルタ（制御データ）を生成することができる。この例では、オブジェクトは、符号化画像データを含んでいる。
【００１７】
画像形成部１２０は、４つの復号部１２１、４つの画像描画部１２２、画像処理部１２３及び画像出力部１２４を有している。デルタ行復号部１２１は、逆ランレングス符号化又は逆デルタ行符号化によって符号化画像データを復号する。画像描画部１２２は、復号された画像データに対して画像描画処理を実行して画像のビットマップデータを生成する。画像処理部１２３は、印刷設定に従ってスキャンデータを処理する。画像出力部１２４は、復号された印刷データに基づいて印刷媒体に画像を印刷する。復号部１２１は、デルタ行復号部、ランレングス復号部又は中間コード生成部とも呼ばれる。
【００１８】
４つのデルタ行復号部１２１及び４つの画像描画部１２２は、並列処理を実現するために複数のコアを含むＣＰＵにより実装されている。本実施形態では、コアの数は４である。ただし、複数のコアを含むＣＰＵによる実装に限定されず、４つのデルタ行復号部１２１及び４つの画像描画部１２２は、４つのＣＰＵ又はプロセッサを使用して実装してもよい。
【００１９】
画像形成装置１００の操作表示部１３０は、ディスプレイ１３１と操作処理部１３２とを有している。パーソナルコンピュータ２００の操作表示部２３０は、ディスプレイ２３１と操作処理部２３２と有している。ディスプレイ１３１は、タッチパネルとして機能し、操作入力画面として各種メニューを表示する。操作処理部１３２，２３２は、タッチパネルとして機能するディスプレイ１３１や、図示しない各種ボタンやスイッチ等を介してユーザーの操作入力を受け付ける。
【００２０】
制御部１１０，２１０は、ＲＡＭやＲＯＭ等の主記憶装置、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の制御装置を有している。制御部１１０，２１０は、各種Ｉ／Ｏ、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、バス、その他のハードウェアなどのインターフェースに関する制御機能を備え、画像形成装置１００全体およびパーソナルコンピュータ２００全体を制御する。
【００２１】
記憶部１４０，２４０は、ハードディスクドライブやフラッシュメモリーなどの非一時的な記録媒体であり、制御プログラム（描画処理プログラムを含む。）や制御部１１０，２１０が実行する処理のデータなどをそれぞれ記憶する。
【００２２】
図２は、第１実施形態に係る典型的なデルタ行符号化処理の内容を表す概略図である。図２は、符号化対象のオリジナルの画像データとその符号化データを示している。デルタ行符号化（デルタ圧縮とも呼ばれる。）は、完全なデータではなく、連続する行の間のデータの差分（デルタ）の形式でオリジナルのデータを変換する方法である。画素内のアルファベットは、各画素の色を意味している。同じアルファベットは、同じ色を表している。１行目の各画素には、「Ａ」のアルファベットが含まれ、２行目の画素には、「Ａ」及び「Ｂ」のアルファベットが含まれている。デルタデータは、Ｎ−１（Ｎは２以上の整数）行目からＮ行目への差分を示すデータである。
【００２３】
図３は、第１実施形態に係る典型的なデルタ行符号化データを示す図である。オリジナル画像データは、１６行の画素データを含み、１６行の各行は、１６個の画素データを含んでいる。オリジナルのデータの１行目及び符号化データは、それぞれ「Ａ」の全１６個の画素データを含んでいる。符号化データの２行目は、データ「Ｂ」の１画素と、データ「Ｂ」の画素の位置を特定するためのオフセットだけを含んでいる。第２の符号化列データは、オフセット数１８の画像の一部を含んでいる。ＲＧＢの場合、オフセット数１８は、６画素×３色（ＲＧＢ）で計算される。２行目の残りの画素データは、１行目の画素データと同じである。
【００２４】
図４は、第１実施形態に係るレンダリング処理の内容を示すフローチャートである。レンダリング処理は、パーソナルコンピュータ２００からの印刷ジョブの受信に応じて画像形成装置１００において起動される。印刷ジョブの受信は、通信インターフェース部２５０及び通信インターフェース部１５０を介して実行される。印刷ジョブには、ＰＤＬデータが含まれている。
【００２５】
ステップＳ１０では、画像形成装置１００が有する制御部１１０のＰＤＬ解析部１１１は、ＰＤＬ解析処理を実行し、ページ記述言語で記述されたＰＤＬデータを解析する。この例では、ＰＤＬ解析部１１１は、ＰＤＬデータから描画オブジェクトと、描画オブジェクトの描画方向、すなわち印刷媒体上における画像の向き（指定方向）を指定している方向指定データとを取得する。方向指定データは、角度データとも呼ばれ、たとえば非回転（０度）、時計方向９０度、反時計方向９０度及び１８０度の回転角度を指定している。この例では、描画オブジェクトには、符号化画像データが含まれている。
【００２６】
ステップＳ２０では、画像形成部１２０は、描画オブジェクトを解析し、受信した描画オブジェクトがＲＧＢやＣＭＹＫといった各画素の画素値を含んでいる画像オブジェクトであるか否かを判定する。受信した描画オブジェクトがテキストやベクターデータ等でなく画像オブジェクトであると判定された場合、画像形成部１２０は、処理をステップＳ４０に進める。画像形成部１２０は、受信した描画オブジェクトがテキストやベクトルデータ等の画像オブジェクト以外のオブジェクトであると判断した場合、処理をステップＳ３０に進める。
【００２７】
ステップＳ３０では、画像形成部１２０は、通常の描画処理により描画オブジェクトを描画する。通常の描画処理は、たとえば後述の非回転並行デルタ行描画処理（ステップＳ７０）や１８０度回転並行デルタ行描画処理（ステップＳ８０）を含まない描画処理である。
【００２８】
ステップＳ４０では、画像描画部１２２は、画像オブジェクトを解析し、画像オブジェクトがデルタ行符号化により圧縮されている符号化画像データであるか否かを判定する。画像オブジェクトがデルタ行符号化により圧縮されていると判定された場合、画像形成部１２０は、処理をステップＳ５０に進める。画像オブジェクトがデルタ行符号化により圧縮されていない場合、画像形成部１２０は、画像形成部１２０は、本発明に係る復号化処理を伴わない通常の画像描画処理により画像オブジェクトを描画する（ステップＳ３０）。
【００２９】
ステップＳ５０では、画像描画部１２２は、方向指定データに基づいて、画像が描画ページの向きと同一の方向又は９０度回転、すなわち非回転又は９０度回転であるか否かを判断する。画像の向きが同じ又は９０度回転である場合、画像形成部１２０は、処理をステップＳ７０に進める。画像の向きが同じでも９０度回転でもない場合、画像形成部１２０は、処理をステップＳ６０に進める。
【００３０】
ステップＳ６０では、画像描画部１２２は、方向指定データに基づいて、画像の指定方向が１８０度回転、すなわち上下左右反転であるか否かを判断する。１８０度回転又は２７０度回転である場合、画像形成部１２０は、処理をステップＳ８０に進める。１８０度回転でも２７０度回転でもない場合、画像形成部１２０は、通常の画像描画処理により画像オブジェクトを描画する（ステップＳ３０）。
【００３１】
図５は、第１実施形態に係る非回転並行デルタ行描画処理を示すフローチャートである。ステップＳ７０では、デルタ列復号部１２１は、非回転並行デルタ行描画処理を実行する。ステップＳ７１では、４つのデルタ行復号処理部１２１のうちの１つは、ブロック生成部として機能し、符号化画像データＭ２（図２参照）を第１乃至第４の行ブロックＭ２１乃至Ｍ２４（図６参照）の画素群に分割して並列デルタ累積処理を実行する。各行ブロックの画素群は、４行の画素データを含んでいる。
【００３２】
図６は、第１実施形態に係る並列デルタ累積処理を表す模式図である。並列デルタ累積処理では、各デルタ行復号部１２１は、デルタ累積部として機能し、第１の行ブロックの内部において２行目から４行目までのデルタを累積し、第２の行ブロックの内部において６行目から８行目までのデルタを累積し、第３の行ブロックの内部において１０行目から１２行目までのデルタを累積する。
【００３３】
図７は、第１実施形態に係る並列デルタ累積処理の結果を表す模式図である。各デルタ行復号部１２１は、第１乃至第３の行ブロックＭ２１乃至Ｍ２３に対して並列デルタ累積処理を実行し、第１の行ブロックＭ２１の最後の行（単に最終行とも呼ばれる。）である４行目の累積デルタ行と、第２の行ブロックＭ２２の最終行である８行目の累積デルタ行と、第３の行ブロックＭ２３の最終行である１２行目の累積デルタ行とを取得する。
【００３４】
４行目の累積デルタＡＤ１は、第１の行ブロックの最初の行（単に先頭行とも呼ばれる。）ＦＲ１と第１の行ブロック内の最後の行との間の差としての総デルタデータを含んでいる。８行目の累積デルタＡＤ２は、第２の行ブロックの先頭行と第２の行ブロック内の最後の行との間の差としての総デルタデータを含んでいる。１２行目の累積デルタＡＤ３は、第３の行ブロックの先頭行と第３の行ブロック内の最後の行との間の差としての総デルタデータを含んでいる。
【００３５】
ステップＳ７７では、デルタ行復号部１２１は、以下に説明する更新処理によって第２乃至第４の行ブロックの各先頭行を生成する。
【００３６】
図８は、第１実施形態に係る第２の行ブロックの先頭行ＦＲ２の更新処理を表す模式図である。ステップＳ７７では、４つのデルタ行復号ユニット１２１のうちの１つは、第１の行ブロック内の先頭行ＦＲ１をコピーし、最後の行ＬＲ１を得るために４行目まで累積されたデルタＡＤ１で更新する。次に、デルタ行復号部１２１は、第２の行ブロックの先頭行のデルタを用いて最終行ＬＲ１を更新し、第２の行ブロックの先頭行ＦＲ２を取得する。
【００３７】
図９は、第１実施形態に係る第２の行ブロックの最終行の更新処理を示す模式図である。デルタ行復号部１２１は、第２の行ブロックの先頭行ＦＲ２をコピーした後、８行目の累積デルタＡＤ２で更新して最終行ＬＲ２を得る。次に、デルタ行復号部１２１は、第３の行ブロックの先頭行のデルタを用いて最終行ＬＲ２を更新し、第３の行ブロックの先頭行ＦＲ３（図１０参照）を取得する。
【００３８】
図１０は、第１実施形態に係る第３及び第４の先頭行の更新処理を示す模式図である。デルタ行復号部１２１は、第３の行ブロックの先頭行ＦＲ３をコピーした後、１２行目の累積デルタＡＤ３（図９参照）で更新して最終行ＬＲ３を取得する。次に、デルタ行復号部１２１は、第４の行ブロックの先頭行のデルタを用いて最終行ＬＲ３を更新し、第４の行ブロックの先頭行ＦＲ４を取得する。
【００３９】
このように、デルタ行デコーディング部１２１は、各先頭行の画像データを有することによって第１乃至第４の４つの行ブロックの並列デコーディングを実現することができる。具体的には、たとえば、第１のデルタ行復号部１２１は、既知の先頭行ＦＲ１を使用して、第１の行ブロックのデルタ行処理を行い、第２のデルタ行復号部１２１は、既知の先頭行ＦＲ２を使用して、第２の行ブロックのデルタ行処理を行い、第３のデルタ行復号部１２１は、既知の先頭行ＦＲ３を使用して、第３の行ブロックのデルタ行処理を行い、第４のデルタ行復号部１２１は、既知の先頭行ＦＲ４を使用して、第４の行ブロックのデルタ行処理を行うことができる。
【００４０】
図１１は、第１実施形態に係る他の典型的なデルタ行復号処理の結果の一例を表す模式図である。図１１は、本開示における各行ブロックにおける復号処理およびレンダリング処理を容易に理解するためのデルタ行符号化画像データＣＩおよび復号画像データＤＩを示している。デルタ列符号化画像データＣＩは、パーソナルコンピュータ２００においてデルタ列符号化を用いてオリジナルの複数の行データＤ１〜Ｄ３から符号化された画像データである。復号画像データＤＩは、画像形成装置１００において、デルタ列符号化画像データＣＩを用い、逆デルタ行符号化で復号化された画像データである。
【００４１】
デルタ行符号化画像データＣＩは、第１符号化行データＲ１、第２符号化行データＲ２、及び第３符号化行データＲ３を含んでいる。復号画像データＤＩは、第１復号行データＤ１、第２復号行データＤ２及び第３復号行データＤ３を含んでいる。画素内のアルファベットは、ピクセルの各色を意味している。同一のアルファベットは、同一色を表している。第１乃至第４列目の画素には、それぞれ「Ａ」、「Ｂ」、「Ｃ」及び「Ｄ」のアルファベットが含まれている。
【００４２】
第１の符号化行データＲ１は、オフセット数０（オフセット数は単にオフセットとも呼ばれる。）を有している。第１復号行データＤ１は、第１符号化行データＲ１をコピーするだけで生成される。第２符号化行データＲ２は、第１のオリジナル行データと第２のオリジナル行データとの差分を含んでいる。第２符号化行データＲ２は、オフセット数６の画像の一部を含んでいる。オフセット数は、ＲＧＢでは３色×２画素で算出される。画像の一部の３列目と４列目は、それぞれ「Ｋ」と「Ｌ」のアルファベットを有している。
【００４３】
オフセット数６は、１行目と２行目の行データの間において「Ａ」（１列目）と「Ｂ」（２列目）に差異がないことを意味している。オフセット数６は、第３列から始まる第１のオリジナル行データと第２のオリジナル行データとの間に差があることを意味している。
【００４４】
第３列においては、第１のオリジナル行データが「Ｃ」のアルファベットを有し、第２のオリジナル行データが「Ｋ」のアルファベットを有している。第４列においては、第１のオリジナル行データが「Ｄ」のアルファベットを有し、第２のオリジナル行データが「Ｌ」のアルファベットを有している。このように、第２のオリジナル行データは、２列（２画素）のデータのみを有している第２の符号化行データＲ２に符号化される。この符号化は、第１の画素、第２の画素及び第５の画素から第１４の画素を含む残りの列（画素）のデータを節約することができる。
【００４５】
デルタ行復号部１２１は、第２符号化行データＲ２を以下のようにして復号することができる。デルタ行復号部１２１は、第１の復号行データＤ１をコピーした後、第３及び第４の画素を「Ｃ」及び「Ｄ」から「Ｋ」及び「Ｌ」にそれぞれ更新（変更）する。この復号処理によって第２復号行データＤ２が生成される。
【００４６】
第３の符号化行データＲ３は、第１の部分画像Ｒ３１と第２の部分画像Ｒ３２とを含んでいる。第１の部分画像Ｒ３１は、ＲＧＢでは３色×４画素で計算される第１のオフセット数１２を有し、５列目及び６列目にそれぞれ「Ｍ」のアルファベットを有している。第２の画像部分Ｒ３２は、第１の部分画像Ｒ３１からＲＧＢについて３色×０画素で計算される第２オフセット数０を有し、第７列乃至第１０列にそれぞれ「Ｎ」のアルファベットを有している。
【００４７】
第１のオフセット数１２は、２行目の行データと３行目の行データの間において「Ａ」（１列目）、「Ｂ」（２列目）、「Ｋ」（３列目）及び「Ｌ」（４列目）に差異がないことを意味している。部分画像Ｒ３１は、５列目及び６列目にそれぞれ「Ｍ」のアルファベットを有している。第２のオフセット数０は、次の列、すなわち７列目から開始される第１のオリジナル行データと第２のオリジナル行データとの間に差があることを意味している。第２の部分画像Ｒ３２は、７列目乃至１０列目にそれぞれ「Ｎ」のアルファベットを有している。
【００４８】
デルタ行復号部１２１は、第３符号化行データＲ３を以下のようにして復号する。デルタ行復号部１２１は、第２復号行データＤ２をコピーし、５列目及び６列目をそれぞれ「Ｅ」及び「Ｆ」から「Ｍ」及び「Ｍ」に更新する。さらに、デルタ行復号部１２１は、７列目乃至１０列目をそれぞれ「Ｇ」、「Ｇ」、「Ｈ」及び「Ｈ」から「Ｎ」、「Ｎ」、「Ｎ」及び「Ｎ」に更新する。
【００４９】
図１２は、第１実施形態に係る典型的な画像描画処理（ステップＳ７９）の内容を表す模式図である。画像描画部１２２は、復号画像データＤＩに対して画像描画処理を実行し、画素値をＸ方向及びＹ方向に複製する画素複製処理によって画像のビットマップデータＲＤ（たとえばＲＤ１及びＲＤ２）を生成する。この例では、倍率は、Ｘ方向（行方向）及びＹ方向（列方向）に２である。このような処理は、スケーリング処理とも呼ばれる。
【００５０】
画像描画部１２２は、描画用ワンラインワークバッファＲＬＢを用い、第１復号行データＤ１の各画素値をＸ方向に複製して描画ラインデータＲＢ１を生成する。画像描画部１２２は、描画ラインデータＲＢ１の各画素をＹ方向に複製してページバッファＰＢに第１描画行データＲＤ１及び第２描画行データＲＤ２を生成する。
【００５１】
図１３は、第１実施形態に係る典型的な画像描画処理の内容を表す模式図である。画像描画部１２２は、描画用ワンラインワークバッファＲＬＢを用いて、第２復号行データＤ２の画素をＸ方向に複製して描画ラインデータＲＢ２を生成する。画像描画部１２２は、描画ラインデータＲＢ２の各画素をＹ方向に複製することによって、ページバッファＰＢに第３描画行データＲＤ３及び第４描画行データＲＤ４を生成する。
【００５２】
図１４は、第１実施形態に係る１８０度回転並行デルタ行描画処理の内容を示すフローチャートである。ステップＳ８０では、デルタ列復号部１２１は、１８０度回転並行デルタ行描画処理を実行する。ステップＳ８１では、４つのデルタ行復号処理部１２１のうちの１つは、符号化画像データＭ２（図２参照）を第１乃至第４の行ブロックＭ２１乃至Ｍ２４（図６参照）に分割して並列デルタ累積処理を実行する。各行ブロックは、４行の画素データを含んでいる。
【００５３】
図１５は、第１実施形態に係る１８０度回転並列デルタ累積処理の内容を表す模式図である。１８０度回転並列デルタ累積処理では、各デルタ行復号部１２１は、並列デルタ累積処理と相違し、第１乃至第３の行ブロックだけでなく、第４の行ブロックにおいても１４行目から１６行目までのデルタを累積する。
【００５４】
各デルタ行復号部１２１は、第１乃至第４の行ブロックＭ２１乃至Ｍ２４に対して並列デルタ累積処理を実行し、第１の行ブロックＭ２１の最終行である４行目の累積デルタ行と、第２の行ブロックＭ２２の最終行である８行目の累積デルタ行と、第３の行ブロックＭ２３の最終行である１２行目の累積デルタ行と、第４の行ブロックＭ２３の最終行である１６行目の累積デルタ行とを取得する。
【００５５】
４行目の累積デルタＡＤ１は、第１の行ブロックの先頭行ＦＲ１と第１の行ブロック内の最後の行との間の差としての総デルタデータを含んでいる。８行目の累積デルタＡＤ２ａは、第１の行ブロックの最終の行と第２の行ブロック内の最後の行との間の差としての総デルタデータを含んでいる。１２行目の累積デルタＡＤ３ａは、第２の行ブロックの最終の行と第３の行ブロック内の最終の行との間の差としての総デルタデータを含んでいる。１６行目の累積デルタＡＤ４は、第３の行ブロックの最終の行と第４の行ブロック内の最終の行との間の差としての総デルタデータを含んでいる。
【００５６】
図１６は、第１実施形態に係る反転デルタ生成処理の結果を表す模式図である。ステップＳ８２では、デルタ行復号部１２１は、反転デルタ更新処理を実行する。反転デルタは、１８０度回転ＦＤＲ復号処理用のデルタである。反転デルタデータは、Ｎ（Ｎは２以上の整数）行目からＮ−１行目への差分を示すデータである。
【００５７】
図１７は、第１実施形態に係る各最終ライン更新処理の結果を表す模式図である。ステップＳ８７では、デルタ行復号部１２１は、以下に説明する更新処理によって第１乃至第４の行ブロックの各最終行を生成する。
【００５８】
一のデルタ行復号部１２１は、第１の行ブロック内の先頭行ＦＲ１をコピーし、最後の行ＦＲ４を得るために４行目まで累積されたデルタＡＤ１で更新する。デルタ行復号部１２１は、累積デルタＡＤ２ａを用いて第１の行ブロックの最終行ＦＲ４を更新し、第２の行ブロックの最終行ＦＲ８を取得する。デルタ行復号部１２１は、累積デルタＡＤ３ａを用いて第２の行ブロックの最終行ＦＲ８を更新し、第３の行ブロックの最終行ＦＲ１２を取得する。デルタ行復号部１２１は、累積デルタＡＤ４を用いて第３の行ブロックの最終行ＦＲ１２を更新し、第４の行ブロックの最終行ＦＲ１６を取得する。
【００５９】
図１８は、第１実施形態に係る反転デルタ生成処理の方法を表す模式図である。この例は、反転デルタ生成処理の内容が分かりやすくなるようにオリジナル画像が図１５及び図１６のオリジナル画像と相違している。なお、反転デルタ生成処理の方法については第２実施形態で詳細に説明する。
【００６０】
反転デルタは、第２符号化行データＲ２から第１符号化行データＲ１への差分（デルタ）である。１８０度回転ＦＤＲ復号処理用のデルタは、反転デルタデータ又は単に反転デルタとも呼ばれる。この例では、反転デルタは、第１符号化行データＲ１内の第２符号化行データＲ２に対応する画素位置のデータ、すなわち「Ｃ」（３列目）及び「Ｄ」（４列目）のデータである。１８０度回転ＦＤＲ復号処理は、１８０度回転された方向に反転デルタを使用して復号するからである。このように、デルタ行復号部１２１は、反転デルタデータを使用することによってＮ番目の行ラインの画像データを保持することができる。
【００６１】
図１９は、第１実施形態に係る１８０度回転の画像描画処理（ステップＳ８９：図１４参照）の内容を表す概略図である。１８０度回転の画像描画処理は、ＦＤＲ符号化行データＦＲ１ａ，ＦＲ２ａ及びＦＲ３ａを逆の順序で選択し、すなわち、ＦＤＲ符号化行データＦＲ３ａ、ＦＤＲ符号化行データＦＲ２ａ及びＦＤＲ符号化行データＦＲ１ａの順序で選択して処理する点で非回転の画像描画処理と相違する。これにより、画像描画部１２２は、第２描画行データＲＤ６ａから第１描画行データＲＤ１ａの順に生成することができる。
【００６２】
１８０度回転の画像描画処理は、さらに、ＦＤＲ符号化行データＦＲ１ａ，ＦＲ２ａ及びＦＲ３ａのそれぞれの画素の走査を逆方向（反対方向）に実行する点で非回転の画像描画処理と相違する。これにより、画像描画部１２２は、非回転の画像描画処理と同じ処理量で１８０度回転の画像描画処理を実行することができる。
【００６３】
このように、デルタ行デコーディング部１２１は、各最終行の画像データを有することによって第１乃至第４の４つの行ブロックの１８０度回転並列デコーディングを実現することができる。具体的には、たとえば、第１のデルタ行復号部１２１は、既知の最終行ＦＲ４を使用して、第１の行ブロックのデルタ行処理を行い、第２のデルタ行復号部１２１は、既知の最終行ＦＲ８を使用して、第２の行ブロックのデルタ行処理を行い、第３のデルタ行復号部１２１は、既知の最終行ＦＲ１２を使用して、第３の行ブロックのデルタ行処理を行い、第４のデルタ行復号部１２１は、既知の最終行ＦＲ１６を使用して、第４の行ブロックのデルタ行処理を行うことができる。
【００６４】
図２０は、第２実施形態に係るレンダリング処理の内容を示すフローチャートである。第２実施形態に係るレンダリング処理は、高速デルタ行（Ｆａｓｔ  Ｄｅｌｔａ  Ｒｏｗ）描画処理（ＦＤＲ描画処理とも呼ばれる。）を採用している点で第１実施形態に係るレンダリング処理と相違する。第２実施形態は、ＦＤＲ描画処理として、非回転ＦＤＲ描画処理（ステップＳ７００）と１８０度回転ＦＤＲ描画処理（ステップＳ８００）とを採用している。
【００６５】
図２１は、第２実施形態に係る非回転高速デルタ行（Ｆａｓｔ  Ｄｅｌｔａ  Ｒｏｗ）描画処理を示すフローチャートである。ステップＳ７００では、画像描画部１２２は、高速デルタ行描画処理（ＦＤＲ描画処理とも呼ばれる。）を実行する。非回転ＦＤＲ描画処理は、画像を復号して第１の中間コードを生成する画像復号処理（ステップＳ７１０）と、復号された画像である復号画像を描画（第１の描画処理とも呼ばれる。）する非回転復号画像描画処理（ステップＳ７５０）と、９０度回転復号画像描画処理（ステップＳ９１０）とを含んでいる。
【００６６】
画像描画部１２２は、方向指定データに基づいて、非回転の場合には非回転復号画像描画処理（ステップＳ７５０）を実行し、９０度回転の場合には９０度回転復号画像描画処理（ステップＳ９１０）を実行する（ステップＳ７２０）。
【００６７】
図２２は、第２実施形態に係る高速デルタ行描画処理の画像復号処理（ステップＳ７１０）を示すフローチャートである。ステップＳ７１１では、デルタ行復号部１２１は、デルタ制限サイズを決定する。デルタ制限サイズとは、画像形成装置１００のハードウェアリソースに基づいて効率的な処理を実現するために予め設定されている所定のデータサイズ（たとえばバイト数）である。
【００６８】
デルタ行復号部１２１は、記憶部１４０からデルタ制限レートである０．２５を読み出す。デルタ行復号部１２１は、入力画像データの１ラインのバッファサイズにデルタ制限レートである０．２５を乗算する。入力画像データの１ラインバッファサイズは、１ラインの画素数（この例では１４）、すなわち画像幅にＲＧＢの３色を乗じて算出される４２である。したがって、デルタ制限サイズは、１０．５（＝４２×０．２５）と計算される。このデルタ制限サイズは、第１の閾値とも呼ばれる。
【００６９】
図２３は、第２実施形態に係る高速デルタ行描画処理の画像復号処理を示すフローチャートである。ステップＳ７１２では、デルタ行復号部１２１は、ワークバッファＷＢを準備する。ワークバッファＷＢは、入力画像データの１ラインバッファサイズと同じサイズを有している。ステップＳ７１３では、デルタ行復号部１２１は、現ライン（すなわち処理対象のライン）の各デルタサイズの合計を０に初期化する。ステップＳ７１４では、デルタ行復号部１２１は、ＦＤＲ復号処理を実行する。
【００７０】
図２４は、第２実施形態に係る高速デルタ行画像復号処理を示すフローチャートである。ステップＳ７４１では、デルタ行復号部１２１は、現ラインにデルタデータ（単にデルタとも呼ばれる。）が残っているか否かを判定する。現ラインにデルタが残っている場合、デルタ行復号部１２１は、処理をステップＳ７４２に進める。現ラインにデルタが残存していない場合、デルタ行復号部１２１は、処理をステップＳ７１５（図２２参照）に進める（リターン）。デルタデータは、Ｎ−１（Ｎは２以上の整数）行目からＮ行目への差分を示すデータである。
【００７１】
この例では、第１符号化行データＲ１の差分が存在するので、デルタ行復号部１２１は、処理をステップＳ７４２に進める。ステップＳ７４２では、デルタ行復号部１２１は、全体がデルタとなる最初の符号化行データＲ１をデルタとして取得する。全体がデルタとなるのは、先行する符号化行データが存在しないからである。
【００７２】
図２５は、第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。ステップＳ７４３では、デルタ行復号部１２１は、ワークバッファＷＢを第１符号化行データＲ１のデルタで更新し、１ラインバッファサイズであるデルタサイズ４２を現在のラインデルタサイズ合計に加算する。デルタサイズ４２は、ライン全体が更新されるため、１ラインのピクセル数１４、すなわち画像幅（すなわち画素数）にＲＧＢの３色を掛けて算出される。
【００７３】
ステップＳ７４４では、デルタ行復号部１２１は、現デルタサイズ合計（単に「ＤＳＳ」とも呼ばれる。）が、デルタ制限サイズ（単に「ＤＬＳ」とも呼ばれる。）以上であるか否かを判定する。デルタサイズ合計がデルタ制限サイズ以上である場合、デルタ行復号部１２１は、処理をステップＳ７４１に戻す。デルタサイズ合計がデルタ制限サイズより小さい場合、デルタ行復号部１２１は、処理をステップＳ７４５に進める。この例では、デルタサイズの合計は４２であり、デルタ制限サイズは１０．５である（すなわちＹＥＳとなる。）。したがって、デルタ行復号部１２１は、処理をステップＳ７４１に戻す。
【００７４】
ステップＳ７４１では、デルタ行復号部１２１は、このラインにデルタが残っているか否かを判定する。この行にデルタが残っている場合、デルタ行復号部１２１は、処理をステップＳ７４２に進める。このラインにデルタが残存していない場合、デルタ行復号部１２１は、処理をステップＳ７１５（図２２参照）に進める。この例では、第１符号化行データＲ１にはデルタが残存していない。したがって、デルタ行復号部１２１は、処理をステップＳ７１５（図２２参照）に進める。
【００７５】
ステップＳ７１５では、デルタ行復号部１２１は、デルタサイズ合計がデルタ制限サイズ以上であるか否かを判定する。この例では、デルタサイズの合計は４２であり、デルタ制限サイズは１０．５である（ＹＥＳを意味する）。したがって、デルタ行復号部１２１は、処理をステップＳ７１６に進める。
【００７６】
ステップＳ７１６では、デルタ行復号部１２１は、現ラインの全てのノードを解放する。ステップＳ７１７では、デルタ行復号部１２１は、第１符号化行データＲ１の現デルタに対するラインバッファを取得する。ラインバッファは、入力画像データの１ラインバッファサイズと同じサイズを有している。デルタ行復号部１２１は、ワークバッファＷＢをこのラインバッファにコピーする。このラインバッファは、ＦＤＲ符号化行データＦＲ１としてＦＤＲ圧縮画像ＦＣＩの一部を構成している。
【００７７】
ステップＳ７１８では、デルタ行復号部１２１は、他にライン（行）があるか否かを判定する。他にラインがある場合、デルタ行復号部１２１は、処理をステップＳ７１３に戻す。ラインが残っていない場合、デルタ行復号部１２１は、処理をステップＳ７５０（図２１参照）に進める。この例では、他のラインが存在するので、デルタ行復号部１２１は、処理をステップＳ７１３に戻す。
【００７８】
ステップＳ７１３では、デルタ行復号部１２１は、現ラインのデルタサイズの合計を０に初期化する。ステップＳ７４１では、デルタ行復号部１２１は、現ラインにデルタが残っているか否かを判定する。この例では、第２符号化行データＲ２としてデルタが存在するので、デルタ行復号部１２１は、処理をステップＳ７４２に進める。ステップＳ７４２では、デルタ行復号部１２１は、第２符号化行データＲ２のデルタを取得する。
【００７９】
図２６は、第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。ステップＳ７４３では、デルタ行復号部１２１は、第２符号化行データＲ２のデルタでワークバッファＷＢを更新し、デルタサイズ合計に、２画素×ＲＧＢの３色で算出されるデルタサイズ６を加算する。
【００８０】
ステップＳ７４４では、デルタ行復号部１２１は、デルタサイズ合計がデルタ制限サイズ以上であるか否かを判定する。この例では、デルタサイズ合計の６は、デルタ制限サイズより小さいので、デルタ行復号部１２１は、処理をステップＳ７４５に進める。
【００８１】
ステップＳ７４５では、デルタ行復号部１２１は、現ラインの最初のデルタであるか否かを判定する。現ラインの最初デルタである場合、デルタ行復号部１２１は、処理をステップＳ７４７に進める。現ラインの最初のデルタではない場合、デルタ行復号部１２１は、処理をステップＳ７４６に進める。この例では、第２符号化行データＲ２は現ラインの最初のデルタなので、デルタ行復号部１２１は、処理をステップＳ７４７に進める。
【００８２】
ステップＳ７４７では、デルタ行復号部１２１は、ノードを取得し、第２符号化行データＲ２のデルタにラインバッファを割り当てる。ノードは、６のオフセット数を有している。ラインバッファは、デルタサイズ６と同じサイズを有している。デルタ行復号ユニット１２１は、ワークバッファＷＢをこのラインバッファにコピーする。このラインバッファは、ＦＤＲ符号化行データＦＲ２としてＦＤＲ圧縮画像ＦＣＩの一部を構成している。このように、デルタ行復号部１２１は、デルタデータを使用することによってＮ番目の行ラインの画像データを保持することができる。
【００８３】
デルタ行復号部１２１は、処理をステップＳ７４１に戻す。この例では、第２符号化行データＲ２にはデルタが残存していない。したがって、デルタ行復号部１２１は、処理をステップＳ７１５に進める。
【００８４】
ステップＳ７１５では、デルタ行復号部１２１は、デルタサイズ合計ＤＳＳが、デルタ制限サイズＤＬＳ以上であるか否かを判定する。この例では、デルタサイズ合計は６であり、デルタ制限サイズは１０．５なので（ＮＯを意味している。）、デルタ行復号部１２１は、処理をステップＳ７１８に進める。
【００８５】
ステップＳ７１８では、デルタ行復号部１２１は、他にラインが存在するか否かを判定する。この例では、３行目の符号化行データＲ３が存在するので、デルタ行復号部１２１は、処理をステップＳ７１３に戻す。
【００８６】
ステップＳ７１３では、デルタ行復号部１２１は、現ラインのデルタサイズの合計を０に初期化する。ステップＳ７４１において、デルタ行復号部１２１は、このラインにデルタが残存しているか否かを判定する。この例では、第３符号化行データＲ３には２つのデルタが残存するので、デルタ行復号部１２１は、処理をステップＳ７４２に進める。ステップＳ７４２では、デルタ行復号部１２１は、第３符号化行データＲ３の第１デルタＲ３１を取得する。
【００８７】
図２７は、第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。ステップＳ７４３では、デルタ行復号部１２１は、第３符号化行データＲ３の第１デルタＲ３１でワークバッファＷＢを更新し、２画素×ＲＧＢの３色の値である６のデルタサイズをデルタサイズの合計に加算する。
【００８８】
ステップＳ７４４では、デルタ行復号部１２１は、デルタサイズ合計がデルタ制限サイズ以上であるか否かを判定する。この例では、デルタサイズ合計６がデルタ制限サイズより小さいので、デルタ行復号部１２１は、処理をステップＳ７４５に進める。
【００８９】
ステップＳ７４５では、デルタ行復号部１２１は、デルタが現ラインの最初のデルタであるか否かを判定する。この例では、デルタが現ラインの最初のデルタなので、デルタ行復号部１２１は、処理をステップＳ７４７に進める。
【００９０】
ステップＳ７４７では、デルタ行復号部１２１は、デルタ用のノードを取得し、第３符号化行データＲ３の第１デルタＲ３１にラインバッファを割り当てる。ノードは、最初のオフセット数１２を有している。ラインバッファは、デルタサイズ６と同じサイズを有している。デルタ行復号部１２１は、ワークバッファＷＢをこのラインバッファにコピーする。このラインバッファは、ＦＤＲ符号化行データＦＲ３ｔとしてＦＤＲ圧縮画像ＦＣＩの一部を構成する。ＦＤＲ符号化行データＦＲ３ｔは、次の第２のデルタＲ３２のための暫定的なデータである。
【００９１】
デルタ行復号部１２１は、処理をステップＳ７４１に戻す。この例では、第３符号化行データＲ３には、第２デルタＲ３２が残存しているので、デルタ行復号部１２１は、処理をステップＳ７４２に進める。ステップＳ７４２では、デルタ行復号部１２１は、第３符号化行データＲ３の第２デルタＲ３２を取得する。
【００９２】
図２８は、第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。ステップＳ７４３では、デルタ行復号部１２１は、第３符号化行データＲ３の第２デルタＲ３２でワークバッファＷＢを更新し、４画素×ＲＧＢの３色で算出されたデルタサイズの１２をデルタサイズ合計（加算前は第１デルタＲ３１のデルタサイズ６）に加算する。これにより、デルタサイズの合計が１８になる。
【００９３】
ステップＳ７４４では、デルタ行復号部１２１は、デルタサイズ合計ＤＳＳがデルタ制限サイズＤＬＳの１０．５以上であるか否かを判定する。この例では、デルタサイズの合計は１８であり、デルタ制限サイズが１０．５なので（ＹＥＳを意味する）、デルタ行復号部１２１は、処理をステップＳ７４１に進める。
【００９４】
なお、ステップＳ７４４において、仮にデルタサイズ合計がデルタ制限サイズより小さかった場合には（すなわちＮＯとなる。）、デルタ行復号部１２１は、処理をステップＳ７４５に進めることになる。この例では、現ラインの最初のデルタではないので、デルタ行復号部１２１は、処理をステップＳ７４６に進める。ステップＳ７４６では、このデルタのオフセットは０なので、処理をステップＳ７４８に進める。ステップＳ７４８では、デルタ行復号ユニット１２１は既存のバッファを延長し、このデルタをこのラインバッファのこの延長部分にコピーする。デルタ行復号部１２１は、処理をステップＳ７４１に進める。
【００９５】
ステップＳ７４１では、デルタ行復号部１２１は、このラインにデルタが残存しているか否かを判定する。この例では、第３符号化行データＲ３にはデルタが残存していないので、デルタ行復号部１２１は、処理をステップＳ７１５（図２２参照）に進める。
【００９６】
ステップＳ７１５では、デルタ行復号部１２１は、デルタサイズ合計が、デルタ制限サイズ以上であるか否かを判定する。この例では、デルタサイズの合計は１８であり、デルタ制限サイズが１０．５なので（ＹＥＳを意味する。）、デルタ行復号部１２１は、処理をステップＳ７１６に進める。
【００９７】
ステップＳ７１６では、デルタ行復号部１２１は、ワークバッファＷＢの全てのノードを解放する。ステップＳ７１７では、デルタ行復号部１２１は、ラインバッファを第３符号化行データＲ３全体に割り当てる。ラインバッファは、入力画像データの１ラインバッファサイズと同じサイズを有している。デルタ行復号部１２１は、ワークバッファＷＢをこのラインバッファにコピーし、ＦＤＲ符号化行データＦＲ３としてＦＤＲ圧縮画像ＦＣＩの一部を構成する。このように、デルタ行復号部１２１は、デルタデータを用いて行ラインの画像データをデコードして画像データを保持することができる。
【００９８】
ステップＳ７１８では、デルタ行復号部１２１は、他にラインがあるか否かを判定する。この例では、ラインが残存していないので、デルタ行復号部１２１は、処理をステップＳ７５０（図２１参照）に進める。
【００９９】
図２９は、第２実施形態に係る復号画像の画像描画処理（ステップＳ７５０）の内容を示すフローチャートである。図３０は、第２実施形態に係る画像描画処理の内容を表す概略図である。ステップＳ７５１では、画像描画部１２２は、復号入力ワンラインバッファＤＬＢを割り当てる。復号入力ワンラインバッファＤＬＢは、ＦＤＲ符号化行データ用の入力画像データの１ラインバッファサイズと同じバッファサイズを有している。
【０１００】
ステップＳ７５２では、画像描画部１２２は、描画用ワンラインワークバッファＲＬＢを割り当てる。描画用ワンラインワークバッファＲＬＢは、オリジナルの行データのサイズとＸ方向（行方向）の倍率（この例では２）とに応じたバッファサイズを有している。すなわち、描画用ワンラインワークバッファＲＬＢは、オリジナルの行データのサイズの２倍のバッファサイズを有している。
【０１０１】
ステップＳ７５３では、デルタ行復号部１２１は、現ラインにデルタが残存しているか否かを判定する。現ラインにデルタが残っている場合、デルタ行復号部１２１は、処理をステップＳ７５４に進める。現ラインにデルタが残存していない場合、デルタ行復号部１２１は、処理をステップＳ７５６に進める。この例では、デルタ行復号部１２１は、処理をステップＳ７５４に進める。
【０１０２】
図３１は、第２実施形態に係る画像描画処理の内容を表す概略図である。ＦＤＲ符号化行データＦＲ１は、ゼロのオフセット数を有している。ステップＳ７５４では、第１復号入力ラインデータＦＤ１は、更新の一種として、ＦＤＲ符号化行データＦＲ１を単純にコピーすることによって生成される。
【０１０３】
ステップＳ７５５では、画像処理部１２３は、第１復号入力ラインデータＦＤ１の各色をＣＭＹ又はＣＭＹＫに色変換処理を実行し、次に、画像描画部１２２は、色変換データに対して描画処理を実行して、描画ワンラインワークバッファＲＬＢを使用するピクセル複製によって画像の１ラインビットマップデータＲＢ１を生成する。Ｘ方向（行方向）及びＹ方向（列方向）の倍率は２である。
【０１０４】
ステップＳ７５３では、このラインにはデルタが残存していないので、デルタ行復号部１２１は、処理をステップＳ７５６に進める。ステップＳ７５６では、画像描画部１２２は、１ラインビットマップデータＲＢ１をコピーしてＹ方向に複製、すなわち繰り返してページバッファＰＢに描画処理済みローデータＲＤ１及びＲＤ２を生成する。
【０１０５】
図３２は、第２実施形態に係る画像描画処理の内容を表す概略図である。ステップＳ７５７では、２行目のＦＤＲ符号化行データＦＲ２がもう１行あるので、デルタ行復号部１２１は、処理をステップＳ７５３に戻す。
【０１０６】
ステップＳ７５３では、デルタ行復号部１２１は、第２復号入力ラインデータＦＤ２のデルタが残存しているので、処理をステップＳ７５４に進める。ステップＳ７５４では、デルタ行復号部１２１は、３番目及び４番目の画素を「Ｃ」及び「Ｄ」から「Ｋ」及び「Ｌ」に更新して第２復号入力ラインデータＦＤ２を生成する。
【０１０７】
ステップＳ７５５では、画像処理部１２３は、第２復号入力ラインデータＦＤ２の各色を変換し、次に、画像描画部１２２は、色変換データに対して描画処理を実行して、ワンラインワークバッファＲＬＢの描画処理を使用する画素複製によって画像の１ラインビットマップデータＲＢ２を生成する。
【０１０８】
ステップＳ７５３では、このラインにはデルタが残存していないので、デルタ行復号部１２１は、処理をステップＳ７５６に進める。ステップＳ７５６では、画像描画部１２２は、１ラインビットマップデータＲＢ２をコピーしてＹ方向に複製、すなわち繰り返すことによって、ページバッファＰＢに対して描画処理が実行されたローデータＲＤ３及びＲＤ４を生成する。
【０１０９】
図３３は、第２実施形態に係る画像描画処理の内容を表す概略図である。ステップＳ７５７では、３行目のＦＤＲ符号化行データＦＲ３がもう１行あるので、デルタ行復号部１２１は、処理をステップＳ７５３に戻す。
【０１１０】
ステップＳ７５３では、第２復号入力ラインデータＦＤ２にデルタが残存しているので、デルタ行復号部１２１は、処理をステップＳ７５４に進める。
【０１１１】
ＦＤＲ符号化行データＦＲ３は、ゼロのオフセット数を有している。第３の復号入力ラインバッファＦＤ３は、ＦＤＲ符号化行データＦＲ３を単にコピーすることによって生成される。他の処理は、第１復号入力ラインデータＦＤ１に対する処理と同様である。このように、画像描画部１２２は、ページバッファＰＢに描画行データＲＤ５及びＲＤ６を生成する。
【０１１２】
図３４は、第２実施形態に係る１８０度回転高速デルタ行（ＩＮＶＥＲＴＥＤ  Ｆａｓｔ  Ｄｅｌｔａ  Ｒｏｗ：ＩＦＤＲ）描画処理を示すフローチャートである。ステップＳ８００では、画像描画部１２２は、１８０度回転高速デルタ行描画処理を実行する。１８０度回転ＦＤＲ描画処理は、１８０度回転される画像を復号して第２の中間コードを生成する１８０度回転画像復号処理（ステップＳ８１０）と、１８０度回転される復号画像を描画（第２の描画処理とも呼ばれる。）する１８０度回転復号画像描画処理（ステップＳ８５０）と、２７０度回転復号画像描画処理（ステップＳ９２０）とを含んでいる。
【０１１３】
画像描画部１２２は、方向指定データに基づいて、１８０度回転の場合には１８０度回転復号画像描画処理（ステップＳ８５０）を実行し、２７０度の場合には２７０度回転復号画像描画処理（ステップＳ９２０）を実行する（ステップＳ８１５）。
【０１１４】
図３５は、第２実施形態に係る１８０度回転高速デルタ行描画処理のＩＦＤＲ復号処理（ステップＳ８１０）を示すフローチャートである。ステップＳ８１１では、デルタ行復号部１２１は、デルタ制限サイズを決定する。ステップＳ８１２では、デルタ行復号部１２１は、ワークバッファＷＢを準備する。ステップＳ８１３では、デルタ行復号部１２１は、現ラインの各デルタサイズの合計を０に初期化する。ステップＳ８１１乃至ステップＳ８１３の処理は、ステップＳ７１１乃至ステップＳ７１３（図２２参照）の処理と同一である。
【０１１５】
このデルタ制限サイズは、第２の閾値とも呼ばれる。本実施形態では、非回転と１８０度回転の高速デルタ行描画処理は、共通するデルタ制限レートである０．２５を使用している。したがって、第１の閾値及び第２の閾値は、同一の値を有している。本実施形態では、後述するように、非回転の復号処理と非回転の画像描画処理の処理方向を逆転させるだけで、画像の１８０度回転処理を実行することなく１８０度回転の画像描画処理実現させることができるので処理コストが非回転と１８０度回転でほとんど同一だからである。
【０１１６】
図３６は、第２実施形態に係るＩＦＤＲ復号処理（ステップＳ８１４）を示すフローチャートである。ステップＳ８４１では、デルタ行復号部１２１は、現ラインにデルタが残っているか否かを判定する。ステップＳ８４２では、デルタ行復号部１２１は、全体がデルタとなる最初の符号化行データである第１符号化行データＲ１のデルタを取得する。ステップＳ８４１及びステップＳ８４２の処理は、ステップＳ７４１及びステップＳ７４２（図２４参照）の処理と同一である。
【０１１７】
ステップＳ８４３では、デルタ行復号部１２１は、１ラインバッファサイズであるデルタサイズ４２を現在のラインデルタサイズ合計に加算する。ステップＳ８４４では、デルタ行復号部１２１は、現デルタサイズ合計（単に「ＤＳＳ」とも呼ばれる。）が、デルタ制限サイズ（単に「ＤＬＳ」とも呼ばれる。）以上であるか否かを判定する。デルタサイズ合計がデルタ制限サイズ以上である場合、デルタ行復号部１２１は、処理をステップＳ８４９に進める。デルタサイズ合計がデルタ制限サイズより小さい場合、デルタ行復号部１２１は、処理をステップＳ８４５に進める。
【０１１８】
ステップＳ８４４は、デルタサイズ合計がデルタ制限サイズ以上である場合、デルタ行復号部１２１が処理をラインノード生成処理（ステップＳ８４９）に進める点で、処理をステップＳ７４１に戻すステップＳ７４４（図２４参照）と相違している。この例では、デルタサイズの合計は４２であり、デルタ制限サイズは１０．５である（すなわちＹＥＳとなる。）。したがって、デルタ行復号部１２１は、処理をラインノード生成処理（ステップＳ８４９）に進める。
【０１１９】
図３７は、第２実施形態に係るラインノード生成処理（ステップＳ８４９）の内容を示すフローチャートである。ステップＳ８９１では、デルタ行復号部１２１は、処理対象のラインが画像中の最初のラインであるか否かを判断する。処理対象のラインが画像中の最初のラインである場合、デルタ行復号部１２１は、処理をステップＳ８９５に進める。処理対象のラインが画像中の最初のラインでない場合、デルタ行復号部１２１は、処理をステップＳ８９２に進める。この例では、処理対象のラインが画像中の最初のラインなので、デルタ行復号部１２１は、処理をステップＳ８９５に進める。
【０１２０】
ステップＳ８９５では、デルタ行復号部１２１は、ワークバッファ更新処理を実行する。ワークバッファ更新処理では、デルタ行復号部１２１は、ワークバッファＷＢを第１符号化行データＲ１のデルタで更新し、処理をステップＳ８４１（図３６参照）に戻す。ステップＳ８４１では、デルタ行復号部１２１は、デルタが残存しないので処理をステップＳ８１８（図３５参照）に戻す。
【０１２１】
図３８は、第２実施形態に係るＩＦＤＲ復号処理の内容を表す概略図である。このように、デルタ行復号部１２１は、ワークバッファＷＢを第１符号化行データＲ１のデルタで更新した状態（ワークバッファＤ１）で、デルタ行復号部１２１は、ワークバッファＷＢをこのラインバッファにコピーすることなく、処理対象を次のラインに進める（ステップＳ８１８）。１８０度回転ＦＤＲ復号処理では、最初のラインは、最終ラインとなるので１ライン分の全ての画素データを有する必要はないからである。
【０１２２】
ステップＳ８１３では、デルタ行復号部１２１は、現ラインのデルタサイズの合計を０に初期化する。ステップＳ８４１では、デルタ行復号部１２１は、現ラインにデルタが残っているか否かを判定する。この例では、第２符号化行データＲ２としてデルタが存在するので、デルタ行復号部１２１は、処理をステップＳ８４２に進める。ステップＳ８４２では、デルタ行復号部１２１は、第２符号化行データＲ２のデルタを取得する。
【０１２３】
図３９は、第２実施形態に係る反転デルタ生成処理の内容を表す概略図である。ステップＳ８４３では、デルタ行復号部１２１は、デルタサイズ加算処理を実行する。デルタサイズ加算処理では、デルタサイズ合計に、第２符号化行データＲ２のデルタの画素数である２画素×ＲＧＢの３色で算出されるデルタサイズ６をデルタサイズ合計（０）に加算する。
【０１２４】
ステップＳ８４４では、デルタ行復号部１２１は、デルタサイズ合計がデルタ制限サイズ以上であるか否かを判定する。この例では、デルタサイズ合計の６は、デルタ制限サイズより小さいので、デルタ行復号部１２１は、処理をステップＳ８４５に進める。
【０１２５】
ステップＳ８４５では、デルタ行復号部１２１は、現ラインの最初のデルタであるか否かを判定する。現ラインの最初デルタである場合、デルタ行復号部１２１は、処理をステップＳ８４７に進める。現ラインの最初のデルタではない場合、デルタ行復号部１２１は、処理をステップＳ８４６に進める。この例では、第２符号化行データＲ２は現ラインの最初のデルタなので、デルタ行復号部１２１は、処理をステップＳ８４７に進める。
【０１２６】
ステップＳ８４７では、デルタ行復号部１２１は、ノードを取得し、第２符号化行データＲ２にラインバッファを割り当てる。ノードは、６のオフセット数を有している。ラインバッファは、デルタサイズ６と同じサイズを有している。デルタ行復号ユニット１２１は、反転デルタ生成処理として、第２符号化行データＲ２のデルタに対応する１８０度回転ＦＤＲ復号処理用のデルタを、このラインバッファにコピーする。このラインバッファは、ＦＤＲ符号化行データＦＲ１ａとしてＦＤＲ圧縮画像ＦＣＩの一部を構成している。
【０１２７】
１８０度回転ＦＤＲ復号処理用のデルタは、第２符号化行データＲ２から第１符号化行データＲ１への差分（デルタ）である。１８０度回転ＦＤＲ復号処理用のデルタは、反転デルタデータ又は単に反転デルタとも呼ばれる。この例では、反転デルタは、第１符号化行データＲ１内の第２符号化行データＲ２に対応する画素位置のデータ、すなわち「Ｃ」（３列目）及び「Ｄ」（４列目）のデータである。１８０度回転ＦＤＲ復号処理は、１８０度回転された方向に反転デルタを使用して復号するからである。このように、デルタ行復号部１２１は、反転デルタデータを使用することによってＮ番目の行ラインの画像データを保持することができる。反転デルタデータは、Ｎ（Ｎは２以上の整数）行目からＮ−１行目への差分を示すデータである。
【０１２８】
図４０は、第２実施形態に係るワークバッファ更新処理の内容を表す概略図である。ワークバッファ更新処理では、デルタ行復号部１２１は、第２符号化行データＲ２を使用してワークバッファＷＢを更新する。すなわち、デルタ行復号部１２１は、ワークバッファＷＢの第３及び第４の画素を「Ｃ」及び「Ｄ」から「Ｋ」及び「Ｌ」にそれぞれ更新（変更）してワークバッファＤ２とする。
【０１２９】
デルタ行復号部１２１は、ワークバッファ更新処理の完了に応じて処理をステップＳ８４１に戻す。この例では、第２符号化行データＲ２にはデルタが残存していない。したがって、デルタ行復号部１２１は、処理をステップＳ８１８に進める（ステップＳ８４１）。
【０１３０】
ステップＳ８１８では、デルタ行復号部１２１は、他にラインが存在するか否かを判定する。この例では、３行目の符号化行データＲ３が存在するので、デルタ行復号部１２１は、処理をステップＳ８１３に戻す。
【０１３１】
ステップＳ８１３では、デルタ行復号部１２１は、現ラインのデルタサイズの合計を０に初期化する。ステップＳ８４１において、デルタ行復号部１２１は、このラインにデルタが残存しているか否かを判定する。この例では、第３符号化行データＲ３には２つのデルタが残存するので、デルタ行復号部１２１は、処理をステップＳ８４２に進める。ステップＳ８４２では、デルタ行復号部１２１は、第３符号化行データＲ３の第１デルタＲ３１を取得する。
【０１３２】
ステップＳ８４３では、デルタ行復号部１２１は、デルタサイズ加算処理を実行する。デルタサイズ加算処理では、デルタサイズ合計に、第３符号化行データＲ３の第１デルタＲ３１の画素数である２画素×ＲＧＢの３色で算出されるデルタサイズ６をデルタサイズ合計（０）に加算する。
【０１３３】
ステップＳ８４４では、デルタ行復号部１２１は、デルタサイズ合計がデルタ制限サイズ以上であるか否かを判定する。この例では、デルタサイズ合計６がデルタ制限サイズより小さいので、デルタ行復号部１２１は、処理をステップＳ８４５に進める。
【０１３４】
ステップＳ８４５では、デルタ行復号部１２１は、デルタが現ラインの最初のデルタであるか否かを判定する。この例では、第１デルタＲ３１が現ラインの最初のデルタなので、デルタ行復号部１２１は、処理をステップＳ８４７に進める。
【０１３５】
図４１は、第２実施形態に係るＦＤＲ復号処理の内容を表す概略図である。ステップＳ８４７では、デルタ行復号部１２１は、デルタ用のノードを取得し、第３符号化行データＲ３の第１デルタＲ３１にラインバッファを割り当てる。ノードは、最初のオフセット数１２を有している。デルタ行復号ユニット１２１は、反転デルタ生成処理として、第３符号化行データＲ３の第１デルタＲ３１のデルタに対応する反転デルタを、このラインバッファにコピーする。このラインバッファは、ＦＤＲ符号化行データＦＲ２ｔａとしてＦＤＲ圧縮画像ＦＣＩの一部を構成している。ＦＤＲ符号化行データＦＲ２ｔａは、次の第２のデルタＲ３２のための暫定的なデータである。
【０１３６】
図４２は、第２実施形態に係るワークバッファ更新処理の内容を表す概略図である。ワークバッファ更新処理では、デルタ行復号部１２１は、第１デルタＲ３１を使用してワークバッファＷＢを更新してワークバッファＤ３ｔとする。すなわち、デルタ行復号部１２１は、ワークバッファＷＢの第５及び第６の画素を「Ｅ」及び「Ｆ」から「Ｍ」及び「Ｍ」にそれぞれ更新（変更）する。
【０１３７】
デルタ行復号部１２１は、処理をステップＳ８４１に戻す。この例では、第３符号化行データＲ３には、第２デルタＲ３２が残存しているので、デルタ行復号部１２１は、処理をステップＳ８４２に進める。ステップＳ８４２では、デルタ行復号部１２１は、第３符号化行データＲ３の第２デルタＲ３２を取得する。
【０１３８】
ステップＳ８４３では、デルタ行復号部１２１は、デルタサイズ加算処理を実行する。デルタサイズ加算処理では、デルタサイズ合計に、第３符号化行データＲ３の第２デルタＲ３２の画素数である４画素×ＲＧＢの３色で算出されるデルタサイズ１２をデルタサイズ合計（６）に加算する。これにより、デルタサイズの合計が１８になる。
【０１３９】
ステップＳ８４４では、デルタ行復号部１２１は、デルタサイズ合計ＤＳＳがデルタ制限サイズＤＬＳの１０．５以上であるか否かを判定する。この例では、デルタサイズの合計は１８であり、デルタ制限サイズが１０．５なので（ＹＥＳを意味する）、デルタ行復号部１２１は、処理をステップＳ８４９（図３７参照）に進める。
【０１４０】
図４３は、第２実施形態に係るワンライン生成処理の内容を表す概略図である。ステップＳ８９１では、デルタ行復号部１２１は、処理対象のラインが画像中の最初のラインであるか否かを判断する。この例では、処理対象のラインが画像中の最初のラインではないので、デルタ行復号部１２１は、処理をステップＳ８９２に進める。
【０１４１】
ステップＳ８９２では、デルタ行復号部１２１は、現ラインの全てのノードを解放する。ステップＳ８９３では、デルタ行復号部１２１は、ワンライン生成処理を実行する。ワンライン生成処理では、デルタ行復号部１２１は、現ラインの全てのデルタを使用して１ライン分のデータを復号する。ステップＳ８９４では、デルタ行復号部１２１は、１ライン分のデータをこのラインバッファにコピーする。このラインバッファは、ＦＤＲ符号化行データＦＲ２ａとしてＦＤＲ圧縮画像ＦＣＩの一部を構成している。
【０１４２】
図４４は、第２実施形態に係るワークバッファ更新処理の内容を表す概略図である。ステップＳ８９５では、デルタ行復号部１２１は、ワークバッファ更新処理を実行する。ワークバッファ更新処理では、デルタ行復号部１２１は、１ライン分のデータを第２デルタＲ３２でワークバッファＷＢを更新してワークバッファＤ３とし、処理をステップＳ８４１（図３６参照）に戻す。このように、デルタ行復号部１２１は、デルタデータを用いて行ラインの画像データをデコードして画像データを保持することができる。
【０１４３】
図４５は、第２実施形態に係る最終ライン生成処理（ステップＳ８２０）の内容を示すフローチャートである。図４６は、第２実施形態に係る最終ライン生成処理の内容を表す概略図である。ステップＳ８２１では、デルタ行復号部１２１は、ワンラインバッファ準備処理を実行する。ワンラインバッファ準備処理では、デルタ行復号部１２１は、入力画像データの１ラインバッファサイズと同じサイズのラインバッファを準備する。
【０１４４】
ステップＳ８２２では、デルタ行復号部１２１は、ワークバッファコピー処理を実行する。ワークバッファコピー処理では、デルタ行復号部１２１は、ワークバッファＷＢをラインバッファにコピーする。ステップＳ８２３では、デルタ行復号部１２１は、このラインバッファを最終ラインのリストとして追加する。
【０１４５】
図４７は、第２実施形態に係る１８０度回転の画像描画処理（ステップＳ８５０：図３４参照）の内容を表す概略図である。１８０度回転の画像描画処理は、ＦＤＲ符号化行データＦＲ１ａ，ＦＲ２ａ及びＦＲ３ａを逆の順序で選択し、すなわち、ＦＤＲ符号化行データＦＲ３ａ、ＦＤＲ符号化行データＦＲ２ａ、ＦＤＲ符号化行データＦＲ１ａの順序で選択して処理する点で非回転の画像描画処理と相違する。これにより、画像描画部１２２は、第６描画行データＲＤ６ａから第１描画行データＲＤ１ａの順に生成することができる。
【０１４６】
１８０度回転の画像描画処理は、さらに、ＦＤＲ符号化行データＦＲ１ａ，ＦＲ２ａ及びＦＲ３ａのそれぞれの画素の走査を逆方向（反対方向）に実行する点で非回転の画像描画処理と相違する。これにより、画像描画部１２２は、非回転の画像描画処理と同じ処理量で１８０度回転の画像描画処理を実行することができる。
【０１４７】
このように、本実施形態に係る画像形成装置１００は、描画処理装置として機能し、非回転の復号処理と非回転の画像描画処理の処理方向を逆転（反対の方向とする）させるだけで、第１乃至第４の行ブロックＭ２１乃至Ｍ２４の各々において、画像の１８０度回転処理を実行することなく１８０度回転の画像描画処理実現させることができる。
【０１４８】
本発明は、さらに他の中間コードを導入することによってデルタ行圧縮画像データを効率的に処理する。この新しい中間コードは、デルタ行圧縮画像データから技術的に部分的に復号、すなわち予備復号したものである。この部分復号処理は、非効率に圧縮符号化された行データを復号する。非効率に圧縮符号化された行データは、結果として低い圧縮率となっており、復号のための処理能力を消費する。したがって、第２実施形態に係る画像形成装置１００によれば、ハードウェア資源を効率的に使用することができる。
【０１４９】
図４８は、第２実施形態に係る復号画像の９０度回転画像描画処理（ステップＳ９１０）の内容を示すフローチャートである。図４９は、第２実施形態に係る９０度回転画像描画処理の内容を表す概略図である。本構成は、複合処理の過程ではなく描画処理の過程で９０度回転させることを特徴としている。９０度回転画像描画処理は、第３の描画処理とも呼ばれる。
【０１５０】
ステップＳ９１１では、画像描画部１２２は、マップ生成処理を実行する。マップ生成処理では、画像描画部１２２は、マップ用のバッファを割り合てた後にマップＭＰ１を生成する（図４９参照）。マップＭＰ１は、第１のマップとも呼ばれ、ＦＤＲ符号化行データＦＲ１乃至ＦＲ４を画像のＸ軸方向（主走査方向とも呼ばれる。）とＹ軸方向（副走査方向とも呼ばれる。）とを入れ替えることによって９０度回転させるためのマッピングを実行するためのマップデータである。
【０１５１】
マップＭＰ１は、ＦＤＲ符号化行データＦＲ１乃至ＦＲ４にそれぞれ対応する第１マッピング要素ＦＲ１ｍ乃至第４マッピング要素ＦＲ４ｍを格納している。第１マッピング要素ＦＲ１ｍのノード要素Ｎｐは、ＦＤＲ符号化行データＦＲ１において最初に選択すべきノード（デルタ）のアドレスを格納している。開始要素Ｘｓは、Ｙ軸方向に延びているＦＤＲ符号化行データＦＲ１の復号描画画像のＸ軸方向の開始位置を示している。最終要素Ｘｅは、Ｙ軸方向に延びているＦＤＲ符号化行データＦＲ１の復号描画画像のＸ軸方向の最終位置を示している。
【０１５２】
ステップＳ９１２では、画像描画部１２２は、マップ内要素移動処理を実行する。具体的には、画像描画部１２２は、第１マッピング要素ＦＲ１ｍを選択し、ノード要素Ｎｐに移動してノード（デルタ）としてのＦＤＲ符号化行データＦＲ１を選択する。
【０１５３】
ステップＳ９１３では、画像描画部１２２は、対象画素のデータが存在するか否かを判断する。画像描画部１２２は、対象画素のデータが存在する場合には、処理をステップＳ９１４に進め、対象画素のデータが存在しない場合には、処理をステップＳ９１５に進める。差分圧縮では、差分が存在しない画素には、ノード（デルタ）が存在しないからである。
【０１５４】
ステップＳ９１４では、画像描画部１２２は、たとえばＦＤＲ符号化行データＦＲ１から画素の色情報「Ａ」を取得し、描画用ワンラインワークバッファＲＬＢの開始要素Ｘｓから最終要素Ｘｅまでの範囲にコピーする。この例では、水平方向のスケールＳＨが２なので、色情報「Ａ」は、描画用ワンラインワークバッファＲＬＢの第１画素から第２画素までコピーされるようにマップＭＰ１が構成されている。
【０１５５】
一方、ＦＤＲ符号化行データＦＲ２が選択されている場合には、対象画素がＦＤＲ符号化行データＦＲ２Ａ及びＦＲ２Ｂの範囲外なので、右側、すなわちＦＤＲ符号化行データＦＲ１の対応画素から色情報「Ａ」をコピーする（ステップＳ９１５）。
【０１５６】
ステップＳ９１６では、画像描画部１２２は、デルタ更新が必要であるか否かを判断する。具体的には、画像描画部１２２は、たとえばＦＤＲ符号化行データＦＲ２Ｂの対象画素の一つ手前（Ｙ軸方向）の画素が処理対象となっているか否かを判断する。画像描画部１２２は、デルタ更新が必要であると判断した場合には、処理をステップＳ９１７に進め、デルタ更新が必要でないと判断した場合には、処理をステップＳ９１８に進める。
【０１５７】
ステップＳ９１７では、画像描画部１２２は、ノード要素Ｎｐの内容を更新する。具体的には、画像描画部１２２は、ノード要素Ｎｐの内容をたとえばＦＤＲ符号化行データＦＲ２ＡからＦＤＲ符号化行データＦＲ２Ｂに更新する。
【０１５８】
このように処理（ステップＳ９１２乃至ステップＳ９１７）は、画像描画部１２２によって、全てのＦＤＲ符号化行データに対して実行される。画像描画部１２２は、描画用ワンラインワークバッファＲＬＢの内容を垂直方向のスケールＳＶ（この例では「１」）に基づいてページバッファＰＢにコピーする（図５０参照）。
【０１５９】
図５１は、第２実施形態に係る２７０度回転復号画像描画処理（ステップＳ９２０）の内容を表す概略図である。２７０度回転復号画像描画処理は、１８０度回転ＦＤＲ復号処理の過程で１８０度回転された状態の画像を画像描画処理の過程で、さらに９０度回転させることで２７０度の回転を実現させている。２７０度回転画像描画処理は、第４の描画処理とも呼ばれる。
【０１６０】
画像描画部１２２は、１８０度回転ＦＤＲ復号処理で生成された反転デルタ用のマップＭＰ２を生成する。マップＭＰ２は、第２のマップとも呼ばれ、Ｘ軸方向（主走査方向とも呼ばれる。）及びＹ軸方向（副走査方向とも呼ばれる。）の処理がマップＭＰ１を使用する場合とは逆となるように構成されている。これにより、画像描画部１２２は、１８０度回転ＦＤＲ復号処理で生成された反転デルタ（反転デルタＦＲ１ａ等）とマップＭＰ２とを使用して２７０度回転を実現することができる。
【０１６１】
図５２は、第３実施形態に係るレンダリング処理の内容を示すフローチャートである。レンダリング処理は、パーソナルコンピュータ２００からの印刷ジョブの受信に応じて画像形成装置１００において起動される。印刷ジョブの受信は、通信インターフェース部２５０及び通信インターフェース部１５０を介して実行される。印刷ジョブには、ＰＤＬデータが含まれている。
【０１６２】
ステップＳ１０００では、画像形成装置１００が有する制御部１１０のＰＤＬ解析部１１１は、ＰＤＬ解析処理を実行し、ページ記述言語で記述されたＰＤＬデータを解析する。この例では、ＰＤＬ解析部１１１は、ＰＤＬデータから描画オブジェクトと、描画オブジェクトの描画方向、すなわち印刷媒体上における画像の向き（指定方向）を指定している方向指定データとを取得する。方向指定データは、角度データとも呼ばれ、たとえば非回転（０度）、時計方向９０度、１８０度及び２７０度の回転角度を指定している。この例では、描画オブジェクトには、符号化画像データが含まれている。
【０１６３】
ステップＳ２０００では、画像形成部１２０は、描画オブジェクトを解析し、受信した描画オブジェクトがＲＧＢやＣＭＹＫといった各画素の画素値を含んでいる画像オブジェクトであるか否かを判定する。受信した描画オブジェクトがテキストやベクターデータ等でなく画像オブジェクトであると判定された場合、画像形成部１２０は、処理をステップＳ４０００に進める。画像形成部１２０は、受信した描画オブジェクトがテキストやベクトルデータ等の画像オブジェクト以外のオブジェクトであると判断した場合、処理をステップＳ３０００に進める。
【０１６４】
ステップＳ３０００では、画像形成部１２０は、通常の描画処理により描画オブジェクトを描画する。通常の描画処理は、たとえば後述の非回転高速ＲＬ描画処理（ステップＳ７０００）や１８０度回転高速ＲＬ描画処理（ステップＳ８０００）を含まない描画処理である。
【０１６５】
ステップＳ４０００では、画像描画部１２２は、画像オブジェクトを解析し、画像オブジェクトがＲＬ符号化により圧縮されている符号化画像データであるか否かを判定する。画像オブジェクトがＲＬ符号化により圧縮されていると判定された場合、画像形成部１２０は、処理をステップＳ５０００に進める。画像オブジェクトがＲＬ符号化により圧縮されていない場合、画像形成部１２０は、画像形成部１２０は、通常の画像描画処理により画像オブジェクトを描画する（ステップＳ３０００）。
【０１６６】
図５３は、ＲＵＮ−ＬＥＮＧＴＨ符号化画像（ＲＬ符号化画像とも呼ばれる。）の一例を表す模式図である。ＲＬ符号化画像ＲＬＤ１は、パーソナルコンピュータ２００において、ＲＬ符号化処理によって元画像ＣＩが圧縮された画像である。画素内のアルファベットは、ピクセルの各色を意味している。同一のアルファベットは、同一色を表している。第１乃至第４列目の画素には、それぞれ「Ａ」、「Ｂ」、「Ｃ」及び「Ｄ」のアルファベットが含まれている。
【０１６７】
ＲＬ符号化処理は、連続する同一データをデータ１つ分と連続した長さとで表して圧縮する可逆圧縮方法である。この例では、元画像ＣＩは、ＲＬ符号化画像ＲＬＤ１にランレングス圧縮（連長圧縮とも呼ばれる。）されている。ＲＬ符号化画像ＲＬＤ１では、たとえば画像のラインＬ１は、４個の部分画像Ｌ１１乃至Ｌ１４に分割され、圧縮されている。
【０１６８】
部分画像Ｌ１１及びＬ１４は、直接色部分ＤＣＰとも呼ばれ、各要素に色情報を格納している。部分画像Ｌ１２及びＬ１３は、反復色部分ＲＣＰとも呼ばれ、第１の要素に色情報を格納し、第２の要素に反復数（連続数とも呼ばれる。）を格納している。これにより、部分画像Ｌ１２は、２要素で４画素の色情報を格納し、部分画像Ｌ１３は、２要素で１０画素の色情報を格納することができる。この結果、ＲＬ符号化処理は、データ量を削減することができる。
【０１６９】
ＲＬ符号化処理には、データが連続していないと、符号化後のデータが元のデータより膨らんでしまうという欠点がある。このような欠点を回避するために、たとえばＳｗｉｔｃｈｅｄ  Ｒｕｎ  Ｌｅｎｇｔｈ符号化方式（ＳＲＬ符号化方式とも呼ばれる。）も提案されている。ＳＲＬ符号化方式は、コードの変わり目で連続データとして扱うか非連続データとして扱うかを交互に切り替えていく方法である。ただし、ＳＲＬ符号化方式は、表現可能な最大連続数が２５６個に制限される。
【０１７０】
ステップＳ５０００では、画像描画部１２２は、方向指定データに基づいて、画像が描画ページの向きと同一の方向、すなわち非回転であるか否かを判断する。画像の向きが同じである場合、画像形成部１２０は、処理をステップＳ７０００に進める。画像の向きが同じでない場合、画像形成部１２０は、処理をステップＳ６０００に進める。
【０１７１】
ステップＳ６０００では、画像描画部１２２は、方向指定データに基づいて、画像の指定方向が１８０度回転、すなわち上下左右反転であるか否かを判断する。１８０度回転である場合、画像形成部１２０は、処理をステップＳ８０００に進める。１８０度回転でない場合、画像形成部１２０は、通常の画像描画処理により画像オブジェクトを描画する（ステップＳ３０００）。
【０１７２】
図５４は、第３実施形態に係る非回転高速ＲＬ描画処理の概要を示す説明図である。図５４（ａ）は、非回転高速ＲＬ描画処理の内容を示すフローチャートである。ステップＳ７０００では、画像描画部１２２は、高速ＲＬ描画処理（ＲＬ描画処理とも呼ばれる。）を実行する。非回転ＲＬ描画処理は、画像を復号して中間コード（画像ノード）を生成する画像復号処理（ステップＳ７１００）と、復号された画像である復号画像を描画する復号画像描画処理（ステップＳ７７００）と、画像出力処理（ステップＳ７９００）とを含んでいる。
【０１７３】
図５４（ｂ）は、非回転高速ＲＬ描画処理のデータフローを示している。非回転高速ＲＬ描画処理では、画像形成部１２０のＲＬ復号部１２１は、パーソナルコンピュータ２００のＲＬ符号化部２２０で圧縮されたＲＬ符号化画像ＲＬＤ１を受信する。ＲＬ符号化画像ＲＬＤ１には、複数の直接色部分ＤＣＰと複数の反復色部分ＲＣＰとが含まれている。ＲＬ復号部１２１は、直接色部分ＤＣＰと反復色部分ＲＣＰとからそれぞれ直接色ノードＤＣＰｎと反復色ノードＲＣＰｎとを生成し、画像描画部１２２に送信する。画像描画部１２２は、複数の直接色ノードＤＣＰｎと複数の反復色ノードＲＣＰｎとを使用して描画画像ＤＩを生成する。直接色ノードＤＣＰｎ及び反復色ノードＲＣＰｎは、第１の中間コードとも呼ばれる。
【０１７４】
図５５は、典型的な画像ノード生成処理の内容の一例を表す模式図である。図５５では、ＲＬ復号部１２１は、ＲＬ符号化画像ＲＬＤ１の画素ラインＬ１を構成する４個の部分画像Ｌ１１乃至Ｌ１４に対して、直接色部分ＤＣＰ及び反復色部分ＲＣＰを直接色ノードＤＣＰｎ及び反復色ノードＲＣＰｎに変換している。
【０１７５】
画像ノードは、タイプフィールド（タイプとも呼ばれる。）、反復数／長さフィールド（カウント数／長さとも呼ばれる。）、ノードポインタフィールド及び色情報ポインタフィールドを有している。タイプフィールドは、画像ノードのタイプを示している。タイプフィールドは、たとえば直接色ノードＤＣＰｎ又は反復色ノードＲＣＰｎを示している。反復数／長さフィールドは、反復色ノードＲＣＰｎの画素の反復数又は直接色ノードＤＣＰｎの画素数（画素幅）を示している。ノードポインタフィールドは、画素ライン内の次のノードを示している。直接色ノードＤＣＰｎの色情報ポインタフィールドは、複数の画素の色情報（たとえばＲＧＢデータやＣＭＹＫデータ）を示している。反復色ノードＲＣＰｎの色情報ポインタフィールドは、単一の画素の色情報（たとえばＲＧＢデータやＣＭＹＫデータ）を示している。
【０１７６】
具体的には、ＲＬ復号部１２１は、直接色部分ＤＣＰである部分画像Ｌ１１（ＤＣＰ＿Ｌ１１）をＬ１１ノードに変換している。たとえばＬ１１ノードは、タイプフィールドがＤＣＰなので直接色ノードＤＣＰｎを示し、反復数／長さフィールドの値が３なので画素数３を示し、ノードポインタフィールドがＬ１２ノードを示し、そして色情報ポインタが色情報Ａ、色情報Ｂ及び色情報Ｃの３画素分の色情報を示している。タイプフィールドがＤＣＰのノードは、第１のタイプであることを示している。タイプフィールドがＲＣＰのノードは、第２のタイプであることを示している。
【０１７７】
図５６は、第３実施形態に係る画像復号処理（ステップＳ７１００）の一例を示すフローチャートである。ステップＳ７１１０では、ＲＬ復号部１２１は、パラメータ入力処理を実行する。パラメータ入力処理では、ＲＬ復号部１２１は、平均連続数インジケータとスケールＳとを入力する。平均連続数インジケータは、レンダリング処理に平均連続数を使用するか否かを示し、たとえばユーザー入力によって設定される。スケールＳは、入力画像に対する出力画像のサイズ比である。サイズ比は、１より大きい場合には拡大を示し、１未満の場合には縮小を示している。スケールＳは、水平方向のスケールＳＨと垂直方向のスケールＳＨと含んでいる。
【０１７８】
ステップＳ７１２０では、ＲＬ復号部１２１は、スケールＳが１未満、すなわち縮小であるか否かを判断する。ＲＬ復号部１２１は、縮小である場合には処理をステップＳ７１７０に進め、拡大である場合には処理をステップＳ７１３０に進める。
【０１７９】
ステップＳ７１３０では、ＲＬ復号部１２１は、画像バッファＩＢ割当試行処理を実行する。画像バッファＩＢ割当試行処理では、ＲＬ復号部１２１は、拡大された出力画像サイズを想定し、色変換後の画像データサイズを推定して画像バッファＩＢの割当を試行する。
【０１８０】
ステップＳ７１４０では、ＲＬ復号部１２１は、画像バッファＩＢの割当が可能であるか否かを判断する。ＲＬ復号部１２１は、可能であると判断した場合には処理をステップＳ７１５０に進め、可能でないと判断した場合には処理をステップＳ７１７０に進める。
【０１８１】
ステップＳ７１５０では、ＲＬ復号部１２１は、ＲＬ復号部１２１によって色変換処理を実行するか否かを表す色変換インジケータをＹｅｓ（色変換有り）に設定する。ステップＳ７１６０では、ＲＬ復号部１２１は、画像バッファＩＢを割り当てるか否かを表す画像バッファインジケータをＹｅｓ（割当有り）に設定する。一方、ステップＳ７１７０では、ＲＬ復号部１２１は、色変換インジケータをＮｏ（色変換無し）に設定する。
【０１８２】
ステップＳ７１８０では、ＲＬ復号部１２１は、入力画像サイズを想定して画像バッファＩＢ割当試行処理を実行する。画像バッファＩＢ割当試行処理では、ＲＬ復号部１２１は、入力画像サイズを想定し、色変換前の画像データサイズを推定して画像バッファＩＢの割当を試行する。
【０１８３】
ステップＳ７１９０では、ＲＬ復号部１２１は、画像バッファＩＢの割当が可能であるか否かを判断する。ＲＬ復号部１２１は、可能であると判断した場合には処理をステップＳ７１６０に進めてＲＬ復号部１２１によって画像バッファインジケータをＹｅｓに設定し、可能でないと判断した場合には処理をステップＳ７１９５に進めて画像バッファインジケータをＮｏに設定する（ステップＳ７１９５）。
【０１８４】
図５７は、第３実施形態に係る画像ノード生成処理（ステップＳ７２００）の内容を示すフローチャートである。ステップＳ７２１０では、ＲＬ復号部１２１は、インジケータ入力処理を実行する。インジケータ入力処理では、ＲＬ復号部１２１は、画像バッファ割当インジケータと、平均連続数インジケータと、色変換インジケータとを入力する。
【０１８５】
ステップＳ７２２０では、ＲＬ復号部１２１は、画像バッファ割当インジケータに基づいてバッファ割当が可能であるか否かを判断する。ＲＬ復号部１２１は、可能であると判断した場合には処理をステップＳ７２３０に進め、可能でないと判断した場合には処理をステップＳ７２４０に進める。
【０１８６】
ステップＳ７２３０では、ＲＬ復号部１２１は、復号処理のために画像バッファＩＢを割り当てる。ステップＳ７２４０では、ＲＬ復号部１２１は、復号処理のためにシステムバッファ（たとえばヒープ領域）を割り当てる。
【０１８７】
ステップＳ７２５０では、ＲＬ復号部１２１は、平均連続数インジケータに基づいて平均連続数を使用するか否かを判断する。ＲＬ復号部１２１は、使用と判断した場合には処理をステップＳ７４００に進め、不使用と判断した場合には処理をステップＳ７３００に進める。
【０１８８】
ステップＳ７３００では、ＲＬ復号部１２１は、平均連続数を使用しない第１のノード生成処理でノードを生成する。ステップＳ７４００では、ＲＬ復号部１２１は、平均連続数を使用する第２のノード生成処理でノードを生成する。ステップＳ７５００では、ＲＬ復号部１２１は、第１のノード生成処理又は第２のノード生成処理で生成されたノードを出力する。
【０１８９】
図５８は、第３実施形態に係る第１の画像ノード生成処理（ステップＳ７３００）の内容を示すフローチャートである。図５９は、第３実施形態に係る画像ノード生成処理の内容の一例を表す模式図である。図５９は、第２の画素ラインＬ２の部分画像Ｌ２１乃至Ｌ２６の画像ノードが生成される様子を示している。この例では、説明を分かりやすくするためにＲＬ符号化画像ＲＬＤ１をＲＬ符号化画像ＲＬＤ１ａに変更している。ＲＬ符号化画像ＲＬＤ１ａは、部分画像ＤＣＰ＿Ｌ２４と部分画像ＤＣＰ＿Ｌ２５の双方の色情報が一致している点でＲＬ符号化画像ＲＬＤ１と相違している（図５９（ａ）参照）。
【０１９０】
ステップＳ７３２０では、ＲＬ復号部１２１は、ＲＬ符号化画像ＲＬＤ１ａから部分画像Ｌ１１乃至Ｌ１４及び部分画像Ｌ２１乃至Ｌ１６を順に受信する。ＲＬ復号部１２１は、たとえば部分画像Ｌ２１を受信すると、部分画像Ｌ２１を処理対象の部分画像Ｐとする。
【０１９１】
ステップＳ７３４０では、ＲＬ復号部１２１は、先行画像Ｐ１を設定する。ＲＬ復号部１２１は、たとえば部分画像Ｌ２２を受信すると、部分画像Ｌ２２を処理対象の部分画像Ｐとし、部分画像Ｌ２１を先行画像Ｐ１とし（図５９（ｂ））、部分画像Ｌ２３を受信すると、部分画像Ｌ２３を処理対象の部分画像Ｐとし、部分画像Ｌ２２を先行画像Ｐ１とする（図５９（ｃ））。部分画像Ｐは、第２の特定部分とも呼ばれる。先行画像Ｐ１は、第２の特定部分の直前に先行し、第１の特定部分とも呼ばれる。
【０１９２】
図６０は、第３実施形態に係る部分画像結合処理（ステップＳ７３５０）の内容を示すフローチャートである。ステップＳ７３５１では、ＲＬ復号部１２１は、処理対象の部分画像Ｐが反復色部分ＲＣＰであるか否かを判断する。ＲＬ復号部１２１は、反復色部分ＲＣＰであると判断した場合には処理をステップＳ７３５５に進め、反復色部分ＲＣＰでないと判断した場合には処理をステップＳ７３５２に進める。
【０１９３】
ステップＳ７３５２では、ＲＬ復号部１２１は、先行画像Ｐ１が直接色部分ＤＣＰであるか否かを判断する。ＲＬ復号部１２１は、直接色部分ＤＣＰであると判断した場合には処理をステップＳ７３５４に進め、直接色部分ＤＣＰでないと判断した場合には処理をステップＳ７３５３に進める。
【０１９４】
ステップＳ７３５３では、ＲＬ復号部１２１は、部分画像Ｐに対してバッファを割り当ててＤＣＰノードを生成する。ＲＬ復号部１２１は、さらに、色変換インジケータがＹｅｓの場合には、部分画像Ｐに対して色変換処理を実行する。具体的には、たとえば部分画像Ｐが直接色部分ＤＣＰ＿Ｌ２２であり、先行画像Ｐ１が反復色部分ＲＣＰである場合には、ＲＬ復号部１２１は、直接色部分ＤＣＰ＿Ｌ２２からＤＣＰノードであるＬ２２ノードを生成し、色変換処理を実行する（図５９（ｂ）参照）。
【０１９５】
ステップＳ７３５４では、ＲＬ復号部１２１は、部分画像Ｐに対して先行画像Ｐ１のバッファを延長して部分画像Ｐの色情報を格納する。ＲＬ復号部１２１は、さらに、色変換インジケータがＹｅｓの場合には、部分画像Ｐに対して色変換処理を実行する。具体的には、たとえば部分画像Ｐが直接色部分ＤＣＰ＿Ｌ２３であり、先行画像Ｐ１が直接色部分ＤＣＰ＿Ｌ２２である場合には、ＲＬ復号部１２１は、直接色部分ＤＣＰ＿Ｌ２２から生成されたＤＣＰノードであるＬ２２ノードのバッファを延長し、直接色部分ＤＣＰ＿Ｌ２３の色情報に対して色変換処理を実行し、色変換処理が実行された色情報を格納する。（図５９（ｃ）参照）。
【０１９６】
すなわち、直接色部分ＤＣＰ＿Ｌ２３は、Ｌ２２ノードに結合され、Ｌ２２ノードの一部となる。これにより、Ｌ２２ノードのカウント／長さフィールドの値は２から４に変更される。これにより、ＲＬ復号部１２１は、ノード数を削減して処理効率を向上させることができる。
【０１９７】
図６１は、第３実施形態に係る画像ノード生成処理の内容の一例を表す模式図である。ステップＳ７３５５では、ＲＬ復号部１２１は、先行画像Ｐ１が部分画像Ｐと色情報が一致する反復色部分ＲＣＰであるか否かを判断する。ＲＬ復号部１２１は、判断が肯定的である場合には処理をステップＳ７３５７に進め、判断が否定的である場合には処理をステップＳ７３５６に進める。
【０１９８】
ステップＳ７３５６では、ＲＬ復号部１２１は、部分画像Ｐに対してバッファを割り当ててＲＣＰノードを生成する。ＲＬ復号部１２１は、さらに、色変換インジケータがＹｅｓの場合には、部分画像Ｐに対して色変換処理を実行する。具体的には、たとえば部分画像Ｐが反復色部分ＲＣＰ＿Ｌ２４であり、先行画像Ｐ１が直接色部分ＤＣＰである場合には、ＲＬ復号部１２１は、反復色部分ＲＣＰ＿Ｌ２４からＲＣＰノードであるＬ２４ノードを生成し、色変換処理を実行する（図６１（ａ）参照）。
【０１９９】
ステップＳ７３５７では、ＲＬ復号部１２１は、部分画像Ｐのカウント／長さフィールドのカウント数を先行画像Ｐ１のカウント／長さフィールドの値に加算して和とする。具体的には、たとえば部分画像Ｐが反復色部分ＲＣＰ＿Ｌ２５であり、色情報が一致する先行画像Ｐ１が反復色部分ＲＣＰ＿Ｌ２４である場合には、ＲＬ復号部１２１は、反復色部分ＲＣＰ＿Ｌ２４のカウント／長さフィールドの値を５から１０に変更する（図６１（ｂ）参照）。
【０２００】
すなわち、反復色部分ＲＣＰ＿Ｌ２５は、Ｌ２４ノードに結合され、Ｌ２４ノードの一部となる。これにより、Ｌ２４ノードのカウント／長さフィールドの値は５から１０に変更される。これにより、ＲＬ復号部１２１は、ノード数を削減して処理効率を向上させることができる。
【０２０１】
このような処理（ステップＳ７３２０乃至ステップＳ７３５０）は、画像を構成する画素ラインＬ１，Ｌ２毎に全ての部分画像に対して実行され（ステップＳ７３８０）、全ての画素ラインＬ１，Ｌ２に対して実行される（ステップＳ７３９０）。
【０２０２】
図６２は、第３実施形態に係る第２の画像ノード生成処理（ステップＳ７４００）の内容を示すフローチャートである。第２の画像ノード生成処理は、平均連続数と閾値とを使用して画素ラインをＤＣＰノードに変換し、さらに効率的にノード数を減らすことができる。平均連続数は、ＲｕｎＰｉｘｅｌｓ値／ＲｕｎＳｕｍ値（平均値）として定義される。ＲｕｎＳｕｍ値は、入力画像の現在行を再現するために使用される反復色部分ＲＣＰの数である。ＲｕｎＰｉｘｅｌｓ値は、入力画像の現在行を再現するために使用される各反復色部分ＲＣＰで反復される画素の総数である。閾値（ＲｕｎＴＨＲ値）は、入力画像の反復色部分ＲＣＰ毎に反復される画素の平均数を示す閾値（第１の閾値）である。
【０２０３】
ステップＳ７４１０では、ＲＬ復号部１２１は、初期設定処理を実行する。初期設定処理では、ＲＬ復号部１２１は、３つの値（ＲｕｎＳｕｍ値，ＲｕｎＰｉｘｅｌｓ値及びＲｕｎＴＨＲ値）を初期化する。ＲｕｎＳｕｍ値及びＲｕｎＰｉｘｅｌｓ値は、いずれもゼロに初期化される。ＲｕｎＴＨＲ値（平均連続数閾値）は、たとえば３．３３３、５、１０又は２０に所定の方法で初期設定される。この例では、平均連続数閾値は５である。
【０２０４】
平均連続数（ＲｕｎＰｉｘｅｌｓ値／ＲｕｎＳｕｍ値）は、ランレングス圧縮による圧縮の効果を示すことができる。すなわち、大きな平均連続数は、ランレングス圧縮による圧縮の効果が大きいことを示し、小さな平均連続数は、ランレングス圧縮による圧縮の効果が小さいことを示している。本願発明者は、ランレングス圧縮された画像の複合処理の負担とデータ圧縮のトレードオフを考慮し、ハードウェアリソース毎にＲｕｎＴＨＲ値を変更可能とすることによって効率的な処理を実現する技術を創作した。
【０２０５】
図６３は、ＲＬ符号化画像ＲＬＤ２の画像ノードが生成される様子を示している。図６３（ａ）は、ＲＬ符号化画像ＲＬＤ２を示している。図６３（ｂ）は、第１の画素ラインＬ１の部分画像Ｌ１１乃至Ｌ１５を示している。第１の画素ラインＬ１は、ＲＬ符号化画像ＲＬＤ２の最初の画素ラインなので、第１の画素ラインＬ１の処理の際には、ＲｕｎＳｕｍ値＝０である。
【０２０６】
ステップＳ７４２０では、ＲＬ復号部１２１は、直前に先行し、処理対象となった画素ラインの平均連続数（ＲｕｎＰｉｘｅｌｓ値／ＲｕｎＳｕｍ値）が閾値（ＲｕｎＴＨＲ値）よりも小さいか否かを判断する。ＲＬ復号部１２１は、平均連続数が閾値よりも小さいと判断した場合（又は例外処理としてＲｕｎＳｕｍ値＝０の場合）には処理をステップＳ７４３０に進め、平均連続数が閾値よりも小さくないと判断した場合には処理をステップＳ７４７０に進める。第１の画素ラインＬ１の処理では、ＲＬ復号部１２１は、処理をステップＳ７４３０に進める。
【０２０７】
ステップＳ７４３０では、ＲＬ復号部１２１は、初期化処理を実行する。初期化処理では、ＲＬ復号部１２１は、直前に処理対象となった画素ライン（先行画素ラインとも呼ばれる。）のＲｕｎＳｕｍ値及びＲｕｎＰｉｘｅｌｓ値をリセットしてゼロにする。処理対象となる現画素ラインは、処理対象画素ラインとも呼ばれる。
【０２０８】
ステップＳ７４４０では、ＲＬ復号部１２１は、画素ライン用のＤＣＰノードを生成する。この例では、第１の画素ラインＬ１の全体がＤＣＰノードＬ１１に変換される。ＤＣＰノードＬ１１は、第１の画素ラインＬ１の全画素の色情報を指定する長さ２０のノードである。ステップＳ７４５０では、ＲＬ復号部１２１は、第１の画素ラインＬ１の全画素の色情報を格納するための画像バッファＩＢを割り当てる。
【０２０９】
図６４は、第３実施形態に係る平均連続数更新処理（ステップＳ７４６０）の内容を示すフローチャートである。ステップＳ７４６１では、ＲＬ復号部１２１は、部分画像Ｌ１１を受信し、処理対象の部分画像Ｐとする。
【０２１０】
ステップＳ７４６２では、ＲＬ復号部１２１は、部分画像Ｐ（部分画像Ｌ１１）がＲＣＰであるか否かを判断する。ＲＬ復号部１２１は、部分画像ＰがＲＣＰである場合には、処理をステップＳ７４６３に進め、部分画像ＰがＲＣＰでない場合には、処理をステップＳ７４６５に進める。この例では、部分画像Ｌ１１はＤＣＰなので、ＲＬ復号部１２１は、処理をステップＳ７４６５に進める。ステップＳ７４６５では、ＲＬ復号部１２１は、色変換インジケータがＹｅｓの場合には、部分画像Ｐに対して色変換処理を実行する。
【０２１１】
ステップＳ７４６３では、ＲＬ復号部１２１は、ＲｕｎＳｕｍ値を１だけインクリメントする。ステップＳ７４６４では、ＲＬ復号部１２１は、ＲｕｎＰｉｘｅｌｓ値に対して部分画像Ｌ１１の画素幅（カウント／長さ）を加算する。これにより、ＲＬ復号部１２１は、平均連続数（ＲｕｎＰｉｘｅｌｓ値／ＲｕｎＳｕｍ値）を更新することができる。
【０２１２】
具体的には、第１の画素ラインＬ１の処理では、部分画像Ｌ１２乃至Ｌ１４の３つのＲＣＰでＲｕｎＳｕｍ値が３となるとともに、ＲｕｎＰｉｘｅｌｓ値が１４（＝４＋５＋５）となる。これにより、ＲＬ復号部１２１は、平均連続数を４．６７に更新することができる。次に、第２の画素ラインＬ２の処理では、部分画像Ｌ２２乃至Ｌ２４の３つのＲＣＰでＲｕｎＳｕｍ値が３となるとともに、ＲｕｎＰｉｘｅｌｓ値が１４（＝５＋６＋５）となる。これにより、ＲＬ復号部１２１は、平均連続数を５．３３に更新することができる。
【０２１３】
図６５は、第３の画素ラインＬ３に係る画像ノード生成処理の内容の一例を表す模式図である。第３の画素ラインＬ３の処理では、ＲＬ復号部１２１は、直前ライン（第２の画素ラインＬ２）の平均連続数（５．３３）が閾値（５）よりも大きいので、処理をステップＳ７４７０に進める（ステップＳ７４２０）。ステップＳ７４８０では、ＲＬ復号部１２１は、平均連続数更新処理を実行する。平均連続数更新処理は、ステップＳ７４６０で実行される平均連続数更新処理と同一の内容である。
【０２１４】
ステップＳ７３５０では、ＲＬ復号部１２１は、部分画像結合処理（図６０及び図６１参照）を実行する。直接色部分ＤＣＰ＿Ｌ３１に対しては、先行画像Ｐ１が存在しないので、ＲＬ復号部１２１は、直接色部分ＤＣＰ＿Ｌ３１からＤＣＰノードであるＬ３１ノードを生成し、色変換処理を実行する（ステップＳ７３５１、ステップＳ７３５２及びステップＳ７３５３）。
【０２１５】
反復色部分ＲＣＰ＿Ｌ３２に対しては、先行画像Ｐ１がＤＣＰなので、ＲＬ復号部１２１は、反復色部分ＲＣＰからＲＣＰノードであるＬ３２ノードを生成し、色変換処理を実行する（ステップＳ７３５１、ステップＳ７３５２及びステップＳ７３５４）。反復色部分ＲＣＰ＿Ｌ３３に対しては、先行画像Ｐ１がＲＣＰではあるが色情報が相違するので、ＲＬ復号部１２１は、反復色部分ＲＣＰ＿Ｌ３３からＲＣＰノードであるＬ３３ノードを生成し、色変換処理を実行する（ステップＳ７３５１、ステップＳ７３５５及びステップＳ７３５６）。
【０２１６】
反復色部分ＲＣＰ＿Ｌ３４に対しては、先行画像Ｐ１がＲＣＰで色情報が一致するので、ＲＬ復号部１２１は、ＲＣＰノードであるＬ３３ノードのカウント数／長さの値に反復色部分ＲＣＰ＿Ｌ３４のカウント数／長さの値を加算する（ステップＳ７３５１、ステップＳ７３５５及びステップＳ７３５７）。
【０２１７】
直接色部分ＤＣＰ＿Ｌ３５に対しては、先行画像Ｐ１がＲＣＰなので、ＲＬ復号部１２１は、直接色部分ＤＣＰ＿Ｌ３５からＤＣＰノードであるＬ３５ノードを生成し、色変換処理を実行する（ステップＳ７３５１、ステップＳ７３５２及びステップＳ７３５３）。
【０２１８】
図６６は、第３実施形態に係る非回転復号画像描画処理（ステップＳ７７００）の内容を示すフローチャートである。図６７は、第３実施形態に係る画像描画処理の内容を表す概略図である。ステップＳ７７１０では、画像描画部１２２は、バッファ割当処理を実行する。バッファ割当処理では、画像描画部１２２は、ワンラインバッファＯＬＢと、ページバッファＰＢとに画像バッファＩＢを割り当てる。
【０２１９】
ステップＳ７７２０では、画像描画部１２２は、ノード取得処理を実行する。ノード取得処理では、画像描画部１２２は、画像ノード生成処理（ステップＳ７２００）で生成された画像ノードを画像バッファＩＢから順に読み出す。
【０２２０】
ステップＳ７７３０では、画像描画部１２２は、取得したノードがＤＣＰノードであるか否かを判断する。ＲＬ復号部１２１は、ＤＣＰノードであると判断した場合には処理をステップＳ７７４１に進め、ＤＣＰノードでないと判断した場合には処理をステップＳ７７５１に進める。
【０２２１】
ステップＳ７７４１では、画像描画部１２２は、取得したノードのカウント／長さフィールドの値（画素数）と水平方向のスケールＳＨとの積として、同一の色情報が格納される出力画像の水平方向の画素数を算出する。ステップＳ７７４２では、画像描画部１２２は、色変換インジケータがＮｏ、すなわちＲＬ復号部１２１で色変換処理を実行しない設定である場合には、必要に応じて色変換処理を実行する。ステップＳ７７４３では、画像描画部１２２は、ワンラインバッファ格納処理を実行する。ワンラインバッファ格納処理では、画像描画部１２２は、ステップＳ７７４１で算出した画素数の画素にＲＣＰノードの色情報をワンラインバッファＯＬＢにコピーする。
【０２２２】
ステップＳ７７５１では、画像描画部１２２は、色変換インジケータがＮｏ、すなわちＲＬ復号部１２１で色変換処理を実行しない設定である場合には、必要に応じてＤＣＰノードの色変換処理を実行する。ステップＳ７７５２では、画像描画部１２２は、スケールＳＨに基づいて各画素を左側から順に水平方向にコピー又はスキップしてスケーリング（拡大又は縮小）する。
【０２２３】
ステップＳ７７５３では、スケールＳＨに基づいてスケーリングされた画素にＤＣＰノードの色情報を格納してワンラインバッファＯＬＢにコピーする。このように、ＲＬ復号部１２１は、第１の方向、すなわち画素ラインの左側から順に全てのＤＣＰノード及びＲＣＰノードを連結してワンラインバッファＯＬＢにコピーする（ステップＳ７７６０）。
【０２２４】
図６８は、第３実施形態に係る画像描画処理の内容を表す概略図である。この例では、スケールＳＨ及びスケールＳＶは、いずれも２である。第１の画素ラインＬ１は、ＤＣＰノードＬ１１に基づいて再現される。ＤＣＰノードＬ１１は、第１の画素ラインＬ１の全画素の色情報を指定する長さ２０のノードである。画像描画部１２２は、スケールＳＨに基づき、各画素を水平方向に１回コピーし、４０画素の画素ラインを形成し、ワンラインバッファＯＬＢにコピーする。
【０２２５】
第１の画素ラインＬ１はＤＣＰノードＬ１１のみで構成されているので、画像描画部１２２は、処理をステップＳ７７７０に進める（Ｓ７７６０）。ステップＳ７７７０では、画像描画部１２２は、ページバッファコピー処理を実行する。ページバッファコピー処理では、画像描画部１２２は、画像の上から順に、すなわち先ず第１の画素ラインＬ１を選択し、スケールＳＶに基づき、ワンラインバッファＯＬＢ内の画素ラインをページバッファＰＢ内で垂直方向に各２回コピーし、２つの画素ラインＲＤ１，ＲＤ２を形成する。
【０２２６】
図６９は、第３実施形態に係る画像描画処理の内容を表す概略図である。第２の画素ラインＬ２は、ＤＣＰノードＬ２１に基づいて第１の画素ラインＬ１と同様にページバッファＰＢ内に２回コピーし、２つの画素ラインＲＤ３，ＲＤ４を形成する。第３の画素ラインＬ３は、ＤＣＰノードＬ３１、ＲＣＰノードＬ３２、ＲＣＰノードＬ３３及びＤＣＰノードＬ３４に基づいて第１の画素ラインＬ１と同様にページバッファＰＢに２回コピーし、２つの画素ラインＲＤ５，ＲＤ６を形成する。画像描画部１２２は、全ての画素ラインの処理が完了すると、処理をステップＳ７９００に進める（ステップＳ７７８０）。
【０２２７】
ステップＳ７９００では、画像出力部１２４は、ページバッファＰＢ内にコピーされた画像データに対してハーフトーン処理を実行してトナードットの形成状態を表すドットデータを生成し、ドットデータに基づいて印刷媒体上に画像を形成する。
【０２２８】
図７０は、第３実施形態に係る１８０度回転高速ＲＬ描画処理の概要を示す説明図である。ステップＳ８０００では、画像描画部１２２は、１８０度回転高速ＲＬ描画処理（ＲＬ描画処理とも呼ばれる。）を実行する。１８０度回転ＲＬ描画処理は、画像を復号して第２の中間コードを生成する画像復号処理（ステップＳ８１００）と、復号された画像である復号画像を描画する復号画像描画処理（ステップＳ８７００：第２の描画処理）とが非回転高速ＲＬ描画処理（第１の描画処理）と相違する。なお、平均連続数の閾値（第２の閾値とも呼ばれる。）は、処理の構成が実質的に同一なので、第１の閾値と同一でも良い。
【０２２９】
図７１は、ＲＬ符号化画像ＲＬＤ３の画像ノードが生成される様子を示している。図７１（ａ）は、ＲＬ符号化画像ＲＬＤ３を示している。図７１（ｂ）は、第１の画素ラインＬ１用の単一のＤＣＰノードＬ１５を示している。１８０度回転高速ＲＬ描画処理は、ノード生成時の部分画像Ｐの取得順序が画素ライン毎に逆方向となっている点で非回転高速ＲＬ描画処理と相違する。
【０２３０】
１８０度回転高速ＲＬ描画処理では、ＲＬ復号部１２１は、第１の画素ラインＬ１においては、部分画像Ｌ１５、部分画像Ｌ１４、部分画像Ｌ１３、部分画像Ｌ１２及び部分画像Ｌ１１の順（非回転高速ＲＬ描画処理（第１の方向とも呼ばれる。）とは逆順）に選択して部分画像結合処理（ステップＳ７３５０）を実行する。具体的には、第１の画素ラインＬ１及び第２の画素ラインＬ２は、それぞれ図７１（ｂ）及び図７１（ｃ）に示されるように画素の順序が水平方向に左右逆となっている。
【０２３１】
図７２は、第３の画素ラインＬ３に係る画像ノード生成処理の内容の一例を表す模式図である。第３の画素ラインＬ３の処理では、ＲＬ復号部１２１は、第１に部分画像Ｌ３５を取得してＤＣＰノードＬ３５を生成する（ステップＳ７３５３）。ＤＣＰノードＬ３５は、「Ｒ」及び「Ｓ」の色情報を有する２つの画素を規定している（図７２（ａ）参照）。描画処理では、「Ｒ」及び「Ｓ」の色情報は、非回転高速ＲＬ描画処理とは逆順に読み取られることになる。すなわち、描画処理では、第３の画素ラインＬ３は、左の画素から順に「Ｓ」と「Ｒ」の色情報を有することになる。
【０２３２】
第２にＲＬ復号部１２１は、部分画像Ｌ３４を取得してＤＣＰノードＬ３５のバッファを延長し、部分画像Ｌ３４の色情報をＤＣＰノードＬ３５に格納する（ステップＳ７３５４）。描画処理では、非回転高速ＲＬ描画処理とは逆順に読み取られるので、バッファの延長方向も逆方向（右側から左側）となる。これにより、ＤＣＰノードＬ３５は、「Ｐ」、「Ｑ」、「Ｒ」及び「Ｓ」の色情報を有する４つの画素を規定するものとなる（図７２（ｂ）参照）。
【０２３３】
第３にＲＬ復号部１２１は、部分画像Ｌ３３を取得してＲＣＰノードＬ３３を生成する（ステップＳ７３５６）。ＲＣＰノードＬ３３は、「Ｅ」の色情報を有する３つの画素を規定している。第４にＲＬ復号部１２１は、部分画像Ｌ３２を取得してＲＣＰノードＬ３２のカウント／長さフィールドの値（３）を、ＲＣＰノードＬ３２のカウント／長さフィールドの値（３）に加算して和（６）とする（図７２（ｃ）参照）。
【０２３４】
第５にＲＬ復号部１２１は、部分画像Ｌ３１を取得してＤＣＰノードＬ３１を生成する（ステップＳ７３５７）。ＤＣＰノードＬ３５は、「Ａ」及び「Ｂ」の色情報を有する２つの画素を規定している。
【０２３５】
図７３は、第３実施形態に係る１８０度回転復号画像描画処理（ステップＳ７７００ａ）の内容を示すフローチャートである。図７４は、第３実施形態に係る画像描画処理の内容を表す概略図である。１８０度回転復号画像描画処理は、水平スケーリング処理（ステップＳ７７５２ａ）、ワンラインバッファ格納処理（ステップＳ７７５３ａ）及びページバッファコピー処理（ステップＳ７７７０ａ）が非回転復号画像描画処理の処理を相違する。
【０２３６】
水平スケーリング処理（ステップＳ７７５２ａ）では、画像描画部１２２は、スケールＳＨに基づいて各画素を右側から順に、すなわち非回転復号画像描画処理での水平スケーリング処理（ステップＳ７７５２）の方向（第１の方向とも呼ばれる。）とは逆順に、水平方向にコピー又はスキップしてスケーリング（拡大又は縮小）する。
【０２３７】
ワンラインバッファ格納処理（ステップＳ７７５３ａ）では、ＲＬ復号部１２１は、画素ラインの右側から順に、すなわち非回転復号画像描画処理でのワンラインバッファ格納処理（ステップＳ７７５３）とは逆順に、全てのＤＣＰノード及びＲＣＰノードを連結してワンラインバッファＯＬＢにコピーする（ステップＳ７７６０）。
【０２３８】
ページバッファコピー処理（ステップＳ７７７０ａ）では、画像描画部１２２は、画像の下から順に、すなわち非回転復号画像描画処理でのワンラインバッファ格納処理（ステップＳ７７５３）での方向（第２の方向とも呼ばれる。）とは逆順（第３の画素ラインＬ３、第２の画素ラインＬ２及び第１の画素ラインＬ１）に選択する。画像描画部１２２は、最初に第３の画素ラインＬ３を選択し、スケールＳＶ（２）に基づき、ワンラインバッファＯＬＢ内の画素ラインをページバッファＰＢ内で垂直方向に２回コピーし、２つの画素ラインＲＤ１，ＲＤ２を形成する（図７４参照）。
【０２３９】
図７５は、第３実施形態に係る画像描画処理の内容を表す概略図である。画像描画部１２２は、次に第２の画素ラインＬ２を選択し、ワンラインバッファＯＬＢ内の画素ラインをページバッファＰＢ内で垂直方向に２回コピーし、２つの画素ラインＲＤ３，ＲＤ４を形成する。画像描画部１２２は、最後に第１の画素ラインＬ１を選択し、ワンラインバッファＯＬＢ内の画素ラインをページバッファＰＢ内で垂直方向に２回コピーし、２つの画素ラインＲＤ５，ＲＤ６を形成する。
【０２４０】
このように、本実施形態に係る画像形成装置１００は、描画処理装置として機能し、非回転の復号処理と非回転の画像描画処理の処理方向を逆転（反対の方向とする）させるだけで、画像の１８０度回転処理を実行することなく１８０度回転の画像描画処理実現させることができる。
【０２４１】
本発明は、さらに他の中間コード（ＤＣＰノード及びＲＣＰノード）を導入することによって差分圧縮画像データを効率的に処理する。この新しい中間コードは、効率的にノード数を削減してハードウェア資源を効率的に使用することができる。
【０２４２】
図７６は、第３実施形態に係る９０度回転画像描画処理（ステップＳ９１００）の内容を示すフローチャートである。図７７は、第３実施形態に係る９０度回転画像描画処理の内容を表す概略図である。本構成は、複合処理の過程ではなく描画処理の過程で９０度回転させることを特徴としている。９０度回転画像描画処理は、第３の描画処理とも呼ばれる。
【０２４３】
ステップＳ９１１０では、画像描画部１２２は、マップ生成処理を実行する。マップ生成処理では、画像描画部１２２は、マップ用のバッファを割り合てた後にマップＭＰ１を生成する（図７７参照）。マップＭＰ１は、第１のマップとも呼ばれ、ランレングスＲＬ符号化ノードＦＲ１乃至ＦＲ４を画像のＸ軸方向（主走査方向とも呼ばれる。）とＹ軸方向（副走査方向とも呼ばれる。）とを入れ替えることによって９０度回転させるためのマッピングを実行するためのマップデータである。
【０２４４】
マップＭＰ１は、ランレングスＲＬ符号化ノードＦＲ１乃至ＦＲ４にそれぞれ対応する第１マッピング要素ＦＲ１ｍ乃至第４マッピング要素ＦＲ４ｍを格納している。第１マッピング要素ＦＲ１ｍのノード要素Ｎｐは、ランレングスＲＬ符号化ノードＦＲ１において最初に選択すべきノード（デルタ）のアドレスを格納している。開始要素Ｘｓは、Ｙ軸方向に延びているランレングスＲＬ符号化ノードＦＲ１の復号描画画像のＸ軸方向の開始位置を示している。最終要素Ｘｅは、Ｙ軸方向に延びているランレングスＲＬ符号化ノードＦＲ１の復号描画画像のＸ軸方向の最終位置を示している。
【０２４５】
ステップＳ９１２０では、画像描画部１２２は、マップ内要素移動処理を実行する。具体的には、画像描画部１２２は、第１マッピング要素ＦＲ１ｍを選択し、ノード要素Ｎｐに移動してノード（デルタ）としてのランレングスＲＬ符号化ノードＦＲ１を選択する。
【０２４６】
ステップＳ９１３０では、画像描画部１２２は、たとえばランレングスＲＬ符号化ノードＦＲ１から画素の色情報「Ａ」を取得し、描画用ワンラインワークバッファＲＬＢの開始要素Ｘｓから最終要素Ｘｅまでの範囲にコピーする。この例では、水平方向のスケールＳＨが２なので、色情報「Ａ」は、描画用ワンラインワークバッファＲＬＢの第１画素から第２画素までコピーされるようにマップＭＰ２が構成されている。
【０２４７】
ステップＳ９１４０では、画像描画部１２２は、ノード更新が必要であるか否かを判断する。具体的には、画像描画部１２２は、たとえばランレングスＲＬ符号化ノードＦＲ２ｂの対象画素の一つ手前（Ｙ軸方向）の画素が処理対象となっているか否かを判断する。画像描画部１２２は、デルタ更新が必要であると判断した場合には、処理をステップＳ９１５０に進め、ノード更新が必要でないと判断した場合には、処理をステップＳ９１６０に進める。
【０２４８】
ステップＳ９１５０では、画像描画部１２２は、ノード要素Ｎｐの内容を更新する。具体的には、画像描画部１２２は、ノード要素Ｎｐの内容をたとえばランレングスＲＬ符号化ノードＦＲ２ａからランレングスＲＬ符号化ノードＦＲ２ｂに更新する。
【０２４９】
このように処理（ステップＳ９１２０乃至ステップＳ９１５０）は、画像描画部１２２によって、全てのランレングスＲＬ符号化ノードに対して実行される。画像描画部１２２は、描画用ワンラインワークバッファＲＬＢの内容を垂直方向のスケールＳＶ（この例では「１」）に基づいてページバッファＰＢにコピーする（図７８参照）。
【０２５０】
図７９は、第３実施形態に係る２７０度回転画像描画処理（ステップＳ９２００）の内容を表す概略図である。２７０度回転画像描画処理は、１８０度回転ＲＬ復号処理の過程で１８０度回転された状態の画像を画像描画処理の過程で、さらに９０度回転させることで２７０度の回転を実現させている。２７０度回転画像描画処理は、第４の描画処理とも呼ばれる。
【０２５１】
画像描画部１２２は、１８０度回転ＲＬ復号処理で生成された反転デルタ用のマップＭＰ２を生成する。マップＭＰ２は、第２のマップとも呼ばれ、Ｘ軸方向（主走査方向とも呼ばれる。）及びＹ軸方向（副走査方向とも呼ばれる。）の処理がマップＭＰ１を使用する場合とは逆となるように構成されている。これにより、画像描画部１２２は、１８０度回転ＲＬ復号処理で生成されたランレングスＲＬ符号化ノードとマップＭＰ２とを使用して２７０度回転を実現することができる。
【０２５２】
Ｂ．変形例：
本発明は、上記各実施形態だけでなく、以下のような変形例でも実施することができる。
【０２５３】
変形例１：上記実施形態では、デルタ制限として処理する比率を０．２５に設定したが、メモリ領域のサイズやＣＰＵの処理能力を含むハードウェア資源を考慮して、他の値としてもよい。
【０２５４】
変形例２：上記実施形態および変形例では、デルタ制限として処理する比率を予め設定していたが、画像処理用に使用可能なメモリ領域のサイズやＣＰＵの処理能力を含むハードウェア資源に基づいて比率を自動的または半自動的に変更してもよい。
【０２５５】
変形例３：上記実施形態では、平均連続数閾値を予め設定していたが、画像処理用に使用可能なメモリ領域のサイズやＣＰＵの処理能力を含むハードウェア資源に基づいて比率を自動的または半自動的に変更してもよい。
【符号の説明】
【０２５６】
１００  画像形成装置
１１０，２１０  制御部
１２０  画像形成部
１２１  行復号部
１２２  画像描画部
１２３  画像処理部
１２４  画像出力部
１３０，２３０  操作表示部
１３１，２３１  ディスプレイ
１３２，２３２  操作処理部
１４０，２４０  記憶部
１５０，２５０  通信インターフェース部
２００  パーソナルコンピュータ
２２０  符号化部
【図１】
2020203433.tif 000003
【図２】
2020203433.tif 000004
【図３】
2020203433.tif 000005
【図４】
2020203433.tif 000006
【図５】
2020203433.tif 000007
【図６】
2020203433.tif 000008
【図７】
2020203433.tif 000009
【図８】
2020203433.tif 000010
【図９】
2020203433.tif 000011
【図１０】
2020203433.tif 000012
【図１１】
2020203433.tif 000013
【図１２】
2020203433.tif 000014
【図１３】
2020203433.tif 000015
【図１４】
2020203433.tif 000016
【図１５】
2020203433.tif 000017
【図１６】
2020203433.tif 000018
【図１７】
2020203433.tif 000019
【図１８】
2020203433.tif 000020
【図１９】
2020203433.tif 000021
【図２０】
2020203433.tif 000022
【図２１】
2020203433.tif 000023
【図２２】
2020203433.tif 000024
【図２３】
2020203433.tif 000025
【図２４】
2020203433.tif 000026
【図２５】
2020203433.tif 000027
【図２６】
2020203433.tif 000028
【図２７】
2020203433.tif 000029
【図２８】
2020203433.tif 000030
【図２９】
2020203433.tif 000031
【図３０】
2020203433.tif 000032
【図３１】
2020203433.tif 000033
【図３２】
2020203433.tif 000034
【図３３】
2020203433.tif 000035
【図３４】
2020203433.tif 000036
【図３５】
2020203433.tif 000037
【図３６】
2020203433.tif 000038
【図３７】
2020203433.tif 000039
【図３８】
2020203433.tif 000040
【図３９】
2020203433.tif 000041
【図４０】
2020203433.tif 000042
【図４１】
2020203433.tif 000043
【図４２】
2020203433.tif 000044
【図４３】
2020203433.tif 000045
【図４４】
2020203433.tif 000046
【図４５】
2020203433.tif 000047
【図４６】
2020203433.tif 000048
【図４７】
2020203433.tif 000049
【図４８】
2020203433.tif 000050
【図４９】
2020203433.tif 000051
【図５０】
2020203433.tif 000052
【図５１】
2020203433.tif 000053
【図５２】
2020203433.tif 000054
【図５３】
2020203433.tif 000055
【図５４】
2020203433.tif 000056
【図５５】
2020203433.tif 000057
【図５６】
2020203433.tif 000058
【図５７】
2020203433.tif 000059
【図５８】
2020203433.tif 000060
【図５９】
2020203433.tif 000061
【図６０】
2020203433.tif 000062
【図６１】
2020203433.tif 000063
【図６２】
2020203433.tif 000064
【図６３】
2020203433.tif 000065
【図６４】
2020203433.tif 000066
【図６５】
2020203433.tif 000067
【図６６】
2020203433.tif 000068
【図６７】
2020203433.tif 000069
【図６８】
2020203433.tif 000070
【図６９】
2020203433.tif 000071
【図７０】
2020203433.tif 000072
【図７１】
2020203433.tif 000073
【図７２】
2020203433.tif 000074
【図７３】
2020203433.tif 000075
【図７４】
2020203433.tif 000076
【図７５】
2020203433.tif 000077
【図７６】
2020203433.tif 000078
【図７７】
2020203433.tif 000079
【図７８】
2020203433.tif 000080
【図７９】
2020203433.tif 000081