(57)【要約】【課題】  多くのラインバッファが必要になり、その分メモリ容量が増大し、かつビットマップ画像データを補正するための回路規模が増大する。【解決手段】  レジスタ部５０１には、走査ラインの曲がりに応じたライン切り換え情報、このライン切り換え情報により指示された切り換え位置の前後で、複数のラインに亘ってオーバーラップして読み出す重複データ長が設定されており、アドレス生成部５０２は、画像メモリ３０４からの画像データの読み出し時、切り換え情報により上或は下ラインへの切り換えが指示されている場合は、この切り換え情報と重複データ長に従って画像メモリ３０４の読み出しアドレス及び読み出しデータ長を更新し、それに従って現ラインと上或は下ラインに対応する画像データを読み出す。【選択図】  図３
2008148291.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１ページ分の画像データを記憶する記憶手段と、
画像データの読み出し開始アドレスに基づいて前記記憶手段からライン方向に画像データを読み出すデータ読み出し手段と、
前記データ読み出し手段が読み出す画像データのラインを、第１のラインから第２のラインに切り換えるための前記ライン方向におけるライン切り換えアドレスを設定する設定手段と、
前記データ読み出し手段が読み出す前記第１のラインの画像データの前記ライン方向における読み出しアドレスと、前記データ読み出し手段が読み出す前記第２のラインの画像データの前記ライン方向における読み出しアドレスが重複するように、前記データ読み出し手段が読み出す画像データのラインを第１のラインから第２のラインに切り換える際の前記第２のラインの読み出し開始アドレスを生成する生成手段と、
前記データ読み出し手段が前記第１のラインの画像データを読み出す際の前記ライン方向における読み出しアドレスが前記ライン切り換えアドレスとなったことに応じて、前記生成手段が生成した前記第２のラインの読み出し開始アドレスから画像データを読み出すよう、前記データ読み出し手段を制御する制御手段と、
前記ライン方向における読み出しアドレスが重複する第１のラインの画像データ及び第２のラインの画像データに基づいて階調処理する階調処理手段と、
前記階調処理手段により階調処理された画像データを基に画像を形成する像形成手段とを有することを特徴とする画像形成装置。
【請求項２】
前記第２のラインは前記第１のラインに隣接することを特徴とする請求項１に記載の画像形成装置。
【請求項３】
前記設定手段は、画像データのラインを複数のセグメントに分割した場合の、各セグメントの長さに基づいて前記ライン切り換えアドレスを設定することを特徴とする請求項１又は２に記載の画像形成装置。
【請求項４】
前記複数のセグメントのそれぞれの長さが可変であることを特徴とする請求項３に記載の画像形成装置。
【請求項５】
前記読み出し開始アドレスは、読み出し対象のセグメントの先頭アドレスであることを特徴とする請求項３に記載の画像形成装置。
【請求項６】
前記データ読み出し手段は、リングバッファを介して前記記憶手段から画像データを読み出すことを特徴とする請求項１乃至５のいずれか１項に記載の画像形成装置。
【請求項７】
画像データの読み出し開始アドレスに基づいて、少なくとも複数のライン分の画像データを記憶するメモリからライン方向に画像データを読み出すデータ読み出し工程と、
前記データ読み出し工程が読み出す画像データのラインを、第１のラインから第２のラインに切り換えるための前記ライン方向におけるライン切り換えアドレスを設定する設定工程と、
前記データ読み出し工程が読み出す前記第１のラインの画像データの前記ライン方向における読み出しアドレスと、前記データ読み出し工程が読み出す前記第２のラインの画像データの前記ライン方向における読み出しアドレスが重複するように、前記データ読み出し工程が読み出す画像データのラインを前記第１のラインから前記第２のラインに切り替える際の前記第２のラインの読み出し開始アドレスを生成する生成工程と、
前記データ読み出し工程が前記第１のラインの画像データを読み出す際の前記ライン方向における読み出しアドレスが前記ライン切り換えアドレスとなったことに応じて、前記生成工程が生成した前記第２のラインの読み出し開始アドレスから画像データを読み出すよう、前記データ読み出し工程を制御する制御工程と、
前記ライン方向における読み出しアドレスが重複する第１のラインの画像データ及び第２のラインの画像データに基づいて階調処理する階調処理工程と、
前記階調処理工程で階調処理された画像データを基に画像を形成する像形成工程とを有することを特徴とする画像形成方法。
【請求項８】
前記第２のラインは前記第１のラインに隣接することを特徴とする請求項７に記載の画像形成方法。
【請求項９】
前記設定工程は、前記画像データのラインを複数のセグメントに分割した場合の、各セグメントの長さに基づいて前記ライン切り換えアドレスを設定することを特徴とする請求項７又は８に記載の画像形成方法。
【請求項１０】
前記複数のセグメントのそれぞれの長さが可変であることを特徴とする請求項９に記載の画像形成方法。
【請求項１１】
前記読み出し開始アドレスは、読み出し対象のセグメントの先頭アドレスであることを特徴とする請求項９に記載の画像形成方法。
【請求項１２】
前記データ読み出し工程は、リングバッファを介して前記メモリから画像データを読み出すことを特徴とする請求項７乃至１１のいずれか１項に記載の画像形成方法。
【請求項１３】
ページ単位で画像データを入力する入力手段と、
前記入力手段により入力された画像データを記憶する記憶手段と、
読み出し開始アドレスと読み出しデータ長に基づいて前記記憶手段に記憶された画像データをデータセグメントとして読み出す読み出し手段と、
前記読み出し手段により読み出された複数の前記データセグメントで構成される走査ラインの画像データに基づいて像担持体を走査して、前記像担持体上に前記走査ラインで画像を形成する画像形成手段と、
前記像担持体に対する前記走査ラインの湾曲を補正するための補正情報を記憶する補正情報記憶手段と、
前記補正情報記憶手段に記憶された補正情報に基づいて、複数の前記読み出し開始アドレスを生成する生成手段とを有し、
前記読み出し手段は、前記生成手段により生成された前記複数の読み出し開始アドレスを切り換えながら、前記複数のデータセグメントを前記記憶手段から読み出すことを特徴とする画像形成装置。
【請求項１４】
前記画像形成手段は、複数の前記像担持体を有し、
前記補正情報記憶手段は複数の前記像担持体の各々に対応する複数の補正情報を記憶し、
前記生成手段は、前記記憶手段に記憶された複数色の画像データの各色に対応する前記補正情報に基づいて、前記複数の読み出し開始アドレスを生成することを特徴とする請求項１３に記載の画像形成装置。
【請求項１５】
前記読み出し手段は、前記生成手段が生成した複数の前記読み出し開始アドレスと前記読み出しデータ長に基づいて、前記データセグメントを前記記憶手段から前記画像形成手段にＤＭＡ転送することを特徴とする請求項１３又は１４に記載の画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、像形成時の走査ラインの曲がりを画像データにより補正して画像を形成する画像形成装置及びその方法に関するものである。
【背景技術】
【０００２】
近年、電子写真方式のカラー画像形成装置（レーザプリンタ）における画像形成速度をより高速化するためにタンデム方式が多く採用されている。この方式では、色材（トナー）の種類数と同数の現像器及び感光ドラムを配置し、搬送ベルト或は記録シート上に順次異なる色の画像を転写してカラー画像を形成している。このようなタンデム方式のカラー画像形成装置では、それぞれ異なる色の画像が各色に対応する画像形成部で形成されるため、各色の画像間でレジストレーションずれを生じる複数の要因が存在し、それを補正するための様々な対処法が提案されている。
【０００３】
それら要因の一つとして、レーザ光の偏向走査を行う偏向走査装置のレンズの不均一性や、レンズの取り付け位置ずれ、偏向走査装置の画像形成装置本体への組み付け位置ずれ等が考えられる。このような事態が発生すると、レーザ光の走査ラインに傾きや曲がりが生じる。また、その走査ラインの傾きや曲がりの程度が各色毎に異なるため、結果としてレジストレーションずれとなって表れることになる。
【０００４】
このようなレジストレーションずれへの対処方法として、特許文献１では、偏向走査装置の組立工程で、光学センサを用いて、その偏向走査装置における走査ラインの曲がりの大きさを測定している。そして、その測定に基づいてレンズを機械的に回転させて走査ラインの曲がりを調整した後、レンズ等を接着剤で固定している。
【０００５】
また特許文献２では、偏向走査装置をカラー画像形成装置本体へ組み付ける際に光学センサを用いて走査ラインの傾きの大きさを測定し、その傾きに応じて偏向走査装置を機械的に傾かせて走査ラインの傾きを調整している。こうして調整を行った後、その偏向走査装置をカラー画像形成装置本体へ組み込んで固定している。
【０００６】
更に特許文献３には、光学センサを用いて、偏向走査装置における走査ラインの傾きと曲がりの大きさを測定し、それらを相殺するようにビットマップ画像データを補正し、その補正した画像データに基づいて画像を形成することが記載されている。この特許文献３の方法は、画像データを処理することで電気的にレジストレーションずれの補正を行っているため、機械的な調整や組立時の調整工程が不要となる。従って、前述の特許文献１及び特許文献２に記載の方法に比べて、より安価にレジストレーションずれに対処できるという利点がある。
【特許文献１】特開２００２−１１６３９４号公報
【特許文献２】特開２００３−２４１１３１号公報
【特許文献３】特開２００４−１７０７５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし上記特許文献３に記載された方法では、走査ラインの曲がり部分で、隣接する上或は下ラインのデータを階調記録するブレンド処理を行っているため、複数の走査分のビットマップデータを記憶するラインバッファが必要となる。そして、このラインバッファの数は走査ラインの曲がり幅に依存することになる。例えば、走査ラインの曲がり幅が画像データのＮライン分であると、Ｎライン分の画像データを記憶できる分のラインバッファが必要となる。ここで、カラー画像形成装置毎にばらつきがあるため、このＮの値を、このばらつきの最大値を超えるライン数に対応させなければならない。このように多くのラインバッファを確保すると、その分メモリ容量が増大し、かつビットマップ画像データを補正するための回路規模が増大して、コストアップを招くこととなる。
【０００８】
本発明の目的は、上記従来技術の問題点を解決することにある。
【０００９】
本願発明の特徴は、走査ラインの曲がり（湾曲）を補正するラインバッファを不要にして、安価で、かつ簡単な構成で、画像データにより走査ラインの曲がりを補正する画像形成装置及びその方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明の一態様に係る画像形成装置は以下のような構成を備える。即ち、
少なくとも１ページ分の画像データを記憶する記憶手段と、
画像データの読み出し開始アドレスに基づいて前記記憶手段からライン方向に画像データを読み出すデータ読み出し手段と、
前記データ読み出し手段が読み出す画像データのラインを、第１のラインから第２のラインに切り換えるための前記ライン方向におけるライン切り換えアドレスを設定する設定手段と、
前記データ読み出し手段が読み出す前記第１のラインの画像データの前記ライン方向における読み出しアドレスと、前記データ読み出し手段が読み出す前記第２のラインの画像データの前記ライン方向における読み出しアドレスが重複するように、前記データ読み出し手段が読み出す画像データのラインを第１のラインから第２のラインに切り換える際の前記第２のラインの読み出し開始アドレスを生成する生成手段と、
前記データ読み出し手段が前記第１のラインの画像データを読み出す際の前記ライン方向における読み出しアドレスが前記ライン切り換えアドレスとなったことに応じて、前記生成手段が生成した前記第２のラインの読み出し開始アドレスから画像データを読み出すよう、前記データ読み出し手段を制御する制御手段と、
前記ライン方向における読み出しアドレスが重複する第１のラインの画像データ及び第２のラインの画像データに基づいて階調処理する階調処理手段と、
前記階調処理手段により階調処理された画像データを基に画像を形成する像形成手段とを有することを特徴とする。
【００１１】
上記目的を達成するために本発明の一態様に係る画像形成方法は以下のような工程を備える。即ち、
画像データの読み出し開始アドレスに基づいて、少なくとも複数のライン分の画像データを記憶するメモリからライン方向に画像データを読み出すデータ読み出し工程と、
前記データ読み出し工程が読み出す画像データのラインを、第１のラインから第２のラインに切り換えるための前記ライン方向におけるライン切り換えアドレスを設定する設定工程と、
前記データ読み出し工程が読み出す前記第１のラインの画像データの前記ライン方向における読み出しアドレスと、前記データ読み出し工程が読み出す前記第２のラインの画像データの前記ライン方向における読み出しアドレスが重複するように、前記データ読み出し工程が読み出す画像データのラインを前記第１のラインから前記第２のラインに切り替える際の前記第２のラインの読み出し開始アドレスを生成する生成工程と、
前記データ読み出し工程が前記第１のラインの画像データを読み出す際の前記ライン方向における読み出しアドレスが前記ライン切り換えアドレスとなったことに応じて、前記生成工程が生成した前記第２のラインの読み出し開始アドレスから画像データを読み出すよう、前記データ読み出し工程を制御する制御工程と、
前記ライン方向における読み出しアドレスが重複する第１のラインの画像データ及び第２のラインの画像データに基づいて階調処理する階調処理工程と、
前記階調処理工程で階調処理された画像データを基に画像を形成する像形成工程とを有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、走査ラインの曲がり（湾曲）を補正するラインバッファを不要にして、安価で、かつ簡単な構成で、画像データにより走査ラインの曲がりを補正する画像形成装置及びその方法を提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１４】
［画像形成装置］
図１は、本発明の実施の形態に係るカラー画像形成装置（多機能装置）１００の構成を説明するブロック図である。
【００１５】
この画像形成装置１００は、例えば、複数種類の機能を実現する多機能処理装置（ＭＦＰ）で実現される。またこの画像形成装置１００は、ネットワークＩ／Ｆ１０８を介してネットワークに接続され、このネットワークを利用して、ネットワークに接続された外部機器との間で画像データや各種情報をやりとりすることができる。
【００１６】
図１において、原稿台とオートドキュメントフィーダ（ＡＤＦ）を含む画像読取部１０５は、原稿台上の束状或は１枚の原稿を光源で照射し、その原稿からの反射像をレンズで固体撮像素子（不図示）に結像する。これにより画像読取部１０５は、その固体撮像素子からラスタ状の画像信号を基に、所定密度（例えば、６００ｄｐｉ）のページ単位のラスタ画像を得ることができる。尚、本実施の形態では画像読取部１０５で読み取られる原稿として、紙文書を例に挙げて説明するが、紙以外の記録媒体（例えば、ＯＨＰシート、フィルム等の透過原稿、布等）等の印刷物を画像読取部１０５の読取対象としても良い。
【００１７】
また画像形成装置１００は、画像読取部１０５で読み取った画像信号に対応する画像を印刷部１０７で記録媒体に印刷する複写機能を有する。特に、原稿を１部複写する場合には、この画像信号をデータ処理部１０１で画像処理して印刷データを生成し、これを印刷部１０７に出力して記録媒体に印刷させる。一方、原稿を複数部複写する場合には、ＨＤ等の記憶部１０６に一旦、印刷データを記憶させた後、これを指定された部数分繰り返し印刷部１０７に出力して記録媒体上に印刷させる。尚、印刷部１０７を用いる各種印刷制御は、プリンタコントローラ１０３によって実現される。印刷部１０７は、この実施の形態では、例えばタンデム方式のレーザプリンタのプリンタエンジンを含むものとする。
【００１８】
画像形成装置１００への操作者の指示は、画像形成装置１００に装備された操作部１０４から行われ、これら一連の動作はデータ処理部１０１内の制御部（図２のＣＰＵ３０８）で制御される。また、操作部１０４における入力状態の表示及び処理中の画像データの表示等は表示部１０２に表示される。尚、この画像形成装置１００では、後述する各種処理を実行するための各種操作及び表示をユーザに提供するユーザインタフェースを、表示部１０２及び操作部１０４によって実現している。
【００１９】
次に、プリンタコントローラ１０３の詳細構成について図２を用いて説明する。
【００２０】
図２は、本発明の実施の形態に係るプリンタコントローラ１０３の詳細構成を示すブロック図である。
【００２１】
このプリンタコントローラ１０３はホストＩ／Ｆ部３０２を有する。このホストＩ／Ｆ部３０２には、データ処理部１０１から送出された印刷データや、この画像形成装置１００の動作を指示する設定を入力する入力バッファ（不図示）が設けられている。またホストＩ／Ｆ部３０２には、データ処理部１０１へ送出する信号や機器情報データを含む出力データを一時的に保持する出力バッファ（不図示）が設けられている。またホストＩ／Ｆ部３０２は、データ処理部１０１との間で送受信される信号や通信パケットの入出力部を構成するとともに、データ処理部１０１との間の通信制御を行う。
【００２２】
ホストＩ／Ｆ部３０２を介して入力された印刷データは、画像データ発生部３０３に与えられる。ここで、入力される印刷データは、例えば、ＰＤＬ（ページ記述言語）データで構成される。画像データ発生部３０３は、予め定められている解析部により、入力された印刷データの解析（例えば、ＰＤＬ解析処理）を行う。そして、その解析結果から中間言語を生成し、更に印刷部（プリンタエンジン）１０７が処理可能なビットマップデータを生成する。
【００２３】
具体的には、印刷データの解析とその解析による中間言語情報の作成を行うとともに、その中間言語情報の作成と並行してラスタライズ処理を行う。このラスタライズ処理では、印刷データに含まれる表示色ＲＧＢ（加法混色）から印刷部１０７が処理可能なＹＭＣＫ（減法混色）への変換が含まれる。またこの処理には、印刷データに含まれる文字コードから予め格納されているビットパターン、アウトラインフォント等のフォントデータへの変換等の処理が含まれる。その後、ラスタライズ処理では、ページ単位或はバンド単位でビットマップデータを作成し、このビットマップデータに対してディザパターンを用いる疑似階調処理を施し、印刷部１０７において印刷処理が可能なビットマップデータを生成する。こうして作成されたビットマップデータは画像メモリ３０４に格納される。この画像メモリ３０４に格納されているビットマップデータの読み出しは、ＤＭＡコントローラ３０５で制御されている。このＤＭＡコントローラ３０５による画像メモリ３０４からのビットマップデータの読み出しに対する制御は、ＣＰＵ３０８からの指示に基づき行なわれる。
【００２４】
画像メモリ３０４から読み出されたビットマップデータは、後述するブレンド処理を行うブレンド処理部３０６で処理され、エンジンＩ／Ｆ部３０７を介してビデオ信号として印刷部１０７に転送される。エンジンＩ／Ｆ部３０７は、印刷部１０７へ転送する印刷データ（ビデオ信号）を一時的に保持する出力バッファ（不図示）と、印刷部１０７から送出された信号を一時的に保持する入力バッファ（不図示）とが設けられている。またエンジンＩ／Ｆ部３０７は、印刷部１０７との間で送受信される信号の入出力部を構成するとともに、印刷部１０７との間の通信制御をも司っている。
【００２５】
また操作部１０４におけるユーザの操作入力によって出力されるモード設定に関する指示等の各種指示は、操作部Ｉ／Ｆ部３０１を介して入力される。この操作部Ｉ／Ｆ部３０１は、操作部１０４とＣＰＵ３０８との間のインタフェースを構成する。ＣＰＵ３０８は、操作部１０４もしくはデータ処理部１０１から指示されたモードに応じて、上述の各部に対する制御を行う。この制御はＲＯＭ３０９に格納されている制御プログラムに基づいて実行される。このＲＯＭ３０９に格納されている制御プログラムは、システムクロックによってタスクと称されるロードモジュール単位に時分割制御を行うためのＯＳを含んでいる。またこの制御プログラムには、このＯＳによって機能単位に実行制御される複数のロードモジュールが含まれる。ＣＰＵ３０８による演算処理の作業領域としては、ＲＡＭ３１０が使用される。ＣＰＵ３０８を含む各部は、システムバス３１１に接続されている。このシステムバス３１１は、アドレスバスとデータバス及び制御信号バスとを有している。
【００２６】
次に、ＤＭＡコントローラ３０５の詳細構成について図３を用いて説明する。
【００２７】
図３は、本発明の実施の形態に係るプリンタコントローラ１０３のＤＭＡコントローラ３０５の詳細構成を示すブロック図である。
【００２８】
レジスタ部５０１は、複数のレジスタ（不図示）で構成される。ＤＭＡコントローラ３０５に対するＣＰＵ３０８からの指示は、ＣＰＵ３０８がレジスタ部５０１の各レジスタに適切な値を書き込むことで行なわれる。アドレス生成部５０２は、画像メモリ３０４に記憶されるビットマップデータを読み出すためのアドレスをレジスタ部５０１の各レジスタの内容を参照して生成する。このアドレス生成部５０２は、アドレス信号（addr）と、そのアドレスから読み出すデータ長（データ量）を示すレングス信号（length）をバスインターフェース(bus interface)５０３に出力する。これらアドレス信号とレングス（読み出しデータ長）信号は、要求信号（req）と共にバスインターフェース５０３に出力される。
【００２９】
バスインターフェース５０３は、アドレス生成部５０２からのアドレス信号とレングス信号を入力すると、システムバス３１１に対して画像メモリ３０４のリードトランザクションを発行する。例えば、システムバス３１１のデータバス幅が３２ビットであれば、そのリード要求を３２ビット単位のアクセスに分解してリードトランザクションを発行する。一組のアドレス信号とレングス信号に対するリード処理が完了すると、バスインターフェース５０３は応答信号（ack）により読み出し完了をアドレス生成部５０２に伝える。この応答信号を受けたアドレス生成部５０２は、次のアドレス信号とレングス信号の組をバスインターフェース５０３に出力して、画像メモリ３０４に対する次のリード要求を発行できる。
【００３０】
画像のライン方向に沿って、画像メモリ３０４から読み出されたビットマップデータは、一時的にＦＩＦＯ（First In First Outバッファ）５０４に記憶される。ＤＭＡコントローラ３０５は、ブレンド処理部３０６が一時的にデータを入力できない期間が発生しても、画像メモリ３０４からビットマップデータを読み出してＦＩＦＯ５０４に記憶する。このことにより、ブレンド処理部３０６がデータ入力可能となった時に、即座にＦＩＦＯ５０４からブレンド処理部３０６にビットマップデータ（data）を供給することができる。
【００３１】
バスインターフェース５０３は、ＦＩＦＯ５０４から出力される、ＦＩＦＯ５０４にデータを書き込むべき空きがないことを示すＦＩＦＯフル信号（full）を監視している。こうしてフル信号が出力されてＦＩＦＯ５０４がフル状態を示している場合には、リードトランザクションを発行せずに、フル状態が解除されるのを待つ。
【００３２】
ブレンド処理部インターフェース５０５は、このＦＩＦＯ５０４に蓄えられたビットマップデータをブレンド処理部３０６に送る。ブレンド処理部インターフェース５０５はＦＩＦＯ５０４から出力される、ＦＩＦＯ５０４に蓄えられたデータがないことを示すＦＩＦＯエンプティ信号（empty）を監視する。ブレンド処理部インターフェース５０５は、ＦＩＦＯ５０４がエンプティ状態でなく、かつブレンド処理部３０６がデータを入力できる状態であれば、ＦＩＦＯ５０４からビットマップデータをリードし、そのデータをブレンド処理部３０６へ送り出す。
【００３３】
［レジストレーションずれ補正の原理］
次に、レジストレーションずれ補正の原理について、図４と図５とを用いて説明する。
【００３４】
図４（Ａ）、図４（Ｂ）及び図５（Ａ）〜図５（Ｄ）は、本発明の実施の形態に係るレジストレーションずれ補正の原理を説明するための図である。
【００３５】
図４（Ａ）は、レジストレーションずれの原因となる、走査ラインの曲がりを説明する図である。図において、横軸は走査ラインの主走査方向を示し、縦軸は副走査方向を示している。図４（Ｂ）は、この走査ラインの曲がりに合わせて、各走査ラインに対応するラインデータに切り換えながら、ビットマップデータを印刷部１０７へ送り出す様子を示している。ここで、ｎラインが、本来印刷すべき印刷対象の走査ラインを示している。図４（Ｂ）において、黒い部分がｎラインの印刷時に印刷部１０７へ送り出されるデータを示している。このように図４（Ａ）に示す走査ラインの曲がりに合わせて、印刷部１０７に出力するデータのラインを切り換えることにより、露光走査に曲がりが生じても、感光ドラム等の像担持体上に生成された静電潜像は歪みのないものにできる。
【００３６】
図５（Ａ）は、このようなレジストレーションずれの原因となる、曲がりが生じた走査ラインの一部を拡大して示す図である。図５（Ｂ）は、この走査ラインの曲がりに合わせてデータを切り換えながら、ビットマップデータを印刷部１０７へ送り出す様子を示す図である。但し、図５（Ａ）のように、単に、ビットマップデータのラインデータを切り換えて印刷部１０７に送ると、その切り換え部分に不自然な段差を生じてしまう。従って図５（Ｃ）に示すように、その切り換え部分のドットサイズを変更し、且つ２つのラインが重複するようにドットを形成することにより、この不自然な段差を解消して画像の平滑化を図っている。こうしてラインの切り換え部分の前後で隣接する第１のラインと第２のラインからなる２ライン分のデータに階調を付けて（ブレンド処理）段差を目立たなくしている。尚、このようなブレンド処理は、ブレンド処理部３０６で実施される。
【００３７】
本実施の形態に係るＤＭＡコントローラ３０５は、ラインバッファを不要にするために走査ラインの曲がりに合わせて、ラインデータを切り換えるようにアドレスを生成する。更に、このブレンド処理が必要となるのはラインを切り換えるタイミングの前後のみであることに着目し、図５（Ｄ）の黒い部分５１０に加えて、斜線の部分５１１のビットマップデータをも印刷部１０７へ送り出す。これにより、ブレンド処理部３０６でブレンド処理が可能となり、ラインバッファも不要となる。
【００３８】
［実施の形態１］
次に本発明の実施の形態１に係るＤＭＡコントローラ３０５の動作について図６と図７Ａ及び図７Ｂを参照して説明する。
【００３９】
図６は、本発明の実施の形態１に係るＤＭＡコントローラ３０５に走査ラインの曲がりを指定する方法を説明するための図である。尚、ここではビットマップデータの１ラインを等分に分割して考える。以下、この分割された一つをセグメントと呼ぶことにする。尚以下の説明において、セグメント長、隣接セグメント間でのライン切り換えの有無、ライン切り換え前後でのブレンド処理のための読み出しデータ長、各種アドレス、データ長等の英字で示す名称は、レジスタ部５０１に含まれるレジスタ名を示している。前述のようにＣＰＵ３０８は、これらレジスタ部５０１の各レジスタに値を書き込むことによりＤＭＡコントローラ３０５に対して動作を指示する。尚、ここでセグメント長、ライン切り換えの有無、ブレンド処理のための情報は、湾曲を補正するための補正情報であり、レジスタ部５０１はその補正情報を記憶する補正情報記憶部に相当する。
【００４０】
各セグメントの長さを設定するレジスタRegSegLenを、ＤＭＡコントローラ３０５のレジスタ部５０１に設ける。また走査ラインの曲がりに合わせて、隣り合うセグメントでラインの切り換えを指示するレジスタ群RegUpDown[i]を必要な数だけ設ける。尚、変数ｉは、出現するセグメントの境界が何番目であるかを示す。またここではラインを切り換えない、又は上又は下のラインに切り換えるのいずれかを指定するため、各レジスタの取り得る値は３通りになる。ここでは、ラインを切り換えない場合は「００」か「０１」を、上のラインに切り替える場合は「１０」を、下のラインに切り替える場合は「１１」を割り当てている。また隣接するセグメント間でラインを切り換える場合に、その切り換え部の前後のデータを読み出す長さ（ブレンド長）を指定するレジスタをＤＭＡコントローラ３０５内のレジスタ部５０１に設ける。このレジスタは、RegOverwrapLenで定義される。尚、第１実施の形態では、１走査ラインにおいて、セグメント長RegSegLenと、ブレンド長RegOverwrapLenの値は固定としている。
【００４１】
ＤＭＡコントローラ３０５のレジスタ部５０１には、更に、画像メモリ３０４に記憶されるビットマップデータの先頭アドレスを指定するレジスタRegStartAddr、ビットマップデータのライン長を示すレジスタRegLineLenを含む。更に、ビットマップデータの隣り合うラインのアドレスのオフセット値RegLineOffset、ブレンド処理部３０６へ送るべきライン数を指定するRegBeamsを含む。更にＤＭＡコントローラ３０５のレジスタ部５０１には、上記各レジスタ加えて、ＣＰＵ３０８が上記のレジスタの設定を完了した後に、ＤＭＡ動作を開始させるための起動レジスタ（不図示）を含んでいる。
【００４２】
図７Ａ及び図７Ｂは、本発明の第１実施の形態に係るＤＭＡコントローラ３０５のアドレス生成部５０２の動作を示すフローチャートである。尚、以下の説明では、説明を簡単にするために各データなどの名称を各対応するレジスタ名で代用する。
【００４３】
まずステップＳ１００で、ＣＰＵ３０８の指示によりＤＭＡ動作が開始されると、各走査ラインの開始アドレスline_start_addrを、ビットマップデータの先頭アドレスRegStartAddrの値で初期化する。またブレンド処理部３０６へ送ったライン数をカウントするline_cntを「０」で初期化する。次にステップＳ１０１に進み、各走査ライン毎の初期化を行う。ここではセグメントの開始アドレスseg_addrを、走査ラインの開始アドレスline_start_addrの値で初期化する。また、この走査ラインで処理したデータ量をカウントするline_data_cntを「０」で初期化する。またセグメントの前側の境界でラインの切り換えの有無を示すup_down_frontを「００」で初期化する。これは、このラインの先頭のセグメントの前方境界ではラインの切り換えがないことを示す。また、参照すべきレジスタ群RegUpDown[i]の変数ｉ（index）を「０」で初期化する。
【００４４】
次にステップＳ１０２で、セグメント毎の初期化を行う。ここではバスインターフェース５０３へ要求すべきアドレスとレングス信号（addrとlength）をそれぞれ、セグメントの開始アドレスseg_addrと、セグメント長RegSegLenの値で初期化する。これらの信号は以降のステップで変更されることがある。またセグメントの後方境界でのラインの切り換えの有無を示すup_down_backに、レジスタRegUpDown［i］の値をセットする。これにより、このセグメントの後方境界でのラインの切り換えの有無がセットされる。
【００４５】
次にステップＳ１０３に進み、現セグメントの前方境界でラインの切り換えがあるかをup_down_frontの値に基づき判断する。このセグメントの前方境界でラインを切り換えがあるときはステップＳ１０４に進み、アドレスaddrからブレンド長RegOverwrapLenの値を減じる。また読み出すデータ長lengthに、このブレンド長RegOverwrapLenの値を加える。これにより切り換えるラインの読み出し開始アドレスがRegOverwrapLenの値分前方向（図６の左方向）に移動して、その部分のデータが余分に読み出される。こうしてセグメントの前方境界でのラインデータのオーバーラップ（２ラインを重複して読み出す重複データ長）を実現する。尚、ステップＳ１０３で、セグメントの前方境界でラインの切り換えが無いとき、或はステップＳ１０４の次はステップＳ１０５に進む。
【００４６】
次にステップＳ１０５で、セグメントの後方境界でラインの切り換えがあるかを、ステップＳ１０２でセットしたup_down_backの値に基づき判断する。セグメントの後方境界でラインの切り換えがない場合にはステップＳ１０７に進む。ラインの切り換えがあればステップＳ１０６に進み、データ長lengthにブレンド長RegOverwrapLenの値を加える。これにより、セグメントの後方境界で、現ラインのデータが、このブレンド長RegOverwrapLenの分余分に読み出される（例えば図６のn lineの斜線部）。こうして後方境界でのラインデータのオーバーラップを実現してステップＳ１０７に進む。
【００４７】
次にステップＳ１０７では、アドレスaddrとデータ長lengthをバスインターフェース５０３へ出力して、画像メモリ３０４からのビットマップデータの読み出し要求を行う。次にステップＳ１０８に進み、セグメントの開始アドレスseg_addrを、次のセグメントの開始アドレスに更新するために、現在のセグメントの後方境界でのラインの切り換えup_down_backの値を判定する。このセグメントの後方境界でラインの切り換えがない場合はステップＳ１１１へ進む。一方、上のラインに切り換わる場合はステップＳ１０９に進み、下のラインに切り換わる場合はステップＳ１１０へ分岐する。ステップＳ１０９では、セグメントの開始アドレスseg_addrを上のラインのアドレスに切り替える。即ち、セグメント開始アドレスseg_addrから、ビットマップデータの隣り合うラインのアドレスのオフセット値RegLineOffsetを減じる。尚、ここで次のセグメントの開始アドレスはこの値に、更にセグメント長RegSegLenを加える必要があるが、それはステップＳ１１１で行われる。またステップＳ１１０では、セグメントの開始アドレスseg_addrを下のラインのアドレスに切り替える。ここでは、開始アドレスseg_addrに、上述のオフセット値RegLineOffsetを加える。尚、ここでも次のセグメントの開始アドレスは、この値に更に、セグメント長RegSegLenを加える必要があるが、それはステップＳ１１１で行われる。こうしてステップＳ１１１では、次のセグメントの処理のために各値を更新する。ここではセグメントの開始アドレスseg_addrに、レジスタ長RegSegLenの値を加える。また現ライン中の処理したデータ量をカウントするline_data_cntにも、このレジスタ長RegSegLenを加える。現在のセグメントの後方境界でのライン切り換えの有無up_down_backは、次のセグメントの前方境界の切り換えの有無を示すデータとなる。従って、次のセグメントのup_down_frontに、現セグメントのup_down_backの値をセットする。更に参照するレジスタRegUpDown[i]を１つ先に進めるために変数ｉを＋１する。
【００４８】
次にステップＳ１１２に進み、ライン長RegLineLenから、処理済みデータ量line_data_cntの値を減じ、その値をセグメント長RegSegLenと比較する。ここでその残りデータ長が、セグメント長RegSegLenより大きければ、この走査ラインにおいて処理すべきセグメントが２個以上残っているのでステップＳ１０２に戻り、前述のセグメントの処理を繰り返す。そうでなければライン中の最後のセグメントを処理するために次のステップＳ１１３（図７Ｂ）へ進む。ステップＳ１１３では、現ラインの最後のセグメントの処理を開始する。まずバスインターフェース５０３へ要求すべきアドレスとデータ長（addrとlength）をそれぞれ出力する。ここでは、アドレスaddrをセグメントの開始アドレスseg_addrとし、データ長をライン長RegLineLenの値から処理済みのデータ量line_data_cntの値を減じた値にする。
【００４９】
次にステップＳ１１４に進み、このセグメントの前方境界でラインの切り換えがあるかをup_down_frontの値に基づき判断する。ここでラインの切り換えがない場合はステップＳ１１６に進むが、ラインの切り換えがある場合はステップＳ１１５に進む。尚、１走査ライン中の最後のセグメントでは、そのセグメントの前方境界でのラインの切り換えの有無up_down_frontのみを参照する。ステップＳ１１５では、セグメントの前方境界でラインを切り換えるために、アドレスaddrから、前述のブレンド長RegOverwrapLenを減じる。またデータ長lengthに、このブレンド長RegOverwrapLenを加える。これにより、セグメントの前方境界でのラインデータのオーバーラップを実現する。次にステップＳ１１６に進み、ステップＳ１１５で更新したアドレスaddrとデータ長lengthとにより、バスインターフェース５０３に対して画像メモリ３０４からのデータの読み出し要求を発行する。そしてステップＳ１１７で、次のラインデータを処理するために各データを更新する。ここでは各ラインの開始アドレスline_start_addrに、ビットマップデータの隣り合うラインのアドレスのオフセット値RegLineOffsetを加えて、次のラインの先頭アドレスを設定する。また、ブレンド処理部３０６へ出力したライン数line_cntを＋１する。次にステップＳ１１８で、出力したライン数line_cntと、ブレンド処理部３０６へ送るべきライン数RegBeamsとを比較する。ここで出力済みのライン数line_cntが、送るべき全ライン数RegBeams未満であれば、まだ処理すべきラインデータが残っているのでステップＳ１０１に戻り、前述のラインの処理を繰り返す。そうでないときは、１ページのデータの処理が終了したのでＤＭＡ動作を終了する。尚、ＤＭＡコントローラ３０５はＤＭＡ動作を終了した時に割り込み信号（不図示）によりＣＰＵ３０８に伝える。ＣＰＵ３０８はこの割り込みを検出することで、ＤＭＡ転送を終了したことを検知する。
【００５０】
以上のように、ＤＭＡコントローラ３０５は、複数のデータセグメントで構成される１走査ラインの画像データを読み出して画像メモリ３０４から印刷部１０７へ転送する。そして、印刷部１０７は、感光体ドラム（像担持体）を１走査ラインの画像データに基づいてレーザ光にて走査して、感光ドラム上に１走査ラインの静電潜像を形成する。ここで、静電潜像とは、所定の電位に帯電された感光体ドラムをレーザ光を照射（走査）することで、感光ドラム上に生成される画像データに応じた電位差のある像をいう。そして、印刷部１０７は、静電潜像に対してトナーを付着させることで、電位差に応じたトナー像を感光体ドラム上に形成し、更に、そのトナー像を用紙上に転写することでシート上に画像を形成する。
【００５１】
尚、上記説明では、本実施の形態に係るデータ転送の制御をＤＭＡコントローラ３０５で実現した例で説明したが、ＣＰＵ３０８の処理時間に余裕があればＣＰＵ３０８により制御しても良い。また或は、ＣＰＵ３０８以外の別のＣＰＵや、ＤＳＰ（デジタルシグナルプロセッサ）等の制御の下に実現されても良い。更に、カラー画像形成装置において、複数色（ＣＹＭＫ）の各色に対応する像形成ユニットを有する場合には、各色の像形成ユニット毎に本実施の形態に係るデータ転送方式を実施することで、各色毎のレジストレーションずれによる色ずれを防ぐことができる。これは以下に説明する各実施の形態においても同様である。
【００５２】
以上説明したように実施の形態１によれば、各色毎に走査ラインの曲がりが発生している場合でも、各色毎のレジストレーションずれ量に応じた数のラインバッファを設けなくても、それらレジストレーションずれによる色ずれを防ぐことができる。また各ラインの切り換え時に、そのライン切り換えによる段差を目立たなくするためのブレンド処理を、ラインバッファを設けずに実現することができる。
【００５３】
［実施の形態２］
次に本発明の実施の形態２に係るＤＭＡコントローラ３０５の動作について図８と図９を用いて説明する。尚、この実施の形態２に係る画像形成装置のハードウェア構成は、前述の実施の形態１と同様であるため、その説明を省略する。この実施の形態２では、１走査ラインにおいて、セグメント長RegSegLenと、ブレンド長RegOverwrapLenの値は可変とする点が前述の実施の形態１と異なっている。
【００５４】
図８は、本発明の実施の形態２に係るＤＭＡコントローラ３０５に走査ラインの曲がりを指定する方法を説明するための図である。
【００５５】
ここではセグメント長は可変であるため、走査ラインの曲がりに合わせて、ラインの切り換え位置までの長さ（セグメント長）を指定するレジスタ群RegSegLen[i]を設ける。更に、各セグメントの境界ごとに、上或は下のラインに切り換えるかを指定するレジスタ群RegUpDown[i]を必要な数だけＤＭＡコントローラ３０５のレジスタ部５０１に設ける。ここでレジスタ群RegUpDown[i]のそれぞれの取り得る値は上下２通りであるため、上のラインに切り替える場合は「０」を、下のラインに切り替える場合は「１」をそれぞれ割り当てている。またラインの切り換え部の前後のデータを読み出す長さ（ブレンド長）RegOverwrapLenを、ＤＭＡコントローラ３０５のレジスタ部５０１にセットする。このＤＭＡコントローラ３０５のレジスタ部５０１は更に、画像メモリ３０４に記憶されるビットマップデータの先頭アドレスRegStartAddr、ビットマップデータの各走査ラインの長さRegLineLenがセットされる。またレジスタ部５０１には、ビットマップデータの隣り合うラインデータ同士のアドレスのオフセット値RegLineOffset、ブレンド処理部３０６へ送るべきライン数RegBeamsがセットされる。更に、ＤＭＡコントローラ３０５のレジスタ部５０１は、ＣＰＵ３０８が上記レジスタの値の設定を完了した後に、ＤＭＡ動作を開始させるための起動レジスタ（不図示）も含んでいる。
【００５６】
図９Ａ，図９Ｂは、本発明の実施の形態２に係るＤＭＡコントローラ３０５のアドレス生成部５０２の動作を示すフローチャートである。
【００５７】
まずステップＳ２００で、ＣＰＵ３０８の指示によりＤＭＡ動作が開始されると、走査ラインの開始アドレスline_start_addrを、画像メモリ３０４のビットマップデータの先頭アドレスRegStartAddrの値で初期化する。また、ブレンド処理部３０６へ送ったライン数をカウントするline_cntを「０」で初期化する。次にステップＳ２０１で、ライン毎の初期化を行う。セグメントの開始アドレスseg_addrを、走査ラインの開始アドレスline_start_addrの値で初期化する。ライン中の処理済みのデータ量line_data_cntを「０」で初期化する。また、参照すべきレジスタ群RegSegLen[i]とRegUpDown[i]のインデックスを示す変数ｉを「０」で初期化する。
【００５８】
次にステップＳ２０２に進み、セグメント毎の初期化を行う。バスインターフェース５０３へ要求すべきアドレスaddrとデータ長lengthをそれぞれ、セグメントの開始アドレスseg_addrと、セグメント長RegSegLen［i］の値で初期化する。これらの信号は以降のステップで変更される。またセグメントの後方境界でのライン切り換えを示すup_down_backに、レジスタRegUpDown［i］の値をセットする。これにより、このセグメントの後方境界でのラインの切り換えの有無がセットされる。
【００５９】
次にステップＳ２０３で、変数ｉの値が「０」か否か、即ち、そのラインの最初のセグメントかどうかを判断する。変数ｉの値が「０」の場合はステップＳ２０４へ進み、そうでなければステップＳ２０５へ進む。ステップＳ２０４では、先頭のセグメントであるため、そのセグメントの後方境界でのみオーバーラップしてデータを読み出すため、読み出しデータ長lengthに、前述のブレンド長RegOverwrapLenを加える。一方、変数ｉの値が「０」でない場合はステップＳ２０５に進む。この場合はセグメントの前後の境界でブレンド処理があるため、アドレスaddrから前記ブレンド長RegOverwrapLenを減じ、読み出しデータ長lengthに、ブレンド長RegOverwrapLenの２倍を加える。こうしてステップＳ２０４或はＳ２０５を実行するとステップＳ２０６に進む。ステップＳ２０６では、アドレスaddrと、読み出しデータ長lengthとにより、バスインターフェース５０３に対して画像メモリ３０４からのデータ読み出し要求を発行する。
【００６０】
次にステップＳ２０７に進み、セグメントの開始アドレスseg_addrを、次のセグメントの開始アドレスに更新するために、現セグメントの後方境界でのライン切り換えの有無up_down_backの値を判定する。現セグメントの後方境界で、上のラインに切り換える場合はステップＳ２０８に進み、下のラインに切り換える場合はステップＳ２０９へ分岐する。ステップＳ２０８では、次にセグメントの開始アドレスを上のラインに切り替えるために開始アドレスseg_addrから上記オフセット値RegLineOffsetを減じる。次のセグメントの開始アドレスは、この値に更に、現セグメント長RegSegLen［i］を加えて求める必要があるが、それはステップＳ２１０で行われる。またステップＳ２０９では、セグメントの開始アドレスを下のラインに切り替えるために、開始アドレスseg_addrに上記オフセットRegLineOffsetの値を加える。次のセグメントの開始アドレスは、この値に、更に、現セグメント長RegSegLen［i］を加えて求める必要があるが、それはステップＳ２１０で行われる。
【００６１】
ステップＳ２０８，Ｓ２０９の実行後、或はステップＳ２０７でラインの切り換えがない場合はステップＳ２１０に進み、次のセグメントの処理のために各データを更新する。即ち、セグメントの開始アドレスseg_addrに、現セグメント長RegSegLen［i］の値を加える。また現ライン中で処理したデータ量line_data_cntにも、このセグメント長RegSegLen［i］の値を加える。更に参照する現セグメント長RegSegLen[i]と、各セグメントの境界でのライン切り換えを示すRegUpDown[i]を１つ先に進めるために、変数ｉを＋１する。次にステップＳ２１１に進み、走査ラインの長さRegLineLenの値から処理済みのデータ量line_data_cntの値を減じた差分値を、次のセグメント長RegSegLen［i］の値と比較する。その差分値が、次のセグメント長RegSegLen［i］の値より大きければ、この走査ラインに処理すべきセグメントが２個以上残っているのでステップＳ２０２に戻り前述の処理を繰り返す。現走査ラインで１つのセグメントだけが残っていれば現ラインの最後のセグメントの処理を行うために次のステップＳ２１２（図９Ｂ）に進む。
【００６２】
ステップＳ２１２では、現ライン中の最後のセグメントの処理を開始する。画像メモリ３０４の読み出し開始アドレスaddrに、そのセグメントの開始アドレスseg_addrから前述のブレンド長RegOverwrapLenを減じた値をセットする。また各走査ラインの長さRegLineLenから処理済みのデータ量line_data_cntの値を差し引き、この差分値に、ブレンド長RegOverwrapLenを加えた値を、データ長lengthとしてセットする。次にステップＳ２１３に進み、ステップＳ２１２で求めたアドレスaddrと読み出しデータ長lengthとに基づいて、バスインターフェース５０３に対して画像メモリ３０４からのデータ読み出し要求を発行する。これにより、そのラインの最後のセグメントに対応する画像データが読み出される。次にステップＳ２１４に進み、次のラインの処理のために各データを更新する。ここでは次のラインの開始アドレスline_start_addrに、上記ライン間のオフセットアドレスRegLineOffsetの値を加えて、次の走査ラインの先頭アドレスを求める。また、ブレンド処理部３０６へ送ったライン数line_cntを＋１する。次にステップＳ２１５で、ブレンド処理部３０６へ送ったライン数line_cntと、ブレンド処理部３０６へ送るべきライン数RegBeamsの値を比較する。ここで処理済みライン数line_cntの値が、RegBeamsの値未満であれば、１ページの処理が終了していないためステップＳ２０１に戻ってラインの処理を繰り返す。そうでなければ、現ページの処理が終了したと判断してＤＭＡ動作を終了する。ＤＭＡコントローラ３０５はＤＭＡ動作を終了した時に、割り込み信号（不図示）をＣＰＵ３０８に送る。これによりＣＰＵ３０８は、この割り込み信号により画像メモリ３０４からのＤＭＡによるデータ読み出し処理が終了したことを検知する。
【００６３】
以上説明したように実施の形態２によれば、前述の実施の形態１の効果に加えて、走査線の曲がりに応じて各セグメントの長さを可変にして、各色毎のレジストレーションずれによる色ずれを防ぐことができる。またこの実施の形態２によれば、走査線の曲がりに応じて各セグメントの長さを変えるため、より精度良くレジストレーションずれを補正することができる。
【００６４】
［実施の形態３］
本発明の実施の形態３に係るＤＭＡコントローラ３０５の動作について、図１０、図１１及び図１２Ａ、図１２Ｂを用いて説明する。尚、この実施の形態３に係る画像形成装置のハードウェア構成は、ＤＭＡコントローラ３０５以外は前述の実施の形態１と同様であるため、その説明を省略する。
【００６５】
図１０（Ａ）は、本発明の実施の形態３に係るＤＭＡコントローラ３０５に対して走査ラインの曲がりを指定する方法を説明するための図である。ここでは前述の実施の形態１と同様に、ビットマップデータの１ラインを等分に分割する場合を考える。各セグメントの長さRegSegLenを、ＤＭＡコントローラ３０５のレジスタ部５０１に設定する。ここでは実施の形態１と異なり、走査ラインの曲がりに合わせて、隣り合うセグメント間でラインを切り換えないか、上又は下のラインに切り替えるかを指定する情報UpDown[i]を用いる。ここで変数ｉは、セグメントの境界の順番を示す。
【００６６】
図１０（Ｂ）は、セグメントの各境界に対応付けて、この情報UpDown[i]を、画像メモリ３０４或はＲＡＭ３１０にテーブルとして格納した状態を示している。
【００６７】
このテーブルの先頭アドレスRegTableStartAddrを、ＤＭＡコントローラ３０５のレジスタ部５０１にセットする。また、そして隣り合うセグメント間でラインを切り換える場合に、切り換え部の境界の前後で読み出すデータ長（ブレンド長）RegOverwrapLenを、ＤＭＡコントローラ３０５のレジスタ部５０１にセットする。このＤＭＡコントローラ３０５のレジスタ部５０１には、更に、画像メモリ３０４に記憶されるビットマップデータの先頭アドレスRegStartAddr、ビットマップデータのライン長RegLineLenがセットされる。更に、ビットマップデータの隣り合うラインのアドレスのオフセット値RegLineOffset、ブレンド処理部３０６へ送るべきライン数RegBeamsを含んでいる。更にＤＭＡコントローラ３０５のレジスタ部５０１には、ＣＰＵ３０８が上記のレジスタ値の設定を完了した後に、ＤＭＡ動作を開始させるための起動レジスタ（不図示）を含んでいる。
【００６８】
図１１は、本発明の実施の形態３に係るＤＭＡコントローラ３０５の構成を示すブロック図で、前述の図３と共通する部分は同じ記号で示している。
【００６９】
レジスタ部５０１は、複数のレジスタ（不図示）で構成される。ＤＭＡコントローラ３０５に対するＣＰＵ３０８からの指示はレジスタ部５０１の各レジスタに適切な値を書き込むことで行なわれる。アドレス生成部５０２'は、画像メモリ３０４に記憶されるビットマップデータを読み出すためのアドレスを、レジスタ部５０１の各レジスタの内容を参照して生成する。また画像メモリ３０４のライン切り替え情報のテーブルをリードするためのアドレスも生成する。
【００７０】
アドレス生成部５０２'は、アドレスaddrと、そのアドレスから読み出すデータ量を示す読み出しデータ長lengthにより、バスインターフェース５０３へ画像メモリ３０４からのデータ読み出しを要求する。画像メモリ３０４からビットマップデータを読み出す場合は、要求信号reqを用いて要求し、テーブルのデータを読み出す場合には要求信号req_tableを用いて要求する。
【００７１】
バスインターフェース５０３'は、アドレス生成部５０２'からのアドレスとデータ長を受け、システムバス３１１に対して画像メモリ３０４のリードトランザクションを発行する。例えば、システムバス３１１のデータバス幅が３２ビットであれば、アドレスとデータ長から複数の３２ビットアクセスに分解し、リードトランザクションを発行する。バスインターフェース５０３'は、１組のアドレスとデータ長に対する処理が完了すれば、応答信号ackを用いて、処理完了をアドレス生成部５０２'に伝える。この応答信号ackを受けたアドレス生成部５０２'は、次のアドレスとデータ長をバスインターフェース５０３'に要求できる。バスインターフェース５０３'は、画像メモリ３０４から読み出したデータを受け取り、それがビットマップデータであればＦＩＦＯ５０４に書き込む。一方、テーブルのデータであれば、その読み出したテーブルデータをアドレス生成部５０２'へ送る。
【００７２】
こうして読み出されたビットマップデータは一時的にＦＩＦＯ５０４に記憶される。ＤＭＡコントローラ３０５は、ブレンド処理部３０６が一時的にデータを入力できない期間が発生しても、ビットマップデータをＦＩＦＯ５０４に記憶できる。これにより、ブレンド処理部３０６がデータ入力可能となった時に、即座にＦＩＦＯ５０４からブレンド処理部３０６にビットマップデータを供給することができる。
【００７３】
バスインターフェース５０３'は、ＦＩＦＯ５０４から出力される、ＦＩＦＯ５０４にデータを書き込むべき空きがないことを示すＦＩＦＯフル信号fullを監視している。そして、ＦＩＦＯ５０４がフル状態を示している場合は、リードトランザクションを発行せずに、フル状態が解除されるのを待つ。またブレンド処理部インターフェース５０５は、ＦＩＦＯ５０４に蓄えられたビットマップデータをブレンド処理部３０６に送る。ブレンド処理部インターフェース５０５は、ＦＩＦＯ５０４から出力される、ＦＩＦＯ５０４にデータが無いないことを示すＦＩＦＯエンプティ信号emptyを監視する。そしてブレンド処理部インターフェース５０５は、ＦＩＦＯ５０４がエンプティ状態でなく、かつブレンド処理部３０６がデータを入力できる状態であれば、ＦＩＦＯ５０４からビットマップデータを読み出してブレンド処理部３０６へ送り出す。
【００７４】
図１２Ａ，図１２Ｂは、本発明の実施の形態３に係るＤＭＡコントローラ３０５のアドレス生成部５０２'の動作を示すフローチャートである。
【００７５】
まずステップＳ３００で、ＣＰＵ３０８の指示により、ＤＭＡ動作が開始されると、各ラインの開始アドレスline_start_addrを、ビットマップデータの先頭アドレスRegStartAddrの値で初期化する。また、ブレンド処理部３０６へ送ったライン数をカウントするline_cntを「０」で初期化する。次にステップＳ３０１で、ライン毎の初期化を行う。セグメントの開始アドレスseg_addrを、ライン開始アドレスline_start_addrで初期化する。またライン中の処理済みのデータ量line_data_cntを「０」で初期化する。更にセグメントの前方境界でのライン切り換えを示すup_down_frontを「００」で初期化する。これはラインの先頭のセグメントの前側ではラインの切り換えがないことを示す。また、参照すべきライン切り替え情報UpDown[i]のテーブルのアドレスtable_addrを、テーブルの先頭アドレスRegTableStartAddの値で初期化する。
【００７６】
次にステップＳ３０２で、セグメント毎の初期化を行う。バスインターフェース５０３'へ要求すべきアドレスaddrと、読み出しデータ長lengthをそれぞれ、セグメントの開始アドレスseg_addrと、セグメント長RegSegLenの値で初期化する。これらの信号は以降のステップで変更されることがある。次にステップＳ３０３に進み、テーブルアドレスtable_addrで、図１０Ｂに示すテーブルデータを読み出すためにバスインターフェース５０３'へ要求する。そして、その読み出したテーブルデータを、セグメントの後方境界でのライン切り換えの有無を示すup_down_backにセットする。これにより、このセグメントの後方境界でのラインの切り換えの有無がセットされる。
【００７７】
ステップＳ３０４で、現セグメントの前方境界でラインの切り換えがあるかをup_down_frontの値に基づいて判定する。ここでラインの切り換えが有ればステップＳ３０５に進むが、そうでないときはステップＳ３０６に進む。ステップＳ３０５では、アドレスaddrから前記ブレンド長RegOverwrapLenを減算する。またデータ長lengthに、このブレンド長RegOverwrapLenを加えて更新する。これにより、ブレンド処理のための、セグメントの前方境界でのデータ読み出しのオーバーラップを実現している。
【００７８】
次にステップＳ３０６で、現セグメントの後方境界でラインの切り換えがあるかをup_down_backの値に基づき判断する。この後方境界でラインの切り換えがあればステップＳ３０７に進むが、無ければステップＳ３０８に進む。ステップＳ３０７では、データ長lengthに、上述のブレンド長RegOverwrapLenの値を加える。これにより、セグメントの後方境界でのブレンド処理のための、読み出したデータのオーバーラップを実現している。
【００７９】
ステップＳ３０８で、上述のステップでセットされたアドレスaddrとデータ長lengthとで、バスインターフェース５０３'を介して画像メモリ３０４よりビットマップデータを読み出す。次にステップＳ３０９で、セグメントの開始アドレスseg_addrを、次のセグメントの開始アドレスに更新するために、現セグメントの後方境界でのライン切り換えの有無up_down_backを判定する。現セグメントの後方境界でラインの切り換えがない場合はステップＳ３１２へ進む。上のラインに切り換わる場合はステップＳ３１０へ、下のラインに切り換わる場合はステップＳ３１１へそれぞれ分岐する。ステップＳ３１０では、セグメント開始アドレスseg_addrから、隣り合うラインのアドレスのオフセット値RegLineOffsetを減算する。次のセグメントの開始アドレスはこの値に、更にセグメント長RegSegLenを加える必要があるが、それはステップＳ３１２で行われる。またステップＳ３１１では、下ラインをアドレスするために、セグメント開始アドレスseg_addrに上記オフセット値RegLineOffsetを加える。次のセグメントの開始アドレスはこの値に、更に、このレジスタ長RegSegLenを加える必要があるが、それはステップＳ３１２で行われる。こうしてステップＳ３１２に進み、次のセグメントの処理のために各データを更新する。ここではセグメントの開始アドレスseg_addrに、セグメント長RegSegLenの値を加える。また現ライン中の処理したデータ量line_data_cntにも、このセグメント長RegSegLenを加える。現在のセグメントの後方境界でライン切り換えup_down_backは、次のセグメントの前方境界の切り換え信号となるので、次にセグメントのup_down_frontに、up_down_backの値をセットする。更に、参照すべきライン切り替え情報UpDown[i]のテーブルを１つ先に進めるために、テーブルアドレスtable_addrを＋４する（図１０（Ｂ）参照）。そしてステップＳ３１３で、ビットマップデータのライン長RegLineLenから、現ラインの処理済みデータ量line_data_cntの値を減算する、そして、その値をセグメント長RegSegLenの値と比較する。その差がセグメント長RegSegLenの値より大きければ、現ラインに処理すべきセグメントが２個以上残っているのでステップＳ３０２に戻り、セグメントの処理を繰り返す。そうでない場合はライン中の最後のセグメントの処理を行うために次のステップＳ３１４（図１２Ｂ）へ進む。
【００８０】
図１２ＢのステップＳ３１４では、現ライン中の最後のセグメントの処理を開始する。バスインターフェース５０３'へ要求すべきアドレスaddrを、セグメントの開始アドレスseg_addrとする。またデータ長lengthを、ビットマップデータのライン長RegLineLenの値から処理済みデータ量line_data_cntの値を減じた値にセットする。
【００８１】
次にステップＳ３１５に進み、セグメントの前方境界でラインデータの切り換えがあるかをup_down_frontの値に基づき判断する。セグメントの前方境界でラインデータの切り換えがない場合はステップＳ３１７に進む。尚、ライン中の最後のセグメントでは、現セグメントの前方境界でのラインデータの切り換えup_down_frontのみを参照する。ラインデータの切り換えがあればステップＳ３１６に進み、アドレスaddrから、ブレンド長RegOverwrapLenを減算する。またデータ長lengthに、このブレンド長RegOverwrapLenを加える。これにより、セグメントの前方境界でのブレンド処理のために、読み出しデータのオーバーラップを実現する。
【００８２】
次にステップＳ３１７に進み、アドレスaddrとデータ長lengthでバスインターフェース５０３'へリード要求を行う。これにより、画像メモリ３０４のそのアドレスから、指定されたデータ長分のビットマップデータが読み出される。次にステップＳ３１８に進み、次のラインの処理のために各データを更新する。ここでは各ラインの開始アドレスline_start_addrに、上記オフセット値RegLineOffsetを加えて、次のラインの先頭アドレスにする。またブレンド処理部３０６へ送ったライン数line_cntを＋１する。そしてステップＳ３１９で、ブレンド処理部３０６へ送ったライン数line_cntと、ブレンド処理部３０６へ送るべきライン数RegBeamsの値を比較して、１ページ分のデータ処理が終了したかを判断する。ここでライン数line_cntの値が、RegBeamsの値未満であれば、まだ処理すべきラインが残っているのでステップＳ３０１に戻り、次のラインの処理を繰り返す。そうでないときはＤＭＡ動作を終了する。ＤＭＡコントローラ３０５は、ＤＭＡ動作を終了した時に割り込み信号をＣＰＵ３０８に送る。ＣＰＵ３０８はこの割り込み信号を検出して、ＤＭＡが終了したことを検知する。
【００８３】
以上説明したように実施の形態３によれば、前述の実施の形態１の効果に加えて、各セグメントの長さを一定にしながら、走査線の曲がりに応じて各セグメントごとにラインを上或は下にずらすか、ずらさないかを指定することができる。これによりセグメント長を一定にしながらも、走査線の曲がりに応じたレジストレーションずれによる色ずれを防ぐことができる。
【００８４】
［実施の形態４］
本発明の実施の形態４に係るＤＭＡコントローラ３０５の動作について、図１３と図１４Ａ，図１４Ｂを用いて説明する。尚、この実施の形態４に係る画像形成装置のハードウェア構成は、前述の実施の形態３と同様であるため、その説明を省略する。
【００８５】
図１３（Ａ）及び図１３（Ｂ）は、本発明の実施の形態４に係るＤＭＡコントローラ３０５に走査ラインの曲がりを指定する方法を説明するための図である。ここでは１ラインにおけるセグメント長を可変とし、各セグメントごとに、上下ラインへの切り換えの有無を設定できるものとする。
【００８６】
ここでは前述の実施の形態２，３とは異なり、走査ラインの曲がりに合わせて、ライン切り換え位置までの長さ（セグメント長）SegLen[i]と、ラインデータの切り換えを示す情報UpDown[i]を変更している。図１３（Ｂ）は、セグメント長SegLen[i]と、上のラインに切り替えるか、下のラインに切り替えるかを示すUpDown[i]を格納しているテーブルデータの構成を示している。このテーブルは、画像メモリ３０４或はＲＡＭ３１０に格納されている。このテーブル読み出し時には、この読み出し開始アドレスRegTableStartAddrを、ＤＭＡコントローラ３０５のレジスタ部５０１にセットする。またUpDown[i]のとり得る値は２通りなので、ここでは、セグメントの境界で上のラインに切り替える場合は「０」を、下のラインに切り替える場合は「１」を割り当てている。この第４実施の形態においても、ブレンド長RegOverwrapLen、ビットマップデータの先頭アドレスRegStartAddr、ビットマップデータのライン長RegLineLenがセットされる。またビットマップデータの隣り合うラインのアドレスのオフセット値RegLineOffset、ブレンド処理部３０６へ送るべきライン数RegBeamsもレジスタ部５０１にセットされる。更に、ＤＭＡコントローラ３０５のレジスタ部５０１には、ＣＰＵ３０８が上記の各レジスタ値の設定を完了した後に、ＤＭＡ動作を開始させるための起動レジスタ（不図示）を含んでいる。
【００８７】
図１４Ａ及び図１４Ｂは、本発明の実施の形態４に係るＤＭＡコントローラ３０５のアドレス生成部５０２'（図１１）の動作を示すフローチャートである。
【００８８】
まずステップＳ４００で、ＣＰＵ３０８の指示によりＤＭＡ動作が開始されると、各ラインの開始アドレスline_start_addrを、ビットマップデータの先頭アドレスRegStartAddrで初期化する。またブレンド処理部３０６へ送ったライン数をカウントするline_cntを「０」で初期化する。次にステップＳ４０１で、ライン毎の初期化を行う。ここではセグメントの開始アドレスseg_addrを、ラインの開始アドレスline_start_addrで初期化する。またライン中の処理した量line_data_cntを「０」で初期化する。また参照すべきセグメントの長さSegLen[i]と、ライン切り替え情報UpDown[i]のテーブルのアドレスtable_addrを、テーブルの先頭アドレスRegTableStartAddrの値で初期化する。また変数ｉを「０」にする。
【００８９】
次にステップＳ４０２で、アドレスtable_addrから図１３（Ｂ）に示すテーブルデータを読み出すために、バスインターフェース５０３'へデータの読み出し要求を発行する。そして、そのテーブルから読み出したデータに基づき、最初のセグメントの長さseg_lenと、そのセグメントの後方境界でのラインデータ切り換えの有無を示すup_down_backをセットする。
【００９０】
次にステップＳ４０３で、セグメント毎の初期化を行う。ここではバスインターフェース５０３'へ要求すべきアドレスaddrを、セグメントの開始アドレスseg_addrで初期化する。また読み出しデータ長lengthを、読み出したテーブルのセグメントのデータ長seg_len［i］の値で初期化する。これらの信号は以降のステップで変更される。
【００９１】
次にステップＳ４０４で、変数ｉの値が「０」か否か、即ち、そのラインの先頭のセグメントかどうかを判断する。変数ｉの値が「０」（先頭セグメント）の場合はステップＳ４０５へ進み、そうでないときはステップＳ４０６へ進む。ステップＳ４０５では、先頭のセグメントであるため、セグメントの後方境界でのみブレンド処理が必要であるため、読み出しデータ長lengthに、前述のブレンド長RegOverwrapLenを加える。一方、先頭のセグメントでないときはステップＳ４０６に進む。この場合は現セグメントの前後の境界でブレンド処理が必要となるため、アドレスaddrから、上記ブレンド長RegOverwrapLenを減じる。またデータ長lengthには、このブレンド長RegOverwrapLenの２倍を加える。こうしてステップＳ４０５或はステップＳ４０６の後にステップＳ４０７に進む。
【００９２】
ステップＳ４０７では、アドレスaddrと読み出しデータ長lengthとを基に、バスインターフェース５０３'へリード要求を行う。これにより画像メモリ３０４のアドレスaddrから、指定されたデータ長length分のビットマップデータが読み出される。次にステップＳ４０８に進み、セグメントの開始アドレスseg_addrを、次のセグメントの開始アドレスに更新する。ここでは、現セグメントの後方境界でラインデータの切り換えがあるか否かをup_down_backの値に基づき判断する。現セグメントの後方境界で、上のラインに切り換わる場合はステップＳ４０９へ、下のラインに切り換わる場合はステップＳ４１０へ分岐する。ステップＳ４０９では、セグメントの開始アドレスseg_addrから、隣接ラインのアドレスのオフセット値RegLineOffsetを減じる。尚、次のセグメントの開始アドレスは、この値に、更にセグメント長seg_lenを加える必要があるが、それはステップＳ４１１で行われる。またステップＳ４１０では、セグメントの開始アドレスseg_addrに、上記オフセット値RegLineOffsetの値を加えて下ラインのアドレスとする。尚、次のセグメントの開始アドレスはこの値に更にセグメント長seg_lenを加える必要があるが、それはステップＳ４１１で行われる。
【００９３】
こうしてステップＳ４０９又はＳ４１０、或はステップＳ４０８で切り換え無しの場合はステップＳ４１１に進み、セグメントの開始アドレスseg_addrに、セグメント長seg_lenを加える。またライン中の処理したデータ量line_data_cntにも、このセグメント長seg_lenを加える。更に、参照するセグメント長SegLen[i]と切り換え有無UpDown[i]のテーブルを１つ先に進めるために、テーブルアドレスtable_addrを＋８する。次にステップＳ４１２に進み、そのテーブルアドレスtable_addrからテーブルデータを読み出すためにバスインターフェース５０３'に要求する。そして、そのテーブルから読み出したデータに基づき、セグメント長seg_lenと、そのセグメントの後端境界でのライン切り換えの有無up_down_backをセットする。そしてステップＳ４１３で、ビットマップデータのライン長RegLineLenから、ライン中の処理したデータ量line_data_cntの値を減算し、その差分値とセグメント長seg_lenとを比較する。ここでこの差分値がセグメント長seg_lenより大きければ、このラインで処理すべきセグメントが２個以上残っているのでステップＳ４０３に戻り、前述のセグメントの処理を繰り返す。そうでないとき、即ち、最終セグメントの場合は、現ライン中の最後のセグメントの処理を行うために次のステップＳ４１４に進む。
【００９４】
ステップＳ４１４では、現ライン中の最後のセグメントの処理を開始する。まずバスインターフェース５０３'へ要求すべきアドレスaddrに、セグメントの開始アドレスseg_addrから前述のブレンド長RegOverwrapLenの値を減じた値をセットする。またビットマップデータのライン長RegLineLenから、ライン中の処理したデータ量line_data_cntを減算する。そして、それに前述のブレンド長RegOverwrapLenを加えた値を、バスインターフェース５０３'へ要求すべきデータ長lengthとする。そしてステップＳ４１５に進み、そのアドレスaddrとデータ長lengthに基づいて、バスインターフェース５０３'へ画像メモリ３０４の読み出し要求を発行して、その最後のセグメントに対応するビットマップデータを読み出す。こうしてステップＳ４１６に進み、次のラインの処理のために各データを更新する。ここでは各ラインの開始アドレスline_start_addrに、上記ライン間のアドレスのオフセット値RegLineOffsetの値を加えて次のラインの先頭アドレスを求める。またブレンド処理部３０６へ送ったライン数line_cntを＋１する。次にステップＳ４１７で、ブレンド処理部３０６へ送ったライン数line_cntと、ブレンド処理部３０６へ送るべきライン数RegBeamsの値とを比較する。ここで処理済みのライン数line_cntの値がRegBeamsの値未満であれば、処理すべきラインが残っているのでステップＳ４０１に戻り、前述の処理を繰り返す。そうでないときは１ページのデータ処理が終了したと判断してＤＭＡ動作を終了する。ＤＭＡコントローラ３０５はＤＭＡ動作を終了した時に、割り込み（不図示）をＣＰＵ３０８に送る。ＣＰＵ３０８はこの割り込みを検出することで、ＤＭＡを終了したことを検知する。
【００９５】
以上説明したように実施の形態４によれば、前述の実施の形態１の効果に加えて、各セグメントの長さを可変にしながら、走査線の曲がりに応じて各セグメントごとにラインを上或は下にずらすか、ずらさないかを指定することができる。これにより走査線の曲がりに応じたレジストレーションずれによる色ずれを防ぐことができる。
【００９６】
［実施の形態５］
本発明のＤＭＡコントローラ３０５の動作について、図１５、図１６及び図１７を用いて説明する。尚、この実施の形態５に係る画像形成装置のハードウェア構成は、前述の実施の形態３と同様であるため、その説明を省略する。
【００９７】
図１５は、本発明の実施の形態５に係るＤＭＡコントローラ３０５に有効画像領域（対象領域）を、メモリアドレスで指定する方法を説明するための図である。
【００９８】
このＤＭＡコントローラ３０５のレジスタ部５０１には、ある走査ラインに相当するデータの読み出し開始位置RegBeamStartAddr、有効画像領域の先頭アドレスRegLowerAddrがセットされる。更に、有効画像領域の後端後のアドレスRegUpperAddr、１ページ内における全読み出し走査ライン数RegBeamLines、、ライン間のアドレスのオフセット値RegLineOffset、印刷有効領域外のデータRegFillDataが設定できる。
【００９９】
図１６は、本発明の実施の形態５に係るＤＭＡコントローラ３０５のアドレス生成部５０２'の動作を示すフローチャートである。
【０１００】
まずステップＳ５０１で、１ページのＤＭＡ処理に対して初期化を行う。ラインの開始アドレスline_start_addrに、走査ラインに相当するデータの読み出し開始位置RegBeamStartAddrを設定し、ページ内の処理済みライン数をカウントするlines_cntに「０」をセットする。次にステップＳ５０２で、ＤＭＡ開始アドレスが、画像の有効領域内のアドレスか否かを判定する。もし有効領域外の場合はステップＳ５０３に進み、ライン開始位置状態line_start_stateに有効領域外であることを示す値を入力する。一方ステップＳ５０２で有効領域内であればステップＳ５０４に進み、line_start_stateに有効領域内であることを示す値をセットする。
【０１０１】
ステップＳ５０３、或はステップＳ５０４の後ステップＳ５０５に進み、各ラインごとの処理の初期化を行う。ここではステップＳ５０５以降の処理を、このページのライン数分繰り返すことになる。ステップＳ５０５では、読み出しアドレスaddrに、ラインの開始アドレスline_start_addrをセットする。また状態stateには、上述のライン開始位置状態line_start_stateをセットし、テーブルアドレスtable_addrには、テーブルの先頭アドレスRegTableStartAddrをセットする。
【０１０２】
次にステップＳ５０６に進み、バスインターフェース５０３'により、テーブルアドレスに基づいてテーブルから曲がり情報を読み出す。そしてステップＳ５０７に進み、その読み出したテーブルデータに基づいて、読み出しデータ長lengthと、境界部分での上下ラインへの移動があるかを示す情報UpDown[i]をセットする。
【０１０３】
次にステップＳ５０８に進み、前述の状態stateに基づいて、読み出しアドレスが有効領域内であるか否かを判定する。ここで領域内であればステップＳ５０９に進み、バスインターフェース５０３'に対して読み出し要求を発行する。一方、領域外であればステップＳ５１０に進み、印刷有効領域外のデータRegFillDataのデータをデータ長length分、後段の画像処理ブロックに転送する。こうしてステップＳ５０９或はＳ５１０を実行した後ステップＳ５０９に進み、カレントアドレスaddrを更新する。ここではアドレスaddrに、読み出しデータ長lengthを加算し、テーブルアドレスtable_addrを＋８する。そしてステップＳ５１２に進み、１ライン分の終了が終了したかどうかを判定する。この時、１ラインの処理が終了していなければステップＳ５１３に進み、状態state、アドレスaddr、上下ラインへの切り換え情報UpDownを更新してステップＳ５０６へ戻る。またステップＳ５１２で１ライン分の処理を終了している場合はステップＳ５１４に進む。
【０１０４】
図１７は、図１６のステップＳ５１３における状態state及びアドレスの更新処理の詳細を示すフローチャートである。
【０１０５】
まずステップＳ５２１で、上下ラインへの切り換え情報UpDownをチェックする。ここで曲がり情報が上ラインであればステップＳ５２２に進み、アドレスaddrから、ライン間のアドレスのオフセット値RegLineOffsetを差し引く。一方、曲がり情報が下ラインであればステップＳ５２８に進み、アドレスaddrに、このオフセット値RegLineOffsetを加算する。
【０１０６】
上ラインの場合はステップＳ５２２からステップＳ５２３に進み、状態stateが有効領域内か、有効領域の上側、或は下側のいずれを示しているかを判定する。ここで有効領域の上側であれば、それよりも上のラインは有効領域外で、有効領域の上側のままであるため処理を終了する。状態stateが有効領域内を示していればステップＳ５２４に進み、更新した上ラインのアドレスaddrと、有効画像領域の先頭アドレスRegLowerAddrとの大小関係をチェックする。ここで有効画像領域の先頭アドレスRegLowerAddrが、アドレスaddrより大きい場合は更新後の上ラインアドレスは有効領域外であるためステップＳ５２５に進み、状態stateに有効範囲外であることを示す値をセットする。一方ステップＳ５２４で、先頭アドレスRegLowerAddrが、アドレスaddrに等しいか、或はアドレスaddrより小さい場合は有効領域のままであるため、状態stateを変更せずに処理を終了する。
【０１０７】
またステップＳ５２３で、状態stateが有効領域の下側である場合はステップＳ５２６に進み、アドレスaddrと、有効画像領域の後端後のアドレスRegUpperAddrとの大小関係を判定する。ここで後端後のアドレスRegUpperAddrが、読み出しアドレスaddrより大きい場合は下ラインは有効領域内であるためステップＳ５２７に進み、状態stateを有効領域内を示す値にセットする。一方、後端後のアドレスRegUpperAddrが、読み出しアドレスaddrより小さい場合は、その下ラインは有効領域の下のままであるため状態stateを変更せずに処理を終了する。
【０１０８】
また一方、下方向のラインへの切り換えの場合は前述のステップＳ５２８からステップＳ５２９に進み、状態stateが有効領域内か、有効領域の上側か、下側かのいずれを示しているかをみる。有効領域の下側であれば、それよりも下のラインは無条件に有効領域外であるため、状態stateを変更せずに処理を終了する。一方、有効領域の上側の場合はステップＳ５２９からステップＳ５３２に進み、更新後のアドレスaddrと有効画像領域の先頭アドレスRegLowerAddrとの大小関係をチェックする。ここで先頭アドレスRegLowerAddrが読み出しアドレスaddrより大きい場合は、有効領域外であるため状態stateを変更せずに処理を終了する。またステップＳ５３２で、RegLowerAddrが読み出しアドレスaddrより小さい場合はステップＳ５３３に進み、状態stateを有効領域内を示す値に変更する。またステップＳ５２９で、状態stateが領域内を示していればステップＳ５３０に進み、読み出しアドレスaddrと、後端後のアドレスRegUpperAddrとの大小関係をチェックする。ここで後端後のアドレスRegUpperAddrが読み出しアドレスaddrより大きい場合は、状態stateを変更せずに処理を終了する。一方、後端後のアドレスRegUpperAddrが読み出しアドレスaddrより小さい場合は、状態stateに有効領域の下側であることを示す値をセットする。こうして状態stateを更新した後図１６のステップＳ５０６に戻る。
【０１０９】
再び図１６に戻り、ステップＳ５１４では、次のライン処理へ移動するための処理として、ライン開始位置状況line_start_stateと、ラインの開始アドレスline_start_addrとを更新する。そしてステップＳ５１５に進み、ページの処理済みライン数lines_cntをカウントアップ（＋１）する。そしてステップＳ５１６で、１ページの処理が終了したか否かを判定する。ここで１ページ分の処理が全て終了していれば処理を終了し、終了していない場合はステップＳ５０５へ戻って前述の処理を実行する。
【０１１０】
以上説明したように実施の形態５によれば、上述の実施の形態１に係る効果に加えて、画像の有効領域として設定された領域内で、ＤＭＡコントローラが走査ラインの曲がりを相殺するように画像データを読み出して、走査ラインの曲がりを補正できる。またその有効領域外では、特定のデータを出力できる。これにより、例えばプリンタエンジンがマスク機能を有していないような、走査ラインに曲がりが発生する小型のプリンタ部でも高品位な画像を形成することができる。
【０１１１】
[実施の形態６]
次に本発明の実施の形態６に係るＤＭＡコントローラ３０５の動作について、図１８及び図１９を用いて説明する。尚、この実施の形態６に係る画像形成装置のハードウェア構成は、前述の実施の形態３と同様であるため、その説明を省略する。
【０１１２】
図１８は、本発明の実施の形態６に係るＤＭＡコントローラ３０５に有効画像領域を、メモリ上のアドレスで指定する方法を説明するための図である。
【０１１３】
曲がり情報を格納するテーブルの先頭アドレスをRegTableStartAddrで、画像データが格納されるメモリの先頭アドレスをRegStartAddrで表す。また、ビームの開始位置を示すインデックスをRegStartLineIndex（第６実施の形態では、上下２ライン分の曲がりを例とし「−２」を設定している。「０」が有効領域の先頭ラインに対応している）としている。更に、１ページの走査ライン数をRegBeamLines、ライン間のアドレスオフセット値をRegLineOffset、印刷有効領域外のデータRegFillDataを設定可能である。
【０１１４】
図１９は、本発明の実施の形態６に係るＤＭＡコントローラ３０５のアドレス生成部５０２'の動作を示すフローチャートである。
【０１１５】
まずステップＳ６０１で、この処理のための初期化処理を行う。ここではラインの開始アドレスline_start_addrに、画像データが格納されるメモリの先頭アドレスRegStartAddrをセットする。開始ラインインデクスstart_line_indexに、１ページの開始位置を示すインデックスRegStartLineIndexをセットし、ページにおける処理済みライン数をカウントするlines_cntに「０」を代入する。次にステップＳ６０２に進み、各ライン処理の初期化を行う。ここではアドレスaddrにライン開始アドレスline_start_addrをセットし、ライン数line_indexに、開始ラインインデクスstart_line_indexをセットする。またテーブルアドレスtable_addrに、曲がり情報を格納するテーブルの先頭アドレスRegTableStartAddrを代入する。
【０１１６】
次にステップＳ６０３に進み、バスインターフェース５０３'に対してテーブルの読み出し要求を行う。次にステップＳ６０４に進み、ステップＳ６０３で読み出したテーブルデータから、読み出しデータ長length及び上下ラインへの切り換え情報up_down_infoを設定する。次にステップＳ６０５に進み、ライン数line_indexをチェックする。ここで現ラインのライン数が０以上でＮ（印刷有効領域のライン数）以内の場合は印刷有効領域にあるためステップＳ６０６に進み、バスインターフェース５０３'に対して画像データの読み出し要求を行う。一方、ステップＳ６０５で、印刷有効領域内でないと判断するとステップＳ６０７に進み、読み出しデータ長length分のRegFillDataを後段の画像処理ブロックに対して転送する。これにより、印刷有効領域外では、特定のデータRegFillDataが出力されるため、後段の処理におけるマスク処理などが不要になる。
【０１１７】
こうしてステップＳ６０６或はＳ６０７を実行した後ステップＳ６０８に進み、アドレスaddrにデータ長lengthを加算し、テーブルアドレスtable_addrを＋８する。そしてステップＳ６０９で、上下ラインへの切り換え情報up_down_infoをチェックする。ここで下ラインに切り換えるときはステップＳ６１０に進み、ライン数line_indexを−１する。そしてステップＳ６１１で、その結果が「０」以上であればステップＳ６１２に進み、アドレスaddrからライン間のオフセットアドレス値RegLineOffsetを差し引いてステップＳ６０３に進む。またステップＳ６１１で、ライン数ine_indexが「０」より小さければステップ６０３へ戻る。
【０１１８】
一方ステップＳ６０９で、上ラインへの切り換えの場合はステップＳ６１３に進み、ライン数line_indexに＋１する。そしてステップＳ６１４に進み、その加算結果が印刷有効領域のライン数Ｎよりも小さければ有効領域内であるためステップＳ６１５に進み、アドレスaddrにライン間のアドレスオフセット値RegLineOffsetを加算してステップＳ６０３に進む。またステップＳ６１４で、ライン数ine_indexがＮより大きければ有効領域外であるためステップＳ６０３に戻る。またステップＳ６０９で、上下ラインへの切り換えがない場合はステップＳ６１６に進み、現ライン数start_line_indexが有効領域内であるか、即ち、０以上全ライン数Ｎ以下であるかを判定する。そうであればステップＳ６１７に進み、現ライン数line_start_addrに、ライン間のオフセットアドレス値RegLineOffsetを加算してステップＳ６１８へ進む。またステップＳ６１６で、有効領域外であると判定するとステップ６１８に進み、現ライン数start_line_index及び処理済みライン数lines_cntをそれぞれ＋１する。そしてステップＳ６１９に進み、処理済みライン数linec_cntが１ページ分のライン数RegBeamLinesよりも大きいか否かで、１ページの処理が終了したか否かを判定する。こうして１ページの処理が終了していないときはステップＳ６０２に進むが、１ページの処理を終了したと判断すると、この処理を終了する。
【０１１９】
以上説明したように実施の形態６によれば、上述の実施の形態１に係る効果に加えて、有効領域内では、ＤＭＡコントローラが走査ラインの曲がりを補正するように画像データを読み出し、有効領域外では、指定したデータを生成できる。これにより、例えばプリンタエンジンがマスク機能を有していないような、走査ラインに曲がりが発生する小型のプリンタ部でも高品位な出力を得ることができる。
【０１２０】
［実施の形態７］
本発明の実施の形態７に係るＤＭＡコントローラ３０５ａの動作について、図２０、図２１、図２２、図２３、図２４、図２５を用いて説明する。
【０１２１】
図２０は、本発明の実施の形態７に係るプリンタコントローラ１０３ａの詳細構成を示すブロック図で、前述の図２のブロック図と共通する部分は同じ記号で示し、それらの説明を省略する。
【０１２２】
また図２１は、本発明の実施の形態７に係るプリンタコントローラ１０３ａのＤＭＡコントローラ３０５ａの詳細構成を示すブロック図で、前述の図３のブロック図と共通する部分は同じ記号で示し、それらの説明を省略する。尚、このＤＭＡコントローラ３０５ａは、アドレス生成部５０２ａがリングバッファカウンタ３２０のカウント値のインクリメントやデクリメントを更に指示する点だけが、前述の図２のＤＭＡコントローラ３０５と相違している。
【０１２３】
図２０のプリンタコントローラ１０３ａでは、前述した図２のプリンタコントローラ１０３に、更に、ＤＭＡコントローラ３２１，３２２及び画像処理部３２３、そしてリングバッファカウンタ３２０が追加されている。ここでＤＭＡコントローラ３２２は、画像メモリ３０４に格納されているビットマップ画像データを画像処理部３２３に読み出す。またＤＭＡコントローラ３２１は、画像処理部３２３で処理した画像データを画像メモリ３０４に書き込む。画像処理部３２３による処理には、具体的には回転処理や変倍処理等が含まれる。これらＤＭＡコントローラ３２１，３２２に対する制御は、ＣＰＵ３０８からの指示に基づき行われる。更にリングバッファカウンタ３２０が、ＤＭＡコントローラ３２１とＤＭＡコントローラ３０５ａとの間に接続されている。これによりＤＭＡコントローラ３０５ａ，３２０がともにリングバッファカウンタ３２０の制御とその状態を参照することにより、画像メモリ３０４との間でリングバッファを用いたデータ転送が可能となる。このリングバッファカウンタ３２０は、リングバッファに対して書き込むＤＭＡコントローラ３２１からインクリメント指示を受信すると内蔵カウンタ（不図示）をカウントアップする。またリングバッファからデータを読み出すＤＭＡコントローラ３０５ａからデクリメント指示を受信すると内蔵カウンタをカウントダウンする。ＤＭＡコントローラ３０５ａ，ＤＭＡコントローラ３２１は、リングバッファカウンタ３２０のカウント値を基に動作することで、リングバッファを用いて画像メモリ３０４に１ページ分に満たない画像データを送出する。または画像メモリ３０４の画像データのない領域を読み出すことなくＤＭＡコントローラ３２１からＤＭＡコントローラ３０５ａへの画像データ転送が可能となる。
【０１２４】
画像メモリ３０４からリングバッファを介して読み出されたビットマップデータは、ブレンド処理部３０６で処理され、エンジンＩ／Ｆ部３０７を介してビデオ信号として印刷部１０７に転送される。尚、ＤＭＡコントローラ３２１と第７実施の形態に係るＤＭＡコントローラ３０５ａとのリングバッファによるデータ転送の場合の構成について説明したが、ＣＰＵ３０８とのリングバッファによるデータ転送も可能である。
【０１２５】
図２２Ａは、本発明の第７実施の形態に係るＤＭＡコントローラ３０５ａに走査ラインの曲がりを指定する方法を説明するための図である。
【０１２６】
図において、ｎライン(n line)は、本来の像形成対象である走査ラインを示す。ここでは走査ラインの曲がりに合わせて、１走査ライン（長さRegLineLen）を複数のセグメントに分割している。ここで各セグメントの長さはSegLen[i]に設定されている。ここで変数ｉは、１走査ラインにおけるセグメントの順番に対応している。またインの切り換え位置で、走査ラインの曲がりが上方向か下方向かを示すUpDown[i]が設定されている。ここでも変数ｉは、１走査ラインにおけるセグメントの順番に対応しており、UpDown[i]＝０は上方向、UpDown[i]＝１は下方向への切り換えを示している。
【０１２７】
図２２（Ｂ）は、走査ラインの曲がりに合わせて、ライン切り換え位置までの長さ（セグメント長）SegLen[i]と、上又は下のラインに切り替えるかを示すUpDown[i]を記憶しているテーブルを説明する図である。このテーブルは、画像メモリ３０４かＲＡＭ３１０上にテーブルとして格納される。
【０１２８】
このテーブルの先頭アドレスRegTableStartAddrを、ＤＭＡコントローラ３０５ａのレジスタ部５０１にセットする。ここでUpDown[i]のとり得る値は、上或は下の２通りであるため、上のラインに切り替える場合は「０」を、下のラインに切り替える場合は「１」を割り当てている。
【０１２９】
またＤＭＡコントローラ３０５ａのレジスタ部５０１は、更にビットマップデータのライン長RegLineLenや、ＣＰＵ３０８が上記のレジスタの設定を完了した後に、ＤＭＡ動作を開始させるための起動レジスタ（不図示）を含む。
【０１３０】
図２３（Ａ）〜図２３（Ｃ）は、実施の形態７に係るＤＭＡコントローラ３０５ａにリングバッファ領域を指定する方法を説明するための図である。
【０１３１】
図２３（Ａ）は、Ｍラインのリングバッファを説明する図である。
【０１３２】
レジスタ部５０１には、リングバッファ上のビットマップデータの隣り合うラインのアドレスのオフセット値RegLineOffsetがセットされる。更に、リングバッファの下限値RegRingBufferLowerAddr、リングバッファの上限値RegRingBufferUpperAddrがセットされる。更にレジスタ部５０１には、画像メモリ３０４に確保したリングバッファ領域の先頭アドレスRegStartAddr、リングバッファ領域のライン数RegLinesがセットされる。
【０１３３】
図２３（Ｂ）は、走査ラインの曲がりを説明する図である。
【０１３４】
ここでは読出ラインの行頭から、上方向に切り替わる最大ライン数RegUpMaxと、読み出しラインの行頭から下方向に切り替わる最大ライン数RegDownMaxが規定されている。これらの値はレジスタ部５０１にセットされる。図２３（Ｂ）の例では、RegUpMax＝２，RegDownMax＝３である。
【０１３５】
図２３（Ｃ）は、図２３（Ｂ）に示すような走査ラインの曲がりが発生している場合、走査ラインが印刷有効領域内にあるか否かの判定を説明する図である。
【０１３６】
ここでレジスタ部５０１には、リングバッファの先頭アドレスのある行に対して読み出し開始位置を示すRegStartLineIndexがセットされる。更に、ブレンド処理部３０６へ送るべきライン数RegBeamLines、印刷有効領域外を出力する際に使用するダミーデータRegFillDataもセットされる。図２３（Ｂ）では、RegUpMaxが「２」で、RegDownMaxが「３」であるため、読み出し開始ラインRegStartLineIndexは、印刷有効領域の先頭ラインから−３ラインとなる。また読み出し終了ラインは、印刷有効領域の最終ラインから＋２ラインとなる。
【０１３７】
図２４及び図２５は、実施の形態７に係るＤＭＡコントローラ３０５ａのアドレス生成部５０２ａの動作を示すフローチャートである。
【０１３８】
この処理は、ＤＭＡコントローラ３２１により画像メモリ３０４のリングバッファに、画像処理部３２３で処理されたビットマップデータが格納されて、リングバッファカウンタ３２０がカウントアップされるのと並行して実行される。
【０１３９】
まずステップＳ７０１で、ＣＰＵ３０８の指示によりＤＭＡ動作が開始されると、各ラインの開始アドレスline_start_addrを、リングバッファ領域の先頭アドレスRegStartAddrに初期化する。またブレンド処理部３０６へ送った処理済みのライン数line_cntを「０」で初期化する。更に、画像データの読み出し開始ラインstart_line_indexを、読み出し開始ラインRegStartLineIndex（図２３（Ｂ）の例では「−３」）で初期化する。次にステップＳ７０２に進み、ライン毎の初期化を行う。ここではセグメントの開始アドレスaddrを、ライン開始アドレスline_start_addrで初期化する。またライン中の処理済みのデータ量を示すline_data_cntを「０」で初期化し、また現在の処理ライン位置line_indexsを、画像データの読み出し開始位置start_line_indexで初期化する。また、参照すべきセグメントの長さSegLen[i]と、ライン切り替え情報UpDown[i]のテーブルのアドレスを示すtable_addrを、テーブルの先頭アドレスRegTableStartAddで初期化する。
【０１４０】
次にステップＳ７０３に進み、画像データの読み出し開始ラインstart_line_indexが、図２３（Ｃ）に示す印刷有効領域に対してどのラインであるかを判定する。ステップＳ７０３で、有効領域の上側、例えば図２３（Ｃ）のライン−３から２までの場合はステップＳ７０４に進み、リングバッファに図２３（Ｃ）のライン−３から２までのデータが格納されるのを待つ。具体的には、リングバッファカウンタＲＢＣの値と、ＢＨ（＝RegUpMax+RegDownMax+1)＋１（この実施の形態７ではＢＨ＝６）と（start_line_index−１）との加算値とを比較する。こうしてリングバッファにライン−３からライン２までのデータが格納されるとステップＳ７０５に進み、１ライン処理を実行してステップＳ７１１に進む。この１ライン処理は図２５を参照して後述する。ここで、ステップＳ７０４〜Ｓ７０５の処理は、図２３（Ｃ）のエリアＡで示すラインのデータ処理に該当している。
【０１４１】
またステップＳ７０３で、画像データの読み出し開始ラインstart_line_indexが図２３（Ｃ）に示す印刷有効領域内であればステップＳ７０６に進む。そしてリングバッファに、走査ラインの曲がりを考慮した６（ＢＨ）ライン分のイメージデータが格納されるのを待ってステップＳ７０７に進む。ステップＳ７０７では後述の１ライン処理を実行してステップＳ７０８に進み、リングバッファカウンタＲＢＣを−１してステップＳ７１１に進む。ここで、ステップＳ７０６〜Ｓ７０７の処理は、図２３（Ｃ）のエリアＢで示すように、そのラインデータが全て印刷有効領域に含まれるラインのデータ処理に該当している。
【０１４２】
またステップＳ７０３で、画像データの読み出し開始ラインstart_line_indexが図２３（Ｃ）に示す印刷有効領域の下側でラインＮ−３からラインＮ＋１までの間ではステップＳ７０９に進む。そこで後述の１ライン処理を実行してステップＳ７１０に進む。ステップＳ７１０ではリングバッファカウンタＲＢＣを−１してステップＳ７１１に進む。ここで、ステップＳ７０９の処理は、図２３（Ｃ）のエリアＣで示すラインのデータ処理に該当している。
【０１４３】
次に図２５のフローチャートを参照して、ステップＳ７０５，Ｓ７０７，Ｓ７０９の１ラインの処理を説明する。
【０１４４】
図２５は、実施の形態７に係る１ライン処理を説明するフローチャートである。
【０１４５】
ステップＳ８０１では、テーブルアドレスをもとに、そのライン（start_line_indexで示されるライン）の曲がり情報を取得する。次にステップＳ８０２に進み、そのラインのセグメント長（length）と切り換え情報（up_down_info）をレジスタにセットする。次にステップＳ８０３に進み、読み出し開始ライン（line_index）が印刷有効領域内であるかを判定する。ステップＳ８０３で印刷有効領域内であればステップＳ８０４に進み、そのラインの該当するセグメントのデータを読み出す。ステップＳ８０３で印刷有効領域内でないときはステップＳ８０５に進み、そのラインの該当するセグメント長分のダミーデータ（RegFillData）を読み出す。こうしてステップＳ８０４或はステップＳ８０５を実行した後ステップＳ８０６に進み、イメージデータの読み出しアドレス(addr)及びテーブルアドレス(table_addr)を更新する。ここでは読み出しアドレスに、処理済みのセグメント長を加算したアドレスに更新し、テーブルアドレスは次のセグメントの曲がり情報を得るために＋８される。
【０１４６】
次にステップＳ８０７に進み、上下切り換え情報(up_down_info)を調べる。ここで切り換え情報が「０」、即ち上下方向への切り換えでないときは、ラインを切り換えてラインデータを読み出す必要が無いため処理を終了する。また曲がりが発生しているラインであっても、最終のセグメントの後では切り換え情報(up_down_info)が「０」であるため、処理を終了する。
【０１４７】
一方ステップＳ８０７で、上方向の曲がりがあると判定するとステップＳ８０８に進み、読み出しライン番号(line_index)を−１し、ステップＳ８０９で、その結果が負の値になったかをみる。負の値でなければステップＳ８１０に進み、読み出しアドレス(addr)から、リングバッファの１ラインのオフセットアドレス(RegLineOffset)を差し引いて、一つ前のラインのアドレスに更新する。そしてステップＳ８１１で、そのアドレスがリングバッファの先頭アドレス(RegRingBufferLowerAddr)以下でないか、即ち、リングバッファ内のアドレスかどうかを判定する。リングバッファ内のアドレスであればステップＳ８０１に戻って前述の処理を実行する。しかしそうでないときはステップＳ８１２に進む。そこでその読み出しアドレス(addr)にリングバッファのメモリエリア((RegRingBufferUpperAddr−RegRingBufferLowerAddr)を加算して読み出しアドレスをリングバッファ内のアドレスに更新する。そしてステップＳ８０１に進む。
【０１４８】
一方ステップＳ８０７で、下方向の曲がりがあると判定するとステップＳ８１３に進み、読み出しライン番号(line_index)を＋１し、ステップＳ８１４で、その結果がリングバッファのライン数Ｎを越えたかをみる。越えなければステップＳ８１５に進み、読み出しアドレス(addr)に、リングバッファの１ラインのオフセットアドレス(RegLineOffset)を加算して次ラインのアドレスに更新する。そしてステップＳ８１６で、そのアドレスがリングバッファの最終アドレス(RegRingBufferUpperAddr)以上でないか、即ち、リングバッファ内のアドレスかどうかを判定する。リングバッファ内のアドレスであればステップＳ８０１に戻って前述の処理を実行するが、そうでないときはステップＳ８１７に進む。そして、その読み出しアドレス(addr)から、リングバッファのメモリエリア((RegRingBufferUpperAddr−RegRingBufferLowerAddr)を差し引く。こうして読み出しアドレスをリングバッファ内のアドレスに更新する。そしてステップＳ８０１に進む。尚、ステップＳ８０９，Ｓ８１４で、計算結果が負或はＮ以上の時はステップＳ８０１に戻る。
【０１４９】
このように、この１ライン処理では、リングバッファに格納されている印刷有効領域に含まれるラインのセグメント単位でイメージデータを読み出すことができる。また印刷領域に入っていないセグメントでは、ダミーデータ(RegFillData)が読み出される。
【０１５０】
次に図２４に戻って、ステップＳ７０５，Ｓ７０８，Ｓ７１０のいずれかを実行した後ステップＳ７１１に進み、読み出しラインが印刷有効領域にあるか否かを判定する。印刷有効領域にあればステップＳ７１２に進み、読み出しラインアドレスにリングバッファの１ラインのオフセットアドレス(RegLineOffset)を加算して、次ラインのアドレスに更新する。そしてステップＳ７１３で、その加算結果のアドレスがリングバッファの最終アドレス(RegRingBufferUpperAddr)以上でないか、即ち、リングバッファ内のアドレスかどうかを判定する。ここでリングバッファ内のアドレスであればステップＳ７１５に進むが、そうでないときはステップＳ７１４で、その読み出しアドレスをリングバッファの先頭アドレスに初期化してステップＳ７１５に進む。
【０１５１】
またステップＳ７１１で、読み出しラインが印刷有効領域でないときはステップＳ７１５に進む。ステップＳ７１５では、読み出し回路ライン(start_line _index)を＋１し、処理済みライン数(line_cnt)を＋１する。そしてステップＳ７１６で、その処理済みのライン数が、１ページのライン数（RegBeamLines）になったか、即ち、１ページ分のイメージデータの処理が終了したかをみる。終了していれば、このＤＭＡ動作を終了するが、そうでないときはステップＳ７０２に進み、次の走査ラインに対する処理を実行する。ここでＤＭＡコントローラ３０５ａは、ＤＭＡ動作を終了した時に、割り込み（不図示）をＣＰＵ３０８に送る。ＣＰＵ３０８はこの割り込みを検出することで、このＤＭＡを終了したことを検知する。
【０１５２】
以上説明したように実施の形態７によれば、ＤＭＡＣがリングバッファを使用して、走査ラインの曲がりを補正するようにライン間でのりかえを行いながら曲がった画像データを読み出すことができる。これにより、画像データの１ページ分よりも小さな容量のバッファを用いて、レーザビームの曲がりを補正できるという効果がある。
【０１５３】
［実施の形態８］
本発明の実施の形態８に係るＤＭＡコントローラ３０５の動作について、図２６を用いて説明する。この実施の形態８は、印刷部１０７にて記録媒体に印刷させる画像データの位置を記録媒体上の任意の位置とすることを特徴とする。
【０１５４】
図２６は、画像データを記録媒体上の特定の記録位置に記録させる状態を示す図である。また図２７は、画像データを記録媒体上の特定の記録位置からシフトさせた位置に記録させる状態を示す図である。
【０１５５】
前述したように、レジストレーションの原因となる走査ラインの曲がりは、走査ラインの主走査方向の位置に応じて異なる。このため画像の記録位置を図２６の記録位置から主走査方向に所定の画素数（shift_x）シフトさせる場合は、そのシフトさせた位置に応じた調整が必要である。なお、このシフトする画素数（shift_x）は、ＣＰＵ３０８が、ＤＭＡコントローラ３０５のレジスタ部５０１に設定するものとする。そしてＣＰＵ３０８は、レジスタ部５０１に設定したshift_xに基づいて下記のように、RegSegLenを書換えるとともにRegStartAddrを算出する。
（i）下記の式を満たすような値Ｙを算出し、読み出しを開始するセグメントＹを決定する。
【０１５６】
shift_x ≦ ΣRegSelLen[i] ( i = 1,2...Y)
（ii)シフトにより開始セグメントのセグメントレングスが変更になるため、下記の式に基づいて開始セグメントのセグメントレングス（RegSegLen[Z]）の値を書換える。
【０１５７】
RegSegLen[Z] = ΣregSelLen[i] (i = 1,2...Y) - shift_x
（iii)シフトにより開始セグメントが変更になるため、開始ライン（Line）を下記に基づいて算出する。
【０１５８】
Line = ΣregUpDown [i - 1] (i = 1,2...Y)
また、スタートアドレス（RegStartAddr）は、ラインの移動量と画像データにおける隣合うラインのアドレスオフセット値（RegLineOffset）から下記に式に基づいて算出する。
【０１５９】
RegStartAddr = Line*RegLineOffset
そして、上記で算出した値に基づいて、前述の実施の形態１の図７に示す動作を実行することで、印刷部１０７にて記録媒体に印刷させる画像データを、記録媒体上の任意の位置とすることができる。
【０１６０】
なお本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムを読み出して実行することによっても達成され得る。その場合、プログラムの機能を有していれば、形態は、プログラムである必要はない。
【０１６１】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明のクレームでは、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。
【０１６２】
プログラムを供給するための記録媒体としては、様々なものが使用できる。例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などである。
【０１６３】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページからハードディスク等の記録媒体にダウンロードすることによっても供給できる。その場合、ダウンロードされるのは、本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルであってもよい。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明のクレームに含まれるものである。
【０１６４】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布する形態としても良い。その場合、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムが実行可能な形式でコンピュータにインストールされるようにする。
【０１６５】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される形態以外の形態でも実現可能である。例えば、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【０１６６】
更に、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれるようにしてもよい。この場合、その後で、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行ない、その処理によって前述した実施形態の機能が実現される。
【図面の簡単な説明】
【０１６７】
【図１】本発明の実施の形態に係るカラー画像形成装置（多機能装置）の構成を説明するブロック図である。
【図２】本発明の実施の形態に係るプリンタコントローラの詳細構成を示すブロック図である。
【図３】本発明の実施の形態に係るプリンタコントローラのＤＭＡコントローラの詳細構成を示すブロック図である。
【図４】本発明の実施の形態に係るレジストレーションずれとその補正を説明するための図である。
【図５】本発明の実施の形態に係るレジストレーションずれとその補正を説明するための図である。
【図６】本発明の実施の形態１に係るＤＭＡコントローラに走査ラインの曲がりを指定する方法を説明するための図である。
【図７Ａ】、
【図７Ｂ】本発明の実施の形態１に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図８】本発明の実施の形態２に係るＤＭＡコントローラに走査ラインの曲がりを指定する方法を説明するための図である。
【図９Ａ】、
【図９Ｂ】本発明の実施の形態２に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図１０】本発明の実施の形態３に係るＤＭＡコントローラに対して走査ラインの曲がりを指定する方法を説明するための図（Ａ）、及び情報UpDown[i]をテーブルとして格納した状態を示す図（Ｂ）である。
【図１１】本発明の実施の形態３に係るＤＭＡコントローラの構成を示すブロック図である。
【図１２Ａ】、
【図１２Ｂ】本発明の実施の形態３に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図１３】本発明の実施の形態４に係るＤＭＡコントローラに走査ラインの曲がりを指定する方法を説明するための図である。
【図１４Ａ】、
【図１４Ｂ】本発明の実施の形態４に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図１５】本発明の実施の形態５に係るＤＭＡコントローラに有効画像領域のメモリアドレスを指定する方法を説明するための図である。
【図１６】本発明の実施の形態５に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図１７】図１６のステップＳ５１３における状態state及びアドレスの更新処理の詳細を示すフローチャートである。
【図１８】本発明の実施の形態６に係るＤＭＡコントローラに有効画像領域を、メモリ上のアドレスで指定する方法を説明するための図である。
【図１９】本発明の実施の形態６に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図２０】本発明の実施の形態７に係るプリンタコントローラの詳細構成を示すブロック図である。
【図２１】本発明の実施の形態７に係るプリンタコントローラのＤＭＡコントローラの詳細構成を示すブロック図である。
【図２２】本発明の実施の形態７に係るＤＭＡコントローラでの走査ラインの曲がりの指定を説明するための図である。
【図２３】本実施の形態７に係るＤＭＡコントローラにリングバッファ領域を指定する方法を説明するための図である。
【図２４】本実施の形態７に係るＤＭＡコントローラのアドレス生成部の動作を示すフローチャートである。
【図２５】図２４のフローチャートの１ライン処理動作を説明するフローチャートである。
【図２６】本発明の実施の形態８において、画像データを記録媒体上の特定の記録位置に記録させる状態を示す図である。
【図２７】実施の形態８において、画像データを記録媒体上の特定の記録位置からシフトさせた位置に記録させる状態を示す図である。
【図１】
2008148291.tif 000003
【図２】
2008148291.tif 000004
【図３】
2008148291.tif 000005
【図４】
2008148291.tif 000006
【図５】
2008148291.tif 000007
【図６】
2008148291.tif 000008
【図７Ａ】
2008148291.tif 000009
【図７Ｂ】
2008148291.tif 000010
【図８】
2008148291.tif 000011
【図９Ａ】
2008148291.tif 000012
【図９Ｂ】
2008148291.tif 000013
【図１０】
2008148291.tif 000014
【図１１】
2008148291.tif 000015
【図１２Ａ】
2008148291.tif 000016
【図１２Ｂ】
2008148291.tif 000017
【図１３】
2008148291.tif 000018
【図１４Ａ】
2008148291.tif 000019
【図１４Ｂ】
2008148291.tif 000020
【図１５】
2008148291.tif 000021
【図１６】
2008148291.tif 000022
【図１７】
2008148291.tif 000023
【図１８】
2008148291.tif 000024
【図１９】
2008148291.tif 000025
【図２０】
2008148291.tif 000026
【図２１】
2008148291.tif 000027
【図２２】
2008148291.tif 000028
【図２３】
2008148291.tif 000029
【図２４】
2008148291.tif 000030
【図２５】
2008148291.tif 000031
【図２６】
2008148291.tif 000032
【図２７】
2008148291.tif 000033