(57)【特許請求の範囲】
【請求項１】
パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、
前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第１の形式で表したときの前記エッジデータの数が第１の閾値以下となる場合には、前記パターン画像を前記第１の形式で表したパターン画像情報を第１の記憶手段に記憶するように処理し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値を超える場合には、画素毎に画素値を有する第２の形式で前記パターン画像を表したパターン画像情報を前記第１の記憶手段に記憶するように処理する第１の記憶処理手段と、
前記第１の記憶手段に記憶されるパターン画像情報が前記第２の形式の場合に、前記第２の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が第２の閾値以下となる場合には、前記マスク情報を前記第１の形式で表して第２の記憶手段に記憶するように処理し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値を超える場合には、前記マスク情報を前記第２の形式で表して前記第２の記憶手段に記憶するように処理する第２の記憶処理手段と、
前記第１の記憶手段に記憶したパターン画像情報が前記第１の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記第１の記憶手段に記憶したパターン画像情報が前記第２の形式の場合には、該パターン画像情報と共に前記第２の記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、
を備えた画像処理装置。
【請求項２】
前記第２の閾値を、前記マスク情報を前記第１の形式で表したときのデータ量と、前記マスク情報を前記第２の形式で表したときのデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項１記載の画像処理装置。
【請求項３】
前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第２の形式で表したときの前記パターン画像情報のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項１又は請求項２に記載の画像処理装置。
【請求項４】
前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第２の形式で表したときの前記パターン画像情報のデータ量に前記マスク情報を前記第２の形式で表したときのデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定した
請求項１又は請求項２に記載の画像処理装置。
【請求項５】
前記第１の記憶処理手段は、ライン単位で前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値以下となるか否かを判断し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値以下となるラインについては、前記第１の形式で表したパターン画像情報を前記第１の記憶手段に記憶するように処理し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値を超えるラインについては、前記第２の形式で表したパターン画像情報を前記第１の記憶手段に記憶するように処理し、
前記第２の記憶処理手段は、ライン単位で前記マスク情報を前記第２の形式で表したときのエッジデータの数が前記第２の閾値以下となるか否かを判断し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値以下となるラインについては、前記第１の形式で表したマスク情報を前記第２の記憶手段に記憶するように処理し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値を超えるラインについては、前記第２の形式で表した前記マスク情報を前記第２の記憶手段に記憶するように処理する
請求項１に記載の画像処理装置。
【請求項６】
前記第２の閾値を、前記マスク情報を前記第１の形式で表したときの１ライン分データ量と、前記マスク情報を前記第２の形式で表したときの１ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項５記載の画像処理装置。
【請求項７】
前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの１ライン分のデータ量と、前記パターン画像を前記第２の形式で表したときの１ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項５又は請求項６に記載の画像処理装置。
【請求項８】
前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの１ライン分のデータ量と、前記パターン画像を前記第２の形式で表したときの１ライン分のデータ量に前記マスク情報を前記第２の形式で表したときの１ライン分のデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定した
請求項６又は請求項７に記載の画像処理装置。
【請求項９】
請求項１〜請求項８のいずれか１項記載の画像処理装置と、
前記画像処理装置により前記塗りつぶし命令が実行されて生成された出力画像情報に基づいて画像を形成する画像形成手段と、
を備えた画像形成装置。
【請求項１０】
コンピュータを、
パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、
前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第１の形式で表したときの前記エッジデータの数が第１の閾値以下となる場合には、前記パターン画像を前記第１の形式で表したパターン画像情報を第１の記憶手段に記憶するように処理し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値を超える場合には、画素毎に画素値を有する第２の形式で前記パターン画像を表したパターン画像情報を前記第１の記憶手段に記憶するように処理する第１の記憶処理手段、
前記第１の記憶手段に記憶されるパターン画像情報が前記第２の形式の場合に、前記第２の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が第２の閾値以下となる場合には、前記マスク情報を前記第１の形式で表して第２の記憶手段に記憶するように処理し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値を超える場合には、前記マスク情報を前記第２の形式で表して前記第２の記憶手段に記憶するように処理する第２の記憶処理手段、及び
前記第１の記憶手段に記憶したパターン画像情報が前記第１の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記第１の記憶手段に記憶したパターン画像情報が前記第２の形式の場合には、該パターン画像情報と共に前記第２の記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置、画像形成装置、及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には、１ラインデータを参照データとしてラインバッファに格納し、格納データとの比較を行なってデータの符号化又は復号処理を行なう二次元符号化復号処理装置において、参照データを構成するランレングスデータサイズがラインバッファのサイズを超えないときはランレングスデータ形式でラインバッファに格納し、ランレングスデータサイズがラインバッファのサイズより大きいときはビットマップデータ形式で格納する技術が開示されている。
【０００３】
また特許文献２には、複数の画像オブジェクト（例えば文字やイメージやグラフィック）で構成されている電子ドキュメント及びＰＤＬデータを受信し、画像を形成する画像形成装置において、ベクターエッジで構成されるディスプレイリストを生成する手段を備え、描画処理の速度の妨げになるラインを抽出する処理を備え、抽出されたラインのみスキャンラインエッジに変換する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−０７８０４２号公報
【特許文献２】特開２００９−１０１５１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる画像処理装置、画像形成装置、及びプログラムを得ることを目的とする。
【課題を解決するための手段】
【０００６】
請求項１の発明の画像処理装置は、パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第１の形式で表したときの前記エッジデータの数が第１の閾値以下となる場合には、前記パターン画像を前記第１の形式で表したパターン画像情報を第１の記憶手段に記憶するように処理し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値を超える場合には、画素毎に画素値を有する第２の形式で前記パターン画像を表したパターン画像情報を前記第１の記憶手段に記憶するように処理する第１の記憶処理手段と、前記第１の記憶手段に記憶されるパターン画像情報が前記第２の形式の場合に、前記第２の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が第２の閾値以下となる場合には、前記マスク情報を前記第１の形式で表して第２の記憶手段に記憶するように処理し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値を超える場合には、前記マスク情報を前記第２の形式で表して前記第２の記憶手段に記憶するように処理する第２の記憶処理手段と、前記第１の記憶手段に記憶したパターン画像情報が前記第１の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記第１の記憶手段に記憶したパターン画像情報が前記第２の形式の場合には、該パターン画像情報と共に前記第２の記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、を備えている。
【０００７】
請求項２の発明は、請求項１記載の画像処理装置において、前記第２の閾値を、前記マスク情報を前記第１の形式で表したときのデータ量と、前記マスク情報を前記第２の形式で表したときのデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【０００８】
請求項３の発明は、請求項１又は請求項２に記載の画像処理装置において、前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第２の形式で表したときの前記パターン画像情報のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【０００９】
請求項４の発明は、請求項１又は請求項２に記載の画像処理装置において、前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第２の形式で表したときの前記パターン画像情報のデータ量に前記マスク情報を前記第２の形式で表したときのデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定したものである。
【００１０】
請求項５の発明は、請求項１に記載の画像処理装置において、前記第１の記憶処理手段は、ライン単位で前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値以下となるか否かを判断し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値以下となるラインについては、前記第１の形式で表したパターン画像情報を前記第１の記憶手段に記憶するように処理し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値を超えるラインについては、前記第２の形式で表したパターン画像情報を前記第１の記憶手段に記憶するように処理し、前記第２の記憶処理手段は、ライン単位で前記マスク情報を前記第２の形式で表したときのエッジデータの数が前記第２の閾値以下となるか否かを判断し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値以下となるラインについては、前記第１の形式で表したマスク情報を前記第２の記憶手段に記憶するように処理し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値を超えるラインについては、前記第２の形式で表した前記マスク情報を前記第２の記憶手段に記憶するように処理する。
【００１１】
請求項６の発明は、請求項５記載の画像処理装置において、前記第２の閾値を、前記マスク情報を前記第１の形式で表したときの１ライン分データ量と、前記マスク情報を前記第２の形式で表したときの１ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【００１２】
請求項７の発明は、請求項５又は請求項６に記載の画像処理装置において、前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの１ライン分のデータ量と、前記パターン画像を前記第２の形式で表したときの１ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【００１３】
請求項８の発明は、請求項６又は請求項７に記載の画像処理装置において、前記第１の閾値を、前記パターン画像を前記第１の形式で表したときの１ライン分のデータ量と、前記パターン画像を前記第２の形式で表したときの１ライン分のデータ量に前記マスク情報を前記第２の形式で表したときの１ライン分のデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定したものである。
【００１４】
請求項９の発明の画像形成装置は、請求項１〜請求項８のいずれか１項記載の画像処理装置と、前記画像処理装置により前記塗りつぶし命令が実行されて生成された出力画像情報に基づいて画像を形成する画像形成手段と、を備えている。
【００１５】
請求項１０の発明は、コンピュータを、パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第１の形式で表したときの前記エッジデータの数が第１の閾値以下となる場合には、前記パターン画像を前記第１の形式で表したパターン画像情報を第１の記憶手段に記憶するように処理し、前記パターン画像を前記第１の形式で表したときのエッジデータの数が前記第１の閾値を超える場合には、画素毎に画素値を有する第２の形式で前記パターン画像を表したパターン画像情報を前記第１の記憶手段に記憶するように処理する第１の記憶処理手段、前記第１の記憶手段に記憶されるパターン画像情報が前記第２の形式の場合に、前記第２の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が第２の閾値以下となる場合には、前記マスク情報を前記第１の形式で表して第２の記憶手段に記憶するように処理し、前記マスク情報を前記第１の形式で表したときのエッジデータの数が前記第２の閾値を超える場合には、前記マスク情報を前記第２の形式で表して前記第２の記憶手段に記憶するように処理する第２の記憶処理手段、及び前記第１の記憶手段に記憶したパターン画像情報が前記第１の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記第１の記憶手段に記憶したパターン画像情報が前記第２の形式の場合には、該パターン画像情報と共に前記第２の記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、として機能させるためのプログラムである。
【発明の効果】
【００１６】
請求項１に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの第１の記憶手段の使用量だけでなく、マスク情報を記憶するときの第２の記憶手段の使用量も抑制することができる、という効果を有する。
【００１７】
請求項２に記載の発明は、本構成を有しない場合に比べて、マスク情報を記憶するために必要な第２の記憶手段の使用量を抑えることができる、という効果を有する。
【００１８】
請求項３に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第１の記憶手段の使用量を抑えることができる、という効果を有する。
【００１９】
請求項４に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第１の記憶手段の使用量と、マスク情報を格納するために必要な第２の記憶手段の使用量と、を合計した合計使用量を抑えることができる。
【００２０】
請求項５に記載の発明は、本構成を有しない場合に比べて、ライン毎に第１の記憶手段及び第２の記憶手段の使用量を抑制することができる、という効果を有する。
【００２１】
請求項６に記載の発明は、本構成を有しない場合に比べて、マスク情報を記憶するために必要な第２の記憶手段の使用量を抑えることができる、という効果を有する。
【００２２】
請求項７に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第１の記憶手段の使用量を抑えることができる、という効果を有する。
【００２３】
請求項８に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第１の記憶手段の使用量と、マスク情報を格納するために必要な第２の記憶手段の使用量と、を合計した合計使用量を抑えることができる、という効果を有する。
【００２４】
請求項１０に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【００２５】
請求項１１に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【図面の簡単な説明】
【００２６】
【図１】画像形成装置の構成の一例を示す概略ブロック図である。
【図２】ＰＤＬデータに含まれる命令の処理内容を模式的に示す模式図である。
【図３】（Ａ）は、パターン画像における、塗りつぶし範囲の始点座標(x_start, y_start)に対応する座標(ptn_x, ptn_y)を示す図であり、（Ｂ）は、該座標(ptn_x, ptn_y)をパターン画像の描画を開始する開始点としてパターン画像を塗りつぶし範囲に配列して敷き詰めた状態を示す図である。
【図４】（Ａ）は、パターン画像によるパターン塗りつぶし処理より先に描画された画像を示す図であり、（Ｂ）は、該先に（Ａ）に示す画像が描画された後に、画像領域と非画像領域とを含むパターン画像が描画された状態を示す図である。
【図５】（Ａ）は、カラーのパターン画像をラスタ形式で表したときのパターン画像情報を模式的に示す図であり、（Ｂ）は、カラーのパターン画像、白黒のパターン画像、及びマスク情報をラスタ形式で表したときのメモリ使用量を示すテーブルである。
【図６】（Ａ）は、パターン画像をエッジリスト形式で表したときのエッジリストの一例を模式的に示した図であり、（Ｂ）は、マスク情報をエッジリストで表したときのエッジリストの一例を模式的に示した図である。
【図７】（Ａ）は、エッジリスト形式のパターン画像情報の一例であり、（Ｂ）は、（Ａ）のパターン画像情報により表されるパターン画像を模式的に示す図である。
【図８】（Ａ）は、カラーのパターン画像をエッジリスト形式で表したときのエッジリストの一例を模式的に示した図であり、（Ｂ）は、カラーのパターン画像、白黒のパターン画像、及びマスク情報をエッジリスト形式で表したときのメモリ使用量を示すテーブルである。
【図９】パターン画像の一例を示す図である。
【図１０】図９に示すパターン画像を定義するための定義命令の疑似コードである。
【図１１】図９に示すパターン画像をエッジリスト形式で表したパターン画像情報を模式的に示した図である。
【図１２】図９に示すパターン画像をラスタ形式で表したパターン画像情報を模式的に示すと共に、ラスタ形式で表したマスク情報を模式的に示した図である。
【図１３】図９に示すパターン画像をラスタ形式で表したパターン画像情報を模式的に示すと共に、エッジリスト形式で表したマスク情報を模式的に示した図である。
【図１４】定義命令によるパターン定義処理の一例を示す概略的なフローチャートである。
【図１５】（Ａ）は、パターン塗りつぶし命令の疑似コードであり、（Ｂ）は、（Ａ）に示すパターン塗りつぶし命令が実行されたときの出力画像を示す図である。
【図１６】ＰＤＬデータ処理のメインルーチンのフローチャートを示す図である。
【図１７】パターン管理テーブルの一例を示す図である。
【図１８】パターン定義処理の流れを示すフローチャートである。
【図１９】エッジリスト形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【図２０】イメージ描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図２１】エッジの切り出し処理の流れを示すフローチャートである。
【図２２】エッジリストへのエッジデータ追加処理の流れを示すフローチャートである。
【図２３】エッジ挿入処理の流れを示すフローチャートである。
【図２４】パターン画像情報のエッジ挿入処理を説明する説明図である。
【図２５】グラフィックス描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図２６】文字描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図２７】文字のエッジ抽出処理の流れを示すフローチャートである。
【図２８】黒座標の検出処理の流れを示すフローチャートである。
【図２９】白座標の検出処理の流れを示すフローチャートである。
【図３０】パターン画像情報をラスタ形式に変換する変換処理の流れを示すフローチャートである。
【図３１】マスク情報のエッジ挿入処理の流れを示すフローチャートである。
【図３２】ラスタ形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【図３３】イメージ描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図３４】マスク情報へのマスク範囲の追加処理の流れを示すフローチャートである。
【図３５】マスク情報をラスタ形式に変換する処理の流れを示すフローチャートである。
【図３６】グラフィックス描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図３７】文字描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図３８】パターン塗りつぶし処理の流れを示すフローチャートである。
【図３９】塗りつぶし処理を概念的に説明する説明図である。
【図４０】ラスタ形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【図４１】エッジリスト形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【図４２】ハイブリッド形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２７】
以下、図面を参照して画像形成装置の一実施形態を詳細に説明する。図１には本実施形態に係る画像形成装置１０が示されている。画像形成装置１０には、装置制御部１２と、セットされた読取対象の文書(紙原稿)を光学的に読み取って読取画像データを出力する画像読取部１４と、入力された出力画像情報が表す出力画像を記録用紙等の記録媒体上に形成する画像形成部１６と、ＬＣＤ等から成る表示部１８Ａ及びテンキーやタッチパネル等から成り利用者による操作を受付ける操作受付部１８Ｂが設けられた操作パネル１８と、ファクシミリ装置としての機能を備えた他の機器と電話線及び公衆通信網(図示省略)経由で画情報の送受信(ファクシミリ通信)を行なう画情報送受信部２０と、ＰＣ(Personal Computer)等の情報処理装置とネットワークケーブル及びコンピュータネットワーク(図示省略)経由で情報の送受信を行なうためのネットワーク通信制御部２２と、が設けられており、これらはバス２４を介して互いに接続されている。
【００２８】
装置制御部１２はマイクロコンピュータ等から成り、ＣＰＵ１２Ａ、メモリ１２Ｂ、ＨＤＤ(Hard Disk Drive)やフラッシュメモリ等から成る不揮発性の記憶部１２Ｃが設けられている。記憶部１２Ｃには、各種プログラム（描画情報を解釈して実行する画像処理のプログラムも含まれる。詳細は後述する）及び必要なデータ等が各々記憶されている。装置制御部１２は請求項１等に記載の画像処理装置の一例であり、ＣＰＵ１２Ａが画像処理プログラムを実行することで画像処理装置の一例として機能する。
【００２９】
画像形成部１６は、装置制御部１２により行われた画像処理により生成された出力画像情報に基づいて、記録用紙等に画像を形成する。
【００３０】
本実施の形態では、前述したように装置制御部１２の画像処理の機能により、入力された描画情報が解釈されて出力画像情報が生成され、ページバッファに書き込まれる。描画情報は、ポストスクリプト等のページ記述言語(Page Description Language)により記述された情報であり、本実施の形態では少なくとも定義命令及び塗りつぶし命令を含むものとする。以下、描画情報をＰＤＬデータと呼称する。
【００３１】
定義命令は、パターン画像を定義するための命令である。本実施の形態において、定義命令は、１又は複数のコマンドを含んで構成される。
【００３２】
塗りつぶし命令は、出力画像情報をページバッファに書き込むための描画命令の一種であって、出力画像の指定された範囲（以下、塗りつぶし範囲）を指定された色で塗りつぶすか或いはパターン画像を配列して塗りつぶす。以下、パターン画像を用いた塗りつぶし命令をパターン塗りつぶし命令と呼称し、指定された色で塗りつぶす塗りつぶし命令（色塗りつぶし命令）と区別して説明する。なお、本実施の形態において、各描画命令も、定義命令と同様、１又は複数のコマンドを含んで構成される。
【００３３】
なお、パターン塗りつぶし命令では、パターン画像が繰り返し用いられ塗りつぶし範囲に複写されるため、パターン画像を表す情報（パターン画像情報という）を、出力画像情報とは別に、中間画像データとしてメモリ１２Ｂの領域に格納しておく必要がある。本実施の形態では、定義命令の実行により、パターン画像情報がメモリ１２Ｂのメモリ領域に記憶される。また、後述するが、定義命令において作成されるパターン画像情報のデータ形式によっては、パターン画像情報の他に、マスク情報が作成されメモリ領域に記憶される場合もある。
【００３４】
また、本実施の形態では、幅方向（水平方向）の軸をＸ軸、高さ方向（垂直方向）の軸をＹ軸とするＸ−Ｙ座標系で位置を表すものとする。また、矩形領域における左上座標を（0,0)とする。
【００３５】
ここで、本実施の形態の作用を概念的に説明する。本実施の形態において、ＰＤＬデータに基づく画像処理は、図２に示すように、ＰＤＬデータに含まれる命令の記述順に実行される。図２では、ＰＤＬデータの命令に含まれる各コマンドを、擬似的或いは模式的に示しており、３１がパターン属性定義コマンドの疑似コード、３２１〜３が模式的に示した描画コマンド（３２１はグラフィックス描画コマンド、３２２は文字描画コマンド、３２３はイメージ描画コマンドを示している）、３３がカレントパターン設定コマンドの疑似コード，３４が塗りつぶしコマンドの疑似コードであり、これら各コマンドが、この順にＰＤＬデータに記述されているものとする。
【００３６】
ここで、パターン属性定義コマンド３１及び描画コマンド３２１〜３は、定義命令に含まれるコマンドである。パターン属性定義コマンド３１は、パターン画像のサイズ等、パターン画像の属性を定義するためのコマンドである。なお、パターン属性にはサイズの他、パターン名が含まれていてもよい。描画コマンド３２１〜３は、パターン属性定義コマンドにより定義されたサイズの矩形領域に画像を描画するコマンドであり、描画コマンド３２１〜３により画像が描画される領域を画像領域という。
【００３７】
カレントパターン設定コマンド３３及び塗りつぶしコマンドは、パターン塗りつぶし命令に含まれるコマンドである。カレントパターン設定コマンド３３は、塗りつぶし範囲に配列するパターン画像を設定するコマンドである。塗りつぶしコマンド３３は、該カレントパターン設定コマンドで設定されたパターン画像により塗りつぶす処理を実行するためのコマンドである。
【００３８】
まず、パターン属性定義コマンド３１により、パターン画像の始点を示す座標(0,0)と、パターン画像の幅100画素、及び高さ100画素の各々が定義される。これにより、メモリ１２Ｂ内のパターン用バッファ内に、始点を基準として（ここでは矩形の左上を基準とする）、幅が100画素、高さが100画素のパターン画像を表すパターン画像情報を一時的に格納するためのパターン画像用のメモリ領域が確保される（図２（１）も参照）。高さが100画素であるため、該パターン画像を構成する水平方向のライン（スキャンライン）の数は100本となる。なお、本実施の形態において、図２に示されるマスク情報（詳細は後述する）を格納するためのメモリ領域は、描画コマンドによるパターン作成中に必要に応じて確保されるものである。詳細は後述する。
【００３９】
続いて、グラフィックス描画コマンド３１１により、上記定義されたサイズの矩形領域の指定された位置に、図形等のグラフィックス画像が描画される。更に、文字描画コマンド３１２により、上記矩形領域の指定された位置に、文字を表す文字画像が追加的に描画される。更に、イメージ描画コマンド３１３により、上記矩形領域の指定された位置に、自然画や写真画等のイメージ画像が追加的に描画される。描画コマンドを処理する毎にパターン画像が編集され、定義命令に含まれる描画コマンドの各々が実行され最終的なパターン画像ができあがる。このように、複数或いは１つの描画コマンドにより、例えば図２に示すパターン画像が作成される。作成されたパターン画像を示すパターン画像情報は、前述したパターン画像用のメモリ領域に格納される。
【００４０】
なお、図２では、複数の描画コマンドの画像領域が重ならないパターン画像が図示されているが、複数の描画コマンドの画像領域が重なる場合には、後から描画される画像が優先され、先に描画された画像の画素値が後に描画される画像の画素値に置き換えられる。また、定義命令においては、パターン画像の描画コマンドにより画像が描画される画像領域以外の非画像領域の画素値については指定がない（データがない）。
【００４１】
次に、パターン塗りつぶし命令の処理に移行する。パターン塗りつぶし命令に含まれるカレントパターン設定コマンド３３により指定された（上記定義命令により定義済みの）パターン画像が、塗りつぶし範囲に配列するパターン画像（カレントパターン）に設定される（図２（３）も参照。）。
【００４２】
次に、塗りつぶしコマンド３４により、上記メモリ領域に格納されたパターン画像情報が読み出されて繰り返し用いられ、出力画像における指定された塗りつぶし範囲にパターン画像が配列されて敷き詰められる。該塗りつぶし命令の実行によりパターン画像が配列された出力画像を示す出力画像情報は、メモリ１２Ｂに確保された出力画像情報用の記憶領域（ページバッファ）に、画素毎に画素値を有するラスタ形式で格納される（図２（４）も参照。）。図２に擬似的に示した塗りつぶしコマンド３４では、塗りつぶし範囲の始点座標(50,50)と、塗りつぶし範囲の幅150画素、及び高さ200画素が指定されている。従って、該塗りつぶしコマンド３４により、該始点の座標(50,50)を左上の座標として幅150画素、高さ200画素の矩形の塗りつぶし範囲に、上記パターン画像が配列されることになる。
【００４３】
図３（Ａ）に示すように、パターン画像を塗りつぶし範囲に配列する際には、パターン画像において、塗りつぶし範囲の始点の座標(x_start, y_start)に対応する座標(ptn_x, ptn_y)を求め、図３（Ｂ）に示すように、該座標(ptn_x, ptn_y)をパターン画像の描画を開始する開始点として塗りつぶし範囲に敷き詰める。従って、塗りつぶし命令で指定された座標によっては、図２，図３に示すように、塗りつぶし範囲に対して、パターン画像がパターン画像の始点から配列されない場合もある。
【００４４】
また、ＰＤＬデータに、上記パターン画像によるパターン塗りつぶし命令以外に他の描画命令が含まれている場合もある。その場合には、パターン塗りつぶし命令より先に記述された描画命令により描画された画像に対して上書きするようにパターン塗りつぶし命令が実行される。
【００４５】
一方、パターン定義において上記描画コマンドにより画像が描画される画像領域以外の非画像領域は、画素値のデータがない領域である。従って、ＰＤＬデータにおいて、図４（Ａ）に示すように、該パターン画像によるパターン塗りつぶし命令より先に何らかの画像を描画する命令が記述されていた場合には、該命令により先に描画された画像の描画領域とパターン画像の非画像領域とが重なる領域においては、図４（Ｂ）に示すように、該先に描画された画像の画素値は、パターン画像の画素値により上書きされずにそのままページバッファに保持される。従って、パターン画像の非画像領域は、先に描画された画像（背景）が透過される状態となる。
【００４６】
なお、上記で説明した定義命令やパターン塗りつぶし命令を構成するコマンドは一例であって、ＰＤＬデータにおける定義命令やパターン塗りつぶし命令の記述は特に限定されない。
【００４７】
ところで、本実施の形態において、パターン画像情報及び後述するマスク情報をメモリ１２Ｂに格納する際のデータ形式は２種類ある。１つは前述したラスタ形式である。
【００４８】
図５（Ａ）に示すように、カラーのパターン画像情報をラスタ形式で表す場合には、ブラック（Ｋ）色、イエロー（Ｙ）色、マゼンタ（Ｍ）色、シアン（Ｃ）色の各々の画素値（パターン画像においては色値ともいう）が画素毎に保持される。本実施の形態では、上記ＫＹＭＣ各色の各々を１バイトの値で表すようにしているため、カラーの色値を表すには１画素につき４バイト必要となる。
【００４９】
従って、図５（Ｂ）に示すように、幅がwidth、高さがheightのカラーのパターン画像情報をラスタ形式で表してメモリ１２Ｂに格納するときのメモリ使用量は、４×width×height（バイト）となる。
【００５０】
白黒のパターン画像情報をラスタ形式で表す場合には、ブラックの色値が画素毎に保持されるため、１画素につき１バイト必要となる。従って、図５（Ｂ）に示すように、幅がwidth、高さがheightの白黒のパターン画像情報をラスタ形式で表してメモリ１２Ｂに格納するときのメモリ使用量は、width×height（バイト）となる。
【００５１】
なお、ラスタ形式のパターン画像情報における画像領域の画素値は定義命令の定義に従った画素値とされるが、非画像領域の各画素の色値は、何らかの値であればよく、特に限定されない。これはパターン塗りつぶし命令の実行の際にマスク情報によりマスク処理（すなわち画像領域の色値が抽出されて使用）され、非画像領域の各画素の値は塗りつぶし範囲の塗りつぶしには使用されないためである。
【００５２】
また、パターン画像を示すパターン画像情報をメモリ１２Ｂに格納する際に取り得るもう１つのデータ形式は、エッジリスト形式である。エッジリスト形式は、ライン毎（本実施の形態ではスキャンライン毎）に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータで画像を表現するものである。
【００５３】
図６（Ａ）は、Ｘ−Ｙ座標系のＹ座標値が０のスキャンラインに対応するエッジリストの一例を模式的に示した図である。図６（Ａ）に示すように、エッジリストを構成するエッジデータは、色値colorと、該色値colorの画素が連続する区間の始点startと、該色値colorの画素が連続する区間の終点endと、次のエッジデータの格納先を示すアドレスnextとを有する。次のエッジデータが存在しなければ、アドレスnextにはNULLが格納される。このように、本実施の形態では、エッジリスト形式は、次のエッジデータへのアドレスnextによって、スキャンライン毎のエッジデータの各々が連結されるリスト構造とされている。エッジデータが連結されてなるデータ群をエッジリストと呼ぶ。もちろん、画像によっては、１つのエッジデータにより構成されるエッジリストもある。
【００５４】
図７（Ａ）は、図７（Ｂ）に示す６画素×６画素のパターン画像をエッジリスト形式で表したときのパターン画像情報を模式的に示す図である。エッジリスト形式のパターン画像情報は、各スキャンライン毎のエッジデータと、各スキャンライン毎の先頭のエッジデータへのアドレス（先頭アドレス）を格納する先頭アドレステーブルとにより構成される。
【００５５】
図８（Ａ）に示すように、本実施の形態において、エッジデータに含まれる色値colorは、カラーの場合には、上述した４色の色値を並べて表された４バイトの値で表され、始点start及び終点endは、各々２バイトの値で表され、アドレスnextは４バイトの値で表されるため、１つのエッジデータにつき１２バイト必要となる。また、本実施の形態において、先頭アドレステーブルの各アドレスは４バイトの値で表される。
【００５６】
従って、図８（Ｂ）に示すように、幅がwidth、高さがheightのカラーのパターン画像情報をエッジリスト形式で表してメモリ１２Ｂに格納するときのメモリ使用量は、height×４＋１２×エッジ数（バイト）となる。ここで、エッジ数とは、エッジデータの数をいう。
【００５７】
また、白黒のパターン画像情報をエッジリスト形式で表す場合には、色値colorは１バイトでよいため、図８（Ｂ）に示すように、幅がwidth、高さがheightの白黒のパターン画像情報をエッジリスト形式で表してメモリ１２Ｂに格納するときのメモリ使用量は、height×４＋９×エッジ数（バイト）となる。
【００５８】
なお、パターン画像情報をエッジリスト形式で表す場合には、パターン画像の画像領域のエッジデータは作成されるが、非画像領域についてはエッジデータは作成されない。従って、塗りつぶし命令を実行するにあたり、パターン画像情報から画像領域の各画素の色値を抽出するためのマスク情報は必要ないが、パターン画像情報をラスタ形式で表す場合には、非画像領域の画素も含めて画素毎の画素値を保持するため、パターン画像情報から画像領域の各画素の色値を抽出するには、マスク情報が必要となる（図２も参照。）。マスク情報により、図４を用いて説明したように、パターン画像情報から画像領域の画素の画素値が抽出されて、ページバッファに書き込まれる。
【００５９】
マスク情報も、パターン画像情報と同様に、ラスタ形式及びエッジリスト形式のいずれかのデータ形式で表される。マスク情報の場合には、各画素の画素値は、色を示す値ではないため、以下では、マスク情報の各画素の画素値を、パターン画像の色値と区別するため、マスク値という。ラスタ形式でマスク情報を作成する場合には、非画像領域の各画素のマスク値を０にし画像領域の各画素のマスク値を１にしてマスク情報を作成する。このようにマスク値は０又は１となるため、本実施の形態ではラスタ形式のマスク情報を１画素１ビットで表すものとする。従って、図５（Ｂ）に示すように、幅がwidth、高さがheightのパターン画像に対するマスク情報をラスタ形式で表してメモリ１２Ｂに格納するときのメモリ使用量は、width×height/８（バイト）となる。なお、マスク値は上記０，１に限定されるものではなく、画像領域と非画像領域とが異なるマスク値となっていればよく、例えば、塗りつぶし命令の実行の際にマスク値０の領域の画素値を抽出するように構成する場合には、前記非画像領域の各画素のマスク値を１にし前記画像領域の各画素のマスク値を０にしてもよい。
【００６０】
また、マスク情報をエッジリスト形式で表す場合には、上記図６（Ａ）で示したエッジデータの色値colorの代わりに、図６（Ｂ）に示すように、マスク値maskを用い、該マスク値maskを１にして、スキャンライン毎の画像領域の区間を示すマスク情報を作成する。マスク値０の領域はエッジデータは作成されない。ここでは、エッジデータに含まれるマスク値maskは、１バイトで足りるため、図８（Ｂ）に示すように、幅がwidth、高さがheightのパターン画像に対するマスク情報をエッジリスト形式で表してメモリ１２Ｂに格納するときのメモリ使用量は、height×４＋９×エッジ数（バイト）となる。なお、マスク値maskは少なくとも１ビットあればよいため、マスク値maskを１ビットで表現してもよい仕様となっている場合には、メモリ使用量は、height×４＋９×エッジ数／８（バイト）となるが、本実施の形態では、マスク情報のエッジデータのマスク値maskは１バイト要するものとする。エッジリスト形式においても、マスク値は１に限定されず、予め定められた特定の値とすればよい。
【００６１】
なお、本実施の形態では、上述したように、始点start、終点end、画素値(色値color又はマスク値mask)、及び次のエッジデータへのアドレスnextにより構成されているものとして説明するが、エッジリストの形式は上記に限定されるものではない。例えば、１つのエッジデータが、始点start、該始点からの（同一の画素値の画素が連続する区間の）長さlength、画素値(色値color又はマスク値mask)及び次のエッジデータへのアドレスnextにより構成されていてもよい。また、上記の始点start、終点end、画素値color、アドレスnextのそれぞれのサイズ（バイト数）は、一例であって、これらに限定されるものではない。
【００６２】
このように、ラスタ形式とエッジリスト形式とでは、表現方法が異なり、データサイズも異なるため、本実施の形態では、パターン画像に応じて、メモリ１２Ｂにパターン画像情報を格納する際にラスタ形式で格納するか、エッジリスト形式で格納するかを判断して該判断結果に応じたデータ形式でパターン画像情報を格納するものとする。また、マスク情報についても、ラスタ形式で格納するか、エッジリスト形式で格納するかを判断して該判断結果に応じた形式でマスク情報を格納する。
【００６３】
なお、以下では、定義命令により作成される情報をパターン情報という。具体的には、パターン画像情報がラスタ形式でメモリ領域に格納された場合には、マスク情報も作成されるため、パターン画像情報及びマスク情報からなる情報がパターン情報となる。また、パターン画像情報がエッジリスト形式でメモリ領域に格納された場合には、マスク情報は作成されないため、パターン画像情報そのものがパターン情報となる。
【００６４】
ここで、より具体的な例を挙げて本実施の形態の作用について説明する。
【００６５】
図９に示すパターン画像により塗りつぶし範囲を塗りつぶす場合を例に挙げる。図１０は、図９に示すパターン画像を定義するための定義命令の疑似コードである。図２に示す疑似コードとは異なるが、描画情報に記述される各命令のコードは、解釈可能な形態であればよく、描画情報を構成する各命令をここで例示した疑似コードに限定するものではない。
【００６６】
図１０（１）に示すパターン属性定義コマンド（パターン属性定義文と言ってもよい）により、図９（１）に示すように、パターン画像の名称を示すパターン名：PTN1、パターン画像の高さ(pnt_height）：６画素、及びパターン画像の幅（pnt_width）：６画素、が定義されている。ここでは、パターン画像の始点の座標は(0,0)であるものとして省略されている。
【００６７】
図１０（２）に示す描画コマンドにより、図９（２）に示すように、マゼンタ色の３画素×３画素の矩形図形が描画開始位置(0,0)から描画される。図１０（３）に示す描画コマンドにより、図９（３）に示すように、シアン色の３画素×３画素の矩形図形が描画開始位置(3,0)から描画される。図１０（４）に示す描画コマンドにより、図９（４）に示すように、黒色の３画素×３画素の矩形図形が描画開始位置(3,3)から描画される。
【００６８】
なお、図９（５）に示す座標（3,3)を左上の座標とする３画素×３画素の矩形領域は、色値が指定されていない（データがない）非画像領域となる。
【００６９】
図１１は、図９に示すパターン画像をエッジリスト形式で表したパターン画像情報を模式的に示した図である。図１１に示すように、各スキャンライン毎に同一の色値の画素が連続する区間及び該色値を含むエッジデータがリスト構造で連結されている。パターン画像情報がエッジリスト形式の場合には、マスク情報が不要なため、パターン情報＝パターン画像情報となる。以下、このようにエッジリスト形式のパターン画像情報からなるパターン情報をエッジリスト形式のパターン情報と呼称する。
【００７０】
図１２は、図９に示すパターン画像をラスタ形式で表したパターン画像情報及びラスタ形式で表したマスク情報を模式的に示した図である。以下、このようにパターン画像情報及びマスク情報の双方がラスタ形式である場合のパターン情報をラスタ形式のパターン情報と呼称する。
【００７１】
図１３は、図９に示すパターン画像をラスタ形式で表したパターン画像情報及びエッジリスト形式で表したマスク情報を模式的に示した図である。以下、このようにパターン画像情報がラスタ形式であって、マスク情報がエッジリスト形式である場合のパターン情報をハイブリッド形式のパターン情報と呼称する。
【００７２】
パターン画像情報及びマスク情報をエッジリスト形式で保持するかラスタ形式で保持するかは、例えば、図１４に示すように、これら情報をエッジリスト形式で表したときのエッジ数と閾値とを比較し、エッジ数が閾値を超えればラスタ形式で保持し、エッジ数が閾値以下であればエッジリスト形式で保持するようにしてもよい。
【００７３】
図１４は、前述した画像処理プログラムで行われる画像処理の一部としての、描画情報に含まれる定義命令を解釈して実行するパターン定義処理の一例を示す概略的なフローチャートである。ステップ５０で、例えば前述のパターン属性定義コマンドにより定義されたパターン画像のサイズに基づいて、パターン画像用のメモリ領域を確保し、最初は何ら画像が定義されていないパターン情報をエッジリスト形式で作成して初期化する。具体的には、ここでは、パターン画像のスキャンライン毎の先頭のエッジデータへのアドレス（先頭アドレス）を格納する先頭アドレステーブルを作成してメモリ１２Ｂのパターン画像情報用のメモリ領域に格納する。そして、各アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数は、パターン属性定義コマンドで定義されたパターン画像の高さを示す画素数に等しい。
【００７４】
次に、ステップ５２で、ＰＤＬデータから上記パターン属性定義コマンドに組み合わされて記述されている描画コマンドを読み込む。
【００７５】
ステップ５４では、この段階でメモリ領域に記憶されているパターン情報のデータ形式を判断する。初期状態においては前述したようにパターン情報はエッジリスト形式で作成されるため、ＰＤＬデータの定義命令に描画コマンドが複数ある場合において、最初の描画コマンドが読み込まれた段階では、パターン情報はエッジリスト形式であると判断される。
【００７６】
ステップ５４において、パターン情報がエッジリスト形式であると判断された場合には、ステップ５６で、読み込んだ描画コマンドに基づいて、エッジリスト形式でパターン画像を描画してパターン画像情報（パターン情報）を作成し、パターン画像用のメモリ領域に格納する。なお、先に読み込まれた描画コマンドにより既にメモリ領域に記憶されているエッジリストがある場合には、該エッジリストに追加挿入する。
【００７７】
ステップ５８では、上記描画コマンドにより作成したパターン画像情報のエッジデータの数（エッジ数）が閾値TH1を超えるか否かを判断する。ステップ５８で否定判断した場合には、ステップ７２に進む。
【００７８】
また、ステップ５８で、肯定判断された場合には、ステップ６０で、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に格納する。描画コマンドにより描画される画像が色数が多く複雑な画像である場合には、エッジデータの数が多くなり、エッジリスト形式よりラスタ形式で表す方がメモリ使用量が抑制されることがある。そこで、ステップ５８で閾値TH1と実際に作成されたエッジデータの数とを比較して、比較結果に応じたデータ形式で格納するようにしている。パターン画像をラスタ形式に変換して格納した後は、エッジリスト形式のパターン画像情報は削除される。
【００７９】
続いて、ステップ６２で、現在メモリ領域に格納されているパターン画像に対するマスク情報をエッジリスト形式で作成してマスク情報のメモリ領域に格納する。そして、ステップ７２に進む。
【００８０】
ステップ７２では、描画コマンドが終了したか否か（次の描画コマンドがＰＤＬデータに記述されているか否か）を判断する。ステップ７２で肯定判断された場合には、パターン定義処理は終了する。そして、この時点でメモリ領域に格納されているパターン情報が、後述するパターン塗りつぶし命令で用いられるパターン情報となる。また、ステップ７２で否定判断した場合には、ステップ５２に戻り、次の描画コマンドを読み込んで、ステップ５４に進む。
【００８１】
また、ステップ５４で、メモリ領域に記憶されているパターン情報のデータ形式の種類が、ハイブリッド形式（パターン画像情報がラスタ形式で、マスク情報がエッジリスト形式）であると判断した場合には、ステップ６４に進む。
【００８２】
ステップ６４では、読み込んだ描画コマンドに基づいて、ラスタ形式で画像を描画して、既に作成されメモリ領域に記憶されているパターン画像情報を編集する。更に、編集後のパターン画像情報に対応するようにエッジリスト形式のマスク情報を編集する。
【００８３】
ステップ６６は、マスク情報のエッジ数が閾値HT2を超えるか否かを判断する。ステップ６６で肯定判断した場合には、ステップ６８で、マスク情報をエッジリスト形式からラスタ形式に変換してメモリ領域に格納する。パターン画像と同様に、マスク情報も、エッジデータの数が多くなるとメモリ使用量が増え、エッジリスト形式よりラスタ形式で表す方がメモリ使用量が抑制される場合がある。そこで、ここでは閾値TH2とエッジデータの数とを比較して、比較結果に応じたデータ形式で格納するようにしている。
【００８４】
ステップ６６で否定判断した場合、及びステップ６８の処理後は、ステップ７２に進む。ステップ７２の処理は上述したとおりである。
【００８５】
また、ステップ５４で、メモリ領域に記憶されているパターン情報のデータ形式の種類が、ラスタ形式（パターン画像情報及びマスク情報が共にラスタ形式）であると判断した場合には、ステップ７０に進む。
【００８６】
ステップ７０では、読み込んだ描画コマンドに基づいて、ラスタ形式で画像を描画して、既に作成されメモリ領域に記憶されているパターン画像情報を編集する。更に、編集後のパターン画像情報に対応するようにラスタ形式のマスク情報を編集する。
【００８７】
ステップ７０の後は、ステップ７２に進む。ステップ７２の処理は上述したとおりである。
【００８８】
なお、ステップ６２においてマスク情報を新規に作成した時点でエッジ数が閾値TH2を超えている場合もあることから、ステップ６６及びステップ６８の処理を、ステップ６４の後だけでなくステップ６２の後にも実施してもよい。
【００８９】
また、ステップ６０（パターン画像情報のラスタ形式への変換）の後にステップ６２（マスク情報の生成）を実行する例について説明したが、ステップ６０の処理及びステップ６２の処理を並行して行ってもよい。例えば、スキャンライン毎に、パターン画像情報のラスタ形式への変換処理及びマスク情報の生成を順次行なう等である。
【００９０】
塗りつぶし命令は、ＰＤＬデータにおいて定義命令の後に記述されている。図１５（Ａ）は、パターン塗りつぶし命令の疑似コードである。図２に示す疑似コードとは異なるが、描画情報に記述される各命令のコードは、解釈可能な形態であればよく、描画情報を構成する各命令をここで例示した疑似コードに限定するものではない。
【００９１】
図１５（Ａ）の（１）に示す色塗りつぶし命令の塗りつぶしコマンドでは、fillRectに続く(0,0,21,18)により、始点(0,0)から、幅２１画素、高さ１８画素の矩形領域が塗りつぶし範囲として指定されており、更にwith color(0,255,0,0)により、塗りつぶし範囲を塗りつぶす色（イエロー色）が指定されている。該コマンドを実行することで、出力画像は、図１５（Ｂ）の（１）に示すように、該指定された塗りつぶし範囲がイエロー色で塗りつぶされる（ページバッファの塗りつぶし範囲にイエロー色の色値が書き込まれる）。
【００９２】
続いて、図１５（Ａ）の（２）に示すパターン塗りつぶし命令の塗りつぶしコマンドでは、fillRectに続く(3,3,15,12)により、始点(3,3)から、幅１５画素、高さ１２画素の矩形領域が塗りつぶし範囲として指定されており、更にwith pattern(PTN1)により、塗りつぶし範囲を塗りつぶすパターン画像のパターン名PTN1が指定されている。該コマンドを実行することで、メモリ領域から上記定義命令により定義されたパターン情報を読み出して用い、図１５（Ｂ）の（２）に示すように、イエロー色の矩形領域の塗りつぶし範囲上にパターン画像が配列され、パターン画像の画像領域の色値がページバッファに上書きされる。なお、前述したように、パターン画像PTN1にはデータなしの領域である非画像領域が含まれているため、該非画像領域は先の塗りつぶしコマンドにより描画された背景のイエロー色が維持される。
【００９３】
上記では簡便なフローチャート及び模式図等によりＰＤＬデータに基づく画像処理について説明したが、以下では、より詳細なフローチャートを用いてＰＤＬデータの処理について具体的に説明する。以下で説明する各処理は、装置制御部１２の記憶部１２Ｃに記憶されている画像処理プログラムをＣＰＵ１２Ａが実行することにより実行されるものである。
【００９４】
図１６は、ＰＤＬデータ処理のメインルーチンのフローチャートを示す図である。
【００９５】
ステップ１００では、メモリ１２Ｂに、出力画像情報を格納するためのページバッファを作成（確保）する。
【００９６】
ステップ１０２では、パターン管理テーブルを作成してメモリ１２Ｂ内に記憶する。パターン管理テーブルは、定義命令により定義されるパターン画像を管理するためのテーブルである。図１７にパターン管理テーブルの一例を示す。図１７に例示したパターン管理テーブルには、パターン名(name)、パターン画像の高さ(ptn_height)、パターン画像の幅(ptn_width)、パターン画像についてのパターン情報のデータ形式(type)、パターン情報の記憶領域のアドレスを示す(address)の各々の項目が、対応付けられて記憶される。なお、パターン情報のデータ形式(type)の項目には、前述したように、ラスタ形式raster（パターン画像情報及びマスク情報がラスタ形式）、ハイブリッド形式hybrid（パターン画像情報がラスタ形式でマスク情報がエッジリスト形式）、エッジリスト形式edgelist（パターン画像情報がエッジリスト形式。マスク情報はない）の３つのデータ形式がある。
【００９７】
パターン情報の記憶領域のアドレス(address)の項目には、パターン情報がラスタ形式及びハイブリッド形式の場合には、パターン画像情報及びマスク情報の各々の記憶領域のアドレスが登録され、パターン情報がエッジリスト形式の場合には、パターン画像情報の記憶領域のアドレスが登録される。
【００９８】
なお、ステップ１０２において、パターン管理テーブルを作成した時点では、パターン画像は未定義であるため、パターン管理テーブルには、パターン画像に関する情報が何も記憶されていない状態となっている。
【００９９】
ステップ１０４では、ＰＤＬデータから命令を１つ読み込む。ステップ１０６では、読み込んだ命令の種類を判断する。
【０１００】
読み込んだ命令が、パターン画像を定義する定義命令である場合には、ステップ１０８に進み、パターン定義処理を実行する（詳細は後述）。
【０１０１】
読み込んだ命令が、定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶすパターン塗りつぶし命令である場合には、ステップ１１０に進み、パターン塗りつぶし処理を実行する（詳細は後述）。
【０１０２】
読み込んだ命令が、中間画像データを作成することなく直接ページバッファに描画する描画命令（この描画命令を通常描画命令という）であった場合には、ステップ１１２で、該描画命令に基づいてページバッファに描画する処理を行なう。なお、前述の色塗りつぶし命令は、通常描画命令に含まれるが、パターン塗りつぶし命令は通常描画命令に含まれない。
【０１０３】
読み込んだ命令が、ページ出力命令である場合には、ステップ１１４に進み、ページバッファに格納されている出力画像情報を出力先に出力する。該出力後はページバッファを初期化する。このページ出力命令により、定義命令、パターン塗りつぶし命令、及び通常描画命令等の各命令でページバッファに書き込まれた出力画像情報が出力される。なお、出力画像情報の出力先は、画像形成部１６としてもよいが、画像形成部１６に出力する前に、何らかの画像処理を行なう場合には、別途設けた画像処理部（不図示）を出力先として、該画像処理部で画像処理を行なわせるようにしてもよい。或いは装置制御部１２が画像処理プログラムを実行することにより画像処理を行ない、その後、画像形成部１６に出力するようにしてもよい。また、出力画像情報をすぐに印刷せずに、一端、何らかのバッファに蓄積しておく場合には、該バッファを出力先としてもよい。
【０１０４】
ステップ１０８、１１０、１１２、及び１１４のいずれかが終了した後は、ステップ１１６に進み、ＰＤＬデータが終了したか（ＰＤＬデータに記述された全ての命令の読み込み及び実行が終了したか）否かを判断する。ステップ１１６で否定判断した場合には、ステップ１０４に戻り、次の命令を読み込む。ステップ１１６で肯定判断した場合には、本ＰＤＬ処理のルーチンが終了する。
【０１０５】
次に、ステップ１０８のパターン定義処理について詳細に説明する。
【０１０６】
図１８は、パターン定義処理の流れを示すフローチャートである。
【０１０７】
ステップ１５０では、定義命令に含まれるパターン属性情報を読み取り取得する。例えば、前述したパターン属性定義コマンドにより指定されたパターン属性情報を取得する。ここで取得されるパターン属性情報には、パターン画像のパターン名の情報と、パターン画像の幅を示す情報と、パターン画像の高さを示す情報とが含まれる。なお、ここでは、パターン画像の幅及び高さはいずれも画素数で表されているものとする。
【０１０８】
ステップ１５２では、パターン画像のパターン情報をエッジリスト形式で作成して初期化する。これは、先に図１４を用いて説明したステップ５０と同様に、パターン画像用のメモリ領域（以下、メモリ領域ＰＡ１と呼称する）を確保し、該メモリ領域ＰＡ１に何ら画像が定義されていないパターン情報をエッジリスト形式で作成して初期化する。すなわち、パターン画像のスキャンライン毎の先頭のエッジデータへのアドレス（先頭アドレス）を格納する先頭アドレステーブルを作成してメモリ１２Ｂのパターン画像情報用のメモリ領域ＰＡ１に記憶する。そして、各アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数（スキャンラインの本数）は、上記取得したパターン属性情報のパターン画像の高さを示す画素数に等しい。
【０１０９】
更に、ステップ１５２では、上記取得したパターン属性情報のパターン画像の幅の値をptn_widthにセットし、パターン画像の高さの値をptn_heightにセットし、エッジリスト形式を示す「edgelist」をtypeにセットする。
【０１１０】
ステップ１５４では、定義命令に含まれる描画コマンドを読み込む。
【０１１１】
ステップ１５６では、typeの値がedgelistであるか否かを判断する。後述するステップ１６２でtypeが変更されるまでは、typeの値はedgelistである（すなわち、パターン画像情報はエッジリスト形式で記憶されている）ため、ステップ１５６では肯定判断されるが、ステップ１６２でtypeの値が変更された後は否定判断される。
【０１１２】
ステップ１５６で肯定判断した場合には、ステップ１５８に進み、エッジリスト形式のパターン画像に対する描画処理を行なう。この描画処理では、描画コマンドに従って、パターン画像用のメモリ領域にエッジリスト形式で画像を展開（描画）するが、当該定義命令において当該描画コマンドの前に先に別の描画コマンドが実行されていた場合には、該先に実行された描画コマンドにより描画されたエッジリスト形式のパターン画像に対して、当該描画コマンドの画像領域の画像が上書きされるようにパターン画像用のメモリ領域に格納されたエッジリスト形式のパターン画像情報を編集する。本処理の詳細は後述する。
【０１１３】
ステップ１６０では、パターン画像情報のエッジデータの数が予め定められた閾値TH1を超えたか否かを判断する。ステップ１６０において、肯定判断した場合には、ステップ１６２に進み、エッジリスト形式のパターン画像情報をラスタ形式に変換する処理を行なう。なお、ステップ１６２では、合わせてマスク情報をエッジリスト形式で作成し、マスク情報用のメモリ領域に格納する処理も行われる。更に、パターン情報のtypeの値が、ハイブリッド形式を示すhybridに変更される。なお、マスク情報は、マスク情報のエッジデータの数が閾値TH2を超えた場合には、エッジリスト形式からラスタ形式に変更される。この場合には、パターン情報のtypeの値が、ラスタ形式を示すrasterに変更される。ステップ１６２の処理の詳細は後述する。ステップ１６２の後は、ステップ１６６に進む。
【０１１４】
一方、ステップ１６０において、否定判断した場合には、ステップ１６２をスキップしてステップ１６６に進む。
【０１１５】
ステップ１６６では、定義命令に含まれる描画コマンドを全て処理したか否かを判断する。ステップ１６６で否定判断した場合には、ステップ１５４に戻り、次の描画コマンドを読み込む。
【０１１６】
ステップ１５６で否定判断した場合には、当該定義命令において当該描画コマンドの実行前に別の描画コマンドの実行によりメモリ領域に書き込まれたパターン画像情報が、ラスタ形式であることを示している。そこで、ステップ１６４に進み、該ラスタ形式のパターン画像情報に対する描画処理を行なう。この描画処理では、該ラスタ形式のパターン画像情報に対して、当該描画コマンドにより描画される画像領域の各画素の色値を上書きするようにパターン画像情報を編集する。また、マスク情報もパターン画像情報に応じて編集される。また、エッジリスト形式のマスク情報は、マスク情報のエッジデータの数が閾値TH2を超えた場合に、エッジリスト形式からラスタ形式に変更される。マスク情報がラスタ形式に変更された場合には、typeの値はラスタ形式を示すrasterに変更される。ステップ１６４の処理の詳細は後述する。
【０１１７】
続いて、ステップ１６６に進み、上記と同様に定義命令に含まれる描画コマンドを全て処理したか否かを判断する。ステップ１６６で否定判断した場合には、ステップ１５４に戻り、次の描画コマンドを読み込む。
【０１１８】
また、ステップ１６６で、肯定判断した場合には、ステップ１６８で、定義命令により定義されたパターン画像をパターン管理テーブルに登録する。具体的には、上記取得したパターン属性情報に含まれるパターン名をパターン管理テーブルのnameに記憶し、該パターン名に対応付けて、パターン管理テーブルのptn_widthの項目に、パターン画像の幅を示すptn_widthの値を記憶し、パターン管理テーブルのptn_heightの項目に、パターン画像の高さを示すptn_heightの値を記憶する。そして、パターン管理テーブルのtypeの項目には、typeに現時点でセットされている値を記憶する。更にパターン管理テーブルのaddressの項目には、当該定義命令により作成されたパターン情報が記憶されている記憶先（メモリ領域）を示すアドレスが記憶される。
【０１１９】
次に、上記ステップ１５８のエッジリスト形式のパターン画像に対する描画処理について詳細に説明する。
【０１２０】
図１９は、エッジリスト形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【０１２１】
ステップ１８０では、読み込んだ描画コマンドの種類を判断する。描画コマンドがイメージ描画コマンドであれば、ステップ１８２で、イメージ描画コマンドのエッジリスト形式描画処理を実行し、描画コマンドがグラフィックス描画コマンドであれば、ステップ１８４で、グラフィックス描画コマンドのエッジリスト形式描画処理を実行し、描画コマンドが文字描画コマンドであれば、ステップ１８６で、文字描画コマンドのエッジリスト形式描画処理を実行する。
【０１２２】
図２０は、ステップ１８２で行われるイメージ描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【０１２３】
ステップ２００では、イメージ描画コマンドにより指定された、イメージ画像のパターン画像における描画開始位置の情報を取得して、(x_offset、 y_offset）にセットすると共に、該イメージ画像の幅・高さの情報を取得して、(width, height)にセットする。描画開始位置（x_offset、 y_offset）は、上記取得したパターン属性情報が示すサイズの矩形領域にイメージ画像を描画するときのイメージ画像の左上の基準点となる位置であり、パターン画像の始点を基準点とした座標値となる。また、幅width及び高さheightは、各々画素数で表されている。(x_offset、 y_offset）から(x_offset+width、 y_offset+height）までの領域が、当該イメージ描画コマンドにより画像が描画される画像領域となる。
【０１２４】
ステップ２０２では、yに０をセットする。
【０１２５】
ステップ２０４では、描画するイメージ画像を示す画像データからエッジの切り出しを行なうここで、エッジとは、同一の画素値の画素が連続する区間の始点及び終点をいう。なお、ここでは、イメージ画像がカラーの場合について説明するが、イメージ画像が白黒の場合には、黒色の画素が連続する区間の始点及び終点がエッジとされる。
【０１２６】
図２１は、ステップ２０４で行われるエッジの切り出し処理の流れを示すフローチャートである。
【０１２７】
ステップ２３０では、イメージ画像の矩形領域の左上を原点(0,0)としたときのＹ座標値がｙのスキャンライン上（以下、単にスキャンラインyという）で、着目する画素（以下、着目画素）のＸ軸上の位置を示す座標値xを0として、描画するイメージ画像を表す画像データから座標(x,y)に位置する着目画素の色値を抽出し、refcolorにセットする。更に、start_xに０をセットする。
【０１２８】
ステップ２３２では、xに１を加算して着目画素を変更する。
【０１２９】
ステップ２３４では、xがwidth未満か否かを判断する。widthは前述したようにイメージ画像の幅を示す画素数である。ステップ２３４で肯定判断した場合には、colorに、イメージ画像の画像データから座標(x,y)に位置する着目画素の色値を抽出してセットする。
【０１３０】
ステップ２３８では、colorの値とrefcolorの値とが等しいか否かを判断する。ステップ２３８で肯定判断した場合には、着目画素の色値colorは、少なくとも１つ前に着目された画素の色値refcolorに等しい（同一の色値の画素が連続している）ことを示しているため、ステップ２３２に戻って、xに１を加算して、着目画素を変更する。
【０１３１】
また、ステップ２３８で否定判断した場合には、着目画素の色値colorは、１つ前に着目された画素の色値refcolorと異なるため、１つ前に着目された画素（その画素位置は、[x-1, y]となる）が、色値refcolorの画素が連続する区間の終点となる。また、ステップ２３４で否定判断した場合には、１つ前に着目された画素が、スキャンラインy上の終点となるため、１つ前に着目された画素が、色値refcolorの画素が連続する区間の終点となる。
【０１３２】
これに基づき、ステップ２４０において、色値refcolorの画素が連続する区間を示すエッジデータを作成する。なお、前述のstart_xは、イメージ画像の矩形領域の左上を原点(0,0)としたときの、色値refcolorの画素が連続する区間の始点を表すものであるため、start_xの値にx_offsetの値（イメージ画像の描画開始位置のＸ座標値）を加算したＸ座標値を、エッジデータの始点startとし、[x-1]の値にx_offsetの値を加算したＸ座標値を、エッジデータの終点とする。また、次のエッジデータのアドレスnextはNULLとする（図６も参照。）。すなわち、ステップ２４０において、下記の如くエッジデータが作成される。
【０１３３】
（始点start、終点end、色値color、次のエッジデータへのアドレスnext）
＝（start_x + x_offset、x - 1 + x_offset、refcolor、NULL）
【０１３４】
続いて、ステップ２４２では、パターン画像を表したエッジリストにおいて、スキャンライン[y+y_offset]のエッジリストに、ステップ２４０で作成したエッジデータを追加する。
【０１３５】
図２２は、エッジリストへのエッジデータ追加処理の流れを示すフローチャートである。
【０１３６】
ステップ２８０では、着目スキャンライン（ここではスキャンライン[y+y_offset]）のエッジリストが空か否か、すなわちエッジデータが１つもないか否かを判断する。以下、着目スキャンラインのエッジリストを着目エッジリストという。ステップ２８０で肯定判断した場合には、上記作成したエッジデータが該着目エッジリストの先頭のエッジデータであるため、ステップ２８２に進み、先頭アドレステーブルにおいて、上記作成したエッジデータを記憶した記憶領域のアドレスを、該着目エッジリストの先頭アドレスとして先頭アドレステーブルに格納する。
【０１３７】
一方、パターン画像を定義する定義命令に複数の描画コマンドが含まれている場合には、先に処理された描画コマンドにより、既に着目スキャンラインにエッジデータが作成され、エッジリストとして連結されている場合がある。この場合には、上記ステップ２８０で否定判断される。ステップ２８０で否定判断した場合には、ステップ２８４に進み、エッジ挿入処理を実行する。エッジ挿入処理では、先に作成されたエッジリストに対して、新たに生成したエッジデータを挿入する。図２３は、エッジ挿入処理の流れを示すフローチャートである。
【０１３８】
ステップ３００では、新たに生成したエッジデータ（挿入するエッジデータ）をedgeＡで表し、着目エッジリストの先頭のエッジデータをedgeBで表すものとする。そして、図２４（Ａ）に示すように、edgeＡの始点startの値を、edgeA.startにセットし、edgeＡの終点endの値を、edgeA.endにセットし、edgeＡの色値colorの値を、edgeA.colorにセットし、edgeＡの次のアドレスnextの値（＝NULL）を、edgeA.nextにセットする。また、edgeBの始点startの値を、edgeB.startにセットし、edgeBの終点endの値を、edgeB.endにセットし、edgeBの色値colorの値を、edgeB.colorにセットし、edgeBの次のアドレスnextの値を、edgeB.nextにセットする。
【０１３９】
ステップ３０２では、edgeA.end<edgeB.startか否かを判断する。edgeA.endがedgeB.startより小さければ、edgeAとedgeBとのＸ軸方向の位置関係は、図２４（Ｂ）の（１）に示す位置関係となる。この位置関係にはedgeAとedgeBとが隣接している場合も含まれる。なお、図２４（Ｂ）では、Ｘ軸方向の位置関係が把握しやすいように、Ｙ軸方向の位置をずらしてedgeA及びedgeBを図示しているが、edgeA及びedgeBは同じスキャンライン上のエッジデータであることに注意されたい。
【０１４０】
従って、ステップ３０２で肯定判断した場合には、ステップ３０４で、edgeBの区間を変更せずに、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前のedgeBが、先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。edgeA挿入前のedgeBが、先頭エッジデータではなかった場合には、edgeAの挿入前にedgeBの１つ前に連結されていたエッジデータのアドレスnextの値を、edgeAの記憶領域のアドレスに書き換える。
【０１４１】
なお、ここでは、図示を省略したが、ステップ３０２で肯定判断され、edgeAとedgeBとが隣接する位置関係にある場合おいて、edgeA.colorの値とedgeB.colorの値とが等しいときには、後述するステップ３１０と同様に合成処理される。
【０１４２】
また、ステップ３０２で、否定判断した場合には、ステップ３０６に進む。ステップ３０６では、edgeA.start>edgeB.endか否かを判断する。edgeA.startがedgeB.endより大きければ、edgeAとedgeBとのＸ軸方向の位置関係は、図２４（Ｂ）の（２）に示す位置関係となる。この位置関係にはedgeAとedgeBとが隣接している場合も含まれる。この場合には、ステップ３０６で肯定判断し、ステップ３２０に進む。
【０１４３】
ステップ３２０では、edgeB.nextがNULLか否か、すなわち、edgeBの次にエッジデータが連結されていないか否かを判断する。ステップ３２０で肯定判断した場合には、ステップ３２２に進み、edgeBの区間を変更せずに、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、NULLからedgeAの記憶領域を示すアドレスとなるように変更する。
【０１４４】
なお、ここでは、図示を省略したが、ステップ３２０で肯定判断され、edgeAとedgeBとが隣接する位置関係にある場合において、edgeA.colorの値とedgeB.colorの値とが等しいときには、後述するステップ３１０と同様に合成処理される。
【０１４５】
さらにまた、ステップ３２０で、否定判断した場合には、ステップ３２４に進み、edgeB.nextが示すアドレスに記憶されている次のエッジデータをedgeBとしてステップ３０２に戻る。
【０１４６】
また、ステップ３０６で、否定判断した場合には、ステップ３０８に進む。ステップ３０６で否定判断した場合には、着目スキャンラインのＸ軸上において、edgeAの区間（範囲）の一部或いは全体が、edgeBの区間の一部或いは全体と重なっている関係（図２４（Ｂ）の（３）〜（６）も参照）であることを示す。そこで、ステップ３０８では、edgeA.colorの値とedgeB.colorの値とが等しいか否かを判断する。ステップ３０８で、肯定判断した場合には、ステップ３１０に進み、edgeAとedgeBとを合成する。具体的には、edgeBの始点startを、edgeA.start及びedgeB.startのいずれか小さい方となるように変更し、edgeBの終点endを、edgeA.end及びedgeB.endのいずれか大きい方となるように変更する。その後、edgeAは削除する。また、逆に、edgeAの始点及び終点を上記と同様に変更して、edgeBをedgeAに置き換え、edgeBを削除するようにしてもよい。
【０１４７】
また、ステップ３０８で、否定判断した場合には、ステップ３１２に進み、edgeBの範囲を、edgeAと重ならないように変更する。色値colorは変更しない。例えば、図２４（Ｂ）の（３）に示す位置関係であれば、edgeBの始点startをedgeA.end+1に変更する。また、図２４（Ｂ）の（４）に示す位置関係であれば、edgeBの終点endをedgeA.start-1に変更する。
【０１４８】
また、図２４（Ｂ）の（５）に示す位置関係であれば、edgeBを元に、edgeB1とedgeB2の２つのエッジデータを作成する。edgeB1の始点startは元のedgeBの始点startとし、edgeB1の終点endは、edgeA.start-1とする。edgeB2の始点startはedgeA.end+1とし、edgeB2の終点endは、元のedgeBの終点endとする。edgeB1及びedgeB2の色値colorは元のedgeBの色値colorとする。そして、edgeB1の次のエッジデータのアドレスnextにedgeAの記憶領域のアドレスをセットし、edgeAの次のエッジデータのアドレスnextにedgeB2の記憶領域のアドレスをセットし、edgeB2の次のエッジデータのアドレスnextにはNULLをセットする。
【０１４９】
また、図２４（Ｂ）の（６）に示す位置関係であれば、edgeBのエッジデータを削除する。なお、edgeBの削除前に該edgeBが先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。また、edgeBの削除前に該edgeBが先頭エッジデータでなかった場合には、edgeBの削除前にedgeBの１つ前に連結されていたエッジデータのアドレスnextを、edgeAの記憶領域のアドレスとなるように変更する。
【０１５０】
なお、図２４（Ｂ）の（５）に示すようにedgeBから２つのエッジデータを作成した場合、及び（６）に示すようにedgeBを削除した場合は、下記ステップ３１４の処理は行わないこととする（図示は省略。）。
【０１５１】
次に、ステップ３１４では、edgeA.start<edgeB.startか否かを判断する。ステップ３１４で肯定判断した場合には、edgeAとedgeBとの位置関係は、図２４（Ｂ）の（３）の変更後の位置関係にあるため、ステップ３１６で、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前の先頭エッジデータがedgeBであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスに変更する。
【０１５２】
また、ステップ３１４で、否定判断した場合には、edgeAとedgeBとの位置関係は、図２４（Ｂ）の（４）の変更後の位置関係にあるため、ステップ３１８で、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、edgeAの記憶領域を示すアドレスに変更する。
【０１５３】
なお、ここでは、エッジデータedgeAの区間が、先の描画コマンドにより作成された互いに連結する複数のエッジデータの各々の区間の一部又は全体と重複している場合については説明を省略したが、この場合も同様に、該複数のエッジデータの区間の各々とエッジデータedgeAの区間との位置関係に応じて、図２４（Ｂ）の（３）〜（６）を参照して説明したのと同様に変更或いは削除する。
【０１５４】
図２２のステップ２８４で、上記エッジ挿入処理が終了した後は、図２１のステップ２４４に進む。
【０１５５】
ステップ２４４では、refcolorに、着目画素の色値colorの値をセットする。更に、start_xにxの値をセットする。ｘは、着目画素のＸ軸上の位置である。
【０１５６】
続いて、ステップ２４６で、xがwidth未満か否かを判断する。ステップ２４６で肯定判断した場合には、ステップ２３２に戻り、ｘに１を加算して、Ｘ軸方向の次の画素を着目画素とする。また、ステップ２４６で否定判断した場合には、イメージ画像の着目スキャンラインのエッジの検出が終了した状態にあるため、エッジ切り出し処理を終了して、図２０のステップ２０６に進む。
【０１５７】
図２０のステップ２０６では、yに１を加算する。
【０１５８】
続いて、ステップ２０８では、yがheight未満か否かを判断する。heightは前述したようにイメージ画像の高さを示す画素数である。ステップ２０８で肯定判断した場合には、ステップ２０４に戻り、次のスキャンラインについて、上述したようにエッジ切り出し処理を行なう。また、ステップ２０８で否定判断した場合には、イメージ画像の各スキャンラインのエッジの検出及びエッジデータの作成が終了した状態にあるため、図２０のイメージ描画コマンドのエッジリスト形式描画処理を終了する。
【０１５９】
次に、ステップ１８４のグラフィックス描画コマンドのエッジリスト形式描画処理について説明する。図２５は、グラフィックス描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【０１６０】
ステップ３４０では、グラフィックス描画コマンドにより指定された描画色を取得してg_colorにセットする。例えば、図１０に示す定義命令に含まれるグラフィック描画コマンドfillRectに対して、with colorで指定された色が描画色である。
【０１６１】
ステップ３４２では、グラフィックス描画コマンドにより指定された描画領域（当該グラフィックス描画コマンドにより画像が描画される画像領域）のＹ座標の範囲を求める。例えば、図１０に示す例では、図１０の（２）に示す描画コマンドのfillRectに続く(0,0,3,3)において、最初の２つの数値が、パターン画像におけるグラフィックス画像の描画開始位置であり、それに続く２つの数値が、描画するグラフィックス画像の幅及び高さを示す画素数であることから、グラフィックス描画コマンドの描画領域のＹ座標の最小値は、描画開始位置のＹ座標0、Ｙ座標値の最大値は、該描画開始位置Ｙ座標0に高さ3を加算した3となる。そして、このＹ座標の最小値をy_startにセットし、最大値をy_endにセットする。
【０１６２】
ステップ３４４では、yにy_startの値をセットする。
【０１６３】
ステップ３４６では、グラフィックス描画コマンドにより描画するグラフィックス画像について、スキャンラインyにおけるスキャン変換処理（画像のエッジを抽出する処理）を行い、スキャンラインyにおけるＸ軸上の描画範囲x_start、x_endを求める。
【０１６４】
ステップ３４８では、エッジデータを作成する。具体的には、下記の如くエッジデータが作成される。
【０１６５】
（始点start、終点end、色値color、次のエッジデータへのアドレスnext）
＝（x_start、x_end、g_color、NULL）
【０１６６】
ステップ３５０では、パターン画像を表したエッジリストにおいて、スキャンラインyのエッジリストに、ステップ３４８で作成したエッジデータを追加する。ステップ３５０で行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをyとして、図２２〜図２４を用いて説明したように実行する。
【０１６７】
ステップ３５２では、yに１を加算する。
【０１６８】
ステップ３５４では、yがy_end以下であるか否かを判断する。ステップ３５４で肯定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了していない状態であるため、ステップ３４６に戻り、次のスキャンラインについて上記処理を繰り返す。また、ステップ３５４で否定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了した状態であるため、本グラフィックス描画コマンドのエッジリスト形式描画処理を終了する。
【０１６９】
次に、ステップ１８６の文字描画コマンドのエッジリスト形式描画処理について説明する。図２６は、文字描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【０１７０】
ステップ３７０では、文字描画コマンドにより指定された描画色を取得してt_colorにセットする。
【０１７１】
ステップ３７２では、文字描画コマンドにおいてパターン画像に配置（描画）するよう指定された文字画像の描画開始位置の情報を取得して、(x_offset, y_offset)にセットする。
【０１７２】
ステップ３７４では、文字が黒色及び白色の二値からなるラスタ形式で表された文字ビットマップデータを取得する。文字描画コマンドには、予め定められたコード体系に従った文字コード情報、フォント名文字の大きさを示すポイント数などを含むフォント情報、上記描画色、及び描画開始位置の情報等が指定されている。このうち文字コード情報及びフォント情報等から、描画する文字をビットマップに展開した文字ビットマップデータを取得する。
【０１７３】
ステップ３７６では、char_xに０をセットすると共に、char_yに０をセットする。
【０１７４】
ステップ３７８では、上記取得した文字ビットマップデータから文字のエッジ抽出を行なう。図２７は、文字のエッジ抽出処理の流れを示すフローチャートである。
【０１７５】
ステップ４００では、文字ビットマップデータが表す文字のサイズ（幅及び高さ）の情報を取得して、幅の値をwidthにセットし、高さの値をheightにセットする。なお、幅及び高さは各々画素数で表されているものとする。
【０１７６】
ステップ４０２では、edge_xに-１をセットする。
【０１７７】
ステップ４０４では、黒座標（黒色画素の座標位置）の検出を行なう。図２８は、黒座標の検出処理の流れを示すフローチャートである。
【０１７８】
ステップ４３０では、char_yがheight未満か否かを判断する。ステップ４３０で肯定判断した場合には、ステップ４３２に進む。ステップ４３２では、char_xがwidth未満か否かを判断する。ステップ４３２で肯定判断した場合には、ステップ４３６に進む。ステップ４３６では、座標(char_x, char_y)の位置の文字ビットマップデータが黒色か否かを判断する。
【０１７９】
ステップ４３６で、肯定判断した場合には、ステップ４４０に進み、edge_xにchar_xの値をセットし、edge_yにchar_yの値をセットする。そして、ステップ４４２では、char_xに１を加算した値を、char_xにセットする。
【０１８０】
また、ステップ４３６で、否定判断した場合には、ステップ４３８に進み、Ｘ軸方向の次の画素について黒色か白色かを判断するため、char_xに１を加算して、ステップ４３２に戻る。
【０１８１】
一方、ステップ４３２で否定判断した場合には、ステップ４３４で、char_yに１を加算し、char_xには０をセットしてステップ４３０に戻る。すなわち、ステップ４３２でchar_xがwidth以上であると判断した場合には、文字ビットマップデータの矩形領域の左上を原点(0,0)としたときのスキャンラインchar_y上には、黒色画素が存在しないことを示しているため、ステップ４３４で、着目するスキャンラインを次のスキャンラインに変更して、ステップ４３０に戻り、該次のスキャンラインの端の画素から黒色画素を探すようにしている。
【０１８２】
以上の処理により、文字の幅width及び高さheightの矩形領域の左上座標を原点(0,0)とした場合において、スキャンラインedge_y上で黒色画素が連続する区間の始点（エッジの始点）edge_xが検出される。
【０１８３】
図２７において、ステップ４０４で黒座標の検出が終了した後は、ステップ４０６で白座標（白色画素の座標位置）の検出を行なう。この白座標の検出処理において、エッジの終点が検出される。図２９は、白座標の検出処理の流れを示すフローチャートである。
【０１８４】
ステップ４６０では、edge_xが-1であるか否かを判断する。edge_xが-1である場合には、上記黒座標の検出処理において黒座標が検出されていない状態を示している。エッジの始点が検出されて場合には、終点を検出する必要もない。従って、白座標の検出処理を終了する。
【０１８５】
一方、ステップ４６０で、否定判断した場合には、ステップ４６２で、char_xがwidth未満か否かを判断する。ステップ４６２で、肯定判断した場合には、ステップ４６４に進む。ステップ４６４では、座標(char_x, char_y)の位置にある画素の文字ビットマップデータが黒色か否かを判断する。ステップ４６４で肯定判断した場合には、char_xに１を加算してステップ４６２に戻る。
【０１８６】
ステップ４６４で否定判断した場合には、ステップ４６８で、edge_x_endに[char_x-1]の値をセットする。すなわち、ステップ４６４で白色の画素が見つかった場合には（否定判断）、該画素のＸ座標値の１画素前のＸ座標値の画素が黒色画素が連続する区間の終点となる。従って、ステップ４６８において、現在着目している画素のＸ座標値char_xから１を差し引いて、黒色画素が連続する区間の終点を示す座標を求め、edge_x_endにセットしている。
【０１８７】
また、ステップ４６２で、否定判断した場合には、文字ビットマップデータにおいてスキャンラインedge_yにおけるＸ座標値edge_x以降のＸ座標値の画素には、白画素が存在しないことを示している。そこで、ステップ４７０において、edge_x_endに[width-1]の値をセットする。ここで、widthから１を減算しているのは、文字の幅width及び高さheightの矩形領域の左上座標（原点）を(0,0)としているためである。
【０１８８】
以上の処理により、文字の幅width及び高さheightの矩形領域の左上座標を原点(0,0)とした場合において、スキャンラインedge_y上で黒色画素が連続する区間の終点（エッジの終点）edge_x_endが検出される。
【０１８９】
図２７において、ステップ４０６の白座標の検出処理の後は、ステップ４０８に進み、edge_xが-1であるか否かを判断する。edge_xが-1である場合には、上記黒座標の検出処理において黒座標が検出されていない状態を示している。従って、ステップ４０８で肯定判断した場合には、ステップ４１２で、エッジ抽出が失敗したと結論する。また、ステップ４０８で否定判断した場合には、ステップ４１４で、エッジ抽出が成功したと結論する。
【０１９０】
図２６において、ステップ３７８の文字のエッジ抽出処理が終了した後は、ステップ３８０に進む。ステップ３８０では、エッジ抽出が成功したか否かを判断する。ステップ３８０で肯定判断した場合には、ステップ３８２に進み、x_startに[edge_x + x_offset]の値をセットし、x_endに[edge_x_end + x_offset]の値をセットし、yに[edge_y + y_offset]の値をセットする。
【０１９１】
ステップ３８４では、エッジデータを作成する。具体的には、下記の如くエッジデータが作成される。
【０１９２】
（始点start、終点end、色値color、次のエッジデータへのアドレスnext）
＝（x_start、x_end、t_color、NULL）
【０１９３】
ステップ３８６では、パターン画像を表したエッジリストにおいて、スキャンラインyのエッジリストに、ステップ３８４で作成したエッジデータを追加する。ステップ３８４で行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをyとして、図２２〜図２４を用いて説明したように実行する。
【０１９４】
ステップ３８６の後は、ステップ３７８に戻り、次のエッジの抽出を、上記と同様に行う。ステップ３７８の処理により、新たなエッジが抽出された場合には、ステップ３８０で肯定判断されるため、上記ステップ３８２以降の処理が同様に行われる。また、ステップ３７８で新たなエッジ抽出されなかった場合には、ステップ３８０で否定判断され、図２６の文字描画コマンドのエッジリスト形式描画処理を終了する。
【０１９５】
次に、図１８のステップ１６０で肯定判断した後に実行されるステップ１６２のパターン画像をラスタ形式へ変換する変換処理について詳細に説明する。
【０１９６】
図３０は、パターン画像情報をラスタ形式に変換する変換処理の流れを示すフローチャートである。この変換処理では、パターン画像情報の変換と共にマスク情報の作成も行われる。
【０１９７】
ステップ５００では、ラスタ形式のパターン画像情報を格納するためのパターン画像用のメモリ領域ＰＡ２をメモリ１２Ｂに確保する。例えば、カラーの場合には、本実施の形態では、ラスタ形式のパターン画像情報は、１画素４バイト必要となるため、パターン画像の幅×高さ×４バイトのメモリ領域ＰＡ２が確保される。
【０１９８】
ステップ５０２では、上記確保したパターン画像用のメモリ領域ＰＡ２を０でクリアする。すなわち、本実施の形態では、パターン画像情報の全画素の色値が０を示すように初期化される。ここでは、各画素の色値が０となるように初期化したが、０に限定するものではなく、何らかの値であればよい。
【０１９９】
ステップ５０４では、マスク情報をエッジリスト形式で作成して初期化する。具体的には、マスク情報用のメモリ領域ＭＡ１をメモリ１２Ｂに確保し、マスク情報のスキャンライン毎の先頭のエッジデータへのアドレス（先頭アドレス）を格納する先頭アドレステーブルを作成してメモリ１２Ｂのマスク情報用のメモリ領域ＭＡ１に記憶する。そして、各先頭アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数（スキャンラインの本数）は、上記パターン画像の高さを示す画素数に等しい。
【０２００】
ステップ５０６では、yに０をセットする。
【０２０１】
ステップ５０８では、メモリ領域ＰＡ１に記憶されているエッジリスト形式のパターン画像情報からスキャンラインyのエッジリストの先頭のエッジデータを取得する。
【０２０２】
ステップ５１０では、スキャンラインyのエッジリストにエッジデータがあるか否かを判断する。ステップ５１０がステップ５０８の直後に実行される場合において、ステップ５０８での取得が成功した（取得すべきエッジデータがあった）ときには、ステップ５１０では肯定判断され、ステップ５０８での取得が失敗した（取得すべきエッジデータがなかった）ときには、ステップ５１０では否定判断される。また、ステップ５１０が後述するステップ５１６の直後に実行される場合において、ステップ５１６での取得が成功した（取得すべきエッジデータがあった）ときには、ステップ５１０で肯定判断され、ステップ５１６での取得が失敗した（取得すべきエッジデータがなかった）ときには、ステップ５１０で否定判断される。
【０２０３】
ステップ５１０で肯定判断した場合には、ステップ５１２で、メモリ領域ＰＡ２における、ラスタ形式のパターン画像の、始点(start, y)から終点(end, y)までの範囲の画素の色値（上記初期化により０となっている）を、取得したエッジデータの色値colorの値に変更する（colorの値を書き込む）。ここで、startは取得したエッジデータの始点startの値であり、endは取得したエッジデータの終点endの値である。
【０２０４】
ステップ５１２の後は、ステップ５１４で、マスク情報のエッジデータを作成する。ここでは、上記パターン画像情報から取得したエッジデータの始点startの値、及び終点endの値を、マスク情報のエッジデータの始点startの値及び終点endの値とし、マスク情報のエッジデータのマスク値maskの値を1にし、マスク情報のエッジデータのアドレスnextの値はNULLにして作成する。
【０２０５】
ステップ５１６では、マスク情報のスキャンラインyのエッジリストに、上記作成したエッジデータを追加する。エッジデータの追加処理は、図２２に示した流れで行うが、マスク情報の場合には、どのエッジデータもマスク値が１であるため、図２２のステップ２８４では、図２３に示すエッジ挿入処理ではなく、図３１に示すエッジ挿入処理を実行する。
【０２０６】
図３１は、マスク情報のエッジ挿入処理の流れを示すフローチャートである。ステップ５４０では、新たに生成したエッジデータ（挿入するエッジデータ）をedgeＡで表し、着目エッジリストの先頭のエッジデータをedgeBで表すものとする。そして、edgeＡの始点startの値を、edgeA.startにセットし、edgeＡの終点endの値を、edgeA.endにセットし、edgeＡの次のアドレスnextの値（＝NULL）を、edgeA.nextにセットする。また、edgeBの始点startの値を、edgeB.startにセットし、edgeBの終点endの値を、edgeB.endにセットし、edgeBの次のアドレスnextの値を、edgeB.nextにセットする。
【０２０７】
ステップ５４２では、edgeA.end<edgeB.startか否かを判断する。edgeA.endがedgeB.startより小さければ、edgeAとedgeBとのＸ軸方向の位置関係は、図２４（Ｂ）の（１）に示す位置関係となる。従って、ステップ５４２で肯定判断した場合には、ステップ５４４で、edgeBの区間を変更せずに、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前のedgeBが、先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。edgeA挿入前のedgeBが、先頭エッジデータではなかった場合には、edgeAの挿入前にedgeBの１つ前に連結されていたエッジデータのアドレスnextの値を、edgeAの記憶領域のアドレスに書き換える。
【０２０８】
また、ステップ５４２で、否定判断した場合には、ステップ５４６に進む。ステップ５４６では、edgeA.start>edgeB.endか否かを判断する。edgeA.startがedgeB.endより大きければ、edgeAとedgeBとのＸ軸方向の位置関係は、図２４（Ｂ）の（２）に示す位置関係となる。この場合には、ステップ５４６で肯定判断し、ステップ５５０に進む。
【０２０９】
ステップ５５０では、edgeB.nextがNULLか否か、すなわち、edgeBの次のエッジデータが連結されていないか否かを判断する。ステップ５５０で肯定判断した場合には、ステップ５５２に進み、edgeBの区間を変更せずに、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、NULLからedgeAの記憶領域を示すアドレスとなるように変更する。
【０２１０】
さらにまた、ステップ５５０で、否定判断した場合には、ステップ５５４に進み、edgeB.nextが示すアドレスに記憶されている次のエッジデータをedgeBとしてステップ５４０に戻る。
【０２１１】
また、ステップ５４６で、否定判断した場合には、着目スキャンラインのＸ軸上において、edgeAの区間（範囲）の一部或いは全体が、edgeBの区間の一部或いは全体に重なっている関係であることを示す。そこで、ステップ５４８に進み、edgeAとedgeBとを合成する。具体的には、edgeBの始点startを、edgeA.start及びedgeB.startのいずれか小さい方となるように変更し、edgeBの終点endにを、edgeA.end及びedgeB.endのいずれか大きい方となるように変更する。その後、edgeAは削除する。また、逆に、edgeAの始点及び終点を上記と同様に変更して、edgeBをedgeAに置き換え、edgeBを削除するようにしてもよい。
【０２１２】
エッジ挿入処理の後、ステップ５１８では、スキャンラインyのエッジリストから次のエッジデータを取得する。具体的には、上記取得したエッジデータのアドレスnextに格納されているアドレスからエッジデータを取得する。ただし、アドレスnextの値がNULLの場合には取得失敗となる。ステップ５１８の後は、ステップ５１０に戻る。
【０２１３】
ステップ５１０において、否定判断した場合には、ステップ５２０に進み、yに１を加算する。そして、ステップ５２２において、yがパターン画像の高さptn_height未満か否かを判断する。ステップ５２２で肯定判断した場合には、パターン画像の全てのスキャンラインについてラスタ形式への変換が終了していないことを示しているため、次のスキャンラインのラスタ形式への変換を行なうために、ステップ５１０に戻る。
【０２１４】
また、ステップ５２２で否定判断した場合には、パターン画像の全てのスキャンラインについてラスタ形式への変換が終了したことを示しているため、ステップ５２４に進み、エッジリスト形式のパターン画像情報をメモリ領域ＰＡ１から削除し、メモリ領域ＰＡ１を解放する。
【０２１５】
ステップ５２６では、typeの値を「edgelist」から「hybrid」に変更する。
【０２１６】
次に、図１８のステップ１６４で実行されるラスタ形式のパターン画像に対する描画処理について詳細に説明する。図３２は、ラスタ形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【０２１７】
ステップ６００では、読み込んだ描画コマンドの種類を判断する。描画コマンドがイメージ描画コマンドであれば、ステップ６０２で、イメージ描画コマンドのラスタ形式描画処理を実行し、描画コマンドがグラフィックス描画コマンドであれば、ステップ６０４で、グラフィックス描画コマンドのラスタ形式描画処理を実行し、描画コマンドが文字描画コマンドであれば、ステップ６０６で、文字描画コマンドのラスタ形式描画処理を実行する。
【０２１８】
図３３は、ステップ６０２で行われるイメージ描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【０２１９】
ステップ６２０では、イメージ描画コマンドにより指定された、イメージ画像のパターン画像における描画開始位置の情報を取得して、(x_offset、 y_offset）にセットすると共に、該イメージ画像の幅・高さの情報を取得して、(width, height)にセットする。
【０２２０】
ステップ６２２では、[x_offset+width]及び[ptn_width-1]のいずれか小さい方の値を、x_endにセットする。ここで、ptn_widthは、前述したように、パターン画像の幅を示す値である。
【０２２１】
更に、ステップ６２２では、[y_offset+width]及び[ptn_height-1]のいずれか小さい方の値を、y_endにセットする。ここで、ptn_heightは、前述したように、パターン画像の高さを示す値である。
【０２２２】
ステップ６２４では、ｙに０をセットする。
【０２２３】
ステップ６２６では、[y + y_offset]が、y_endより小さいか否か判断する。パターン画像の矩形領域外の部分に対する描画は不要であり、Ｙ軸方向に不要な描画を行なわないためにステップ６２６が設けられている。ステップ６２６で、肯定判断した場合には、ステップ６２８に進む。
【０２２４】
ステップ６２８では、イメージ画像の矩形領域の左上を原点(0,0)としたときのイメージ画像の座標(0, y)から座標(x_end - x_offset, y)までの領域の各画素の色値を、パターン画像の矩形領域の左上を原点(0,0)としたときのパターン画像の座標(x_offset, y + y_offset)から座標(x_end, y + y_offset)までの領域の各画素の色値として、パターン画像用のメモリＰＡ２に書き込む（コピーする）。
【０２２５】
ステップ６３０では、スキャンライン[y + y_offset]におけるx_offsetからx_endまでの範囲がマスク範囲（パターン画像における画像領域）となるように、マスク情報へのマスク範囲の追加処理を行なう。パターン画像用のメモリ領域ＰＡ２に新たにイメージ画像が描画されると、描画した画像及び描画位置によってはパターン画像における画像領域が変化することがある。そこで、マスク情報へのマスク範囲を追加する追加処理を行なうようにしている。詳細は後述する。
【０２２６】
ステップ６３０の後は、ステップ６３２に進み、yに１を加算して、ステップ６２６に戻り、次のスキャンラインについて、上記と同様に描画処理を行なう。
【０２２７】
なお、ステップ６２６で否定判断した場合には、本描画処理を終了する。これにより、Ｙ軸方向においてパターン画像の矩形領域外の範囲に対する描画はなされない。
【０２２８】
次に、上記ステップ６３０で行われるマスク情報へのマスク範囲の追加処理について説明する。図３４は、マスク情報へのマスク範囲の追加処理の流れを示すフローチャートである。
【０２２９】
ステップ６５０では、add_yに、追加するマスク範囲のＹ座標をセットする。本マスク範囲の追加処理ルーチンが図３３のイメージ描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、add_yには、[y + y_offset]の値がセットされる。本マスク範囲の追加処理ルーチンが、後述するグラフィックス描画コマンドのラスタ形式描画処理ルーチン及び文字描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、add_yには、yの値がセットされる。
【０２３０】
また、ステップ６５０では、start_xに、追加する範囲のX座標の始点をセットする。本マスク範囲の追加処理ルーチンが図３３のイメージ描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、start_xには、x_offsetの値がセットされる。本マスク範囲の追加処理ルーチンが、後述するグラフィックス描画コマンドのラスタ形式描画処理ルーチン及び文字描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、start_xには、x_startの値がセットされる。
【０２３１】
また、ステップ６５０では、end_xに、追加する範囲のX座標の終点をセットする。ここでは、end_xには、x_endの値がセットされる。
【０２３２】
ステップ６５２では、typeの値がhybridか否かを判断する。ステップ６５２で肯定判断した場合には、マスク情報はメモリ領域ＭＡ１にエッジリスト形式で保持されているため、ステップ６５６で、マスク情報のエッジデータを作成する。ここでは、上記start_xの値をエッジデータの始点startの値とし、上記end_xの値をエッジデータの終点endの値とし、エッジデータのマスク値maskの値を1にし、アドレスnextの値はNULLにして作成する。
【０２３３】
ステップ６５８では、マスク情報のスキャンラインadd_yのエッジリストに、上記作成したエッジデータを追加する。ここで行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをadd_yとして、図２２及び図３１を用いて説明したように実行する。
【０２３４】
ステップ６６０では、マスク情報のエッジデータ数が予め定められた閾値TH2を超えたか否かを判断する。ステップ６６０において、肯定判断した場合には、ステップ６６２に進み、エッジリスト形式のマスク情報をラスタ形式に変換する処理を行なう。ステップ６６２の処理は後述する。ステップ６６２の後は、ステップ６６４において、typeの値を、ラスタ形式を示すrasterに変更し、マスク範囲追加処理を終了する。。
【０２３５】
一方、ステップ６６０において、否定判断した場合には、ステップ６６２、６６４をスキップしてマスク範囲追加処理を終了する。
【０２３６】
一方、ステップ６５２で、否定判断した場合には、マスク情報はラスタ形式で保存されているため、マスク情報における座標(start_x, add_y)から座標(end_x, add_y)までの範囲の各画素のマスク値を1にする。すなわち、ラスタ形式のマスク情報では、１画素が１ビットで表されるため、該ビットを１にする。そして、マスク範囲追加処理を終了する。
【０２３７】
次に、上記ステップ６６２で行われるマスク情報をラスタ形式に変換する処理について説明する。図３５は、マスク情報をラスタ形式に変換する処理の流れを示すフローチャートである。
【０２３８】
ステップ７００では、ラスタ形式のマスク情報を格納するためのマスク情報用のメモリ領域ＭＡ２をメモリ１２Ｂに確保する。本実施の形態では、ラスタ形式のマスク情報は、１画素１ビット必要となるため、パターン画像の幅×高さ×１ビットのメモリ領域ＭＡ２が確保される。
【０２３９】
ステップ７０２では、上記確保したマスク情報用のメモリ領域ＭＡ２を０でクリアする。すなわち、本実施の形態では、マスク情報の全画素のマスク値が０を示すように初期化される。
【０２４０】
ステップ７０４では、mask_yに０をセットする。
【０２４１】
ステップ７０６では、メモリ領域ＭＡ１に記憶されているエッジリスト形式のマスク情報からスキャンラインmask_yのエッジリストの先頭のエッジデータを取得する。
【０２４２】
ステップ７０８では、スキャンラインmask_yにエッジデータがあるか否かを判断する。ステップ７０８がステップ７０６の直後に実行される場合において、ステップ７０６での取得が成功した（取得すべきエッジデータがあった）ときには、ステップ７０８で肯定判断され、ステップ７０６での取得が失敗した（取得すべきエッジデータがなかった）ときには、ステップ７０８で否定判断される。また、ステップ７０８が後述するステップ７１２の直後に実行される場合において、ステップ７１２での取得が成功した（取得すべきエッジデータがあった）ときには、ステップ７０８で肯定判断され、ステップ７１２での取得が失敗した（取得すべきエッジデータがなかった）ときには、ステップ７０８で否定判断される。
【０２４３】
ステップ７０８で肯定判断した場合には、ステップ７１０で、マスク情報用のメモリ領域ＭＡ２における、ラスタ形式のマスク情報の、始点(start, mask_y)から終点(end, mask_y)までの範囲の画素に対するマスク値（上記初期化により０となっている）を、１に変更する（上書きする）。ここで、startは取得したエッジデータの始点startの値であり、endは取得したエッジデータの終点endの値である。
【０２４４】
ステップ７１２では、スキャンラインmask_yのエッジリストから次のエッジデータを取得する。具体的には、上記取得したエッジデータのアドレスnextに格納されているアドレスからエッジデータを取得する。ただし、アドレスnextの値がNULLの場合には取得失敗となる。ステップ７１２の後は、ステップ７０８に戻る。
【０２４５】
ステップ７０８において、否定判断した場合には、ステップ７１４に進み、mask_yに１を加算する。そして、ステップ７１６において、mask_yがパターン画像の高さptn_height未満か否かを判断する。ステップ７１６で肯定判断した場合には、全てのスキャンラインについてマスク情報のラスタ形式への変換が終了していないことを示しているため、次のスキャンラインの変換を行なうために、ステップ７０６に戻る。
【０２４６】
また、ステップ７１６で否定判断した場合には、全てのスキャンラインについてマスク情報のラスタ形式への変換が終了したことを示しているため、ステップ７１８に進み、エッジリスト形式のマスク情報をメモリ領域ＭＡ１から削除し、メモリ領域ＭＡ１を解放する。
【０２４７】
次に、ステップ６０４のグラフィックス描画コマンドのラスタ形式描画処理について説明する。図３６は、グラフィックス描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【０２４８】
ステップ７４０では、グラフィックス描画コマンドにより指定された描画色を取得してg_colorにセットする。例えば、図１０に示す定義命令に含まれるグラフィック描画コマンドfillRectに対して、with colorで指定された色が描画色である。
【０２４９】
ステップ７４２では、グラフィックス描画コマンドにより指定された描画領域のＹ座標の範囲を求める。例えば、図１０に示す例では、図１０の（２）に示す描画コマンドのfillRectに続く(0,0,3,3)において、最初の２つの数値が、パターン画像におけるグラフィックス画像の描画開始位置であり、それに続く２つの数値が、描画するグラフィックス画像の幅及び高さを示す画素数であることから、グラフィックス描画コマンドの描画領域のＹ座標の最小値は、描画開始位置のＹ座標0、Ｙ座標値の最大値は、該描画開始位置Ｙ座標0に高さ3を加算した3となる。そして、このＹ座標の最小値をy_startにセットし、最大値をy_endにセットする。
【０２５０】
ステップ７４４では、yにy_startの値をセットする。
【０２５１】
ステップ７４６では、グラフィックス描画コマンドにより描画するグラフィックス画像について、スキャンラインyにおけるスキャン変換処理（画像のエッジを抽出する処理）を行い、スキャンラインyにおけるＸ軸上の描画範囲x_start、x_endを求める。
【０２５２】
ステップ７４８では、ラスタ形式のパターン画像の、始点(x_start, y)から終点(x_end, y)までの範囲の画素の色値を、描画色g_colorの値に変更する（g_colorの値を書き込む）。
【０２５３】
ステップ７５０では、スキャンラインyにおけるx_startからx_endまでの範囲がマスク範囲となるように、マスク情報へのマスク範囲の追加処理を行なう。このマスク範囲の追加処理は、上記で図３４を用いて説明したように実行する。
【０２５４】
ステップ７５２では、yに１を加算する。
【０２５５】
ステップ７５２では、yがy_end以下であるか否かを判断する。ステップ７５２で肯定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了していない状態であるため、ステップ７４６に戻り、次のスキャンラインについて上記処理を繰り返す。また、ステップ７５２で否定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了した状態であるため、本グラフィックス描画コマンドのラスタ形式描画処理を終了する。
【０２５６】
次に、ステップ６０６の文字描画コマンドのラスタ形式描画処理について説明する。図３７は、文字描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【０２５７】
ステップ７７０では、文字描画コマンドにより指定された描画色を取得してt_colorにセットする。
【０２５８】
ステップ７７２では、文字描画コマンドにおいてパターン画像に配置（描画）するよう指定された文字画像の描画開始位置の情報を取得して、(x_offset, y_offset)にセットする。
【０２５９】
ステップ７７４では、文字ビットマップデータを取得する。
【０２６０】
ステップ７７６では、char_xに０をセットすると共に、char_yに０をセットする。
【０２６１】
ステップ７７８では、上記取得した文字ビットマップデータから文字のエッジ抽出を行なう。具体的には、上記で図２７を用いて説明したように実行する。
【０２６２】
ステップ７７８の文字のエッジ抽出処理が終了した後は、ステップ７８０に進む。ステップ７８０では、エッジ抽出が成功したか否かを判断する。ステップ７８０で肯定判断した場合には、ステップ７８２に進み、x_startに[edge_x + x_offset]の値をセットし、x_endに[edge_x_end + x_offset]の値をセットし、yに[edge_y + y_offset]の値をセットする。
【０２６３】
ステップ７８４では、ラスタ形式のパターン画像の、始点(x_start, y)から終点(x_end, y)までの範囲の画素の色値を、描画色t_colorの値に変更する（t_colorの値を書き込む）。
【０２６４】
ステップ７８６では、スキャンラインyにおけるx_startからx_endまでの範囲がマスク範囲となるように、マスク情報へのマスク範囲の追加処理を行なう。具体的には、上記で図３４を用いて説明したように実行する。
【０２６５】
ステップ７８６の後は、ステップ７７８に戻り、次のエッジの抽出を、上記と同様に行う。ステップ７７８の処理により、新たなエッジが抽出された場合には、ステップ７８０で肯定判断されるため、上記ステップ７８２以降の処理が同様に行われる。また、ステップ７７８で新たなエッジ抽出されなかった場合には、ステップ７８０で否定判断され、図３７の文字描画コマンドのラスタ形式描画処理を終了する。
【０２６６】
次に、図１６のステップ１１０のパターン塗りつぶし処理について詳細に説明する。
【０２６７】
図３８は、パターン塗りつぶし処理の流れを示すフローチャートである。
【０２６８】
ステップ８００では、使用するパターン画像に関する情報（幅ptn_width、高さptn_height、データ形式type、及びアドレスaddress）を、パターン画像のパターン名に基づいてパターン管理テーブルから取得する。
【０２６９】
ステップ８０２では、パターン塗りつぶし命令に含まれる塗りつぶしコマンドにより指定されている塗りつぶし範囲のＹ座標の範囲の最小値y_start、及び最大値y_endを求め（図３（Ｂ）も参照。）、該y_startの値をyにセットする。
【０２７０】
ステップ８０４では、スキャンラインyにおけるＸ軸方向の塗りつぶし範囲の最小値x_start、及び最大値x_endを求め（図３（Ｂ）も参照。）、該x_startの値をxにセットする。
【０２７１】
ステップ８０６では、塗りつぶし範囲の開始点(x, y)に対応するパターン画像の開始点(ptn_x, ptn_y)を求める（図３（Ａ）も参照。）。更に、ptn_x_lenに、[ptn_width - ptn_x]及び[x_end - ptn_x]のいずれか小さい方の値をセットする。
【０２７２】
ステップ８０８では、x_nextに、[x_ + ptn_x_len]の値をセットする。x_nextは、塗りつぶし範囲の開始点にパターン画像の開始点を合わせてパターン画像を１つ配置して、ページバッファにパターン画像の色値を書き込んだ後の、次の描画開始点のＸ座標値である。
【０２７３】
ステップ８１０では、パターン情報のtypeを判断する。上記パターン管理テーブルから取得したtypeの値が、rasterであれば、ステップ８１２に進み、ラスタ形式のパターン塗りつぶし処理を行なう。ラスタ形式パターンの塗りつぶし処理では、ラスタ形式のパターン情報を用いて、ページバッファのスキャンラインyにおけるＸ座標値xから[x + ptn_x_len-1]までの範囲の描画（塗りつぶし）が行われる。
【０２７４】
上記パターン管理テーブルから取得したtypeの値が、edgelistであれば、ステップ８１４に進み、エッジリスト形式パターンの塗りつぶし処理を行なう。エッジリスト形式パターン塗りつぶし処理では、エッジリスト形式のパターン情報を用いて、ページバッファの、スキャンラインyにおけるＸ座標値xから[x + ptn_x_len -1]までの範囲の描画（塗りつぶし）が行われる。
【０２７５】
上記パターン管理テーブルから取得したtypeの値が、hybridであれば、ステップ８１６に進み、ハイブリッド形式パターンの塗りつぶし処理を行なう。ハイブリッド形式パターンの塗りつぶし処理では、ハイブリッド形式のパターン情報を用いて、ページバッファの、スキャンラインyにおけるＸ座標値xから[x + ptn_x_len -1]までの範囲の描画（塗りつぶし）が行われる。
【０２７６】
これら各塗りつぶし処理の詳細については後述する。
【０２７７】
ステップ８１２，８１４，及び８１６のいずれかが終了すると、ステップ８１８に進み、x_nextがx_end以下か否かを判断する。ステップ８１８において、否定判断した場合には、ステップ８２０に進み、xにx_nextの値をセットする。ステップ８２０の後は、ステップ８０６に戻り、上記と同様に処理する。
【０２７８】
すなわち、ステップ８０６〜ステップ８２０の処理を繰り返すことで、塗りつぶし範囲のスキャンラインyにおいて、塗りつぶし範囲のＸ軸方向の開始点をずらしながら、該開始点の各々を書込み位置として、パターン画像のスキャンラインptn_y上の色値を繰り返し複写する（書き込む）ようにしている。
【０２７９】
一方、ステップ８１８で、肯定判断した場合には、スキャンラインyにおけるＸ軸方向の塗りつぶし範囲の最大値x_endまでの塗りつぶし（描画）が終了した状態であるため、ステップ８２２に進む。ステップ８２２に進み、yがy_endより小さいか否かを判断する。ステップ８２２で否定判断した場合には、塗りつぶし範囲のＹ座標の範囲の最大値y_endまでの塗りつぶしはまだ終了していない状態であるため、ステップ８２４に進み、次のスキャンラインの塗りつぶしが行われるように、yに１を加算して、ステップ８０４に戻り、上記と同様に処理する。
【０２８０】
また、ステップ８２２で肯定判断した場合には、塗りつぶし範囲のＹ座標の範囲の最大値y_endまでの塗りつぶしが終了した状態、すなわち、塗りつぶし範囲に対するパターン画像の描画処理が終了した状態であるため、本パターン塗りつぶし処理を終了する。
【０２８１】
ここで、ステップ８１２、８１４、及び８１６の各塗りつぶし処理について、図３９から図４２までの各図面を用いて説明する。
【０２８２】
図３９は、塗りつぶし処理を概念的に説明する説明図である。図３９（Ａ）は、パターン情報がエッジリスト形式の場合の塗りつぶし処理の説明図であり、図３９（Ｂ）は、パターン情報がハイブリッド形式の場合の塗りつぶし処理の説明図であり、図３９（Ｃ）には、パターン情報がラスタ形式の場合の塗りつぶし処理の説明図である。なお、図３９では、パターン画像の開始点ptn_xからptn_x+lengthまでの領域が、塗りつぶし範囲に対応するスキャンラインptn_yの領域（タイリング領域）として図示されている。
【０２８３】
まず最初に、図３９（Ｃ）及び図４０を参照して、ステップ８１２で行われる、パターン情報がラスタ形式（パターン画像情報及びマスク情報の各々がラスタ形式）の場合の塗りつぶし処理について説明する。
【０２８４】
図４０において、ステップ８４０では、パターン画像情報から座標(ptn_x, ptn_y)の色値を取得し、ptn_x_colorにセットする。
【０２８５】
ステップ８４２では、マスク情報から、座標(ptn_x, ptn_y)のマスク値を取得し、ptn_x_maskにセットする。
【０２８６】
ステップ８４４では、ptn_x_maskが１か否かを判断する。ステップ８４４で肯定判断した場合には、ステップ８４６に進み、ptn_x_colorの値をページバッファの座標(x,y)に書き込む（図３９（Ｃ）も参照。）。
【０２８７】
一方、ステップ８４４で、否定判断した場合には、座標(ptn_x, ptn_y)のマスク値が、非画像領域の画素であることを示す０であるため、ステップ８４６の書込みを行なわずに（図３９（Ｃ）も参照。）、ステップ８４８に進む。
【０２８８】
ステップ８４８では、ptn_x_lenから１を減算し、ptn_xに１を加算し、xに１を加算して、ステップ８５０に進む。
【０２８９】
ステップ８５０では、ptn_x_lenが０より大きいか否かを判断する。ステップ８５０で、肯定判断した場合には、ステップ８４０に戻り、次の画素について上記と同様に書込みを行なう。また、ステップ８５０で否定判断した場合には、本塗りつぶし処理を終了する。
【０２９０】
次に、図３９（Ａ）及び図４１を参照して、ステップ８１４で行われる、パターン情報がエッジリスト形式（パターン画像情報がエッジリスト形式）の場合の塗りつぶし処理について説明する。
【０２９１】
ステップ８７０では、パターン画像情報のスキャンラインptn_yのエッジリストの先頭エッジデータptn_edgeを取得する。
【０２９２】
ステップ８７２では、エッジデータptn_edgeの始点startの値を、ptn_edge_sxにセットし、ptn_edgeの終点endの値を、ptn_edge_exにセットし、ptn_edgeの色値colorの値を、ptn_edge_colorにセットする。
【０２９３】
ステップ８７４では、[ptn_x + ptn_x_len - 1]の値が、取得したエッジデータの始点ptn_edge_sxの値より小さいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲（図３９のタイリング領域）の終点が、取得したエッジデータの始点より小さければ、該エッジデータの区間はパターン画像の描画範囲外であることを示している。更に、エッジデータは、Ｘ軸方向に順に連結されるため、これ以降のエッジデータも、描画範囲外となる。従って、ここで肯定判断された場合には、本塗りつぶし処理が終了する。なお、図示は省略するが、もともとスキャンラインptn_yにエッジデータが存在せず、ステップ８７０でエッジデータが取得されなかった場合も、本塗りつぶし処理は終了する。
【０２９４】
一方、ステップ８７４で、否定判断した場合には、ステップ８７６に進む。ステップ８７６では、パターン画像におけるＸ軸上の開始点ptn_x（パターン画像のスキャンラインptn_yにおける描画範囲の始点）が、取得したエッジデータの終点ptn_edge_exより大きいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲の始点が、取得したエッジデータの終点より大きければ、取得したエッジデータの区間は、Ｘ軸方向においてパターン画像の描画範囲外に存在することとなる。従って、ステップ８７６で肯定判断された場合には、次のエッジデータを取得するため、ステップ８８８に進む。ステップ８８８については後述する。
【０２９５】
一方、ステップ８７６で否定判断した場合には、取得したエッジデータの区間の一部又は全体が、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複していることを示している。例えば、図３９（Ａ）に示すように、edge1及びedge2の各区間は、パターン画像におけるスキャンラインptn_y上の描画範囲の一部と重複している。このような位置関係の場合には、ステップ８７６で否定判断されるため、ステップ８７８に進む。
【０２９６】
ステップ８７８では、パターン画像におけるＸ軸上の開始点ptn_xが、取得したエッジデータの始点ptn_edge_sxより小さいか否かを判断する。ここで肯定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジデータの区間の始点が、例えば図３９（Ａ）のedge2に示す位置関係となっていることを示している。そこで、ステップ８７８で、肯定判断した場合には、ステップ８８０に進む。
【０２９７】
ステップ８８０では、ptn_xから[ptn_edge_sx -1]までの範囲は描画しない（色値を書き込まない）ため、描画の開始点をptn_edge_sxに変更する。具体的には、xに[ptn_edge_sx - ptn_x]の値を加算し、ptn_x_lenから[ptn_edge_sx - ptn_x]の値を減算し、ptn_xに、ptn_edge_sxの値をセットする。そして、ステップ８８２に進む。
【０２９８】
一方、ステップ８７８で否定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジでデータの区間の始点が、例えば図３９（Ａ）のedge1に示す位置関係となっていることを示している。従って、ptn_xから描画されるよう、ステップ８８０をスキップしてステップ８８２に進む。
【０２９９】
ステップ８８２では、draw_lenに、[ptn_x_len]及び[ptn_edge_ex - ptn_edge_sx +1]のいずれか小さい方の値をセットする。draw_lenはＸ軸上の描画する範囲の長さを示している。
【０３００】
ステップ８８４では、イメージバッファの座標(x, y)から座標(x + draw_len - 1, y)までの範囲へ、ptn_edge_colorの値を書き込む（図３９の（Ａ）も参照。）。
【０３０１】
ステップ８８６では、xにdraw_lenの値を加算し、ptn_x_lenからdraw_lenの値を減算し、ptn_xに、draw_lenの値を加算する。すなわち、[ptn_x + draw_len - 1]まで描画したので、次の描画の開始点を[ptn_x + draw_len]に移動する。
【０３０２】
ステップ８８６の処理後、及びステップ８７６で肯定判断した場合には、ステップ８８８に進む。
【０３０３】
ステップ８８８では、ptn_x_lenが０より大きく、かつ、次のエッジデータが存在するか否かを判断する。ステップ８８８で肯定判断した場合には、ステップ８９０で、エッジデータptn_edgeのアドレスnextに格納されているアドレスが示す記憶領域から、次のエッジデータを取得し、新たに取得したエッジデータを、エッジデータptn_edgeとして用いて、ステップ８７２に戻り、上記処理を繰り返す。また、ステップ８８８で否定判断した場合には、パターン画像のスキャンラインptn_yにおける描画が終了したことを示しているため、本塗りつぶし処理が終了する。
【０３０４】
次に、図３９（Ｂ）及び図４２を参照して、ステップ８１６で行われる、パターン情報がハイブリッド形式（パターン画像情報がラスタ形式でマスク情報がエッジリスト形式）の場合の塗りつぶし処理について説明する。
【０３０５】
ステップ９００では、マスク情報のスキャンラインptn_yのエッジリストの先頭エッジデータptn_edgeを取得する。
【０３０６】
ステップ９０２では、エッジデータptn_edgeの始点startの値を、ptn_edge_sxにセットし、ptn_edgeの終点endの値を、ptn_edge_exにセットする。
【０３０７】
ステップ９０４では、[ptn_x + ptn_x_len - 1]の値が、取得したエッジデータの始点ptn_edge_sxの値より小さいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲（図３９のタイリング領域）の終点が、取得したエッジデータの始点より小さければ、該エッジデータの区間はパターン画像の描画範囲外であることを示している。更に、エッジデータは、Ｘ軸方向に順に連結されるため、これ以降のエッジデータも、描画範囲外となる。従って、ここで肯定判断された場合には、本塗りつぶし処理が終了する。なお、図示は省略するが、もともとスキャンラインptn_yにエッジデータが存在せず、ステップ９００でエッジデータが取得されなかった場合も、本塗りつぶし処理は終了する。
【０３０８】
一方、ステップ９０４で、否定判断した場合には、ステップ９０６に進む。ステップ９０６では、パターン画像におけるＸ軸上の開始点ptn_xが、取得したエッジデータの終点ptn_edge_exより大きいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲（図３９のタイリング領域）の始点が、取得したエッジデータの終点より大きければ、取得したエッジデータの区間は、Ｘ軸方向においてパターン画像の描画範囲外に存在することとなる。従って、ステップ９０４で肯定判断された場合には、次のエッジデータを取得するため、ステップ９１８に進む。ステップ９１８については後述する。
【０３０９】
一方、ステップ９０６で否定判断した場合には、取得したエッジデータの区間の一部又は全体が、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複していることを示している。例えば、図３９（Ｂ）に示すように、edge3及びedge4の各区間は、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複している。このような位置関係の場合には、ステップ９０６で否定判断されるため、ステップ９０８に進む。
【０３１０】
ステップ９０８では、パターン画像におけるＸ軸上の開始点ptn_xが、取得したエッジデータの始点ptn_edge_sxより小さいか否かを判断する。ここで肯定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジデータの区間の始点が、例えば図３９（Ｂ）のedge4に示す位置関係となっていることを示している。そこで、ステップ９０８で、肯定判断した場合には、ステップ９１０に進む。
【０３１１】
ステップ９１０では、ptn_xから[ptn_edge_sx -1]までの範囲は描画しない（画素値を書き込まない）ため、描画の開始点をptn_edge_sxに変更する。具体的には、xに[ptn_edge_sx - ptn_x]の値を加算し、ptn_x_lenから[ptn_edge_sx - ptn_x]の値を減算し、ptn_xに、ptn_edge_sxの値をセットする。そして、ステップ９１２に進む。
【０３１２】
一方、ステップ９０８で否定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジでデータの区間の始点が、例えば図３９（Ｂ）のedge3に示す位置関係となっていることを示している。従って、ptn_xから描画されるよう、ステップ９１０をスキップしてステップ９１２に進む。
【０３１３】
ステップ９１２では、draw_lenに、[ptn_x_len]及び[ptn_edge_ex - ptn_edge_sx +1]のいずれか小さい方の値をセットする。draw_lenはＸ軸上の描画する範囲の長さを示している。
【０３１４】
ステップ９１４では、パターン画像情報の(ptn_x, ptn_y)から(ptn_x + draw_len -1, ptn_y)までの各画素の色値を、イメージバッファの(x, y)から(x + draw_len - 1, y)までの範囲に書き込む（図３９の（Ｂ）も参照。）。
【０３１５】
ステップ９１６では、xにdraw_lenの値を加算し、ptn_x_lenからdraw_lenの値を減算し、ptn_xに、draw_lenの値を加算する。すなわち、[ptn_x + draw_len - 1]まで描画したので、次の描画の開始点を[ptn_x + draw_len]に移動する。
【０３１６】
ステップ９１６の処理後、及びステップ９０６で肯定判断した場合には、ステップ９１８に進む。
【０３１７】
ステップ９１８では、ptn_x_lenが０より大きく、かつ、次のエッジデータが存在するか否かを判断する。ステップ９１８で肯定判断した場合には、ステップ９２０で、エッジデータptn_edgeのアドレスnextに格納されているアドレスが示す記憶領域から、次のエッジデータを取得し、新たに取得したエッジデータを、エッジデータptn_edgeとして用いて、ステップ９１２に戻り、上記処理を繰り返す。また、ステップ９１８で否定判断した場合には、パターン画像のスキャンラインptn_yにおける描画が終了したことを示しているため、本塗りつぶし処理が終了する。
【０３１８】
ここでフローチャートの説明は終了するが、上記ではパターン画像情報をエッジリスト形式からラスタ形式に変換するか否かの判断に用いた閾値TH1、及びマスク情報をエッジリスト形式からラスタ形式に変換するか否かの判断に用いた閾値TH2の具体例については、何ら言及しなかったが、各閾値については以下のように予め設定して用いるようにしてもよい。
【０３１９】
まず、閾値TH1であるが、例えば、ラスタ形式で表したパターン画像情報のサイズ（データ量）がエッジリスト形式で表したパターン画像情報のサイズ（データ量）より小さくなるように閾値TH1を求めればよい。例えば、以下の（１）式を用いる。
【０３２０】
width×height×4 < height×4+edge×12    …（１）
【０３２１】
（１）式において、widthがパターン画像の幅、heightが高さ、edgeがエッジデータの数である。なお、（１）式の左辺は、図５で例示したラスタ形式で表したカラーのパターン画像情報のサイズを示しており、（１）式の右辺は、図８で例示したエッジリスト形式で表したパターン画像情報のサイズを示している。この（１）式を変形すると、下記（２）式が得られる。
【０３２２】
edge > {(width-1)×height}/3    …（２）
【０３２３】
（２）式の右辺の値は、ラスタ形式で表したパターン画像情報のサイズ（データ量）とエッジリスト形式で表したパターン画像情報のサイズ（データ量）とが等しくなるときのエッジデータの数であり、これを閾値TH1として用い、（２）式の条件を満たした場合に、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【０３２４】
次に、閾値TH2であるが、例えば、ラスタ形式で表したマスク情報のサイズ（データ量）がエッジリスト形式で表したマスク情報のサイズ（データ量）より小さくなるように閾値TH2を求めればよい。例えば、以下の（３）式を用いる。
【０３２５】
width×height/8 < height×4+edgem×9    …（３）
【０３２６】
（３）式において、widthがパターン画像の幅、heightが高さ、edgemがマスク情報のエッジデータの数である。（３）式を変形すると、下記（４）式が得られる。
【０３２７】
edgem> {(width - 32)×height} / 72    …（４）
【０３２８】
（４）式の右辺の値は、ラスタ形式で表したマスク情報のサイズ（データ量）とエッジリスト形式で表したマスク情報のサイズ（データ量）とが等しくなるときのエッジデータの数であり、これを閾値TH2として用い、（４）式の条件を満たした場合に、マスク情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【０３２９】
このように、（２）式により得られた閾値TH1及び（４）式により得られた閾値TH2を用いることで、パターン画像情報のメモリ使用量及びマスク情報のメモリ使用量の各々を個別に判断して、ラスタ形式及びエッジリスト形式のうち、各々のメモリ使用量が小さくなるほうのデータ形式で記憶されるが、パターン画像情報をラスタ情報に変換する場合には、エッジリスト形式の場合には必要なかったマスク情報が作成されるため、パターン情報全体でメモリ使用量が効率化されるように、閾値TH1を求めてもよい。例えば、下記（５）式を用いる。
【０３３０】
(width×height×4)+(height×4+edgem×9) < height×4+edge×12    …（５）
【０３３１】
（５）式の左辺は、図５で例示したラスタ形式で表したパターン画像情報のサイズと、エッジリスト形式で表したマスク情報のサイズとの合計値を示しており、（５）式の右辺は、図８で例示したエッジリスト形式で表したパターン画像情報のサイズを示している。
【０３３２】
なお、左辺のedgemは、マスク情報をエッジリスト形式で表したときのエッジデータの数である。マスク情報のエッジ数は、パターン画像のエッジ数以上にはならないため、
edgem≦edge
が成立する。図２３、図２４，及び図３１を用いて説明したように、パターン画像の場合には、区間が隣接する或いは区間の少なくとも一部が重なる複数のエッジデータは、同色でないと合成されないが、マスク情報の場合には、エッジデータのマスク値は全て同じ値”１”であるため、色に関わりなく合成されるためである。
【０３３３】
従って、edgemを、edgemが取り得る最大値であるedgeに置き換えて、（５）式を変形すると、下記（６）式が得られる。
【０３３４】
edge > width × height × 4 / 3    …（６）
【０３３５】
（６）式の右辺を閾値TH1として用い、（６）式の条件を満たした場合に、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【０３３６】
また、上記実施の形態では、パターン定義の際に、パターン画像情報毎、及びマスク情報毎にデータ形式を切替えて記憶する例について説明したが、これに限定されず、例えば、パターン画像情報及びマスク情報ともに、スキャンライン毎にデータ形式を判断して、スキャンライン毎に判断結果に応じたデータ形式でデータを記憶するようにしてもよい。この場合には、閾値TH1に代えて、上記閾値TH1をheightで除算した閾値TH1'をスキャンライン単位の閾値として用いればよい。例えば、下記（７）又は（８）の右辺の値を閾値TH1'とすればよい。
【０３３７】
edge > (width-1)/3    …（７）
edge > width × 4 / 3    …（８）
【０３３８】
また、マスク情報の各スキャンラインのデータ形式を判断するための閾値TH2'も、上記閾値TH2をheightで除算して求めればよい。例えば、下記（９）式の右辺の値を閾値TH2'とすればよい。
【０３３９】
edgem> (width - 32)/ 72    …（９）
【０３４０】
なお、スキャンライン単位で形式を切替えて記憶する際、上記実施の形態と同様に、定義命令に、描画コマンドが複数含まれる場合、且つ先に実行された描画コマンドにより既に描画されているスキャンラインが存在する場合において、該スキャンラインのデータ形式がラスタ形式で記憶されているときは、上記と同様に、閾値による判断をせずに、そのスキャンラインをラスタ形式で描画する。パターン画像だけでなく、マスク情報も同様である。
【０３４１】
また、上記では画像処理のプログラムの一例としてのプログラムが装置制御部１２の記憶部１２Ｃに記憶される態様を説明したが、これに限定されず、該プログラムを、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【符号の説明】
【０３４２】
１０  画像形成装置
１２  装置制御部
１２Ａ  ＣＰＵ
１２Ｂ  メモリ
１２Ｃ  記憶部
１６    画像形成部
【図１】
0005760728.tif 000002
【図５】
0005760728.tif 000003
【図６】
0005760728.tif 000004
【図８】
0005760728.tif 000005
【図９】
0005760728.tif 000006
【図１０】
0005760728.tif 000007
【図１１】
0005760728.tif 000008
【図１２】
0005760728.tif 000009
【図１３】
0005760728.tif 000010
【図１４】
0005760728.tif 000011
【図１５】
0005760728.tif 000012
【図１６】
0005760728.tif 000013
【図１７】
0005760728.tif 000014
【図１８】
0005760728.tif 000015
【図１９】
0005760728.tif 000016
【図２０】
0005760728.tif 000017
【図２１】
0005760728.tif 000018
【図２２】
0005760728.tif 000019
【図２３】
0005760728.tif 000020
【図２４】
0005760728.tif 000021
【図２５】
0005760728.tif 000022
【図２６】
0005760728.tif 000023
【図２７】
0005760728.tif 000024
【図２８】
0005760728.tif 000025
【図２９】
0005760728.tif 000026
【図３０】
0005760728.tif 000027
【図３１】
0005760728.tif 000028
【図３２】
0005760728.tif 000029
【図３３】
0005760728.tif 000030
【図３４】
0005760728.tif 000031
【図３５】
0005760728.tif 000032
【図３６】
0005760728.tif 000033
【図３７】
0005760728.tif 000034
【図３８】
0005760728.tif 000035
【図３９】
0005760728.tif 000036
【図４０】
0005760728.tif 000037
【図４１】
0005760728.tif 000038
【図４２】
0005760728.tif 000039
【図２】
0005760728.tif 000040
【図３】
0005760728.tif 000041
【図４】
0005760728.tif 000042
【図７】
0005760728.tif 000043