画像処理装置、画像形成装置、及びプログラム
【課題】パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制する。
【解決手段】パターン画像をエッジリスト形式で表したときのエッジデータの数が閾値TH1以下となる場合には、パターン画像を前記ラスタ形式で表したパターン画像情報を記憶し、パターン画像をエッジリスト形式で表したときのエッジデータの数が閾値TH1を超える場合には、ラスタ形式でパターン画像を表したパターン画像情報を記憶する。また、記憶されたパターン画像情報がラスタ形式の場合にマスク情報を作成し、マスク情報をエッジリスト形式で表したときのエッジデータの数が閾値TH2以下となる場合には、マスク情報をエッジリスト形式で表して記憶し、マスク情報をエッジリスト形式で表したときのエッジデータの数が閾値TH2を超える場合には、マスク情報をラスタ形式で表して記憶する。
【解決手段】パターン画像をエッジリスト形式で表したときのエッジデータの数が閾値TH1以下となる場合には、パターン画像を前記ラスタ形式で表したパターン画像情報を記憶し、パターン画像をエッジリスト形式で表したときのエッジデータの数が閾値TH1を超える場合には、ラスタ形式でパターン画像を表したパターン画像情報を記憶する。また、記憶されたパターン画像情報がラスタ形式の場合にマスク情報を作成し、マスク情報をエッジリスト形式で表したときのエッジデータの数が閾値TH2以下となる場合には、マスク情報をエッジリスト形式で表して記憶し、マスク情報をエッジリスト形式で表したときのエッジデータの数が閾値TH2を超える場合には、マスク情報をラスタ形式で表して記憶する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は画像処理装置、画像形成装置、及びプログラムに関する。
【背景技術】
【0002】
特許文献1には、1ラインデータを参照データとしてラインバッファに格納し、格納データとの比較を行なってデータの符号化又は復号処理を行なう二次元符号化復号処理装置において、参照データを構成するランレングスデータサイズがラインバッファのサイズを超えないときはランレングスデータ形式でラインバッファに格納し、ランレングスデータサイズがラインバッファのサイズより大きいときはビットマップデータ形式で格納する技術が開示されている。
【0003】
また特許文献2には、複数の画像オブジェクト(例えば文字やイメージやグラフィック)で構成されている電子ドキュメント及びPDLデータを受信し、画像を形成する画像形成装置において、ベクターエッジで構成されるディスプレイリストを生成する手段を備え、描画処理の速度の妨げになるラインを抽出する処理を備え、抽出されたラインのみスキャンラインエッジに変換する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001−078042号公報
【特許文献2】特開2009−101519号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる画像処理装置、画像形成装置、及びプログラムを得ることを目的とする。
【課題を解決するための手段】
【0006】
請求項1の発明の画像処理装置は、パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段と、前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段と、前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、を備えている。
【0007】
請求項2の発明は、請求項1記載の画像処理装置において、前記第2の閾値を、前記マスク情報を前記第1の形式で表したときのデータ量と、前記マスク情報を前記第2の形式で表したときのデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0008】
請求項3の発明は、請求項1又は請求項2に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0009】
請求項4の発明は、請求項1又は請求項2に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量に前記マスク情報を前記第2の形式で表したときのデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定したものである。
【0010】
請求項5の発明は、請求項1に記載の画像処理装置において、前記第1の記憶処理手段は、ライン単位で前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるか否かを判断し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるラインについては、前記第1の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超えるラインについては、前記第2の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、前記第2の記憶処理手段は、ライン単位で前記マスク情報を前記第2の形式で表したときのエッジデータの数が前記第2の閾値以下となるか否かを判断し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値以下となるラインについては、前記第1の形式で表したマスク情報を前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超えるラインについては、前記第2の形式で表した前記マスク情報を前記記憶手段に記憶するように処理する。
【0011】
請求項6の発明は、請求項5記載の画像処理装置において、前記第2の閾値を、前記マスク情報を前記第1の形式で表したときの1ライン分データ量と、前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0012】
請求項7の発明は、請求項5又は請求項6に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0013】
請求項8の発明は、請求項6又は請求項7に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量に前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定したものである。
【0014】
請求項9の発明の画像形成装置は、請求項1〜請求項8のいずれか1項記載の画像処理装置と、前記画像処理装置により前記塗りつぶし命令が実行されて生成された出力画像情報に基づいて画像を形成する画像形成手段と、を備えている。
【0015】
請求項10の発明は、コンピュータを、パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段、前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段、及び前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、として機能させるためのプログラムである。
【発明の効果】
【0016】
請求項1に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【0017】
請求項2に記載の発明は、本構成を有しない場合に比べて、マスク情報を記憶するために必要な第2の記憶手段の使用量を抑えることができる、という効果を有する。
【0018】
請求項3に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量を抑えることができる、という効果を有する。
【0019】
請求項4に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量と、マスク情報を格納するために必要な第2の記憶手段の使用量と、を合計した合計使用量を抑えることができる。
【0020】
請求項5に記載の発明は、本構成を有しない場合に比べて、ライン毎に第1の記憶手段及び第2の記憶手段の使用量を抑制することができる、という効果を有する。
【0021】
請求項6に記載の発明は、本構成を有しない場合に比べて、マスク情報を記憶するために必要な第2の記憶手段の使用量を抑えることができる、という効果を有する。
【0022】
請求項7に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量を抑えることができる、という効果を有する。
【0023】
請求項8に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量と、マスク情報を格納するために必要な第2の記憶手段の使用量と、を合計した合計使用量を抑えることができる、という効果を有する。
【0024】
請求項10に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【0025】
請求項11に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【図面の簡単な説明】
【0026】
【図1】画像形成装置の構成の一例を示す概略ブロック図である。
【図2】PDLデータに含まれる命令の処理内容を模式的に示す模式図である。
【図3】(A)は、パターン画像における、塗りつぶし範囲の始点座標(x_start, y_start)に対応する座標(ptn_x, ptn_y)を示す図であり、(B)は、該座標(ptn_x, ptn_y)をパターン画像の描画を開始する開始点としてパターン画像を塗りつぶし範囲に配列して敷き詰めた状態を示す図である。
【図4】(A)は、パターン画像によるパターン塗りつぶし処理より先に描画された画像を示す図であり、(B)は、該先に(A)に示す画像が描画された後に、画像領域と非画像領域とを含むパターン画像が描画された状態を示す図である。
【図5】(A)は、カラーのパターン画像をラスタ形式で表したときのパターン画像情報を模式的に示す図であり、(B)は、カラーのパターン画像、白黒のパターン画像、及びマスク情報をラスタ形式で表したときのメモリ使用量を示すテーブルである。
【図6】(A)は、パターン画像をエッジリスト形式で表したときのエッジリストの一例を模式的に示した図であり、(B)は、マスク情報をエッジリストで表したときのエッジリストの一例を模式的に示した図である。
【図7】(A)は、エッジリスト形式のパターン画像情報の一例であり、(B)は、(A)のパターン画像情報により表されるパターン画像を模式的に示す図である。
【図8】(A)は、カラーのパターン画像をエッジリスト形式で表したときのエッジリストの一例を模式的に示した図であり、(B)は、カラーのパターン画像、白黒のパターン画像、及びマスク情報をエッジリスト形式で表したときのメモリ使用量を示すテーブルである。
【図9】パターン画像の一例を示す図である。
【図10】図9に示すパターン画像を定義するための定義命令の疑似コードである。
【図11】図9に示すパターン画像をエッジリスト形式で表したパターン画像情報を模式的に示した図である。
【図12】図9に示すパターン画像をラスタ形式で表したパターン画像情報を模式的に示すと共に、ラスタ形式で表したマスク情報を模式的に示した図である。
【図13】図9に示すパターン画像をラスタ形式で表したパターン画像情報を模式的に示すと共に、エッジリスト形式で表したマスク情報を模式的に示した図である。
【図14】定義命令によるパターン定義処理の一例を示す概略的なフローチャートである。
【図15】(A)は、パターン塗りつぶし命令の疑似コードであり、(B)は、(A)に示すパターン塗りつぶし命令が実行されたときの出力画像を示す図である。
【図16】PDLデータ処理のメインルーチンのフローチャートを示す図である。
【図17】パターン管理テーブルの一例を示す図である。
【図18】パターン定義処理の流れを示すフローチャートである。
【図19】エッジリスト形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【図20】イメージ描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図21】エッジの切り出し処理の流れを示すフローチャートである。
【図22】エッジリストへのエッジデータ追加処理の流れを示すフローチャートである。
【図23】エッジ挿入処理の流れを示すフローチャートである。
【図24】パターン画像情報のエッジ挿入処理を説明する説明図である。
【図25】グラフィックス描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図26】文字描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図27】文字のエッジ抽出処理の流れを示すフローチャートである。
【図28】黒座標の検出処理の流れを示すフローチャートである。
【図29】白座標の検出処理の流れを示すフローチャートである。
【図30】パターン画像情報をラスタ形式に変換する変換処理の流れを示すフローチャートである。
【図31】マスク情報のエッジ挿入処理の流れを示すフローチャートである。
【図32】ラスタ形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【図33】イメージ描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図34】マスク情報へのマスク範囲の追加処理の流れを示すフローチャートである。
【図35】マスク情報をラスタ形式に変換する処理の流れを示すフローチャートである。
【図36】グラフィックス描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図37】文字描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図38】パターン塗りつぶし処理の流れを示すフローチャートである。
【図39】塗りつぶし処理を概念的に説明する説明図である。
【図40】ラスタ形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【図41】エッジリスト形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【図42】ハイブリッド形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0027】
以下、図面を参照して画像形成装置の一実施形態を詳細に説明する。図1には本実施形態に係る画像形成装置10が示されている。画像形成装置10には、装置制御部12と、セットされた読取対象の文書(紙原稿)を光学的に読み取って読取画像データを出力する画像読取部14と、入力された出力画像情報が表す出力画像を記録用紙等の記録媒体上に形成する画像形成部16と、LCD等から成る表示部18A及びテンキーやタッチパネル等から成り利用者による操作を受付ける操作受付部18Bが設けられた操作パネル18と、ファクシミリ装置としての機能を備えた他の機器と電話線及び公衆通信網(図示省略)経由で画情報の送受信(ファクシミリ通信)を行なう画情報送受信部20と、PC(Personal Computer)等の情報処理装置とネットワークケーブル及びコンピュータネットワーク(図示省略)経由で情報の送受信を行なうためのネットワーク通信制御部22と、が設けられており、これらはバス24を介して互いに接続されている。
【0028】
装置制御部12はマイクロコンピュータ等から成り、CPU12A、メモリ12B、HDD(Hard Disk Drive)やフラッシュメモリ等から成る不揮発性の記憶部12Cが設けられている。記憶部12Cには、各種プログラム(描画情報を解釈して実行する画像処理のプログラムも含まれる。詳細は後述する)及び必要なデータ等が各々記憶されている。装置制御部12は請求項1等に記載の画像処理装置の一例であり、CPU12Aが画像処理プログラムを実行することで画像処理装置の一例として機能する。
【0029】
画像形成部16は、装置制御部12により行われた画像処理により生成された出力画像情報に基づいて、記録用紙等に画像を形成する。
【0030】
本実施の形態では、前述したように装置制御部12の画像処理の機能により、入力された描画情報が解釈されて出力画像情報が生成され、ページバッファに書き込まれる。描画情報は、ポストスクリプト等のページ記述言語(Page Description Language)により記述された情報であり、本実施の形態では少なくとも定義命令及び塗りつぶし命令を含むものとする。以下、描画情報をPDLデータと呼称する。
【0031】
定義命令は、パターン画像を定義するための命令である。本実施の形態において、定義命令は、1又は複数のコマンドを含んで構成される。
【0032】
塗りつぶし命令は、出力画像情報をページバッファに書き込むための描画命令の一種であって、出力画像の指定された範囲(以下、塗りつぶし範囲)を指定された色で塗りつぶすか或いはパターン画像を配列して塗りつぶす。以下、パターン画像を用いた塗りつぶし命令をパターン塗りつぶし命令と呼称し、指定された色で塗りつぶす塗りつぶし命令(色塗りつぶし命令)と区別して説明する。なお、本実施の形態において、各描画命令も、定義命令と同様、1又は複数のコマンドを含んで構成される。
【0033】
なお、パターン塗りつぶし命令では、パターン画像が繰り返し用いられ塗りつぶし範囲に複写されるため、パターン画像を表す情報(パターン画像情報という)を、出力画像情報とは別に、中間画像データとしてメモリ12Bの領域に格納しておく必要がある。本実施の形態では、定義命令の実行により、パターン画像情報がメモリ12Bのメモリ領域に記憶される。また、後述するが、定義命令において作成されるパターン画像情報のデータ形式によっては、パターン画像情報の他に、マスク情報が作成されメモリ領域に記憶される場合もある。
【0034】
また、本実施の形態では、幅方向(水平方向)の軸をX軸、高さ方向(垂直方向)の軸をY軸とするX−Y座標系で位置を表すものとする。また、矩形領域における左上座標を(0,0)とする。
【0035】
ここで、本実施の形態の作用を概念的に説明する。本実施の形態において、PDLデータに基づく画像処理は、図2に示すように、PDLデータに含まれる命令の記述順に実行される。図2では、PDLデータの命令に含まれる各コマンドを、擬似的或いは模式的に示しており、31がパターン属性定義コマンドの疑似コード、321〜3が模式的に示した描画コマンド(321はグラフィックス描画コマンド、322は文字描画コマンド、323はイメージ描画コマンドを示している)、33がカレントパターン設定コマンドの疑似コード,34が塗りつぶしコマンドの疑似コードであり、これら各コマンドが、この順にPDLデータに記述されているものとする。
【0036】
ここで、パターン属性定義コマンド31及び描画コマンド321〜3は、定義命令に含まれるコマンドである。パターン属性定義コマンド31は、パターン画像のサイズ等、パターン画像の属性を定義するためのコマンドである。なお、パターン属性にはサイズの他、パターン名が含まれていてもよい。描画コマンド321〜3は、パターン属性定義コマンドにより定義されたサイズの矩形領域に画像を描画するコマンドであり、描画コマンド321〜3により画像が描画される領域を画像領域という。
【0037】
カレントパターン設定コマンド33及び塗りつぶしコマンドは、パターン塗りつぶし命令に含まれるコマンドである。カレントパターン設定コマンド33は、塗りつぶし範囲に配列するパターン画像を設定するコマンドである。塗りつぶしコマンド33は、該カレントパターン設定コマンドで設定されたパターン画像により塗りつぶす処理を実行するためのコマンドである。
【0038】
まず、パターン属性定義コマンド31により、パターン画像の始点を示す座標(0,0)と、パターン画像の幅100画素、及び高さ100画素の各々が定義される。これにより、メモリ12B内のパターン用バッファ内に、始点を基準として(ここでは矩形の左上を基準とする)、幅が100画素、高さが100画素のパターン画像を表すパターン画像情報を一時的に格納するためのパターン画像用のメモリ領域が確保される(図2(1)も参照)。高さが100画素であるため、該パターン画像を構成する水平方向のライン(スキャンライン)の数は100本となる。なお、本実施の形態において、図2に示されるマスク情報(詳細は後述する)を格納するためのメモリ領域は、描画コマンドによるパターン作成中に必要に応じて確保されるものである。詳細は後述する。
【0039】
続いて、グラフィックス描画コマンド311により、上記定義されたサイズの矩形領域の指定された位置に、図形等のグラフィックス画像が描画される。更に、文字描画コマンド312により、上記矩形領域の指定された位置に、文字を表す文字画像が追加的に描画される。更に、イメージ描画コマンド313により、上記矩形領域の指定された位置に、自然画や写真画等のイメージ画像が追加的に描画される。描画コマンドを処理する毎にパターン画像が編集され、定義命令に含まれる描画コマンドの各々が実行され最終的なパターン画像ができあがる。このように、複数或いは1つの描画コマンドにより、例えば図2に示すパターン画像が作成される。作成されたパターン画像を示すパターン画像情報は、前述したパターン画像用のメモリ領域に格納される。
【0040】
なお、図2では、複数の描画コマンドの画像領域が重ならないパターン画像が図示されているが、複数の描画コマンドの画像領域が重なる場合には、後から描画される画像が優先され、先に描画された画像の画素値が後に描画される画像の画素値に置き換えられる。また、定義命令においては、パターン画像の描画コマンドにより画像が描画される画像領域以外の非画像領域の画素値については指定がない(データがない)。
【0041】
次に、パターン塗りつぶし命令の処理に移行する。パターン塗りつぶし命令に含まれるカレントパターン設定コマンド33により指定された(上記定義命令により定義済みの)パターン画像が、塗りつぶし範囲に配列するパターン画像(カレントパターン)に設定される(図2(3)も参照。)。
【0042】
次に、塗りつぶしコマンド34により、上記メモリ領域に格納されたパターン画像情報が読み出されて繰り返し用いられ、出力画像における指定された塗りつぶし範囲にパターン画像が配列されて敷き詰められる。該塗りつぶし命令の実行によりパターン画像が配列された出力画像を示す出力画像情報は、メモリ12Bに確保された出力画像情報用の記憶領域(ページバッファ)に、画素毎に画素値を有するラスタ形式で格納される(図2(4)も参照。)。図2に擬似的に示した塗りつぶしコマンド34では、塗りつぶし範囲の始点座標(50,50)と、塗りつぶし範囲の幅150画素、及び高さ200画素が指定されている。従って、該塗りつぶしコマンド34により、該始点の座標(50,50)を左上の座標として幅150画素、高さ200画素の矩形の塗りつぶし範囲に、上記パターン画像が配列されることになる。
【0043】
図3(A)に示すように、パターン画像を塗りつぶし範囲に配列する際には、パターン画像において、塗りつぶし範囲の始点の座標(x_start, y_start)に対応する座標(ptn_x, ptn_y)を求め、図3(B)に示すように、該座標(ptn_x, ptn_y)をパターン画像の描画を開始する開始点として塗りつぶし範囲に敷き詰める。従って、塗りつぶし命令で指定された座標によっては、図2,図3に示すように、塗りつぶし範囲に対して、パターン画像がパターン画像の始点から配列されない場合もある。
【0044】
また、PDLデータに、上記パターン画像によるパターン塗りつぶし命令以外に他の描画命令が含まれている場合もある。その場合には、パターン塗りつぶし命令より先に記述された描画命令により描画された画像に対して上書きするようにパターン塗りつぶし命令が実行される。
【0045】
一方、パターン定義において上記描画コマンドにより画像が描画される画像領域以外の非画像領域は、画素値のデータがない領域である。従って、PDLデータにおいて、図4(A)に示すように、該パターン画像によるパターン塗りつぶし命令より先に何らかの画像を描画する命令が記述されていた場合には、該命令により先に描画された画像の描画領域とパターン画像の非画像領域とが重なる領域においては、図4(B)に示すように、該先に描画された画像の画素値は、パターン画像の画素値により上書きされずにそのままページバッファに保持される。従って、パターン画像の非画像領域は、先に描画された画像(背景)が透過される状態となる。
【0046】
なお、上記で説明した定義命令やパターン塗りつぶし命令を構成するコマンドは一例であって、PDLデータにおける定義命令やパターン塗りつぶし命令の記述は特に限定されない。
【0047】
ところで、本実施の形態において、パターン画像情報及び後述するマスク情報をメモリ12Bに格納する際のデータ形式は2種類ある。1つは前述したラスタ形式である。
【0048】
図5(A)に示すように、カラーのパターン画像情報をラスタ形式で表す場合には、ブラック(K)色、イエロー(Y)色、マゼンタ(M)色、シアン(C)色の各々の画素値(パターン画像においては色値ともいう)が画素毎に保持される。本実施の形態では、上記KYMC各色の各々を1バイトの値で表すようにしているため、カラーの色値を表すには1画素につき4バイト必要となる。
【0049】
従って、図5(B)に示すように、幅がwidth、高さがheightのカラーのパターン画像情報をラスタ形式で表してメモリ12Bに格納するときのメモリ使用量は、4×width×height(バイト)となる。
【0050】
白黒のパターン画像情報をラスタ形式で表す場合には、ブラックの色値が画素毎に保持されるため、1画素につき1バイト必要となる。従って、図5(B)に示すように、幅がwidth、高さがheightの白黒のパターン画像情報をラスタ形式で表してメモリ12Bに格納するときのメモリ使用量は、width×height(バイト)となる。
【0051】
なお、ラスタ形式のパターン画像情報における画像領域の画素値は定義命令の定義に従った画素値とされるが、非画像領域の各画素の色値は、何らかの値であればよく、特に限定されない。これはパターン塗りつぶし命令の実行の際にマスク情報によりマスク処理(すなわち画像領域の色値が抽出されて使用)され、非画像領域の各画素の値は塗りつぶし範囲の塗りつぶしには使用されないためである。
【0052】
また、パターン画像を示すパターン画像情報をメモリ12Bに格納する際に取り得るもう1つのデータ形式は、エッジリスト形式である。エッジリスト形式は、ライン毎(本実施の形態ではスキャンライン毎)に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータで画像を表現するものである。
【0053】
図6(A)は、X−Y座標系のY座標値が0のスキャンラインに対応するエッジリストの一例を模式的に示した図である。図6(A)に示すように、エッジリストを構成するエッジデータは、色値colorと、該色値colorの画素が連続する区間の始点startと、該色値colorの画素が連続する区間の終点endと、次のエッジデータの格納先を示すアドレスnextとを有する。次のエッジデータが存在しなければ、アドレスnextにはNULLが格納される。このように、本実施の形態では、エッジリスト形式は、次のエッジデータへのアドレスnextによって、スキャンライン毎のエッジデータの各々が連結されるリスト構造とされている。エッジデータが連結されてなるデータ群をエッジリストと呼ぶ。もちろん、画像によっては、1つのエッジデータにより構成されるエッジリストもある。
【0054】
図7(A)は、図7(B)に示す6画素×6画素のパターン画像をエッジリスト形式で表したときのパターン画像情報を模式的に示す図である。エッジリスト形式のパターン画像情報は、各スキャンライン毎のエッジデータと、各スキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルとにより構成される。
【0055】
図8(A)に示すように、本実施の形態において、エッジデータに含まれる色値colorは、カラーの場合には、上述した4色の色値を並べて表された4バイトの値で表され、始点start及び終点endは、各々2バイトの値で表され、アドレスnextは4バイトの値で表されるため、1つのエッジデータにつき12バイト必要となる。また、本実施の形態において、先頭アドレステーブルの各アドレスは4バイトの値で表される。
【0056】
従って、図8(B)に示すように、幅がwidth、高さがheightのカラーのパターン画像情報をエッジリスト形式で表してメモリ12Bに格納するときのメモリ使用量は、height×4+12×エッジ数(バイト)となる。ここで、エッジ数とは、エッジデータの数をいう。
【0057】
また、白黒のパターン画像情報をエッジリスト形式で表す場合には、色値colorは1バイトでよいため、図8(B)に示すように、幅がwidth、高さがheightの白黒のパターン画像情報をエッジリスト形式で表してメモリ12Bに格納するときのメモリ使用量は、height×4+9×エッジ数(バイト)となる。
【0058】
なお、パターン画像情報をエッジリスト形式で表す場合には、パターン画像の画像領域のエッジデータは作成されるが、非画像領域についてはエッジデータは作成されない。従って、塗りつぶし命令を実行するにあたり、パターン画像情報から画像領域の各画素の色値を抽出するためのマスク情報は必要ないが、パターン画像情報をラスタ形式で表す場合には、非画像領域の画素も含めて画素毎の画素値を保持するため、パターン画像情報から画像領域の各画素の色値を抽出するには、マスク情報が必要となる(図2も参照。)。マスク情報により、図4を用いて説明したように、パターン画像情報から画像領域の画素の画素値が抽出されて、ページバッファに書き込まれる。
【0059】
マスク情報も、パターン画像情報と同様に、ラスタ形式及びエッジリスト形式のいずれかのデータ形式で表される。マスク情報の場合には、各画素の画素値は、色を示す値ではないため、以下では、マスク情報の各画素の画素値を、パターン画像の色値と区別するため、マスク値という。ラスタ形式でマスク情報を作成する場合には、非画像領域の各画素のマスク値を0にし画像領域の各画素のマスク値を1にしてマスク情報を作成する。このようにマスク値は0又は1となるため、本実施の形態ではラスタ形式のマスク情報を1画素1ビットで表すものとする。従って、図5(B)に示すように、幅がwidth、高さがheightのパターン画像に対するマスク情報をラスタ形式で表してメモリ12Bに格納するときのメモリ使用量は、width×height/8(バイト)となる。なお、マスク値は上記0,1に限定されるものではなく、画像領域と非画像領域とが異なるマスク値となっていればよく、例えば、塗りつぶし命令の実行の際にマスク値0の領域の画素値を抽出するように構成する場合には、前記非画像領域の各画素のマスク値を1にし前記画像領域の各画素のマスク値を0にしてもよい。
【0060】
また、マスク情報をエッジリスト形式で表す場合には、上記図6(A)で示したエッジデータの色値colorの代わりに、図6(B)に示すように、マスク値maskを用い、該マスク値maskを1にして、スキャンライン毎の画像領域の区間を示すマスク情報を作成する。マスク値0の領域はエッジデータは作成されない。ここでは、エッジデータに含まれるマスク値maskは、1バイトで足りるため、図8(B)に示すように、幅がwidth、高さがheightのパターン画像に対するマスク情報をエッジリスト形式で表してメモリ12Bに格納するときのメモリ使用量は、height×4+9×エッジ数(バイト)となる。なお、マスク値maskは少なくとも1ビットあればよいため、マスク値maskを1ビットで表現してもよい仕様となっている場合には、メモリ使用量は、height×4+9×エッジ数/8(バイト)となるが、本実施の形態では、マスク情報のエッジデータのマスク値maskは1バイト要するものとする。エッジリスト形式においても、マスク値は1に限定されず、予め定められた特定の値とすればよい。
【0061】
なお、本実施の形態では、上述したように、始点start、終点end、画素値(色値color又はマスク値mask)、及び次のエッジデータへのアドレスnextにより構成されているものとして説明するが、エッジリストの形式は上記に限定されるものではない。例えば、1つのエッジデータが、始点start、該始点からの(同一の画素値の画素が連続する区間の)長さlength、画素値(色値color又はマスク値mask)及び次のエッジデータへのアドレスnextにより構成されていてもよい。また、上記の始点start、終点end、画素値color、アドレスnextのそれぞれのサイズ(バイト数)は、一例であって、これらに限定されるものではない。
【0062】
このように、ラスタ形式とエッジリスト形式とでは、表現方法が異なり、データサイズも異なるため、本実施の形態では、パターン画像に応じて、メモリ12Bにパターン画像情報を格納する際にラスタ形式で格納するか、エッジリスト形式で格納するかを判断して該判断結果に応じたデータ形式でパターン画像情報を格納するものとする。また、マスク情報についても、ラスタ形式で格納するか、エッジリスト形式で格納するかを判断して該判断結果に応じた形式でマスク情報を格納する。
【0063】
なお、以下では、定義命令により作成される情報をパターン情報という。具体的には、パターン画像情報がラスタ形式でメモリ領域に格納された場合には、マスク情報も作成されるため、パターン画像情報及びマスク情報からなる情報がパターン情報となる。また、パターン画像情報がエッジリスト形式でメモリ領域に格納された場合には、マスク情報は作成されないため、パターン画像情報そのものがパターン情報となる。
【0064】
ここで、より具体的な例を挙げて本実施の形態の作用について説明する。
【0065】
図9に示すパターン画像により塗りつぶし範囲を塗りつぶす場合を例に挙げる。図10は、図9に示すパターン画像を定義するための定義命令の疑似コードである。図2に示す疑似コードとは異なるが、描画情報に記述される各命令のコードは、解釈可能な形態であればよく、描画情報を構成する各命令をここで例示した疑似コードに限定するものではない。
【0066】
図10(1)に示すパターン属性定義コマンド(パターン属性定義文と言ってもよい)により、図9(1)に示すように、パターン画像の名称を示すパターン名:PTN1、パターン画像の高さ(pnt_height):6画素、及びパターン画像の幅(pnt_width):6画素、が定義されている。ここでは、パターン画像の始点の座標は(0,0)であるものとして省略されている。
【0067】
図10(2)に示す描画コマンドにより、図9(2)に示すように、マゼンタ色の3画素×3画素の矩形図形が描画開始位置(0,0)から描画される。図10(3)に示す描画コマンドにより、図9(3)に示すように、シアン色の3画素×3画素の矩形図形が描画開始位置(3,0)から描画される。図10(4)に示す描画コマンドにより、図9(4)に示すように、黒色の3画素×3画素の矩形図形が描画開始位置(3,3)から描画される。
【0068】
なお、図9(5)に示す座標(3,3)を左上の座標とする3画素×3画素の矩形領域は、色値が指定されていない(データがない)非画像領域となる。
【0069】
図11は、図9に示すパターン画像をエッジリスト形式で表したパターン画像情報を模式的に示した図である。図11に示すように、各スキャンライン毎に同一の色値の画素が連続する区間及び該色値を含むエッジデータがリスト構造で連結されている。パターン画像情報がエッジリスト形式の場合には、マスク情報が不要なため、パターン情報=パターン画像情報となる。以下、このようにエッジリスト形式のパターン画像情報からなるパターン情報をエッジリスト形式のパターン情報と呼称する。
【0070】
図12は、図9に示すパターン画像をラスタ形式で表したパターン画像情報及びラスタ形式で表したマスク情報を模式的に示した図である。以下、このようにパターン画像情報及びマスク情報の双方がラスタ形式である場合のパターン情報をラスタ形式のパターン情報と呼称する。
【0071】
図13は、図9に示すパターン画像をラスタ形式で表したパターン画像情報及びエッジリスト形式で表したマスク情報を模式的に示した図である。以下、このようにパターン画像情報がラスタ形式であって、マスク情報がエッジリスト形式である場合のパターン情報をハイブリッド形式のパターン情報と呼称する。
【0072】
パターン画像情報及びマスク情報をエッジリスト形式で保持するかラスタ形式で保持するかは、例えば、図14に示すように、これら情報をエッジリスト形式で表したときのエッジ数と閾値とを比較し、エッジ数が閾値を超えればラスタ形式で保持し、エッジ数が閾値以下であればエッジリスト形式で保持するようにしてもよい。
【0073】
図14は、前述した画像処理プログラムで行われる画像処理の一部としての、描画情報に含まれる定義命令を解釈して実行するパターン定義処理の一例を示す概略的なフローチャートである。ステップ50で、例えば前述のパターン属性定義コマンドにより定義されたパターン画像のサイズに基づいて、パターン画像用のメモリ領域を確保し、最初は何ら画像が定義されていないパターン情報をエッジリスト形式で作成して初期化する。具体的には、ここでは、パターン画像のスキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルを作成してメモリ12Bのパターン画像情報用のメモリ領域に格納する。そして、各アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数は、パターン属性定義コマンドで定義されたパターン画像の高さを示す画素数に等しい。
【0074】
次に、ステップ52で、PDLデータから上記パターン属性定義コマンドに組み合わされて記述されている描画コマンドを読み込む。
【0075】
ステップ54では、この段階でメモリ領域に記憶されているパターン情報のデータ形式を判断する。初期状態においては前述したようにパターン情報はエッジリスト形式で作成されるため、PDLデータの定義命令に描画コマンドが複数ある場合において、最初の描画コマンドが読み込まれた段階では、パターン情報はエッジリスト形式であると判断される。
【0076】
ステップ54において、パターン情報がエッジリスト形式であると判断された場合には、ステップ56で、読み込んだ描画コマンドに基づいて、エッジリスト形式でパターン画像を描画してパターン画像情報(パターン情報)を作成し、パターン画像用のメモリ領域に格納する。なお、先に読み込まれた描画コマンドにより既にメモリ領域に記憶されているエッジリストがある場合には、該エッジリストに追加挿入する。
【0077】
ステップ58では、上記描画コマンドにより作成したパターン画像情報のエッジデータの数(エッジ数)が閾値TH1を超えるか否かを判断する。ステップ58で否定判断した場合には、ステップ72に進む。
【0078】
また、ステップ58で、肯定判断された場合には、ステップ60で、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に格納する。描画コマンドにより描画される画像が色数が多く複雑な画像である場合には、エッジデータの数が多くなり、エッジリスト形式よりラスタ形式で表す方がメモリ使用量が抑制されることがある。そこで、ステップ58で閾値TH1と実際に作成されたエッジデータの数とを比較して、比較結果に応じたデータ形式で格納するようにしている。パターン画像をラスタ形式に変換して格納した後は、エッジリスト形式のパターン画像情報は削除される。
【0079】
続いて、ステップ62で、現在メモリ領域に格納されているパターン画像に対するマスク情報をエッジリスト形式で作成してマスク情報のメモリ領域に格納する。そして、ステップ72に進む。
【0080】
ステップ72では、描画コマンドが終了したか否か(次の描画コマンドがPDLデータに記述されているか否か)を判断する。ステップ72で肯定判断された場合には、パターン定義処理は終了する。そして、この時点でメモリ領域に格納されているパターン情報が、後述するパターン塗りつぶし命令で用いられるパターン情報となる。また、ステップ72で否定判断した場合には、ステップ52に戻り、次の描画コマンドを読み込んで、ステップ54に進む。
【0081】
また、ステップ54で、メモリ領域に記憶されているパターン情報のデータ形式の種類が、ハイブリッド形式(パターン画像情報がラスタ形式で、マスク情報がエッジリスト形式)であると判断した場合には、ステップ64に進む。
【0082】
ステップ64では、読み込んだ描画コマンドに基づいて、ラスタ形式で画像を描画して、既に作成されメモリ領域に記憶されているパターン画像情報を編集する。更に、編集後のパターン画像情報に対応するようにエッジリスト形式のマスク情報を編集する。
【0083】
ステップ66は、マスク情報のエッジ数が閾値HT2を超えるか否かを判断する。ステップ66で肯定判断した場合には、ステップ68で、マスク情報をエッジリスト形式からラスタ形式に変換してメモリ領域に格納する。パターン画像と同様に、マスク情報も、エッジデータの数が多くなるとメモリ使用量が増え、エッジリスト形式よりラスタ形式で表す方がメモリ使用量が抑制される場合がある。そこで、ここでは閾値TH2とエッジデータの数とを比較して、比較結果に応じたデータ形式で格納するようにしている。
【0084】
ステップ66で否定判断した場合、及びステップ68の処理後は、ステップ72に進む。ステップ72の処理は上述したとおりである。
【0085】
また、ステップ54で、メモリ領域に記憶されているパターン情報のデータ形式の種類が、ラスタ形式(パターン画像情報及びマスク情報が共にラスタ形式)であると判断した場合には、ステップ70に進む。
【0086】
ステップ70では、読み込んだ描画コマンドに基づいて、ラスタ形式で画像を描画して、既に作成されメモリ領域に記憶されているパターン画像情報を編集する。更に、編集後のパターン画像情報に対応するようにラスタ形式のマスク情報を編集する。
【0087】
ステップ70の後は、ステップ72に進む。ステップ72の処理は上述したとおりである。
【0088】
なお、ステップ62においてマスク情報を新規に作成した時点でエッジ数が閾値TH2を超えている場合もあることから、ステップ66及びステップ68の処理を、ステップ64の後だけでなくステップ62の後にも実施してもよい。
【0089】
また、ステップ60(パターン画像情報のラスタ形式への変換)の後にステップ62(マスク情報の生成)を実行する例について説明したが、ステップ60の処理及びステップ62の処理を並行して行ってもよい。例えば、スキャンライン毎に、パターン画像情報のラスタ形式への変換処理及びマスク情報の生成を順次行なう等である。
【0090】
塗りつぶし命令は、PDLデータにおいて定義命令の後に記述されている。図15(A)は、パターン塗りつぶし命令の疑似コードである。図2に示す疑似コードとは異なるが、描画情報に記述される各命令のコードは、解釈可能な形態であればよく、描画情報を構成する各命令をここで例示した疑似コードに限定するものではない。
【0091】
図15(A)の(1)に示す色塗りつぶし命令の塗りつぶしコマンドでは、fillRectに続く(0,0,21,18)により、始点(0,0)から、幅21画素、高さ18画素の矩形領域が塗りつぶし範囲として指定されており、更にwith color(0,255,0,0)により、塗りつぶし範囲を塗りつぶす色(イエロー色)が指定されている。該コマンドを実行することで、出力画像は、図15(B)の(1)に示すように、該指定された塗りつぶし範囲がイエロー色で塗りつぶされる(ページバッファの塗りつぶし範囲にイエロー色の色値が書き込まれる)。
【0092】
続いて、図15(A)の(2)に示すパターン塗りつぶし命令の塗りつぶしコマンドでは、fillRectに続く(3,3,15,12)により、始点(3,3)から、幅15画素、高さ12画素の矩形領域が塗りつぶし範囲として指定されており、更にwith pattern(PTN1)により、塗りつぶし範囲を塗りつぶすパターン画像のパターン名PTN1が指定されている。該コマンドを実行することで、メモリ領域から上記定義命令により定義されたパターン情報を読み出して用い、図15(B)の(2)に示すように、イエロー色の矩形領域の塗りつぶし範囲上にパターン画像が配列され、パターン画像の画像領域の色値がページバッファに上書きされる。なお、前述したように、パターン画像PTN1にはデータなしの領域である非画像領域が含まれているため、該非画像領域は先の塗りつぶしコマンドにより描画された背景のイエロー色が維持される。
【0093】
上記では簡便なフローチャート及び模式図等によりPDLデータに基づく画像処理について説明したが、以下では、より詳細なフローチャートを用いてPDLデータの処理について具体的に説明する。以下で説明する各処理は、装置制御部12の記憶部12Cに記憶されている画像処理プログラムをCPU12Aが実行することにより実行されるものである。
【0094】
図16は、PDLデータ処理のメインルーチンのフローチャートを示す図である。
【0095】
ステップ100では、メモリ12Bに、出力画像情報を格納するためのページバッファを作成(確保)する。
【0096】
ステップ102では、パターン管理テーブルを作成してメモリ12B内に記憶する。パターン管理テーブルは、定義命令により定義されるパターン画像を管理するためのテーブルである。図17にパターン管理テーブルの一例を示す。図17に例示したパターン管理テーブルには、パターン名(name)、パターン画像の高さ(ptn_height)、パターン画像の幅(ptn_width)、パターン画像についてのパターン情報のデータ形式(type)、パターン情報の記憶領域のアドレスを示す(address)の各々の項目が、対応付けられて記憶される。なお、パターン情報のデータ形式(type)の項目には、前述したように、ラスタ形式raster(パターン画像情報及びマスク情報がラスタ形式)、ハイブリッド形式hybrid(パターン画像情報がラスタ形式でマスク情報がエッジリスト形式)、エッジリスト形式edgelist(パターン画像情報がエッジリスト形式。マスク情報はない)の3つのデータ形式がある。
【0097】
パターン情報の記憶領域のアドレス(address)の項目には、パターン情報がラスタ形式及びハイブリッド形式の場合には、パターン画像情報及びマスク情報の各々の記憶領域のアドレスが登録され、パターン情報がエッジリスト形式の場合には、パターン画像情報の記憶領域のアドレスが登録される。
【0098】
なお、ステップ102において、パターン管理テーブルを作成した時点では、パターン画像は未定義であるため、パターン管理テーブルには、パターン画像に関する情報が何も記憶されていない状態となっている。
【0099】
ステップ104では、PDLデータから命令を1つ読み込む。ステップ106では、読み込んだ命令の種類を判断する。
【0100】
読み込んだ命令が、パターン画像を定義する定義命令である場合には、ステップ108に進み、パターン定義処理を実行する(詳細は後述)。
【0101】
読み込んだ命令が、定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶすパターン塗りつぶし命令である場合には、ステップ110に進み、パターン塗りつぶし処理を実行する(詳細は後述)。
【0102】
読み込んだ命令が、中間画像データを作成することなく直接ページバッファに描画する描画命令(この描画命令を通常描画命令という)であった場合には、ステップ112で、該描画命令に基づいてページバッファに描画する処理を行なう。なお、前述の色塗りつぶし命令は、通常描画命令に含まれるが、パターン塗りつぶし命令は通常描画命令に含まれない。
【0103】
読み込んだ命令が、ページ出力命令である場合には、ステップ114に進み、ページバッファに格納されている出力画像情報を出力先に出力する。該出力後はページバッファを初期化する。このページ出力命令により、定義命令、パターン塗りつぶし命令、及び通常描画命令等の各命令でページバッファに書き込まれた出力画像情報が出力される。なお、出力画像情報の出力先は、画像形成部16としてもよいが、画像形成部16に出力する前に、何らかの画像処理を行なう場合には、別途設けた画像処理部(不図示)を出力先として、該画像処理部で画像処理を行なわせるようにしてもよい。或いは装置制御部12が画像処理プログラムを実行することにより画像処理を行ない、その後、画像形成部16に出力するようにしてもよい。また、出力画像情報をすぐに印刷せずに、一端、何らかのバッファに蓄積しておく場合には、該バッファを出力先としてもよい。
【0104】
ステップ108、110、112、及び114のいずれかが終了した後は、ステップ116に進み、PDLデータが終了したか(PDLデータに記述された全ての命令の読み込み及び実行が終了したか)否かを判断する。ステップ116で否定判断した場合には、ステップ104に戻り、次の命令を読み込む。ステップ116で肯定判断した場合には、本PDL処理のルーチンが終了する。
【0105】
次に、ステップ108のパターン定義処理について詳細に説明する。
【0106】
図18は、パターン定義処理の流れを示すフローチャートである。
【0107】
ステップ150では、定義命令に含まれるパターン属性情報を読み取り取得する。例えば、前述したパターン属性定義コマンドにより指定されたパターン属性情報を取得する。ここで取得されるパターン属性情報には、パターン画像のパターン名の情報と、パターン画像の幅を示す情報と、パターン画像の高さを示す情報とが含まれる。なお、ここでは、パターン画像の幅及び高さはいずれも画素数で表されているものとする。
【0108】
ステップ152では、パターン画像のパターン情報をエッジリスト形式で作成して初期化する。これは、先に図14を用いて説明したステップ50と同様に、パターン画像用のメモリ領域(以下、メモリ領域PA1と呼称する)を確保し、該メモリ領域PA1に何ら画像が定義されていないパターン情報をエッジリスト形式で作成して初期化する。すなわち、パターン画像のスキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルを作成してメモリ12Bのパターン画像情報用のメモリ領域PA1に記憶する。そして、各アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数(スキャンラインの本数)は、上記取得したパターン属性情報のパターン画像の高さを示す画素数に等しい。
【0109】
更に、ステップ152では、上記取得したパターン属性情報のパターン画像の幅の値をptn_widthにセットし、パターン画像の高さの値をptn_heightにセットし、エッジリスト形式を示す「edgelist」をtypeにセットする。
【0110】
ステップ154では、定義命令に含まれる描画コマンドを読み込む。
【0111】
ステップ156では、typeの値がedgelistであるか否かを判断する。後述するステップ162でtypeが変更されるまでは、typeの値はedgelistである(すなわち、パターン画像情報はエッジリスト形式で記憶されている)ため、ステップ156では肯定判断されるが、ステップ162でtypeの値が変更された後は否定判断される。
【0112】
ステップ156で肯定判断した場合には、ステップ158に進み、エッジリスト形式のパターン画像に対する描画処理を行なう。この描画処理では、描画コマンドに従って、パターン画像用のメモリ領域にエッジリスト形式で画像を展開(描画)するが、当該定義命令において当該描画コマンドの前に先に別の描画コマンドが実行されていた場合には、該先に実行された描画コマンドにより描画されたエッジリスト形式のパターン画像に対して、当該描画コマンドの画像領域の画像が上書きされるようにパターン画像用のメモリ領域に格納されたエッジリスト形式のパターン画像情報を編集する。本処理の詳細は後述する。
【0113】
ステップ160では、パターン画像情報のエッジデータの数が予め定められた閾値TH1を超えたか否かを判断する。ステップ160において、肯定判断した場合には、ステップ162に進み、エッジリスト形式のパターン画像情報をラスタ形式に変換する処理を行なう。なお、ステップ162では、合わせてマスク情報をエッジリスト形式で作成し、マスク情報用のメモリ領域に格納する処理も行われる。更に、パターン情報のtypeの値が、ハイブリッド形式を示すhybridに変更される。なお、マスク情報は、マスク情報のエッジデータの数が閾値TH2を超えた場合には、エッジリスト形式からラスタ形式に変更される。この場合には、パターン情報のtypeの値が、ラスタ形式を示すrasterに変更される。ステップ162の処理の詳細は後述する。ステップ162の後は、ステップ166に進む。
【0114】
一方、ステップ160において、否定判断した場合には、ステップ162をスキップしてステップ166に進む。
【0115】
ステップ166では、定義命令に含まれる描画コマンドを全て処理したか否かを判断する。ステップ166で否定判断した場合には、ステップ154に戻り、次の描画コマンドを読み込む。
【0116】
ステップ156で否定判断した場合には、当該定義命令において当該描画コマンドの実行前に別の描画コマンドの実行によりメモリ領域に書き込まれたパターン画像情報が、ラスタ形式であることを示している。そこで、ステップ164に進み、該ラスタ形式のパターン画像情報に対する描画処理を行なう。この描画処理では、該ラスタ形式のパターン画像情報に対して、当該描画コマンドにより描画される画像領域の各画素の色値を上書きするようにパターン画像情報を編集する。また、マスク情報もパターン画像情報に応じて編集される。また、エッジリスト形式のマスク情報は、マスク情報のエッジデータの数が閾値TH2を超えた場合に、エッジリスト形式からラスタ形式に変更される。マスク情報がラスタ形式に変更された場合には、typeの値はラスタ形式を示すrasterに変更される。ステップ164の処理の詳細は後述する。
【0117】
続いて、ステップ166に進み、上記と同様に定義命令に含まれる描画コマンドを全て処理したか否かを判断する。ステップ166で否定判断した場合には、ステップ154に戻り、次の描画コマンドを読み込む。
【0118】
また、ステップ166で、肯定判断した場合には、ステップ168で、定義命令により定義されたパターン画像をパターン管理テーブルに登録する。具体的には、上記取得したパターン属性情報に含まれるパターン名をパターン管理テーブルのnameに記憶し、該パターン名に対応付けて、パターン管理テーブルのptn_widthの項目に、パターン画像の幅を示すptn_widthの値を記憶し、パターン管理テーブルのptn_heightの項目に、パターン画像の高さを示すptn_heightの値を記憶する。そして、パターン管理テーブルのtypeの項目には、typeに現時点でセットされている値を記憶する。更にパターン管理テーブルのaddressの項目には、当該定義命令により作成されたパターン情報が記憶されている記憶先(メモリ領域)を示すアドレスが記憶される。
【0119】
次に、上記ステップ158のエッジリスト形式のパターン画像に対する描画処理について詳細に説明する。
【0120】
図19は、エッジリスト形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【0121】
ステップ180では、読み込んだ描画コマンドの種類を判断する。描画コマンドがイメージ描画コマンドであれば、ステップ182で、イメージ描画コマンドのエッジリスト形式描画処理を実行し、描画コマンドがグラフィックス描画コマンドであれば、ステップ184で、グラフィックス描画コマンドのエッジリスト形式描画処理を実行し、描画コマンドが文字描画コマンドであれば、ステップ186で、文字描画コマンドのエッジリスト形式描画処理を実行する。
【0122】
図20は、ステップ182で行われるイメージ描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【0123】
ステップ200では、イメージ描画コマンドにより指定された、イメージ画像のパターン画像における描画開始位置の情報を取得して、(x_offset、 y_offset)にセットすると共に、該イメージ画像の幅・高さの情報を取得して、(width, height)にセットする。描画開始位置(x_offset、 y_offset)は、上記取得したパターン属性情報が示すサイズの矩形領域にイメージ画像を描画するときのイメージ画像の左上の基準点となる位置であり、パターン画像の始点を基準点とした座標値となる。また、幅width及び高さheightは、各々画素数で表されている。(x_offset、 y_offset)から(x_offset+width、 y_offset+height)までの領域が、当該イメージ描画コマンドにより画像が描画される画像領域となる。
【0124】
ステップ202では、yに0をセットする。
【0125】
ステップ204では、描画するイメージ画像を示す画像データからエッジの切り出しを行なうここで、エッジとは、同一の画素値の画素が連続する区間の始点及び終点をいう。なお、ここでは、イメージ画像がカラーの場合について説明するが、イメージ画像が白黒の場合には、黒色の画素が連続する区間の始点及び終点がエッジとされる。
【0126】
図21は、ステップ204で行われるエッジの切り出し処理の流れを示すフローチャートである。
【0127】
ステップ230では、イメージ画像の矩形領域の左上を原点(0,0)としたときのY座標値がyのスキャンライン上(以下、単にスキャンラインyという)で、着目する画素(以下、着目画素)のX軸上の位置を示す座標値xを0として、描画するイメージ画像を表す画像データから座標(x,y)に位置する着目画素の色値を抽出し、refcolorにセットする。更に、start_xに0をセットする。
【0128】
ステップ232では、xに1を加算して着目画素を変更する。
【0129】
ステップ234では、xがwidth未満か否かを判断する。widthは前述したようにイメージ画像の幅を示す画素数である。ステップ234で肯定判断した場合には、colorに、イメージ画像の画像データから座標(x,y)に位置する着目画素の色値を抽出してセットする。
【0130】
ステップ238では、colorの値とrefcolorの値とが等しいか否かを判断する。ステップ238で肯定判断した場合には、着目画素の色値colorは、少なくとも1つ前に着目された画素の色値refcolorに等しい(同一の色値の画素が連続している)ことを示しているため、ステップ232に戻って、xに1を加算して、着目画素を変更する。
【0131】
また、ステップ238で否定判断した場合には、着目画素の色値colorは、1つ前に着目された画素の色値refcolorと異なるため、1つ前に着目された画素(その画素位置は、[x-1, y]となる)が、色値refcolorの画素が連続する区間の終点となる。また、ステップ234で否定判断した場合には、1つ前に着目された画素が、スキャンラインy上の終点となるため、1つ前に着目された画素が、色値refcolorの画素が連続する区間の終点となる。
【0132】
これに基づき、ステップ240において、色値refcolorの画素が連続する区間を示すエッジデータを作成する。なお、前述のstart_xは、イメージ画像の矩形領域の左上を原点(0,0)としたときの、色値refcolorの画素が連続する区間の始点を表すものであるため、start_xの値にx_offsetの値(イメージ画像の描画開始位置のX座標値)を加算したX座標値を、エッジデータの始点startとし、[x-1]の値にx_offsetの値を加算したX座標値を、エッジデータの終点とする。また、次のエッジデータのアドレスnextはNULLとする(図6も参照。)。すなわち、ステップ240において、下記の如くエッジデータが作成される。
【0133】
(始点start、終点end、色値color、次のエッジデータへのアドレスnext)
=(start_x + x_offset、x - 1 + x_offset、refcolor、NULL)
【0134】
続いて、ステップ242では、パターン画像を表したエッジリストにおいて、スキャンライン[y+y_offset]のエッジリストに、ステップ240で作成したエッジデータを追加する。
【0135】
図22は、エッジリストへのエッジデータ追加処理の流れを示すフローチャートである。
【0136】
ステップ280では、着目スキャンライン(ここではスキャンライン[y+y_offset])のエッジリストが空か否か、すなわちエッジデータが1つもないか否かを判断する。以下、着目スキャンラインのエッジリストを着目エッジリストという。ステップ280で肯定判断した場合には、上記作成したエッジデータが該着目エッジリストの先頭のエッジデータであるため、ステップ282に進み、先頭アドレステーブルにおいて、上記作成したエッジデータを記憶した記憶領域のアドレスを、該着目エッジリストの先頭アドレスとして先頭アドレステーブルに格納する。
【0137】
一方、パターン画像を定義する定義命令に複数の描画コマンドが含まれている場合には、先に処理された描画コマンドにより、既に着目スキャンラインにエッジデータが作成され、エッジリストとして連結されている場合がある。この場合には、上記ステップ280で否定判断される。ステップ280で否定判断した場合には、ステップ284に進み、エッジ挿入処理を実行する。エッジ挿入処理では、先に作成されたエッジリストに対して、新たに生成したエッジデータを挿入する。図23は、エッジ挿入処理の流れを示すフローチャートである。
【0138】
ステップ300では、新たに生成したエッジデータ(挿入するエッジデータ)をedgeAで表し、着目エッジリストの先頭のエッジデータをedgeBで表すものとする。そして、図24(A)に示すように、edgeAの始点startの値を、edgeA.startにセットし、edgeAの終点endの値を、edgeA.endにセットし、edgeAの色値colorの値を、edgeA.colorにセットし、edgeAの次のアドレスnextの値(=NULL)を、edgeA.nextにセットする。また、edgeBの始点startの値を、edgeB.startにセットし、edgeBの終点endの値を、edgeB.endにセットし、edgeBの色値colorの値を、edgeB.colorにセットし、edgeBの次のアドレスnextの値を、edgeB.nextにセットする。
【0139】
ステップ302では、edgeA.end<edgeB.startか否かを判断する。edgeA.endがedgeB.startより小さければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(1)に示す位置関係となる。この位置関係にはedgeAとedgeBとが隣接している場合も含まれる。なお、図24(B)では、X軸方向の位置関係が把握しやすいように、Y軸方向の位置をずらしてedgeA及びedgeBを図示しているが、edgeA及びedgeBは同じスキャンライン上のエッジデータであることに注意されたい。
【0140】
従って、ステップ302で肯定判断した場合には、ステップ304で、edgeBの区間を変更せずに、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前のedgeBが、先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。edgeA挿入前のedgeBが、先頭エッジデータではなかった場合には、edgeAの挿入前にedgeBの1つ前に連結されていたエッジデータのアドレスnextの値を、edgeAの記憶領域のアドレスに書き換える。
【0141】
なお、ここでは、図示を省略したが、ステップ302で肯定判断され、edgeAとedgeBとが隣接する位置関係にある場合おいて、edgeA.colorの値とedgeB.colorの値とが等しいときには、後述するステップ310と同様に合成処理される。
【0142】
また、ステップ302で、否定判断した場合には、ステップ306に進む。ステップ306では、edgeA.start>edgeB.endか否かを判断する。edgeA.startがedgeB.endより大きければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(2)に示す位置関係となる。この位置関係にはedgeAとedgeBとが隣接している場合も含まれる。この場合には、ステップ306で肯定判断し、ステップ320に進む。
【0143】
ステップ320では、edgeB.nextがNULLか否か、すなわち、edgeBの次にエッジデータが連結されていないか否かを判断する。ステップ320で肯定判断した場合には、ステップ322に進み、edgeBの区間を変更せずに、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、NULLからedgeAの記憶領域を示すアドレスとなるように変更する。
【0144】
なお、ここでは、図示を省略したが、ステップ320で肯定判断され、edgeAとedgeBとが隣接する位置関係にある場合において、edgeA.colorの値とedgeB.colorの値とが等しいときには、後述するステップ310と同様に合成処理される。
【0145】
さらにまた、ステップ320で、否定判断した場合には、ステップ324に進み、edgeB.nextが示すアドレスに記憶されている次のエッジデータをedgeBとしてステップ302に戻る。
【0146】
また、ステップ306で、否定判断した場合には、ステップ308に進む。ステップ306で否定判断した場合には、着目スキャンラインのX軸上において、edgeAの区間(範囲)の一部或いは全体が、edgeBの区間の一部或いは全体と重なっている関係(図24(B)の(3)〜(6)も参照)であることを示す。そこで、ステップ308では、edgeA.colorの値とedgeB.colorの値とが等しいか否かを判断する。ステップ308で、肯定判断した場合には、ステップ310に進み、edgeAとedgeBとを合成する。具体的には、edgeBの始点startを、edgeA.start及びedgeB.startのいずれか小さい方となるように変更し、edgeBの終点endを、edgeA.end及びedgeB.endのいずれか大きい方となるように変更する。その後、edgeAは削除する。また、逆に、edgeAの始点及び終点を上記と同様に変更して、edgeBをedgeAに置き換え、edgeBを削除するようにしてもよい。
【0147】
また、ステップ308で、否定判断した場合には、ステップ312に進み、edgeBの範囲を、edgeAと重ならないように変更する。色値colorは変更しない。例えば、図24(B)の(3)に示す位置関係であれば、edgeBの始点startをedgeA.end+1に変更する。また、図24(B)の(4)に示す位置関係であれば、edgeBの終点endをedgeA.start-1に変更する。
【0148】
また、図24(B)の(5)に示す位置関係であれば、edgeBを元に、edgeB1とedgeB2の2つのエッジデータを作成する。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をセットする。
【0149】
また、図24(B)の(6)に示す位置関係であれば、edgeBのエッジデータを削除する。なお、edgeBの削除前に該edgeBが先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。また、edgeBの削除前に該edgeBが先頭エッジデータでなかった場合には、edgeBの削除前にedgeBの1つ前に連結されていたエッジデータのアドレスnextを、edgeAの記憶領域のアドレスとなるように変更する。
【0150】
なお、図24(B)の(5)に示すようにedgeBから2つのエッジデータを作成した場合、及び(6)に示すようにedgeBを削除した場合は、下記ステップ314の処理は行わないこととする(図示は省略。)。
【0151】
次に、ステップ314では、edgeA.start<edgeB.startか否かを判断する。ステップ314で肯定判断した場合には、edgeAとedgeBとの位置関係は、図24(B)の(3)の変更後の位置関係にあるため、ステップ316で、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前の先頭エッジデータがedgeBであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスに変更する。
【0152】
また、ステップ314で、否定判断した場合には、edgeAとedgeBとの位置関係は、図24(B)の(4)の変更後の位置関係にあるため、ステップ318で、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、edgeAの記憶領域を示すアドレスに変更する。
【0153】
なお、ここでは、エッジデータedgeAの区間が、先の描画コマンドにより作成された互いに連結する複数のエッジデータの各々の区間の一部又は全体と重複している場合については説明を省略したが、この場合も同様に、該複数のエッジデータの区間の各々とエッジデータedgeAの区間との位置関係に応じて、図24(B)の(3)〜(6)を参照して説明したのと同様に変更或いは削除する。
【0154】
図22のステップ284で、上記エッジ挿入処理が終了した後は、図21のステップ244に進む。
【0155】
ステップ244では、refcolorに、着目画素の色値colorの値をセットする。更に、start_xにxの値をセットする。xは、着目画素のX軸上の位置である。
【0156】
続いて、ステップ246で、xがwidth未満か否かを判断する。ステップ246で肯定判断した場合には、ステップ232に戻り、xに1を加算して、X軸方向の次の画素を着目画素とする。また、ステップ246で否定判断した場合には、イメージ画像の着目スキャンラインのエッジの検出が終了した状態にあるため、エッジ切り出し処理を終了して、図20のステップ206に進む。
【0157】
図20のステップ206では、yに1を加算する。
【0158】
続いて、ステップ208では、yがheight未満か否かを判断する。heightは前述したようにイメージ画像の高さを示す画素数である。ステップ208で肯定判断した場合には、ステップ204に戻り、次のスキャンラインについて、上述したようにエッジ切り出し処理を行なう。また、ステップ208で否定判断した場合には、イメージ画像の各スキャンラインのエッジの検出及びエッジデータの作成が終了した状態にあるため、図20のイメージ描画コマンドのエッジリスト形式描画処理を終了する。
【0159】
次に、ステップ184のグラフィックス描画コマンドのエッジリスト形式描画処理について説明する。図25は、グラフィックス描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【0160】
ステップ340では、グラフィックス描画コマンドにより指定された描画色を取得してg_colorにセットする。例えば、図10に示す定義命令に含まれるグラフィック描画コマンドfillRectに対して、with colorで指定された色が描画色である。
【0161】
ステップ342では、グラフィックス描画コマンドにより指定された描画領域(当該グラフィックス描画コマンドにより画像が描画される画像領域)のY座標の範囲を求める。例えば、図10に示す例では、図10の(2)に示す描画コマンドのfillRectに続く(0,0,3,3)において、最初の2つの数値が、パターン画像におけるグラフィックス画像の描画開始位置であり、それに続く2つの数値が、描画するグラフィックス画像の幅及び高さを示す画素数であることから、グラフィックス描画コマンドの描画領域のY座標の最小値は、描画開始位置のY座標0、Y座標値の最大値は、該描画開始位置Y座標0に高さ3を加算した3となる。そして、このY座標の最小値をy_startにセットし、最大値をy_endにセットする。
【0162】
ステップ344では、yにy_startの値をセットする。
【0163】
ステップ346では、グラフィックス描画コマンドにより描画するグラフィックス画像について、スキャンラインyにおけるスキャン変換処理(画像のエッジを抽出する処理)を行い、スキャンラインyにおけるX軸上の描画範囲x_start、x_endを求める。
【0164】
ステップ348では、エッジデータを作成する。具体的には、下記の如くエッジデータが作成される。
【0165】
(始点start、終点end、色値color、次のエッジデータへのアドレスnext)
=(x_start、x_end、g_color、NULL)
【0166】
ステップ350では、パターン画像を表したエッジリストにおいて、スキャンラインyのエッジリストに、ステップ348で作成したエッジデータを追加する。ステップ350で行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをyとして、図22〜図24を用いて説明したように実行する。
【0167】
ステップ352では、yに1を加算する。
【0168】
ステップ354では、yがy_end以下であるか否かを判断する。ステップ354で肯定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了していない状態であるため、ステップ346に戻り、次のスキャンラインについて上記処理を繰り返す。また、ステップ354で否定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了した状態であるため、本グラフィックス描画コマンドのエッジリスト形式描画処理を終了する。
【0169】
次に、ステップ186の文字描画コマンドのエッジリスト形式描画処理について説明する。図26は、文字描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【0170】
ステップ370では、文字描画コマンドにより指定された描画色を取得してt_colorにセットする。
【0171】
ステップ372では、文字描画コマンドにおいてパターン画像に配置(描画)するよう指定された文字画像の描画開始位置の情報を取得して、(x_offset, y_offset)にセットする。
【0172】
ステップ374では、文字が黒色及び白色の二値からなるラスタ形式で表された文字ビットマップデータを取得する。文字描画コマンドには、予め定められたコード体系に従った文字コード情報、フォント名文字の大きさを示すポイント数などを含むフォント情報、上記描画色、及び描画開始位置の情報等が指定されている。このうち文字コード情報及びフォント情報等から、描画する文字をビットマップに展開した文字ビットマップデータを取得する。
【0173】
ステップ376では、char_xに0をセットすると共に、char_yに0をセットする。
【0174】
ステップ378では、上記取得した文字ビットマップデータから文字のエッジ抽出を行なう。図27は、文字のエッジ抽出処理の流れを示すフローチャートである。
【0175】
ステップ400では、文字ビットマップデータが表す文字のサイズ(幅及び高さ)の情報を取得して、幅の値をwidthにセットし、高さの値をheightにセットする。なお、幅及び高さは各々画素数で表されているものとする。
【0176】
ステップ402では、edge_xに-1をセットする。
【0177】
ステップ404では、黒座標(黒色画素の座標位置)の検出を行なう。図28は、黒座標の検出処理の流れを示すフローチャートである。
【0178】
ステップ430では、char_yがheight未満か否かを判断する。ステップ430で肯定判断した場合には、ステップ432に進む。ステップ432では、char_xがwidth未満か否かを判断する。ステップ432で肯定判断した場合には、ステップ436に進む。ステップ436では、座標(char_x, char_y)の位置の文字ビットマップデータが黒色か否かを判断する。
【0179】
ステップ436で、肯定判断した場合には、ステップ440に進み、edge_xにchar_xの値をセットし、edge_yにchar_yの値をセットする。そして、ステップ442では、char_xに1を加算した値を、char_xにセットする。
【0180】
また、ステップ436で、否定判断した場合には、ステップ438に進み、X軸方向の次の画素について黒色か白色かを判断するため、char_xに1を加算して、ステップ432に戻る。
【0181】
一方、ステップ432で否定判断した場合には、ステップ434で、char_yに1を加算し、char_xには0をセットしてステップ430に戻る。すなわち、ステップ432でchar_xがwidth以上であると判断した場合には、文字ビットマップデータの矩形領域の左上を原点(0,0)としたときのスキャンラインchar_y上には、黒色画素が存在しないことを示しているため、ステップ434で、着目するスキャンラインを次のスキャンラインに変更して、ステップ430に戻り、該次のスキャンラインの端の画素から黒色画素を探すようにしている。
【0182】
以上の処理により、文字の幅width及び高さheightの矩形領域の左上座標を原点(0,0)とした場合において、スキャンラインedge_y上で黒色画素が連続する区間の始点(エッジの始点)edge_xが検出される。
【0183】
図27において、ステップ404で黒座標の検出が終了した後は、ステップ406で白座標(白色画素の座標位置)の検出を行なう。この白座標の検出処理において、エッジの終点が検出される。図29は、白座標の検出処理の流れを示すフローチャートである。
【0184】
ステップ460では、edge_xが-1であるか否かを判断する。edge_xが-1である場合には、上記黒座標の検出処理において黒座標が検出されていない状態を示している。エッジの始点が検出されて場合には、終点を検出する必要もない。従って、白座標の検出処理を終了する。
【0185】
一方、ステップ460で、否定判断した場合には、ステップ462で、char_xがwidth未満か否かを判断する。ステップ462で、肯定判断した場合には、ステップ464に進む。ステップ464では、座標(char_x, char_y)の位置にある画素の文字ビットマップデータが黒色か否かを判断する。ステップ464で肯定判断した場合には、char_xに1を加算してステップ462に戻る。
【0186】
ステップ464で否定判断した場合には、ステップ468で、edge_x_endに[char_x-1]の値をセットする。すなわち、ステップ464で白色の画素が見つかった場合には(否定判断)、該画素のX座標値の1画素前のX座標値の画素が黒色画素が連続する区間の終点となる。従って、ステップ468において、現在着目している画素のX座標値char_xから1を差し引いて、黒色画素が連続する区間の終点を示す座標を求め、edge_x_endにセットしている。
【0187】
また、ステップ462で、否定判断した場合には、文字ビットマップデータにおいてスキャンラインedge_yにおけるX座標値edge_x以降のX座標値の画素には、白画素が存在しないことを示している。そこで、ステップ470において、edge_x_endに[width-1]の値をセットする。ここで、widthから1を減算しているのは、文字の幅width及び高さheightの矩形領域の左上座標(原点)を(0,0)としているためである。
【0188】
以上の処理により、文字の幅width及び高さheightの矩形領域の左上座標を原点(0,0)とした場合において、スキャンラインedge_y上で黒色画素が連続する区間の終点(エッジの終点)edge_x_endが検出される。
【0189】
図27において、ステップ406の白座標の検出処理の後は、ステップ408に進み、edge_xが-1であるか否かを判断する。edge_xが-1である場合には、上記黒座標の検出処理において黒座標が検出されていない状態を示している。従って、ステップ408で肯定判断した場合には、ステップ412で、エッジ抽出が失敗したと結論する。また、ステップ408で否定判断した場合には、ステップ414で、エッジ抽出が成功したと結論する。
【0190】
図26において、ステップ378の文字のエッジ抽出処理が終了した後は、ステップ380に進む。ステップ380では、エッジ抽出が成功したか否かを判断する。ステップ380で肯定判断した場合には、ステップ382に進み、x_startに[edge_x + x_offset]の値をセットし、x_endに[edge_x_end + x_offset]の値をセットし、yに[edge_y + y_offset]の値をセットする。
【0191】
ステップ384では、エッジデータを作成する。具体的には、下記の如くエッジデータが作成される。
【0192】
(始点start、終点end、色値color、次のエッジデータへのアドレスnext)
=(x_start、x_end、t_color、NULL)
【0193】
ステップ386では、パターン画像を表したエッジリストにおいて、スキャンラインyのエッジリストに、ステップ384で作成したエッジデータを追加する。ステップ384で行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをyとして、図22〜図24を用いて説明したように実行する。
【0194】
ステップ386の後は、ステップ378に戻り、次のエッジの抽出を、上記と同様に行う。ステップ378の処理により、新たなエッジが抽出された場合には、ステップ380で肯定判断されるため、上記ステップ382以降の処理が同様に行われる。また、ステップ378で新たなエッジ抽出されなかった場合には、ステップ380で否定判断され、図26の文字描画コマンドのエッジリスト形式描画処理を終了する。
【0195】
次に、図18のステップ160で肯定判断した後に実行されるステップ162のパターン画像をラスタ形式へ変換する変換処理について詳細に説明する。
【0196】
図30は、パターン画像情報をラスタ形式に変換する変換処理の流れを示すフローチャートである。この変換処理では、パターン画像情報の変換と共にマスク情報の作成も行われる。
【0197】
ステップ500では、ラスタ形式のパターン画像情報を格納するためのパターン画像用のメモリ領域PA2をメモリ12Bに確保する。例えば、カラーの場合には、本実施の形態では、ラスタ形式のパターン画像情報は、1画素4バイト必要となるため、パターン画像の幅×高さ×4バイトのメモリ領域PA2が確保される。
【0198】
ステップ502では、上記確保したパターン画像用のメモリ領域PA2を0でクリアする。すなわち、本実施の形態では、パターン画像情報の全画素の色値が0を示すように初期化される。ここでは、各画素の色値が0となるように初期化したが、0に限定するものではなく、何らかの値であればよい。
【0199】
ステップ504では、マスク情報をエッジリスト形式で作成して初期化する。具体的には、マスク情報用のメモリ領域MA1をメモリ12Bに確保し、マスク情報のスキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルを作成してメモリ12Bのマスク情報用のメモリ領域MA1に記憶する。そして、各先頭アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数(スキャンラインの本数)は、上記パターン画像の高さを示す画素数に等しい。
【0200】
ステップ506では、yに0をセットする。
【0201】
ステップ508では、メモリ領域PA1に記憶されているエッジリスト形式のパターン画像情報からスキャンラインyのエッジリストの先頭のエッジデータを取得する。
【0202】
ステップ510では、スキャンラインyのエッジリストにエッジデータがあるか否かを判断する。ステップ510がステップ508の直後に実行される場合において、ステップ508での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ510では肯定判断され、ステップ508での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ510では否定判断される。また、ステップ510が後述するステップ516の直後に実行される場合において、ステップ516での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ510で肯定判断され、ステップ516での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ510で否定判断される。
【0203】
ステップ510で肯定判断した場合には、ステップ512で、メモリ領域PA2における、ラスタ形式のパターン画像の、始点(start, y)から終点(end, y)までの範囲の画素の色値(上記初期化により0となっている)を、取得したエッジデータの色値colorの値に変更する(colorの値を書き込む)。ここで、startは取得したエッジデータの始点startの値であり、endは取得したエッジデータの終点endの値である。
【0204】
ステップ512の後は、ステップ514で、マスク情報のエッジデータを作成する。ここでは、上記パターン画像情報から取得したエッジデータの始点startの値、及び終点endの値を、マスク情報のエッジデータの始点startの値及び終点endの値とし、マスク情報のエッジデータのマスク値maskの値を1にし、マスク情報のエッジデータのアドレスnextの値はNULLにして作成する。
【0205】
ステップ516では、マスク情報のスキャンラインyのエッジリストに、上記作成したエッジデータを追加する。エッジデータの追加処理は、図22に示した流れで行うが、マスク情報の場合には、どのエッジデータもマスク値が1であるため、図22のステップ284では、図23に示すエッジ挿入処理ではなく、図31に示すエッジ挿入処理を実行する。
【0206】
図31は、マスク情報のエッジ挿入処理の流れを示すフローチャートである。ステップ540では、新たに生成したエッジデータ(挿入するエッジデータ)をedgeAで表し、着目エッジリストの先頭のエッジデータをedgeBで表すものとする。そして、edgeAの始点startの値を、edgeA.startにセットし、edgeAの終点endの値を、edgeA.endにセットし、edgeAの次のアドレスnextの値(=NULL)を、edgeA.nextにセットする。また、edgeBの始点startの値を、edgeB.startにセットし、edgeBの終点endの値を、edgeB.endにセットし、edgeBの次のアドレスnextの値を、edgeB.nextにセットする。
【0207】
ステップ542では、edgeA.end<edgeB.startか否かを判断する。edgeA.endがedgeB.startより小さければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(1)に示す位置関係となる。従って、ステップ542で肯定判断した場合には、ステップ544で、edgeBの区間を変更せずに、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前のedgeBが、先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。edgeA挿入前のedgeBが、先頭エッジデータではなかった場合には、edgeAの挿入前にedgeBの1つ前に連結されていたエッジデータのアドレスnextの値を、edgeAの記憶領域のアドレスに書き換える。
【0208】
また、ステップ542で、否定判断した場合には、ステップ546に進む。ステップ546では、edgeA.start>edgeB.endか否かを判断する。edgeA.startがedgeB.endより大きければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(2)に示す位置関係となる。この場合には、ステップ546で肯定判断し、ステップ550に進む。
【0209】
ステップ550では、edgeB.nextがNULLか否か、すなわち、edgeBの次のエッジデータが連結されていないか否かを判断する。ステップ550で肯定判断した場合には、ステップ552に進み、edgeBの区間を変更せずに、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、NULLからedgeAの記憶領域を示すアドレスとなるように変更する。
【0210】
さらにまた、ステップ550で、否定判断した場合には、ステップ554に進み、edgeB.nextが示すアドレスに記憶されている次のエッジデータをedgeBとしてステップ540に戻る。
【0211】
また、ステップ546で、否定判断した場合には、着目スキャンラインのX軸上において、edgeAの区間(範囲)の一部或いは全体が、edgeBの区間の一部或いは全体に重なっている関係であることを示す。そこで、ステップ548に進み、edgeAとedgeBとを合成する。具体的には、edgeBの始点startを、edgeA.start及びedgeB.startのいずれか小さい方となるように変更し、edgeBの終点endにを、edgeA.end及びedgeB.endのいずれか大きい方となるように変更する。その後、edgeAは削除する。また、逆に、edgeAの始点及び終点を上記と同様に変更して、edgeBをedgeAに置き換え、edgeBを削除するようにしてもよい。
【0212】
エッジ挿入処理の後、ステップ518では、スキャンラインyのエッジリストから次のエッジデータを取得する。具体的には、上記取得したエッジデータのアドレスnextに格納されているアドレスからエッジデータを取得する。ただし、アドレスnextの値がNULLの場合には取得失敗となる。ステップ518の後は、ステップ510に戻る。
【0213】
ステップ510において、否定判断した場合には、ステップ520に進み、yに1を加算する。そして、ステップ522において、yがパターン画像の高さptn_height未満か否かを判断する。ステップ522で肯定判断した場合には、パターン画像の全てのスキャンラインについてラスタ形式への変換が終了していないことを示しているため、次のスキャンラインのラスタ形式への変換を行なうために、ステップ510に戻る。
【0214】
また、ステップ522で否定判断した場合には、パターン画像の全てのスキャンラインについてラスタ形式への変換が終了したことを示しているため、ステップ524に進み、エッジリスト形式のパターン画像情報をメモリ領域PA1から削除し、メモリ領域PA1を解放する。
【0215】
ステップ526では、typeの値を「edgelist」から「hybrid」に変更する。
【0216】
次に、図18のステップ164で実行されるラスタ形式のパターン画像に対する描画処理について詳細に説明する。図32は、ラスタ形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【0217】
ステップ600では、読み込んだ描画コマンドの種類を判断する。描画コマンドがイメージ描画コマンドであれば、ステップ602で、イメージ描画コマンドのラスタ形式描画処理を実行し、描画コマンドがグラフィックス描画コマンドであれば、ステップ604で、グラフィックス描画コマンドのラスタ形式描画処理を実行し、描画コマンドが文字描画コマンドであれば、ステップ606で、文字描画コマンドのラスタ形式描画処理を実行する。
【0218】
図33は、ステップ602で行われるイメージ描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【0219】
ステップ620では、イメージ描画コマンドにより指定された、イメージ画像のパターン画像における描画開始位置の情報を取得して、(x_offset、 y_offset)にセットすると共に、該イメージ画像の幅・高さの情報を取得して、(width, height)にセットする。
【0220】
ステップ622では、[x_offset+width]及び[ptn_width-1]のいずれか小さい方の値を、x_endにセットする。ここで、ptn_widthは、前述したように、パターン画像の幅を示す値である。
【0221】
更に、ステップ622では、[y_offset+width]及び[ptn_height-1]のいずれか小さい方の値を、y_endにセットする。ここで、ptn_heightは、前述したように、パターン画像の高さを示す値である。
【0222】
ステップ624では、yに0をセットする。
【0223】
ステップ626では、[y + y_offset]が、y_endより小さいか否か判断する。パターン画像の矩形領域外の部分に対する描画は不要であり、Y軸方向に不要な描画を行なわないためにステップ626が設けられている。ステップ626で、肯定判断した場合には、ステップ628に進む。
【0224】
ステップ628では、イメージ画像の矩形領域の左上を原点(0,0)としたときのイメージ画像の座標(0, y)から座標(x_end - x_offset, y)までの領域の各画素の色値を、パターン画像の矩形領域の左上を原点(0,0)としたときのパターン画像の座標(x_offset, y + y_offset)から座標(x_end, y + y_offset)までの領域の各画素の色値として、パターン画像用のメモリPA2に書き込む(コピーする)。
【0225】
ステップ630では、スキャンライン[y + y_offset]におけるx_offsetからx_endまでの範囲がマスク範囲(パターン画像における画像領域)となるように、マスク情報へのマスク範囲の追加処理を行なう。パターン画像用のメモリ領域PA2に新たにイメージ画像が描画されると、描画した画像及び描画位置によってはパターン画像における画像領域が変化することがある。そこで、マスク情報へのマスク範囲を追加する追加処理を行なうようにしている。詳細は後述する。
【0226】
ステップ630の後は、ステップ632に進み、yに1を加算して、ステップ626に戻り、次のスキャンラインについて、上記と同様に描画処理を行なう。
【0227】
なお、ステップ626で否定判断した場合には、本描画処理を終了する。これにより、Y軸方向においてパターン画像の矩形領域外の範囲に対する描画はなされない。
【0228】
次に、上記ステップ630で行われるマスク情報へのマスク範囲の追加処理について説明する。図34は、マスク情報へのマスク範囲の追加処理の流れを示すフローチャートである。
【0229】
ステップ650では、add_yに、追加するマスク範囲のY座標をセットする。本マスク範囲の追加処理ルーチンが図33のイメージ描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、add_yには、[y + y_offset]の値がセットされる。本マスク範囲の追加処理ルーチンが、後述するグラフィックス描画コマンドのラスタ形式描画処理ルーチン及び文字描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、add_yには、yの値がセットされる。
【0230】
また、ステップ650では、start_xに、追加する範囲のX座標の始点をセットする。本マスク範囲の追加処理ルーチンが図33のイメージ描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、start_xには、x_offsetの値がセットされる。本マスク範囲の追加処理ルーチンが、後述するグラフィックス描画コマンドのラスタ形式描画処理ルーチン及び文字描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、start_xには、x_startの値がセットされる。
【0231】
また、ステップ650では、end_xに、追加する範囲のX座標の終点をセットする。ここでは、end_xには、x_endの値がセットされる。
【0232】
ステップ652では、typeの値がhybridか否かを判断する。ステップ652で肯定判断した場合には、マスク情報はメモリ領域MA1にエッジリスト形式で保持されているため、ステップ656で、マスク情報のエッジデータを作成する。ここでは、上記start_xの値をエッジデータの始点startの値とし、上記end_xの値をエッジデータの終点endの値とし、エッジデータのマスク値maskの値を1にし、アドレスnextの値はNULLにして作成する。
【0233】
ステップ658では、マスク情報のスキャンラインadd_yのエッジリストに、上記作成したエッジデータを追加する。ここで行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをadd_yとして、図22及び図31を用いて説明したように実行する。
【0234】
ステップ660では、マスク情報のエッジデータ数が予め定められた閾値TH2を超えたか否かを判断する。ステップ660において、肯定判断した場合には、ステップ662に進み、エッジリスト形式のマスク情報をラスタ形式に変換する処理を行なう。ステップ662の処理は後述する。ステップ662の後は、ステップ664において、typeの値を、ラスタ形式を示すrasterに変更し、マスク範囲追加処理を終了する。。
【0235】
一方、ステップ660において、否定判断した場合には、ステップ662、664をスキップしてマスク範囲追加処理を終了する。
【0236】
一方、ステップ652で、否定判断した場合には、マスク情報はラスタ形式で保存されているため、マスク情報における座標(start_x, add_y)から座標(end_x, add_y)までの範囲の各画素のマスク値を1にする。すなわち、ラスタ形式のマスク情報では、1画素が1ビットで表されるため、該ビットを1にする。そして、マスク範囲追加処理を終了する。
【0237】
次に、上記ステップ662で行われるマスク情報をラスタ形式に変換する処理について説明する。図35は、マスク情報をラスタ形式に変換する処理の流れを示すフローチャートである。
【0238】
ステップ700では、ラスタ形式のマスク情報を格納するためのマスク情報用のメモリ領域MA2をメモリ12Bに確保する。本実施の形態では、ラスタ形式のマスク情報は、1画素1ビット必要となるため、パターン画像の幅×高さ×1ビットのメモリ領域MA2が確保される。
【0239】
ステップ702では、上記確保したマスク情報用のメモリ領域MA2を0でクリアする。すなわち、本実施の形態では、マスク情報の全画素のマスク値が0を示すように初期化される。
【0240】
ステップ704では、mask_yに0をセットする。
【0241】
ステップ706では、メモリ領域MA1に記憶されているエッジリスト形式のマスク情報からスキャンラインmask_yのエッジリストの先頭のエッジデータを取得する。
【0242】
ステップ708では、スキャンラインmask_yにエッジデータがあるか否かを判断する。ステップ708がステップ706の直後に実行される場合において、ステップ706での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ708で肯定判断され、ステップ706での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ708で否定判断される。また、ステップ708が後述するステップ712の直後に実行される場合において、ステップ712での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ708で肯定判断され、ステップ712での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ708で否定判断される。
【0243】
ステップ708で肯定判断した場合には、ステップ710で、マスク情報用のメモリ領域MA2における、ラスタ形式のマスク情報の、始点(start, mask_y)から終点(end, mask_y)までの範囲の画素に対するマスク値(上記初期化により0となっている)を、1に変更する(上書きする)。ここで、startは取得したエッジデータの始点startの値であり、endは取得したエッジデータの終点endの値である。
【0244】
ステップ712では、スキャンラインmask_yのエッジリストから次のエッジデータを取得する。具体的には、上記取得したエッジデータのアドレスnextに格納されているアドレスからエッジデータを取得する。ただし、アドレスnextの値がNULLの場合には取得失敗となる。ステップ712の後は、ステップ708に戻る。
【0245】
ステップ708において、否定判断した場合には、ステップ714に進み、mask_yに1を加算する。そして、ステップ716において、mask_yがパターン画像の高さptn_height未満か否かを判断する。ステップ716で肯定判断した場合には、全てのスキャンラインについてマスク情報のラスタ形式への変換が終了していないことを示しているため、次のスキャンラインの変換を行なうために、ステップ706に戻る。
【0246】
また、ステップ716で否定判断した場合には、全てのスキャンラインについてマスク情報のラスタ形式への変換が終了したことを示しているため、ステップ718に進み、エッジリスト形式のマスク情報をメモリ領域MA1から削除し、メモリ領域MA1を解放する。
【0247】
次に、ステップ604のグラフィックス描画コマンドのラスタ形式描画処理について説明する。図36は、グラフィックス描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【0248】
ステップ740では、グラフィックス描画コマンドにより指定された描画色を取得してg_colorにセットする。例えば、図10に示す定義命令に含まれるグラフィック描画コマンドfillRectに対して、with colorで指定された色が描画色である。
【0249】
ステップ742では、グラフィックス描画コマンドにより指定された描画領域のY座標の範囲を求める。例えば、図10に示す例では、図10の(2)に示す描画コマンドのfillRectに続く(0,0,3,3)において、最初の2つの数値が、パターン画像におけるグラフィックス画像の描画開始位置であり、それに続く2つの数値が、描画するグラフィックス画像の幅及び高さを示す画素数であることから、グラフィックス描画コマンドの描画領域のY座標の最小値は、描画開始位置のY座標0、Y座標値の最大値は、該描画開始位置Y座標0に高さ3を加算した3となる。そして、このY座標の最小値をy_startにセットし、最大値をy_endにセットする。
【0250】
ステップ744では、yにy_startの値をセットする。
【0251】
ステップ746では、グラフィックス描画コマンドにより描画するグラフィックス画像について、スキャンラインyにおけるスキャン変換処理(画像のエッジを抽出する処理)を行い、スキャンラインyにおけるX軸上の描画範囲x_start、x_endを求める。
【0252】
ステップ748では、ラスタ形式のパターン画像の、始点(x_start, y)から終点(x_end, y)までの範囲の画素の色値を、描画色g_colorの値に変更する(g_colorの値を書き込む)。
【0253】
ステップ750では、スキャンラインyにおけるx_startからx_endまでの範囲がマスク範囲となるように、マスク情報へのマスク範囲の追加処理を行なう。このマスク範囲の追加処理は、上記で図34を用いて説明したように実行する。
【0254】
ステップ752では、yに1を加算する。
【0255】
ステップ752では、yがy_end以下であるか否かを判断する。ステップ752で肯定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了していない状態であるため、ステップ746に戻り、次のスキャンラインについて上記処理を繰り返す。また、ステップ752で否定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了した状態であるため、本グラフィックス描画コマンドのラスタ形式描画処理を終了する。
【0256】
次に、ステップ606の文字描画コマンドのラスタ形式描画処理について説明する。図37は、文字描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【0257】
ステップ770では、文字描画コマンドにより指定された描画色を取得してt_colorにセットする。
【0258】
ステップ772では、文字描画コマンドにおいてパターン画像に配置(描画)するよう指定された文字画像の描画開始位置の情報を取得して、(x_offset, y_offset)にセットする。
【0259】
ステップ774では、文字ビットマップデータを取得する。
【0260】
ステップ776では、char_xに0をセットすると共に、char_yに0をセットする。
【0261】
ステップ778では、上記取得した文字ビットマップデータから文字のエッジ抽出を行なう。具体的には、上記で図27を用いて説明したように実行する。
【0262】
ステップ778の文字のエッジ抽出処理が終了した後は、ステップ780に進む。ステップ780では、エッジ抽出が成功したか否かを判断する。ステップ780で肯定判断した場合には、ステップ782に進み、x_startに[edge_x + x_offset]の値をセットし、x_endに[edge_x_end + x_offset]の値をセットし、yに[edge_y + y_offset]の値をセットする。
【0263】
ステップ784では、ラスタ形式のパターン画像の、始点(x_start, y)から終点(x_end, y)までの範囲の画素の色値を、描画色t_colorの値に変更する(t_colorの値を書き込む)。
【0264】
ステップ786では、スキャンラインyにおけるx_startからx_endまでの範囲がマスク範囲となるように、マスク情報へのマスク範囲の追加処理を行なう。具体的には、上記で図34を用いて説明したように実行する。
【0265】
ステップ786の後は、ステップ778に戻り、次のエッジの抽出を、上記と同様に行う。ステップ778の処理により、新たなエッジが抽出された場合には、ステップ780で肯定判断されるため、上記ステップ782以降の処理が同様に行われる。また、ステップ778で新たなエッジ抽出されなかった場合には、ステップ780で否定判断され、図37の文字描画コマンドのラスタ形式描画処理を終了する。
【0266】
次に、図16のステップ110のパターン塗りつぶし処理について詳細に説明する。
【0267】
図38は、パターン塗りつぶし処理の流れを示すフローチャートである。
【0268】
ステップ800では、使用するパターン画像に関する情報(幅ptn_width、高さptn_height、データ形式type、及びアドレスaddress)を、パターン画像のパターン名に基づいてパターン管理テーブルから取得する。
【0269】
ステップ802では、パターン塗りつぶし命令に含まれる塗りつぶしコマンドにより指定されている塗りつぶし範囲のY座標の範囲の最小値y_start、及び最大値y_endを求め(図3(B)も参照。)、該y_startの値をyにセットする。
【0270】
ステップ804では、スキャンラインyにおけるX軸方向の塗りつぶし範囲の最小値x_start、及び最大値x_endを求め(図3(B)も参照。)、該x_startの値をxにセットする。
【0271】
ステップ806では、塗りつぶし範囲の開始点(x, y)に対応するパターン画像の開始点(ptn_x, ptn_y)を求める(図3(A)も参照。)。更に、ptn_x_lenに、[ptn_width - ptn_x]及び[x_end - ptn_x]のいずれか小さい方の値をセットする。
【0272】
ステップ808では、x_nextに、[x_ + ptn_x_len]の値をセットする。x_nextは、塗りつぶし範囲の開始点にパターン画像の開始点を合わせてパターン画像を1つ配置して、ページバッファにパターン画像の色値を書き込んだ後の、次の描画開始点のX座標値である。
【0273】
ステップ810では、パターン情報のtypeを判断する。上記パターン管理テーブルから取得したtypeの値が、rasterであれば、ステップ812に進み、ラスタ形式のパターン塗りつぶし処理を行なう。ラスタ形式パターンの塗りつぶし処理では、ラスタ形式のパターン情報を用いて、ページバッファのスキャンラインyにおけるX座標値xから[x + ptn_x_len-1]までの範囲の描画(塗りつぶし)が行われる。
【0274】
上記パターン管理テーブルから取得したtypeの値が、edgelistであれば、ステップ814に進み、エッジリスト形式パターンの塗りつぶし処理を行なう。エッジリスト形式パターン塗りつぶし処理では、エッジリスト形式のパターン情報を用いて、ページバッファの、スキャンラインyにおけるX座標値xから[x + ptn_x_len -1]までの範囲の描画(塗りつぶし)が行われる。
【0275】
上記パターン管理テーブルから取得したtypeの値が、hybridであれば、ステップ816に進み、ハイブリッド形式パターンの塗りつぶし処理を行なう。ハイブリッド形式パターンの塗りつぶし処理では、ハイブリッド形式のパターン情報を用いて、ページバッファの、スキャンラインyにおけるX座標値xから[x + ptn_x_len -1]までの範囲の描画(塗りつぶし)が行われる。
【0276】
これら各塗りつぶし処理の詳細については後述する。
【0277】
ステップ812,814,及び816のいずれかが終了すると、ステップ818に進み、x_nextがx_end以下か否かを判断する。ステップ818において、否定判断した場合には、ステップ820に進み、xにx_nextの値をセットする。ステップ820の後は、ステップ806に戻り、上記と同様に処理する。
【0278】
すなわち、ステップ806〜ステップ820の処理を繰り返すことで、塗りつぶし範囲のスキャンラインyにおいて、塗りつぶし範囲のX軸方向の開始点をずらしながら、該開始点の各々を書込み位置として、パターン画像のスキャンラインptn_y上の色値を繰り返し複写する(書き込む)ようにしている。
【0279】
一方、ステップ818で、肯定判断した場合には、スキャンラインyにおけるX軸方向の塗りつぶし範囲の最大値x_endまでの塗りつぶし(描画)が終了した状態であるため、ステップ822に進む。ステップ822に進み、yがy_endより小さいか否かを判断する。ステップ822で否定判断した場合には、塗りつぶし範囲のY座標の範囲の最大値y_endまでの塗りつぶしはまだ終了していない状態であるため、ステップ824に進み、次のスキャンラインの塗りつぶしが行われるように、yに1を加算して、ステップ804に戻り、上記と同様に処理する。
【0280】
また、ステップ822で肯定判断した場合には、塗りつぶし範囲のY座標の範囲の最大値y_endまでの塗りつぶしが終了した状態、すなわち、塗りつぶし範囲に対するパターン画像の描画処理が終了した状態であるため、本パターン塗りつぶし処理を終了する。
【0281】
ここで、ステップ812、814、及び816の各塗りつぶし処理について、図39から図42までの各図面を用いて説明する。
【0282】
図39は、塗りつぶし処理を概念的に説明する説明図である。図39(A)は、パターン情報がエッジリスト形式の場合の塗りつぶし処理の説明図であり、図39(B)は、パターン情報がハイブリッド形式の場合の塗りつぶし処理の説明図であり、図39(C)には、パターン情報がラスタ形式の場合の塗りつぶし処理の説明図である。なお、図39では、パターン画像の開始点ptn_xからptn_x+lengthまでの領域が、塗りつぶし範囲に対応するスキャンラインptn_yの領域(タイリング領域)として図示されている。
【0283】
まず最初に、図39(C)及び図40を参照して、ステップ812で行われる、パターン情報がラスタ形式(パターン画像情報及びマスク情報の各々がラスタ形式)の場合の塗りつぶし処理について説明する。
【0284】
図40において、ステップ840では、パターン画像情報から座標(ptn_x, ptn_y)の色値を取得し、ptn_x_colorにセットする。
【0285】
ステップ842では、マスク情報から、座標(ptn_x, ptn_y)のマスク値を取得し、ptn_x_maskにセットする。
【0286】
ステップ844では、ptn_x_maskが1か否かを判断する。ステップ844で肯定判断した場合には、ステップ846に進み、ptn_x_colorの値をページバッファの座標(x,y)に書き込む(図39(C)も参照。)。
【0287】
一方、ステップ844で、否定判断した場合には、座標(ptn_x, ptn_y)のマスク値が、非画像領域の画素であることを示す0であるため、ステップ846の書込みを行なわずに(図39(C)も参照。)、ステップ848に進む。
【0288】
ステップ848では、ptn_x_lenから1を減算し、ptn_xに1を加算し、xに1を加算して、ステップ850に進む。
【0289】
ステップ850では、ptn_x_lenが0より大きいか否かを判断する。ステップ850で、肯定判断した場合には、ステップ840に戻り、次の画素について上記と同様に書込みを行なう。また、ステップ850で否定判断した場合には、本塗りつぶし処理を終了する。
【0290】
次に、図39(A)及び図41を参照して、ステップ814で行われる、パターン情報がエッジリスト形式(パターン画像情報がエッジリスト形式)の場合の塗りつぶし処理について説明する。
【0291】
ステップ870では、パターン画像情報のスキャンラインptn_yのエッジリストの先頭エッジデータptn_edgeを取得する。
【0292】
ステップ872では、エッジデータptn_edgeの始点startの値を、ptn_edge_sxにセットし、ptn_edgeの終点endの値を、ptn_edge_exにセットし、ptn_edgeの色値colorの値を、ptn_edge_colorにセットする。
【0293】
ステップ874では、[ptn_x + ptn_x_len - 1]の値が、取得したエッジデータの始点ptn_edge_sxの値より小さいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲(図39のタイリング領域)の終点が、取得したエッジデータの始点より小さければ、該エッジデータの区間はパターン画像の描画範囲外であることを示している。更に、エッジデータは、X軸方向に順に連結されるため、これ以降のエッジデータも、描画範囲外となる。従って、ここで肯定判断された場合には、本塗りつぶし処理が終了する。なお、図示は省略するが、もともとスキャンラインptn_yにエッジデータが存在せず、ステップ870でエッジデータが取得されなかった場合も、本塗りつぶし処理は終了する。
【0294】
一方、ステップ874で、否定判断した場合には、ステップ876に進む。ステップ876では、パターン画像におけるX軸上の開始点ptn_x(パターン画像のスキャンラインptn_yにおける描画範囲の始点)が、取得したエッジデータの終点ptn_edge_exより大きいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲の始点が、取得したエッジデータの終点より大きければ、取得したエッジデータの区間は、X軸方向においてパターン画像の描画範囲外に存在することとなる。従って、ステップ876で肯定判断された場合には、次のエッジデータを取得するため、ステップ888に進む。ステップ888については後述する。
【0295】
一方、ステップ876で否定判断した場合には、取得したエッジデータの区間の一部又は全体が、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複していることを示している。例えば、図39(A)に示すように、edge1及びedge2の各区間は、パターン画像におけるスキャンラインptn_y上の描画範囲の一部と重複している。このような位置関係の場合には、ステップ876で否定判断されるため、ステップ878に進む。
【0296】
ステップ878では、パターン画像におけるX軸上の開始点ptn_xが、取得したエッジデータの始点ptn_edge_sxより小さいか否かを判断する。ここで肯定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジデータの区間の始点が、例えば図39(A)のedge2に示す位置関係となっていることを示している。そこで、ステップ878で、肯定判断した場合には、ステップ880に進む。
【0297】
ステップ880では、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の値をセットする。そして、ステップ882に進む。
【0298】
一方、ステップ878で否定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジでデータの区間の始点が、例えば図39(A)のedge1に示す位置関係となっていることを示している。従って、ptn_xから描画されるよう、ステップ880をスキップしてステップ882に進む。
【0299】
ステップ882では、draw_lenに、[ptn_x_len]及び[ptn_edge_ex - ptn_edge_sx +1]のいずれか小さい方の値をセットする。draw_lenはX軸上の描画する範囲の長さを示している。
【0300】
ステップ884では、イメージバッファの座標(x, y)から座標(x + draw_len - 1, y)までの範囲へ、ptn_edge_colorの値を書き込む(図39の(A)も参照。)。
【0301】
ステップ886では、xにdraw_lenの値を加算し、ptn_x_lenからdraw_lenの値を減算し、ptn_xに、draw_lenの値を加算する。すなわち、[ptn_x + draw_len - 1]まで描画したので、次の描画の開始点を[ptn_x + draw_len]に移動する。
【0302】
ステップ886の処理後、及びステップ876で肯定判断した場合には、ステップ888に進む。
【0303】
ステップ888では、ptn_x_lenが0より大きく、かつ、次のエッジデータが存在するか否かを判断する。ステップ888で肯定判断した場合には、ステップ890で、エッジデータptn_edgeのアドレスnextに格納されているアドレスが示す記憶領域から、次のエッジデータを取得し、新たに取得したエッジデータを、エッジデータptn_edgeとして用いて、ステップ872に戻り、上記処理を繰り返す。また、ステップ888で否定判断した場合には、パターン画像のスキャンラインptn_yにおける描画が終了したことを示しているため、本塗りつぶし処理が終了する。
【0304】
次に、図39(B)及び図42を参照して、ステップ816で行われる、パターン情報がハイブリッド形式(パターン画像情報がラスタ形式でマスク情報がエッジリスト形式)の場合の塗りつぶし処理について説明する。
【0305】
ステップ900では、マスク情報のスキャンラインptn_yのエッジリストの先頭エッジデータptn_edgeを取得する。
【0306】
ステップ902では、エッジデータptn_edgeの始点startの値を、ptn_edge_sxにセットし、ptn_edgeの終点endの値を、ptn_edge_exにセットする。
【0307】
ステップ904では、[ptn_x + ptn_x_len - 1]の値が、取得したエッジデータの始点ptn_edge_sxの値より小さいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲(図39のタイリング領域)の終点が、取得したエッジデータの始点より小さければ、該エッジデータの区間はパターン画像の描画範囲外であることを示している。更に、エッジデータは、X軸方向に順に連結されるため、これ以降のエッジデータも、描画範囲外となる。従って、ここで肯定判断された場合には、本塗りつぶし処理が終了する。なお、図示は省略するが、もともとスキャンラインptn_yにエッジデータが存在せず、ステップ900でエッジデータが取得されなかった場合も、本塗りつぶし処理は終了する。
【0308】
一方、ステップ904で、否定判断した場合には、ステップ906に進む。ステップ906では、パターン画像におけるX軸上の開始点ptn_xが、取得したエッジデータの終点ptn_edge_exより大きいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲(図39のタイリング領域)の始点が、取得したエッジデータの終点より大きければ、取得したエッジデータの区間は、X軸方向においてパターン画像の描画範囲外に存在することとなる。従って、ステップ904で肯定判断された場合には、次のエッジデータを取得するため、ステップ918に進む。ステップ918については後述する。
【0309】
一方、ステップ906で否定判断した場合には、取得したエッジデータの区間の一部又は全体が、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複していることを示している。例えば、図39(B)に示すように、edge3及びedge4の各区間は、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複している。このような位置関係の場合には、ステップ906で否定判断されるため、ステップ908に進む。
【0310】
ステップ908では、パターン画像におけるX軸上の開始点ptn_xが、取得したエッジデータの始点ptn_edge_sxより小さいか否かを判断する。ここで肯定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジデータの区間の始点が、例えば図39(B)のedge4に示す位置関係となっていることを示している。そこで、ステップ908で、肯定判断した場合には、ステップ910に進む。
【0311】
ステップ910では、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の値をセットする。そして、ステップ912に進む。
【0312】
一方、ステップ908で否定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジでデータの区間の始点が、例えば図39(B)のedge3に示す位置関係となっていることを示している。従って、ptn_xから描画されるよう、ステップ910をスキップしてステップ912に進む。
【0313】
ステップ912では、draw_lenに、[ptn_x_len]及び[ptn_edge_ex - ptn_edge_sx +1]のいずれか小さい方の値をセットする。draw_lenはX軸上の描画する範囲の長さを示している。
【0314】
ステップ914では、パターン画像情報の(ptn_x, ptn_y)から(ptn_x + draw_len -1, ptn_y)までの各画素の色値を、イメージバッファの(x, y)から(x + draw_len - 1, y)までの範囲に書き込む(図39の(B)も参照。)。
【0315】
ステップ916では、xにdraw_lenの値を加算し、ptn_x_lenからdraw_lenの値を減算し、ptn_xに、draw_lenの値を加算する。すなわち、[ptn_x + draw_len - 1]まで描画したので、次の描画の開始点を[ptn_x + draw_len]に移動する。
【0316】
ステップ916の処理後、及びステップ906で肯定判断した場合には、ステップ918に進む。
【0317】
ステップ918では、ptn_x_lenが0より大きく、かつ、次のエッジデータが存在するか否かを判断する。ステップ918で肯定判断した場合には、ステップ920で、エッジデータptn_edgeのアドレスnextに格納されているアドレスが示す記憶領域から、次のエッジデータを取得し、新たに取得したエッジデータを、エッジデータptn_edgeとして用いて、ステップ912に戻り、上記処理を繰り返す。また、ステップ918で否定判断した場合には、パターン画像のスキャンラインptn_yにおける描画が終了したことを示しているため、本塗りつぶし処理が終了する。
【0318】
ここでフローチャートの説明は終了するが、上記ではパターン画像情報をエッジリスト形式からラスタ形式に変換するか否かの判断に用いた閾値TH1、及びマスク情報をエッジリスト形式からラスタ形式に変換するか否かの判断に用いた閾値TH2の具体例については、何ら言及しなかったが、各閾値については以下のように予め設定して用いるようにしてもよい。
【0319】
まず、閾値TH1であるが、例えば、ラスタ形式で表したパターン画像情報のサイズ(データ量)がエッジリスト形式で表したパターン画像情報のサイズ(データ量)より小さくなるように閾値TH1を求めればよい。例えば、以下の(1)式を用いる。
【0320】
width×height×4 < height×4+edge×12 …(1)
【0321】
(1)式において、widthがパターン画像の幅、heightが高さ、edgeがエッジデータの数である。なお、(1)式の左辺は、図5で例示したラスタ形式で表したカラーのパターン画像情報のサイズを示しており、(1)式の右辺は、図8で例示したエッジリスト形式で表したパターン画像情報のサイズを示している。この(1)式を変形すると、下記(2)式が得られる。
【0322】
edge > {(width-1)×height}/3 …(2)
【0323】
(2)式の右辺の値は、ラスタ形式で表したパターン画像情報のサイズ(データ量)とエッジリスト形式で表したパターン画像情報のサイズ(データ量)とが等しくなるときのエッジデータの数であり、これを閾値TH1として用い、(2)式の条件を満たした場合に、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【0324】
次に、閾値TH2であるが、例えば、ラスタ形式で表したマスク情報のサイズ(データ量)がエッジリスト形式で表したマスク情報のサイズ(データ量)より小さくなるように閾値TH2を求めればよい。例えば、以下の(3)式を用いる。
【0325】
width×height/8 < height×4+edgem×9 …(3)
【0326】
(3)式において、widthがパターン画像の幅、heightが高さ、edgemがマスク情報のエッジデータの数である。(3)式を変形すると、下記(4)式が得られる。
【0327】
edgem> {(width - 32)×height} / 72 …(4)
【0328】
(4)式の右辺の値は、ラスタ形式で表したマスク情報のサイズ(データ量)とエッジリスト形式で表したマスク情報のサイズ(データ量)とが等しくなるときのエッジデータの数であり、これを閾値TH2として用い、(4)式の条件を満たした場合に、マスク情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【0329】
このように、(2)式により得られた閾値TH1及び(4)式により得られた閾値TH2を用いることで、パターン画像情報のメモリ使用量及びマスク情報のメモリ使用量の各々を個別に判断して、ラスタ形式及びエッジリスト形式のうち、各々のメモリ使用量が小さくなるほうのデータ形式で記憶されるが、パターン画像情報をラスタ情報に変換する場合には、エッジリスト形式の場合には必要なかったマスク情報が作成されるため、パターン情報全体でメモリ使用量が効率化されるように、閾値TH1を求めてもよい。例えば、下記(5)式を用いる。
【0330】
(width×height×4)+(height×4+edgem×9) < height×4+edge×12 …(5)
【0331】
(5)式の左辺は、図5で例示したラスタ形式で表したパターン画像情報のサイズと、エッジリスト形式で表したマスク情報のサイズとの合計値を示しており、(5)式の右辺は、図8で例示したエッジリスト形式で表したパターン画像情報のサイズを示している。
【0332】
なお、左辺のedgemは、マスク情報をエッジリスト形式で表したときのエッジデータの数である。マスク情報のエッジ数は、パターン画像のエッジ数以上にはならないため、
edgem≦edge
が成立する。図23、図24,及び図31を用いて説明したように、パターン画像の場合には、区間が隣接する或いは区間の少なくとも一部が重なる複数のエッジデータは、同色でないと合成されないが、マスク情報の場合には、エッジデータのマスク値は全て同じ値”1”であるため、色に関わりなく合成されるためである。
【0333】
従って、edgemを、edgemが取り得る最大値であるedgeに置き換えて、(5)式を変形すると、下記(6)式が得られる。
【0334】
edge > width × height × 4 / 3 …(6)
【0335】
(6)式の右辺を閾値TH1として用い、(6)式の条件を満たした場合に、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【0336】
また、上記実施の形態では、パターン定義の際に、パターン画像情報毎、及びマスク情報毎にデータ形式を切替えて記憶する例について説明したが、これに限定されず、例えば、パターン画像情報及びマスク情報ともに、スキャンライン毎にデータ形式を判断して、スキャンライン毎に判断結果に応じたデータ形式でデータを記憶するようにしてもよい。この場合には、閾値TH1に代えて、上記閾値TH1をheightで除算した閾値TH1'をスキャンライン単位の閾値として用いればよい。例えば、下記(7)又は(8)の右辺の値を閾値TH1'とすればよい。
【0337】
edge > (width-1)/3 …(7)
edge > width × 4 / 3 …(8)
【0338】
また、マスク情報の各スキャンラインのデータ形式を判断するための閾値TH2'も、上記閾値TH2をheightで除算して求めればよい。例えば、下記(9)式の右辺の値を閾値TH2'とすればよい。
【0339】
edgem> (width - 32)/ 72 …(9)
【0340】
なお、スキャンライン単位で形式を切替えて記憶する際、上記実施の形態と同様に、定義命令に、描画コマンドが複数含まれる場合、且つ先に実行された描画コマンドにより既に描画されているスキャンラインが存在する場合において、該スキャンラインのデータ形式がラスタ形式で記憶されているときは、上記と同様に、閾値による判断をせずに、そのスキャンラインをラスタ形式で描画する。パターン画像だけでなく、マスク情報も同様である。
【0341】
また、上記では画像処理のプログラムの一例としてのプログラムが装置制御部12の記憶部12Cに記憶される態様を説明したが、これに限定されず、該プログラムを、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
【符号の説明】
【0342】
10 画像形成装置
12 装置制御部
12A CPU
12B メモリ
12C 記憶部
16 画像形成部
【技術分野】
【0001】
本発明は画像処理装置、画像形成装置、及びプログラムに関する。
【背景技術】
【0002】
特許文献1には、1ラインデータを参照データとしてラインバッファに格納し、格納データとの比較を行なってデータの符号化又は復号処理を行なう二次元符号化復号処理装置において、参照データを構成するランレングスデータサイズがラインバッファのサイズを超えないときはランレングスデータ形式でラインバッファに格納し、ランレングスデータサイズがラインバッファのサイズより大きいときはビットマップデータ形式で格納する技術が開示されている。
【0003】
また特許文献2には、複数の画像オブジェクト(例えば文字やイメージやグラフィック)で構成されている電子ドキュメント及びPDLデータを受信し、画像を形成する画像形成装置において、ベクターエッジで構成されるディスプレイリストを生成する手段を備え、描画処理の速度の妨げになるラインを抽出する処理を備え、抽出されたラインのみスキャンラインエッジに変換する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001−078042号公報
【特許文献2】特開2009−101519号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる画像処理装置、画像形成装置、及びプログラムを得ることを目的とする。
【課題を解決するための手段】
【0006】
請求項1の発明の画像処理装置は、パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段と、前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段と、前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、を備えている。
【0007】
請求項2の発明は、請求項1記載の画像処理装置において、前記第2の閾値を、前記マスク情報を前記第1の形式で表したときのデータ量と、前記マスク情報を前記第2の形式で表したときのデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0008】
請求項3の発明は、請求項1又は請求項2に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0009】
請求項4の発明は、請求項1又は請求項2に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量に前記マスク情報を前記第2の形式で表したときのデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定したものである。
【0010】
請求項5の発明は、請求項1に記載の画像処理装置において、前記第1の記憶処理手段は、ライン単位で前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるか否かを判断し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるラインについては、前記第1の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超えるラインについては、前記第2の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、前記第2の記憶処理手段は、ライン単位で前記マスク情報を前記第2の形式で表したときのエッジデータの数が前記第2の閾値以下となるか否かを判断し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値以下となるラインについては、前記第1の形式で表したマスク情報を前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超えるラインについては、前記第2の形式で表した前記マスク情報を前記記憶手段に記憶するように処理する。
【0011】
請求項6の発明は、請求項5記載の画像処理装置において、前記第2の閾値を、前記マスク情報を前記第1の形式で表したときの1ライン分データ量と、前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0012】
請求項7の発明は、請求項5又は請求項6に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定したものである。
【0013】
請求項8の発明は、請求項6又は請求項7に記載の画像処理装置において、前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量に前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定したものである。
【0014】
請求項9の発明の画像形成装置は、請求項1〜請求項8のいずれか1項記載の画像処理装置と、前記画像処理装置により前記塗りつぶし命令が実行されて生成された出力画像情報に基づいて画像を形成する画像形成手段と、を備えている。
【0015】
請求項10の発明は、コンピュータを、パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段、前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段、及び前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、として機能させるためのプログラムである。
【発明の効果】
【0016】
請求項1に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【0017】
請求項2に記載の発明は、本構成を有しない場合に比べて、マスク情報を記憶するために必要な第2の記憶手段の使用量を抑えることができる、という効果を有する。
【0018】
請求項3に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量を抑えることができる、という効果を有する。
【0019】
請求項4に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量と、マスク情報を格納するために必要な第2の記憶手段の使用量と、を合計した合計使用量を抑えることができる。
【0020】
請求項5に記載の発明は、本構成を有しない場合に比べて、ライン毎に第1の記憶手段及び第2の記憶手段の使用量を抑制することができる、という効果を有する。
【0021】
請求項6に記載の発明は、本構成を有しない場合に比べて、マスク情報を記憶するために必要な第2の記憶手段の使用量を抑えることができる、という効果を有する。
【0022】
請求項7に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量を抑えることができる、という効果を有する。
【0023】
請求項8に記載の発明は、本構成を有しない場合に比べて、パターン画像情報を格納するために必要な第1の記憶手段の使用量と、マスク情報を格納するために必要な第2の記憶手段の使用量と、を合計した合計使用量を抑えることができる、という効果を有する。
【0024】
請求項10に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【0025】
請求項11に記載の発明は、本発明は、描画情報に含まれる定義命令により定義されたパターン画像を該描画情報に含まれる塗りつぶし命令により指定された範囲に配列して塗りつぶす場合において、該塗りつぶし命令の実行の際に該パターン画像を表すパターン画像情報の他にマスク情報が必要なときでも、該パターン画像を表すパターン画像情報を記憶するときの記憶手段の使用量だけでなく、マスク情報を記憶するときの記憶手段の使用量も抑制することができる、という効果を有する。
【図面の簡単な説明】
【0026】
【図1】画像形成装置の構成の一例を示す概略ブロック図である。
【図2】PDLデータに含まれる命令の処理内容を模式的に示す模式図である。
【図3】(A)は、パターン画像における、塗りつぶし範囲の始点座標(x_start, y_start)に対応する座標(ptn_x, ptn_y)を示す図であり、(B)は、該座標(ptn_x, ptn_y)をパターン画像の描画を開始する開始点としてパターン画像を塗りつぶし範囲に配列して敷き詰めた状態を示す図である。
【図4】(A)は、パターン画像によるパターン塗りつぶし処理より先に描画された画像を示す図であり、(B)は、該先に(A)に示す画像が描画された後に、画像領域と非画像領域とを含むパターン画像が描画された状態を示す図である。
【図5】(A)は、カラーのパターン画像をラスタ形式で表したときのパターン画像情報を模式的に示す図であり、(B)は、カラーのパターン画像、白黒のパターン画像、及びマスク情報をラスタ形式で表したときのメモリ使用量を示すテーブルである。
【図6】(A)は、パターン画像をエッジリスト形式で表したときのエッジリストの一例を模式的に示した図であり、(B)は、マスク情報をエッジリストで表したときのエッジリストの一例を模式的に示した図である。
【図7】(A)は、エッジリスト形式のパターン画像情報の一例であり、(B)は、(A)のパターン画像情報により表されるパターン画像を模式的に示す図である。
【図8】(A)は、カラーのパターン画像をエッジリスト形式で表したときのエッジリストの一例を模式的に示した図であり、(B)は、カラーのパターン画像、白黒のパターン画像、及びマスク情報をエッジリスト形式で表したときのメモリ使用量を示すテーブルである。
【図9】パターン画像の一例を示す図である。
【図10】図9に示すパターン画像を定義するための定義命令の疑似コードである。
【図11】図9に示すパターン画像をエッジリスト形式で表したパターン画像情報を模式的に示した図である。
【図12】図9に示すパターン画像をラスタ形式で表したパターン画像情報を模式的に示すと共に、ラスタ形式で表したマスク情報を模式的に示した図である。
【図13】図9に示すパターン画像をラスタ形式で表したパターン画像情報を模式的に示すと共に、エッジリスト形式で表したマスク情報を模式的に示した図である。
【図14】定義命令によるパターン定義処理の一例を示す概略的なフローチャートである。
【図15】(A)は、パターン塗りつぶし命令の疑似コードであり、(B)は、(A)に示すパターン塗りつぶし命令が実行されたときの出力画像を示す図である。
【図16】PDLデータ処理のメインルーチンのフローチャートを示す図である。
【図17】パターン管理テーブルの一例を示す図である。
【図18】パターン定義処理の流れを示すフローチャートである。
【図19】エッジリスト形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【図20】イメージ描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図21】エッジの切り出し処理の流れを示すフローチャートである。
【図22】エッジリストへのエッジデータ追加処理の流れを示すフローチャートである。
【図23】エッジ挿入処理の流れを示すフローチャートである。
【図24】パターン画像情報のエッジ挿入処理を説明する説明図である。
【図25】グラフィックス描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図26】文字描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【図27】文字のエッジ抽出処理の流れを示すフローチャートである。
【図28】黒座標の検出処理の流れを示すフローチャートである。
【図29】白座標の検出処理の流れを示すフローチャートである。
【図30】パターン画像情報をラスタ形式に変換する変換処理の流れを示すフローチャートである。
【図31】マスク情報のエッジ挿入処理の流れを示すフローチャートである。
【図32】ラスタ形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【図33】イメージ描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図34】マスク情報へのマスク範囲の追加処理の流れを示すフローチャートである。
【図35】マスク情報をラスタ形式に変換する処理の流れを示すフローチャートである。
【図36】グラフィックス描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図37】文字描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【図38】パターン塗りつぶし処理の流れを示すフローチャートである。
【図39】塗りつぶし処理を概念的に説明する説明図である。
【図40】ラスタ形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【図41】エッジリスト形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【図42】ハイブリッド形式パターンの塗りつぶし処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0027】
以下、図面を参照して画像形成装置の一実施形態を詳細に説明する。図1には本実施形態に係る画像形成装置10が示されている。画像形成装置10には、装置制御部12と、セットされた読取対象の文書(紙原稿)を光学的に読み取って読取画像データを出力する画像読取部14と、入力された出力画像情報が表す出力画像を記録用紙等の記録媒体上に形成する画像形成部16と、LCD等から成る表示部18A及びテンキーやタッチパネル等から成り利用者による操作を受付ける操作受付部18Bが設けられた操作パネル18と、ファクシミリ装置としての機能を備えた他の機器と電話線及び公衆通信網(図示省略)経由で画情報の送受信(ファクシミリ通信)を行なう画情報送受信部20と、PC(Personal Computer)等の情報処理装置とネットワークケーブル及びコンピュータネットワーク(図示省略)経由で情報の送受信を行なうためのネットワーク通信制御部22と、が設けられており、これらはバス24を介して互いに接続されている。
【0028】
装置制御部12はマイクロコンピュータ等から成り、CPU12A、メモリ12B、HDD(Hard Disk Drive)やフラッシュメモリ等から成る不揮発性の記憶部12Cが設けられている。記憶部12Cには、各種プログラム(描画情報を解釈して実行する画像処理のプログラムも含まれる。詳細は後述する)及び必要なデータ等が各々記憶されている。装置制御部12は請求項1等に記載の画像処理装置の一例であり、CPU12Aが画像処理プログラムを実行することで画像処理装置の一例として機能する。
【0029】
画像形成部16は、装置制御部12により行われた画像処理により生成された出力画像情報に基づいて、記録用紙等に画像を形成する。
【0030】
本実施の形態では、前述したように装置制御部12の画像処理の機能により、入力された描画情報が解釈されて出力画像情報が生成され、ページバッファに書き込まれる。描画情報は、ポストスクリプト等のページ記述言語(Page Description Language)により記述された情報であり、本実施の形態では少なくとも定義命令及び塗りつぶし命令を含むものとする。以下、描画情報をPDLデータと呼称する。
【0031】
定義命令は、パターン画像を定義するための命令である。本実施の形態において、定義命令は、1又は複数のコマンドを含んで構成される。
【0032】
塗りつぶし命令は、出力画像情報をページバッファに書き込むための描画命令の一種であって、出力画像の指定された範囲(以下、塗りつぶし範囲)を指定された色で塗りつぶすか或いはパターン画像を配列して塗りつぶす。以下、パターン画像を用いた塗りつぶし命令をパターン塗りつぶし命令と呼称し、指定された色で塗りつぶす塗りつぶし命令(色塗りつぶし命令)と区別して説明する。なお、本実施の形態において、各描画命令も、定義命令と同様、1又は複数のコマンドを含んで構成される。
【0033】
なお、パターン塗りつぶし命令では、パターン画像が繰り返し用いられ塗りつぶし範囲に複写されるため、パターン画像を表す情報(パターン画像情報という)を、出力画像情報とは別に、中間画像データとしてメモリ12Bの領域に格納しておく必要がある。本実施の形態では、定義命令の実行により、パターン画像情報がメモリ12Bのメモリ領域に記憶される。また、後述するが、定義命令において作成されるパターン画像情報のデータ形式によっては、パターン画像情報の他に、マスク情報が作成されメモリ領域に記憶される場合もある。
【0034】
また、本実施の形態では、幅方向(水平方向)の軸をX軸、高さ方向(垂直方向)の軸をY軸とするX−Y座標系で位置を表すものとする。また、矩形領域における左上座標を(0,0)とする。
【0035】
ここで、本実施の形態の作用を概念的に説明する。本実施の形態において、PDLデータに基づく画像処理は、図2に示すように、PDLデータに含まれる命令の記述順に実行される。図2では、PDLデータの命令に含まれる各コマンドを、擬似的或いは模式的に示しており、31がパターン属性定義コマンドの疑似コード、321〜3が模式的に示した描画コマンド(321はグラフィックス描画コマンド、322は文字描画コマンド、323はイメージ描画コマンドを示している)、33がカレントパターン設定コマンドの疑似コード,34が塗りつぶしコマンドの疑似コードであり、これら各コマンドが、この順にPDLデータに記述されているものとする。
【0036】
ここで、パターン属性定義コマンド31及び描画コマンド321〜3は、定義命令に含まれるコマンドである。パターン属性定義コマンド31は、パターン画像のサイズ等、パターン画像の属性を定義するためのコマンドである。なお、パターン属性にはサイズの他、パターン名が含まれていてもよい。描画コマンド321〜3は、パターン属性定義コマンドにより定義されたサイズの矩形領域に画像を描画するコマンドであり、描画コマンド321〜3により画像が描画される領域を画像領域という。
【0037】
カレントパターン設定コマンド33及び塗りつぶしコマンドは、パターン塗りつぶし命令に含まれるコマンドである。カレントパターン設定コマンド33は、塗りつぶし範囲に配列するパターン画像を設定するコマンドである。塗りつぶしコマンド33は、該カレントパターン設定コマンドで設定されたパターン画像により塗りつぶす処理を実行するためのコマンドである。
【0038】
まず、パターン属性定義コマンド31により、パターン画像の始点を示す座標(0,0)と、パターン画像の幅100画素、及び高さ100画素の各々が定義される。これにより、メモリ12B内のパターン用バッファ内に、始点を基準として(ここでは矩形の左上を基準とする)、幅が100画素、高さが100画素のパターン画像を表すパターン画像情報を一時的に格納するためのパターン画像用のメモリ領域が確保される(図2(1)も参照)。高さが100画素であるため、該パターン画像を構成する水平方向のライン(スキャンライン)の数は100本となる。なお、本実施の形態において、図2に示されるマスク情報(詳細は後述する)を格納するためのメモリ領域は、描画コマンドによるパターン作成中に必要に応じて確保されるものである。詳細は後述する。
【0039】
続いて、グラフィックス描画コマンド311により、上記定義されたサイズの矩形領域の指定された位置に、図形等のグラフィックス画像が描画される。更に、文字描画コマンド312により、上記矩形領域の指定された位置に、文字を表す文字画像が追加的に描画される。更に、イメージ描画コマンド313により、上記矩形領域の指定された位置に、自然画や写真画等のイメージ画像が追加的に描画される。描画コマンドを処理する毎にパターン画像が編集され、定義命令に含まれる描画コマンドの各々が実行され最終的なパターン画像ができあがる。このように、複数或いは1つの描画コマンドにより、例えば図2に示すパターン画像が作成される。作成されたパターン画像を示すパターン画像情報は、前述したパターン画像用のメモリ領域に格納される。
【0040】
なお、図2では、複数の描画コマンドの画像領域が重ならないパターン画像が図示されているが、複数の描画コマンドの画像領域が重なる場合には、後から描画される画像が優先され、先に描画された画像の画素値が後に描画される画像の画素値に置き換えられる。また、定義命令においては、パターン画像の描画コマンドにより画像が描画される画像領域以外の非画像領域の画素値については指定がない(データがない)。
【0041】
次に、パターン塗りつぶし命令の処理に移行する。パターン塗りつぶし命令に含まれるカレントパターン設定コマンド33により指定された(上記定義命令により定義済みの)パターン画像が、塗りつぶし範囲に配列するパターン画像(カレントパターン)に設定される(図2(3)も参照。)。
【0042】
次に、塗りつぶしコマンド34により、上記メモリ領域に格納されたパターン画像情報が読み出されて繰り返し用いられ、出力画像における指定された塗りつぶし範囲にパターン画像が配列されて敷き詰められる。該塗りつぶし命令の実行によりパターン画像が配列された出力画像を示す出力画像情報は、メモリ12Bに確保された出力画像情報用の記憶領域(ページバッファ)に、画素毎に画素値を有するラスタ形式で格納される(図2(4)も参照。)。図2に擬似的に示した塗りつぶしコマンド34では、塗りつぶし範囲の始点座標(50,50)と、塗りつぶし範囲の幅150画素、及び高さ200画素が指定されている。従って、該塗りつぶしコマンド34により、該始点の座標(50,50)を左上の座標として幅150画素、高さ200画素の矩形の塗りつぶし範囲に、上記パターン画像が配列されることになる。
【0043】
図3(A)に示すように、パターン画像を塗りつぶし範囲に配列する際には、パターン画像において、塗りつぶし範囲の始点の座標(x_start, y_start)に対応する座標(ptn_x, ptn_y)を求め、図3(B)に示すように、該座標(ptn_x, ptn_y)をパターン画像の描画を開始する開始点として塗りつぶし範囲に敷き詰める。従って、塗りつぶし命令で指定された座標によっては、図2,図3に示すように、塗りつぶし範囲に対して、パターン画像がパターン画像の始点から配列されない場合もある。
【0044】
また、PDLデータに、上記パターン画像によるパターン塗りつぶし命令以外に他の描画命令が含まれている場合もある。その場合には、パターン塗りつぶし命令より先に記述された描画命令により描画された画像に対して上書きするようにパターン塗りつぶし命令が実行される。
【0045】
一方、パターン定義において上記描画コマンドにより画像が描画される画像領域以外の非画像領域は、画素値のデータがない領域である。従って、PDLデータにおいて、図4(A)に示すように、該パターン画像によるパターン塗りつぶし命令より先に何らかの画像を描画する命令が記述されていた場合には、該命令により先に描画された画像の描画領域とパターン画像の非画像領域とが重なる領域においては、図4(B)に示すように、該先に描画された画像の画素値は、パターン画像の画素値により上書きされずにそのままページバッファに保持される。従って、パターン画像の非画像領域は、先に描画された画像(背景)が透過される状態となる。
【0046】
なお、上記で説明した定義命令やパターン塗りつぶし命令を構成するコマンドは一例であって、PDLデータにおける定義命令やパターン塗りつぶし命令の記述は特に限定されない。
【0047】
ところで、本実施の形態において、パターン画像情報及び後述するマスク情報をメモリ12Bに格納する際のデータ形式は2種類ある。1つは前述したラスタ形式である。
【0048】
図5(A)に示すように、カラーのパターン画像情報をラスタ形式で表す場合には、ブラック(K)色、イエロー(Y)色、マゼンタ(M)色、シアン(C)色の各々の画素値(パターン画像においては色値ともいう)が画素毎に保持される。本実施の形態では、上記KYMC各色の各々を1バイトの値で表すようにしているため、カラーの色値を表すには1画素につき4バイト必要となる。
【0049】
従って、図5(B)に示すように、幅がwidth、高さがheightのカラーのパターン画像情報をラスタ形式で表してメモリ12Bに格納するときのメモリ使用量は、4×width×height(バイト)となる。
【0050】
白黒のパターン画像情報をラスタ形式で表す場合には、ブラックの色値が画素毎に保持されるため、1画素につき1バイト必要となる。従って、図5(B)に示すように、幅がwidth、高さがheightの白黒のパターン画像情報をラスタ形式で表してメモリ12Bに格納するときのメモリ使用量は、width×height(バイト)となる。
【0051】
なお、ラスタ形式のパターン画像情報における画像領域の画素値は定義命令の定義に従った画素値とされるが、非画像領域の各画素の色値は、何らかの値であればよく、特に限定されない。これはパターン塗りつぶし命令の実行の際にマスク情報によりマスク処理(すなわち画像領域の色値が抽出されて使用)され、非画像領域の各画素の値は塗りつぶし範囲の塗りつぶしには使用されないためである。
【0052】
また、パターン画像を示すパターン画像情報をメモリ12Bに格納する際に取り得るもう1つのデータ形式は、エッジリスト形式である。エッジリスト形式は、ライン毎(本実施の形態ではスキャンライン毎)に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータで画像を表現するものである。
【0053】
図6(A)は、X−Y座標系のY座標値が0のスキャンラインに対応するエッジリストの一例を模式的に示した図である。図6(A)に示すように、エッジリストを構成するエッジデータは、色値colorと、該色値colorの画素が連続する区間の始点startと、該色値colorの画素が連続する区間の終点endと、次のエッジデータの格納先を示すアドレスnextとを有する。次のエッジデータが存在しなければ、アドレスnextにはNULLが格納される。このように、本実施の形態では、エッジリスト形式は、次のエッジデータへのアドレスnextによって、スキャンライン毎のエッジデータの各々が連結されるリスト構造とされている。エッジデータが連結されてなるデータ群をエッジリストと呼ぶ。もちろん、画像によっては、1つのエッジデータにより構成されるエッジリストもある。
【0054】
図7(A)は、図7(B)に示す6画素×6画素のパターン画像をエッジリスト形式で表したときのパターン画像情報を模式的に示す図である。エッジリスト形式のパターン画像情報は、各スキャンライン毎のエッジデータと、各スキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルとにより構成される。
【0055】
図8(A)に示すように、本実施の形態において、エッジデータに含まれる色値colorは、カラーの場合には、上述した4色の色値を並べて表された4バイトの値で表され、始点start及び終点endは、各々2バイトの値で表され、アドレスnextは4バイトの値で表されるため、1つのエッジデータにつき12バイト必要となる。また、本実施の形態において、先頭アドレステーブルの各アドレスは4バイトの値で表される。
【0056】
従って、図8(B)に示すように、幅がwidth、高さがheightのカラーのパターン画像情報をエッジリスト形式で表してメモリ12Bに格納するときのメモリ使用量は、height×4+12×エッジ数(バイト)となる。ここで、エッジ数とは、エッジデータの数をいう。
【0057】
また、白黒のパターン画像情報をエッジリスト形式で表す場合には、色値colorは1バイトでよいため、図8(B)に示すように、幅がwidth、高さがheightの白黒のパターン画像情報をエッジリスト形式で表してメモリ12Bに格納するときのメモリ使用量は、height×4+9×エッジ数(バイト)となる。
【0058】
なお、パターン画像情報をエッジリスト形式で表す場合には、パターン画像の画像領域のエッジデータは作成されるが、非画像領域についてはエッジデータは作成されない。従って、塗りつぶし命令を実行するにあたり、パターン画像情報から画像領域の各画素の色値を抽出するためのマスク情報は必要ないが、パターン画像情報をラスタ形式で表す場合には、非画像領域の画素も含めて画素毎の画素値を保持するため、パターン画像情報から画像領域の各画素の色値を抽出するには、マスク情報が必要となる(図2も参照。)。マスク情報により、図4を用いて説明したように、パターン画像情報から画像領域の画素の画素値が抽出されて、ページバッファに書き込まれる。
【0059】
マスク情報も、パターン画像情報と同様に、ラスタ形式及びエッジリスト形式のいずれかのデータ形式で表される。マスク情報の場合には、各画素の画素値は、色を示す値ではないため、以下では、マスク情報の各画素の画素値を、パターン画像の色値と区別するため、マスク値という。ラスタ形式でマスク情報を作成する場合には、非画像領域の各画素のマスク値を0にし画像領域の各画素のマスク値を1にしてマスク情報を作成する。このようにマスク値は0又は1となるため、本実施の形態ではラスタ形式のマスク情報を1画素1ビットで表すものとする。従って、図5(B)に示すように、幅がwidth、高さがheightのパターン画像に対するマスク情報をラスタ形式で表してメモリ12Bに格納するときのメモリ使用量は、width×height/8(バイト)となる。なお、マスク値は上記0,1に限定されるものではなく、画像領域と非画像領域とが異なるマスク値となっていればよく、例えば、塗りつぶし命令の実行の際にマスク値0の領域の画素値を抽出するように構成する場合には、前記非画像領域の各画素のマスク値を1にし前記画像領域の各画素のマスク値を0にしてもよい。
【0060】
また、マスク情報をエッジリスト形式で表す場合には、上記図6(A)で示したエッジデータの色値colorの代わりに、図6(B)に示すように、マスク値maskを用い、該マスク値maskを1にして、スキャンライン毎の画像領域の区間を示すマスク情報を作成する。マスク値0の領域はエッジデータは作成されない。ここでは、エッジデータに含まれるマスク値maskは、1バイトで足りるため、図8(B)に示すように、幅がwidth、高さがheightのパターン画像に対するマスク情報をエッジリスト形式で表してメモリ12Bに格納するときのメモリ使用量は、height×4+9×エッジ数(バイト)となる。なお、マスク値maskは少なくとも1ビットあればよいため、マスク値maskを1ビットで表現してもよい仕様となっている場合には、メモリ使用量は、height×4+9×エッジ数/8(バイト)となるが、本実施の形態では、マスク情報のエッジデータのマスク値maskは1バイト要するものとする。エッジリスト形式においても、マスク値は1に限定されず、予め定められた特定の値とすればよい。
【0061】
なお、本実施の形態では、上述したように、始点start、終点end、画素値(色値color又はマスク値mask)、及び次のエッジデータへのアドレスnextにより構成されているものとして説明するが、エッジリストの形式は上記に限定されるものではない。例えば、1つのエッジデータが、始点start、該始点からの(同一の画素値の画素が連続する区間の)長さlength、画素値(色値color又はマスク値mask)及び次のエッジデータへのアドレスnextにより構成されていてもよい。また、上記の始点start、終点end、画素値color、アドレスnextのそれぞれのサイズ(バイト数)は、一例であって、これらに限定されるものではない。
【0062】
このように、ラスタ形式とエッジリスト形式とでは、表現方法が異なり、データサイズも異なるため、本実施の形態では、パターン画像に応じて、メモリ12Bにパターン画像情報を格納する際にラスタ形式で格納するか、エッジリスト形式で格納するかを判断して該判断結果に応じたデータ形式でパターン画像情報を格納するものとする。また、マスク情報についても、ラスタ形式で格納するか、エッジリスト形式で格納するかを判断して該判断結果に応じた形式でマスク情報を格納する。
【0063】
なお、以下では、定義命令により作成される情報をパターン情報という。具体的には、パターン画像情報がラスタ形式でメモリ領域に格納された場合には、マスク情報も作成されるため、パターン画像情報及びマスク情報からなる情報がパターン情報となる。また、パターン画像情報がエッジリスト形式でメモリ領域に格納された場合には、マスク情報は作成されないため、パターン画像情報そのものがパターン情報となる。
【0064】
ここで、より具体的な例を挙げて本実施の形態の作用について説明する。
【0065】
図9に示すパターン画像により塗りつぶし範囲を塗りつぶす場合を例に挙げる。図10は、図9に示すパターン画像を定義するための定義命令の疑似コードである。図2に示す疑似コードとは異なるが、描画情報に記述される各命令のコードは、解釈可能な形態であればよく、描画情報を構成する各命令をここで例示した疑似コードに限定するものではない。
【0066】
図10(1)に示すパターン属性定義コマンド(パターン属性定義文と言ってもよい)により、図9(1)に示すように、パターン画像の名称を示すパターン名:PTN1、パターン画像の高さ(pnt_height):6画素、及びパターン画像の幅(pnt_width):6画素、が定義されている。ここでは、パターン画像の始点の座標は(0,0)であるものとして省略されている。
【0067】
図10(2)に示す描画コマンドにより、図9(2)に示すように、マゼンタ色の3画素×3画素の矩形図形が描画開始位置(0,0)から描画される。図10(3)に示す描画コマンドにより、図9(3)に示すように、シアン色の3画素×3画素の矩形図形が描画開始位置(3,0)から描画される。図10(4)に示す描画コマンドにより、図9(4)に示すように、黒色の3画素×3画素の矩形図形が描画開始位置(3,3)から描画される。
【0068】
なお、図9(5)に示す座標(3,3)を左上の座標とする3画素×3画素の矩形領域は、色値が指定されていない(データがない)非画像領域となる。
【0069】
図11は、図9に示すパターン画像をエッジリスト形式で表したパターン画像情報を模式的に示した図である。図11に示すように、各スキャンライン毎に同一の色値の画素が連続する区間及び該色値を含むエッジデータがリスト構造で連結されている。パターン画像情報がエッジリスト形式の場合には、マスク情報が不要なため、パターン情報=パターン画像情報となる。以下、このようにエッジリスト形式のパターン画像情報からなるパターン情報をエッジリスト形式のパターン情報と呼称する。
【0070】
図12は、図9に示すパターン画像をラスタ形式で表したパターン画像情報及びラスタ形式で表したマスク情報を模式的に示した図である。以下、このようにパターン画像情報及びマスク情報の双方がラスタ形式である場合のパターン情報をラスタ形式のパターン情報と呼称する。
【0071】
図13は、図9に示すパターン画像をラスタ形式で表したパターン画像情報及びエッジリスト形式で表したマスク情報を模式的に示した図である。以下、このようにパターン画像情報がラスタ形式であって、マスク情報がエッジリスト形式である場合のパターン情報をハイブリッド形式のパターン情報と呼称する。
【0072】
パターン画像情報及びマスク情報をエッジリスト形式で保持するかラスタ形式で保持するかは、例えば、図14に示すように、これら情報をエッジリスト形式で表したときのエッジ数と閾値とを比較し、エッジ数が閾値を超えればラスタ形式で保持し、エッジ数が閾値以下であればエッジリスト形式で保持するようにしてもよい。
【0073】
図14は、前述した画像処理プログラムで行われる画像処理の一部としての、描画情報に含まれる定義命令を解釈して実行するパターン定義処理の一例を示す概略的なフローチャートである。ステップ50で、例えば前述のパターン属性定義コマンドにより定義されたパターン画像のサイズに基づいて、パターン画像用のメモリ領域を確保し、最初は何ら画像が定義されていないパターン情報をエッジリスト形式で作成して初期化する。具体的には、ここでは、パターン画像のスキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルを作成してメモリ12Bのパターン画像情報用のメモリ領域に格納する。そして、各アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数は、パターン属性定義コマンドで定義されたパターン画像の高さを示す画素数に等しい。
【0074】
次に、ステップ52で、PDLデータから上記パターン属性定義コマンドに組み合わされて記述されている描画コマンドを読み込む。
【0075】
ステップ54では、この段階でメモリ領域に記憶されているパターン情報のデータ形式を判断する。初期状態においては前述したようにパターン情報はエッジリスト形式で作成されるため、PDLデータの定義命令に描画コマンドが複数ある場合において、最初の描画コマンドが読み込まれた段階では、パターン情報はエッジリスト形式であると判断される。
【0076】
ステップ54において、パターン情報がエッジリスト形式であると判断された場合には、ステップ56で、読み込んだ描画コマンドに基づいて、エッジリスト形式でパターン画像を描画してパターン画像情報(パターン情報)を作成し、パターン画像用のメモリ領域に格納する。なお、先に読み込まれた描画コマンドにより既にメモリ領域に記憶されているエッジリストがある場合には、該エッジリストに追加挿入する。
【0077】
ステップ58では、上記描画コマンドにより作成したパターン画像情報のエッジデータの数(エッジ数)が閾値TH1を超えるか否かを判断する。ステップ58で否定判断した場合には、ステップ72に進む。
【0078】
また、ステップ58で、肯定判断された場合には、ステップ60で、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に格納する。描画コマンドにより描画される画像が色数が多く複雑な画像である場合には、エッジデータの数が多くなり、エッジリスト形式よりラスタ形式で表す方がメモリ使用量が抑制されることがある。そこで、ステップ58で閾値TH1と実際に作成されたエッジデータの数とを比較して、比較結果に応じたデータ形式で格納するようにしている。パターン画像をラスタ形式に変換して格納した後は、エッジリスト形式のパターン画像情報は削除される。
【0079】
続いて、ステップ62で、現在メモリ領域に格納されているパターン画像に対するマスク情報をエッジリスト形式で作成してマスク情報のメモリ領域に格納する。そして、ステップ72に進む。
【0080】
ステップ72では、描画コマンドが終了したか否か(次の描画コマンドがPDLデータに記述されているか否か)を判断する。ステップ72で肯定判断された場合には、パターン定義処理は終了する。そして、この時点でメモリ領域に格納されているパターン情報が、後述するパターン塗りつぶし命令で用いられるパターン情報となる。また、ステップ72で否定判断した場合には、ステップ52に戻り、次の描画コマンドを読み込んで、ステップ54に進む。
【0081】
また、ステップ54で、メモリ領域に記憶されているパターン情報のデータ形式の種類が、ハイブリッド形式(パターン画像情報がラスタ形式で、マスク情報がエッジリスト形式)であると判断した場合には、ステップ64に進む。
【0082】
ステップ64では、読み込んだ描画コマンドに基づいて、ラスタ形式で画像を描画して、既に作成されメモリ領域に記憶されているパターン画像情報を編集する。更に、編集後のパターン画像情報に対応するようにエッジリスト形式のマスク情報を編集する。
【0083】
ステップ66は、マスク情報のエッジ数が閾値HT2を超えるか否かを判断する。ステップ66で肯定判断した場合には、ステップ68で、マスク情報をエッジリスト形式からラスタ形式に変換してメモリ領域に格納する。パターン画像と同様に、マスク情報も、エッジデータの数が多くなるとメモリ使用量が増え、エッジリスト形式よりラスタ形式で表す方がメモリ使用量が抑制される場合がある。そこで、ここでは閾値TH2とエッジデータの数とを比較して、比較結果に応じたデータ形式で格納するようにしている。
【0084】
ステップ66で否定判断した場合、及びステップ68の処理後は、ステップ72に進む。ステップ72の処理は上述したとおりである。
【0085】
また、ステップ54で、メモリ領域に記憶されているパターン情報のデータ形式の種類が、ラスタ形式(パターン画像情報及びマスク情報が共にラスタ形式)であると判断した場合には、ステップ70に進む。
【0086】
ステップ70では、読み込んだ描画コマンドに基づいて、ラスタ形式で画像を描画して、既に作成されメモリ領域に記憶されているパターン画像情報を編集する。更に、編集後のパターン画像情報に対応するようにラスタ形式のマスク情報を編集する。
【0087】
ステップ70の後は、ステップ72に進む。ステップ72の処理は上述したとおりである。
【0088】
なお、ステップ62においてマスク情報を新規に作成した時点でエッジ数が閾値TH2を超えている場合もあることから、ステップ66及びステップ68の処理を、ステップ64の後だけでなくステップ62の後にも実施してもよい。
【0089】
また、ステップ60(パターン画像情報のラスタ形式への変換)の後にステップ62(マスク情報の生成)を実行する例について説明したが、ステップ60の処理及びステップ62の処理を並行して行ってもよい。例えば、スキャンライン毎に、パターン画像情報のラスタ形式への変換処理及びマスク情報の生成を順次行なう等である。
【0090】
塗りつぶし命令は、PDLデータにおいて定義命令の後に記述されている。図15(A)は、パターン塗りつぶし命令の疑似コードである。図2に示す疑似コードとは異なるが、描画情報に記述される各命令のコードは、解釈可能な形態であればよく、描画情報を構成する各命令をここで例示した疑似コードに限定するものではない。
【0091】
図15(A)の(1)に示す色塗りつぶし命令の塗りつぶしコマンドでは、fillRectに続く(0,0,21,18)により、始点(0,0)から、幅21画素、高さ18画素の矩形領域が塗りつぶし範囲として指定されており、更にwith color(0,255,0,0)により、塗りつぶし範囲を塗りつぶす色(イエロー色)が指定されている。該コマンドを実行することで、出力画像は、図15(B)の(1)に示すように、該指定された塗りつぶし範囲がイエロー色で塗りつぶされる(ページバッファの塗りつぶし範囲にイエロー色の色値が書き込まれる)。
【0092】
続いて、図15(A)の(2)に示すパターン塗りつぶし命令の塗りつぶしコマンドでは、fillRectに続く(3,3,15,12)により、始点(3,3)から、幅15画素、高さ12画素の矩形領域が塗りつぶし範囲として指定されており、更にwith pattern(PTN1)により、塗りつぶし範囲を塗りつぶすパターン画像のパターン名PTN1が指定されている。該コマンドを実行することで、メモリ領域から上記定義命令により定義されたパターン情報を読み出して用い、図15(B)の(2)に示すように、イエロー色の矩形領域の塗りつぶし範囲上にパターン画像が配列され、パターン画像の画像領域の色値がページバッファに上書きされる。なお、前述したように、パターン画像PTN1にはデータなしの領域である非画像領域が含まれているため、該非画像領域は先の塗りつぶしコマンドにより描画された背景のイエロー色が維持される。
【0093】
上記では簡便なフローチャート及び模式図等によりPDLデータに基づく画像処理について説明したが、以下では、より詳細なフローチャートを用いてPDLデータの処理について具体的に説明する。以下で説明する各処理は、装置制御部12の記憶部12Cに記憶されている画像処理プログラムをCPU12Aが実行することにより実行されるものである。
【0094】
図16は、PDLデータ処理のメインルーチンのフローチャートを示す図である。
【0095】
ステップ100では、メモリ12Bに、出力画像情報を格納するためのページバッファを作成(確保)する。
【0096】
ステップ102では、パターン管理テーブルを作成してメモリ12B内に記憶する。パターン管理テーブルは、定義命令により定義されるパターン画像を管理するためのテーブルである。図17にパターン管理テーブルの一例を示す。図17に例示したパターン管理テーブルには、パターン名(name)、パターン画像の高さ(ptn_height)、パターン画像の幅(ptn_width)、パターン画像についてのパターン情報のデータ形式(type)、パターン情報の記憶領域のアドレスを示す(address)の各々の項目が、対応付けられて記憶される。なお、パターン情報のデータ形式(type)の項目には、前述したように、ラスタ形式raster(パターン画像情報及びマスク情報がラスタ形式)、ハイブリッド形式hybrid(パターン画像情報がラスタ形式でマスク情報がエッジリスト形式)、エッジリスト形式edgelist(パターン画像情報がエッジリスト形式。マスク情報はない)の3つのデータ形式がある。
【0097】
パターン情報の記憶領域のアドレス(address)の項目には、パターン情報がラスタ形式及びハイブリッド形式の場合には、パターン画像情報及びマスク情報の各々の記憶領域のアドレスが登録され、パターン情報がエッジリスト形式の場合には、パターン画像情報の記憶領域のアドレスが登録される。
【0098】
なお、ステップ102において、パターン管理テーブルを作成した時点では、パターン画像は未定義であるため、パターン管理テーブルには、パターン画像に関する情報が何も記憶されていない状態となっている。
【0099】
ステップ104では、PDLデータから命令を1つ読み込む。ステップ106では、読み込んだ命令の種類を判断する。
【0100】
読み込んだ命令が、パターン画像を定義する定義命令である場合には、ステップ108に進み、パターン定義処理を実行する(詳細は後述)。
【0101】
読み込んだ命令が、定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶすパターン塗りつぶし命令である場合には、ステップ110に進み、パターン塗りつぶし処理を実行する(詳細は後述)。
【0102】
読み込んだ命令が、中間画像データを作成することなく直接ページバッファに描画する描画命令(この描画命令を通常描画命令という)であった場合には、ステップ112で、該描画命令に基づいてページバッファに描画する処理を行なう。なお、前述の色塗りつぶし命令は、通常描画命令に含まれるが、パターン塗りつぶし命令は通常描画命令に含まれない。
【0103】
読み込んだ命令が、ページ出力命令である場合には、ステップ114に進み、ページバッファに格納されている出力画像情報を出力先に出力する。該出力後はページバッファを初期化する。このページ出力命令により、定義命令、パターン塗りつぶし命令、及び通常描画命令等の各命令でページバッファに書き込まれた出力画像情報が出力される。なお、出力画像情報の出力先は、画像形成部16としてもよいが、画像形成部16に出力する前に、何らかの画像処理を行なう場合には、別途設けた画像処理部(不図示)を出力先として、該画像処理部で画像処理を行なわせるようにしてもよい。或いは装置制御部12が画像処理プログラムを実行することにより画像処理を行ない、その後、画像形成部16に出力するようにしてもよい。また、出力画像情報をすぐに印刷せずに、一端、何らかのバッファに蓄積しておく場合には、該バッファを出力先としてもよい。
【0104】
ステップ108、110、112、及び114のいずれかが終了した後は、ステップ116に進み、PDLデータが終了したか(PDLデータに記述された全ての命令の読み込み及び実行が終了したか)否かを判断する。ステップ116で否定判断した場合には、ステップ104に戻り、次の命令を読み込む。ステップ116で肯定判断した場合には、本PDL処理のルーチンが終了する。
【0105】
次に、ステップ108のパターン定義処理について詳細に説明する。
【0106】
図18は、パターン定義処理の流れを示すフローチャートである。
【0107】
ステップ150では、定義命令に含まれるパターン属性情報を読み取り取得する。例えば、前述したパターン属性定義コマンドにより指定されたパターン属性情報を取得する。ここで取得されるパターン属性情報には、パターン画像のパターン名の情報と、パターン画像の幅を示す情報と、パターン画像の高さを示す情報とが含まれる。なお、ここでは、パターン画像の幅及び高さはいずれも画素数で表されているものとする。
【0108】
ステップ152では、パターン画像のパターン情報をエッジリスト形式で作成して初期化する。これは、先に図14を用いて説明したステップ50と同様に、パターン画像用のメモリ領域(以下、メモリ領域PA1と呼称する)を確保し、該メモリ領域PA1に何ら画像が定義されていないパターン情報をエッジリスト形式で作成して初期化する。すなわち、パターン画像のスキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルを作成してメモリ12Bのパターン画像情報用のメモリ領域PA1に記憶する。そして、各アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数(スキャンラインの本数)は、上記取得したパターン属性情報のパターン画像の高さを示す画素数に等しい。
【0109】
更に、ステップ152では、上記取得したパターン属性情報のパターン画像の幅の値をptn_widthにセットし、パターン画像の高さの値をptn_heightにセットし、エッジリスト形式を示す「edgelist」をtypeにセットする。
【0110】
ステップ154では、定義命令に含まれる描画コマンドを読み込む。
【0111】
ステップ156では、typeの値がedgelistであるか否かを判断する。後述するステップ162でtypeが変更されるまでは、typeの値はedgelistである(すなわち、パターン画像情報はエッジリスト形式で記憶されている)ため、ステップ156では肯定判断されるが、ステップ162でtypeの値が変更された後は否定判断される。
【0112】
ステップ156で肯定判断した場合には、ステップ158に進み、エッジリスト形式のパターン画像に対する描画処理を行なう。この描画処理では、描画コマンドに従って、パターン画像用のメモリ領域にエッジリスト形式で画像を展開(描画)するが、当該定義命令において当該描画コマンドの前に先に別の描画コマンドが実行されていた場合には、該先に実行された描画コマンドにより描画されたエッジリスト形式のパターン画像に対して、当該描画コマンドの画像領域の画像が上書きされるようにパターン画像用のメモリ領域に格納されたエッジリスト形式のパターン画像情報を編集する。本処理の詳細は後述する。
【0113】
ステップ160では、パターン画像情報のエッジデータの数が予め定められた閾値TH1を超えたか否かを判断する。ステップ160において、肯定判断した場合には、ステップ162に進み、エッジリスト形式のパターン画像情報をラスタ形式に変換する処理を行なう。なお、ステップ162では、合わせてマスク情報をエッジリスト形式で作成し、マスク情報用のメモリ領域に格納する処理も行われる。更に、パターン情報のtypeの値が、ハイブリッド形式を示すhybridに変更される。なお、マスク情報は、マスク情報のエッジデータの数が閾値TH2を超えた場合には、エッジリスト形式からラスタ形式に変更される。この場合には、パターン情報のtypeの値が、ラスタ形式を示すrasterに変更される。ステップ162の処理の詳細は後述する。ステップ162の後は、ステップ166に進む。
【0114】
一方、ステップ160において、否定判断した場合には、ステップ162をスキップしてステップ166に進む。
【0115】
ステップ166では、定義命令に含まれる描画コマンドを全て処理したか否かを判断する。ステップ166で否定判断した場合には、ステップ154に戻り、次の描画コマンドを読み込む。
【0116】
ステップ156で否定判断した場合には、当該定義命令において当該描画コマンドの実行前に別の描画コマンドの実行によりメモリ領域に書き込まれたパターン画像情報が、ラスタ形式であることを示している。そこで、ステップ164に進み、該ラスタ形式のパターン画像情報に対する描画処理を行なう。この描画処理では、該ラスタ形式のパターン画像情報に対して、当該描画コマンドにより描画される画像領域の各画素の色値を上書きするようにパターン画像情報を編集する。また、マスク情報もパターン画像情報に応じて編集される。また、エッジリスト形式のマスク情報は、マスク情報のエッジデータの数が閾値TH2を超えた場合に、エッジリスト形式からラスタ形式に変更される。マスク情報がラスタ形式に変更された場合には、typeの値はラスタ形式を示すrasterに変更される。ステップ164の処理の詳細は後述する。
【0117】
続いて、ステップ166に進み、上記と同様に定義命令に含まれる描画コマンドを全て処理したか否かを判断する。ステップ166で否定判断した場合には、ステップ154に戻り、次の描画コマンドを読み込む。
【0118】
また、ステップ166で、肯定判断した場合には、ステップ168で、定義命令により定義されたパターン画像をパターン管理テーブルに登録する。具体的には、上記取得したパターン属性情報に含まれるパターン名をパターン管理テーブルのnameに記憶し、該パターン名に対応付けて、パターン管理テーブルのptn_widthの項目に、パターン画像の幅を示すptn_widthの値を記憶し、パターン管理テーブルのptn_heightの項目に、パターン画像の高さを示すptn_heightの値を記憶する。そして、パターン管理テーブルのtypeの項目には、typeに現時点でセットされている値を記憶する。更にパターン管理テーブルのaddressの項目には、当該定義命令により作成されたパターン情報が記憶されている記憶先(メモリ領域)を示すアドレスが記憶される。
【0119】
次に、上記ステップ158のエッジリスト形式のパターン画像に対する描画処理について詳細に説明する。
【0120】
図19は、エッジリスト形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【0121】
ステップ180では、読み込んだ描画コマンドの種類を判断する。描画コマンドがイメージ描画コマンドであれば、ステップ182で、イメージ描画コマンドのエッジリスト形式描画処理を実行し、描画コマンドがグラフィックス描画コマンドであれば、ステップ184で、グラフィックス描画コマンドのエッジリスト形式描画処理を実行し、描画コマンドが文字描画コマンドであれば、ステップ186で、文字描画コマンドのエッジリスト形式描画処理を実行する。
【0122】
図20は、ステップ182で行われるイメージ描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【0123】
ステップ200では、イメージ描画コマンドにより指定された、イメージ画像のパターン画像における描画開始位置の情報を取得して、(x_offset、 y_offset)にセットすると共に、該イメージ画像の幅・高さの情報を取得して、(width, height)にセットする。描画開始位置(x_offset、 y_offset)は、上記取得したパターン属性情報が示すサイズの矩形領域にイメージ画像を描画するときのイメージ画像の左上の基準点となる位置であり、パターン画像の始点を基準点とした座標値となる。また、幅width及び高さheightは、各々画素数で表されている。(x_offset、 y_offset)から(x_offset+width、 y_offset+height)までの領域が、当該イメージ描画コマンドにより画像が描画される画像領域となる。
【0124】
ステップ202では、yに0をセットする。
【0125】
ステップ204では、描画するイメージ画像を示す画像データからエッジの切り出しを行なうここで、エッジとは、同一の画素値の画素が連続する区間の始点及び終点をいう。なお、ここでは、イメージ画像がカラーの場合について説明するが、イメージ画像が白黒の場合には、黒色の画素が連続する区間の始点及び終点がエッジとされる。
【0126】
図21は、ステップ204で行われるエッジの切り出し処理の流れを示すフローチャートである。
【0127】
ステップ230では、イメージ画像の矩形領域の左上を原点(0,0)としたときのY座標値がyのスキャンライン上(以下、単にスキャンラインyという)で、着目する画素(以下、着目画素)のX軸上の位置を示す座標値xを0として、描画するイメージ画像を表す画像データから座標(x,y)に位置する着目画素の色値を抽出し、refcolorにセットする。更に、start_xに0をセットする。
【0128】
ステップ232では、xに1を加算して着目画素を変更する。
【0129】
ステップ234では、xがwidth未満か否かを判断する。widthは前述したようにイメージ画像の幅を示す画素数である。ステップ234で肯定判断した場合には、colorに、イメージ画像の画像データから座標(x,y)に位置する着目画素の色値を抽出してセットする。
【0130】
ステップ238では、colorの値とrefcolorの値とが等しいか否かを判断する。ステップ238で肯定判断した場合には、着目画素の色値colorは、少なくとも1つ前に着目された画素の色値refcolorに等しい(同一の色値の画素が連続している)ことを示しているため、ステップ232に戻って、xに1を加算して、着目画素を変更する。
【0131】
また、ステップ238で否定判断した場合には、着目画素の色値colorは、1つ前に着目された画素の色値refcolorと異なるため、1つ前に着目された画素(その画素位置は、[x-1, y]となる)が、色値refcolorの画素が連続する区間の終点となる。また、ステップ234で否定判断した場合には、1つ前に着目された画素が、スキャンラインy上の終点となるため、1つ前に着目された画素が、色値refcolorの画素が連続する区間の終点となる。
【0132】
これに基づき、ステップ240において、色値refcolorの画素が連続する区間を示すエッジデータを作成する。なお、前述のstart_xは、イメージ画像の矩形領域の左上を原点(0,0)としたときの、色値refcolorの画素が連続する区間の始点を表すものであるため、start_xの値にx_offsetの値(イメージ画像の描画開始位置のX座標値)を加算したX座標値を、エッジデータの始点startとし、[x-1]の値にx_offsetの値を加算したX座標値を、エッジデータの終点とする。また、次のエッジデータのアドレスnextはNULLとする(図6も参照。)。すなわち、ステップ240において、下記の如くエッジデータが作成される。
【0133】
(始点start、終点end、色値color、次のエッジデータへのアドレスnext)
=(start_x + x_offset、x - 1 + x_offset、refcolor、NULL)
【0134】
続いて、ステップ242では、パターン画像を表したエッジリストにおいて、スキャンライン[y+y_offset]のエッジリストに、ステップ240で作成したエッジデータを追加する。
【0135】
図22は、エッジリストへのエッジデータ追加処理の流れを示すフローチャートである。
【0136】
ステップ280では、着目スキャンライン(ここではスキャンライン[y+y_offset])のエッジリストが空か否か、すなわちエッジデータが1つもないか否かを判断する。以下、着目スキャンラインのエッジリストを着目エッジリストという。ステップ280で肯定判断した場合には、上記作成したエッジデータが該着目エッジリストの先頭のエッジデータであるため、ステップ282に進み、先頭アドレステーブルにおいて、上記作成したエッジデータを記憶した記憶領域のアドレスを、該着目エッジリストの先頭アドレスとして先頭アドレステーブルに格納する。
【0137】
一方、パターン画像を定義する定義命令に複数の描画コマンドが含まれている場合には、先に処理された描画コマンドにより、既に着目スキャンラインにエッジデータが作成され、エッジリストとして連結されている場合がある。この場合には、上記ステップ280で否定判断される。ステップ280で否定判断した場合には、ステップ284に進み、エッジ挿入処理を実行する。エッジ挿入処理では、先に作成されたエッジリストに対して、新たに生成したエッジデータを挿入する。図23は、エッジ挿入処理の流れを示すフローチャートである。
【0138】
ステップ300では、新たに生成したエッジデータ(挿入するエッジデータ)をedgeAで表し、着目エッジリストの先頭のエッジデータをedgeBで表すものとする。そして、図24(A)に示すように、edgeAの始点startの値を、edgeA.startにセットし、edgeAの終点endの値を、edgeA.endにセットし、edgeAの色値colorの値を、edgeA.colorにセットし、edgeAの次のアドレスnextの値(=NULL)を、edgeA.nextにセットする。また、edgeBの始点startの値を、edgeB.startにセットし、edgeBの終点endの値を、edgeB.endにセットし、edgeBの色値colorの値を、edgeB.colorにセットし、edgeBの次のアドレスnextの値を、edgeB.nextにセットする。
【0139】
ステップ302では、edgeA.end<edgeB.startか否かを判断する。edgeA.endがedgeB.startより小さければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(1)に示す位置関係となる。この位置関係にはedgeAとedgeBとが隣接している場合も含まれる。なお、図24(B)では、X軸方向の位置関係が把握しやすいように、Y軸方向の位置をずらしてedgeA及びedgeBを図示しているが、edgeA及びedgeBは同じスキャンライン上のエッジデータであることに注意されたい。
【0140】
従って、ステップ302で肯定判断した場合には、ステップ304で、edgeBの区間を変更せずに、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前のedgeBが、先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。edgeA挿入前のedgeBが、先頭エッジデータではなかった場合には、edgeAの挿入前にedgeBの1つ前に連結されていたエッジデータのアドレスnextの値を、edgeAの記憶領域のアドレスに書き換える。
【0141】
なお、ここでは、図示を省略したが、ステップ302で肯定判断され、edgeAとedgeBとが隣接する位置関係にある場合おいて、edgeA.colorの値とedgeB.colorの値とが等しいときには、後述するステップ310と同様に合成処理される。
【0142】
また、ステップ302で、否定判断した場合には、ステップ306に進む。ステップ306では、edgeA.start>edgeB.endか否かを判断する。edgeA.startがedgeB.endより大きければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(2)に示す位置関係となる。この位置関係にはedgeAとedgeBとが隣接している場合も含まれる。この場合には、ステップ306で肯定判断し、ステップ320に進む。
【0143】
ステップ320では、edgeB.nextがNULLか否か、すなわち、edgeBの次にエッジデータが連結されていないか否かを判断する。ステップ320で肯定判断した場合には、ステップ322に進み、edgeBの区間を変更せずに、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、NULLからedgeAの記憶領域を示すアドレスとなるように変更する。
【0144】
なお、ここでは、図示を省略したが、ステップ320で肯定判断され、edgeAとedgeBとが隣接する位置関係にある場合において、edgeA.colorの値とedgeB.colorの値とが等しいときには、後述するステップ310と同様に合成処理される。
【0145】
さらにまた、ステップ320で、否定判断した場合には、ステップ324に進み、edgeB.nextが示すアドレスに記憶されている次のエッジデータをedgeBとしてステップ302に戻る。
【0146】
また、ステップ306で、否定判断した場合には、ステップ308に進む。ステップ306で否定判断した場合には、着目スキャンラインのX軸上において、edgeAの区間(範囲)の一部或いは全体が、edgeBの区間の一部或いは全体と重なっている関係(図24(B)の(3)〜(6)も参照)であることを示す。そこで、ステップ308では、edgeA.colorの値とedgeB.colorの値とが等しいか否かを判断する。ステップ308で、肯定判断した場合には、ステップ310に進み、edgeAとedgeBとを合成する。具体的には、edgeBの始点startを、edgeA.start及びedgeB.startのいずれか小さい方となるように変更し、edgeBの終点endを、edgeA.end及びedgeB.endのいずれか大きい方となるように変更する。その後、edgeAは削除する。また、逆に、edgeAの始点及び終点を上記と同様に変更して、edgeBをedgeAに置き換え、edgeBを削除するようにしてもよい。
【0147】
また、ステップ308で、否定判断した場合には、ステップ312に進み、edgeBの範囲を、edgeAと重ならないように変更する。色値colorは変更しない。例えば、図24(B)の(3)に示す位置関係であれば、edgeBの始点startをedgeA.end+1に変更する。また、図24(B)の(4)に示す位置関係であれば、edgeBの終点endをedgeA.start-1に変更する。
【0148】
また、図24(B)の(5)に示す位置関係であれば、edgeBを元に、edgeB1とedgeB2の2つのエッジデータを作成する。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をセットする。
【0149】
また、図24(B)の(6)に示す位置関係であれば、edgeBのエッジデータを削除する。なお、edgeBの削除前に該edgeBが先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。また、edgeBの削除前に該edgeBが先頭エッジデータでなかった場合には、edgeBの削除前にedgeBの1つ前に連結されていたエッジデータのアドレスnextを、edgeAの記憶領域のアドレスとなるように変更する。
【0150】
なお、図24(B)の(5)に示すようにedgeBから2つのエッジデータを作成した場合、及び(6)に示すようにedgeBを削除した場合は、下記ステップ314の処理は行わないこととする(図示は省略。)。
【0151】
次に、ステップ314では、edgeA.start<edgeB.startか否かを判断する。ステップ314で肯定判断した場合には、edgeAとedgeBとの位置関係は、図24(B)の(3)の変更後の位置関係にあるため、ステップ316で、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前の先頭エッジデータがedgeBであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスに変更する。
【0152】
また、ステップ314で、否定判断した場合には、edgeAとedgeBとの位置関係は、図24(B)の(4)の変更後の位置関係にあるため、ステップ318で、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、edgeAの記憶領域を示すアドレスに変更する。
【0153】
なお、ここでは、エッジデータedgeAの区間が、先の描画コマンドにより作成された互いに連結する複数のエッジデータの各々の区間の一部又は全体と重複している場合については説明を省略したが、この場合も同様に、該複数のエッジデータの区間の各々とエッジデータedgeAの区間との位置関係に応じて、図24(B)の(3)〜(6)を参照して説明したのと同様に変更或いは削除する。
【0154】
図22のステップ284で、上記エッジ挿入処理が終了した後は、図21のステップ244に進む。
【0155】
ステップ244では、refcolorに、着目画素の色値colorの値をセットする。更に、start_xにxの値をセットする。xは、着目画素のX軸上の位置である。
【0156】
続いて、ステップ246で、xがwidth未満か否かを判断する。ステップ246で肯定判断した場合には、ステップ232に戻り、xに1を加算して、X軸方向の次の画素を着目画素とする。また、ステップ246で否定判断した場合には、イメージ画像の着目スキャンラインのエッジの検出が終了した状態にあるため、エッジ切り出し処理を終了して、図20のステップ206に進む。
【0157】
図20のステップ206では、yに1を加算する。
【0158】
続いて、ステップ208では、yがheight未満か否かを判断する。heightは前述したようにイメージ画像の高さを示す画素数である。ステップ208で肯定判断した場合には、ステップ204に戻り、次のスキャンラインについて、上述したようにエッジ切り出し処理を行なう。また、ステップ208で否定判断した場合には、イメージ画像の各スキャンラインのエッジの検出及びエッジデータの作成が終了した状態にあるため、図20のイメージ描画コマンドのエッジリスト形式描画処理を終了する。
【0159】
次に、ステップ184のグラフィックス描画コマンドのエッジリスト形式描画処理について説明する。図25は、グラフィックス描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【0160】
ステップ340では、グラフィックス描画コマンドにより指定された描画色を取得してg_colorにセットする。例えば、図10に示す定義命令に含まれるグラフィック描画コマンドfillRectに対して、with colorで指定された色が描画色である。
【0161】
ステップ342では、グラフィックス描画コマンドにより指定された描画領域(当該グラフィックス描画コマンドにより画像が描画される画像領域)のY座標の範囲を求める。例えば、図10に示す例では、図10の(2)に示す描画コマンドのfillRectに続く(0,0,3,3)において、最初の2つの数値が、パターン画像におけるグラフィックス画像の描画開始位置であり、それに続く2つの数値が、描画するグラフィックス画像の幅及び高さを示す画素数であることから、グラフィックス描画コマンドの描画領域のY座標の最小値は、描画開始位置のY座標0、Y座標値の最大値は、該描画開始位置Y座標0に高さ3を加算した3となる。そして、このY座標の最小値をy_startにセットし、最大値をy_endにセットする。
【0162】
ステップ344では、yにy_startの値をセットする。
【0163】
ステップ346では、グラフィックス描画コマンドにより描画するグラフィックス画像について、スキャンラインyにおけるスキャン変換処理(画像のエッジを抽出する処理)を行い、スキャンラインyにおけるX軸上の描画範囲x_start、x_endを求める。
【0164】
ステップ348では、エッジデータを作成する。具体的には、下記の如くエッジデータが作成される。
【0165】
(始点start、終点end、色値color、次のエッジデータへのアドレスnext)
=(x_start、x_end、g_color、NULL)
【0166】
ステップ350では、パターン画像を表したエッジリストにおいて、スキャンラインyのエッジリストに、ステップ348で作成したエッジデータを追加する。ステップ350で行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをyとして、図22〜図24を用いて説明したように実行する。
【0167】
ステップ352では、yに1を加算する。
【0168】
ステップ354では、yがy_end以下であるか否かを判断する。ステップ354で肯定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了していない状態であるため、ステップ346に戻り、次のスキャンラインについて上記処理を繰り返す。また、ステップ354で否定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了した状態であるため、本グラフィックス描画コマンドのエッジリスト形式描画処理を終了する。
【0169】
次に、ステップ186の文字描画コマンドのエッジリスト形式描画処理について説明する。図26は、文字描画コマンドのエッジリスト形式描画処理の流れを示すフローチャートである。
【0170】
ステップ370では、文字描画コマンドにより指定された描画色を取得してt_colorにセットする。
【0171】
ステップ372では、文字描画コマンドにおいてパターン画像に配置(描画)するよう指定された文字画像の描画開始位置の情報を取得して、(x_offset, y_offset)にセットする。
【0172】
ステップ374では、文字が黒色及び白色の二値からなるラスタ形式で表された文字ビットマップデータを取得する。文字描画コマンドには、予め定められたコード体系に従った文字コード情報、フォント名文字の大きさを示すポイント数などを含むフォント情報、上記描画色、及び描画開始位置の情報等が指定されている。このうち文字コード情報及びフォント情報等から、描画する文字をビットマップに展開した文字ビットマップデータを取得する。
【0173】
ステップ376では、char_xに0をセットすると共に、char_yに0をセットする。
【0174】
ステップ378では、上記取得した文字ビットマップデータから文字のエッジ抽出を行なう。図27は、文字のエッジ抽出処理の流れを示すフローチャートである。
【0175】
ステップ400では、文字ビットマップデータが表す文字のサイズ(幅及び高さ)の情報を取得して、幅の値をwidthにセットし、高さの値をheightにセットする。なお、幅及び高さは各々画素数で表されているものとする。
【0176】
ステップ402では、edge_xに-1をセットする。
【0177】
ステップ404では、黒座標(黒色画素の座標位置)の検出を行なう。図28は、黒座標の検出処理の流れを示すフローチャートである。
【0178】
ステップ430では、char_yがheight未満か否かを判断する。ステップ430で肯定判断した場合には、ステップ432に進む。ステップ432では、char_xがwidth未満か否かを判断する。ステップ432で肯定判断した場合には、ステップ436に進む。ステップ436では、座標(char_x, char_y)の位置の文字ビットマップデータが黒色か否かを判断する。
【0179】
ステップ436で、肯定判断した場合には、ステップ440に進み、edge_xにchar_xの値をセットし、edge_yにchar_yの値をセットする。そして、ステップ442では、char_xに1を加算した値を、char_xにセットする。
【0180】
また、ステップ436で、否定判断した場合には、ステップ438に進み、X軸方向の次の画素について黒色か白色かを判断するため、char_xに1を加算して、ステップ432に戻る。
【0181】
一方、ステップ432で否定判断した場合には、ステップ434で、char_yに1を加算し、char_xには0をセットしてステップ430に戻る。すなわち、ステップ432でchar_xがwidth以上であると判断した場合には、文字ビットマップデータの矩形領域の左上を原点(0,0)としたときのスキャンラインchar_y上には、黒色画素が存在しないことを示しているため、ステップ434で、着目するスキャンラインを次のスキャンラインに変更して、ステップ430に戻り、該次のスキャンラインの端の画素から黒色画素を探すようにしている。
【0182】
以上の処理により、文字の幅width及び高さheightの矩形領域の左上座標を原点(0,0)とした場合において、スキャンラインedge_y上で黒色画素が連続する区間の始点(エッジの始点)edge_xが検出される。
【0183】
図27において、ステップ404で黒座標の検出が終了した後は、ステップ406で白座標(白色画素の座標位置)の検出を行なう。この白座標の検出処理において、エッジの終点が検出される。図29は、白座標の検出処理の流れを示すフローチャートである。
【0184】
ステップ460では、edge_xが-1であるか否かを判断する。edge_xが-1である場合には、上記黒座標の検出処理において黒座標が検出されていない状態を示している。エッジの始点が検出されて場合には、終点を検出する必要もない。従って、白座標の検出処理を終了する。
【0185】
一方、ステップ460で、否定判断した場合には、ステップ462で、char_xがwidth未満か否かを判断する。ステップ462で、肯定判断した場合には、ステップ464に進む。ステップ464では、座標(char_x, char_y)の位置にある画素の文字ビットマップデータが黒色か否かを判断する。ステップ464で肯定判断した場合には、char_xに1を加算してステップ462に戻る。
【0186】
ステップ464で否定判断した場合には、ステップ468で、edge_x_endに[char_x-1]の値をセットする。すなわち、ステップ464で白色の画素が見つかった場合には(否定判断)、該画素のX座標値の1画素前のX座標値の画素が黒色画素が連続する区間の終点となる。従って、ステップ468において、現在着目している画素のX座標値char_xから1を差し引いて、黒色画素が連続する区間の終点を示す座標を求め、edge_x_endにセットしている。
【0187】
また、ステップ462で、否定判断した場合には、文字ビットマップデータにおいてスキャンラインedge_yにおけるX座標値edge_x以降のX座標値の画素には、白画素が存在しないことを示している。そこで、ステップ470において、edge_x_endに[width-1]の値をセットする。ここで、widthから1を減算しているのは、文字の幅width及び高さheightの矩形領域の左上座標(原点)を(0,0)としているためである。
【0188】
以上の処理により、文字の幅width及び高さheightの矩形領域の左上座標を原点(0,0)とした場合において、スキャンラインedge_y上で黒色画素が連続する区間の終点(エッジの終点)edge_x_endが検出される。
【0189】
図27において、ステップ406の白座標の検出処理の後は、ステップ408に進み、edge_xが-1であるか否かを判断する。edge_xが-1である場合には、上記黒座標の検出処理において黒座標が検出されていない状態を示している。従って、ステップ408で肯定判断した場合には、ステップ412で、エッジ抽出が失敗したと結論する。また、ステップ408で否定判断した場合には、ステップ414で、エッジ抽出が成功したと結論する。
【0190】
図26において、ステップ378の文字のエッジ抽出処理が終了した後は、ステップ380に進む。ステップ380では、エッジ抽出が成功したか否かを判断する。ステップ380で肯定判断した場合には、ステップ382に進み、x_startに[edge_x + x_offset]の値をセットし、x_endに[edge_x_end + x_offset]の値をセットし、yに[edge_y + y_offset]の値をセットする。
【0191】
ステップ384では、エッジデータを作成する。具体的には、下記の如くエッジデータが作成される。
【0192】
(始点start、終点end、色値color、次のエッジデータへのアドレスnext)
=(x_start、x_end、t_color、NULL)
【0193】
ステップ386では、パターン画像を表したエッジリストにおいて、スキャンラインyのエッジリストに、ステップ384で作成したエッジデータを追加する。ステップ384で行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをyとして、図22〜図24を用いて説明したように実行する。
【0194】
ステップ386の後は、ステップ378に戻り、次のエッジの抽出を、上記と同様に行う。ステップ378の処理により、新たなエッジが抽出された場合には、ステップ380で肯定判断されるため、上記ステップ382以降の処理が同様に行われる。また、ステップ378で新たなエッジ抽出されなかった場合には、ステップ380で否定判断され、図26の文字描画コマンドのエッジリスト形式描画処理を終了する。
【0195】
次に、図18のステップ160で肯定判断した後に実行されるステップ162のパターン画像をラスタ形式へ変換する変換処理について詳細に説明する。
【0196】
図30は、パターン画像情報をラスタ形式に変換する変換処理の流れを示すフローチャートである。この変換処理では、パターン画像情報の変換と共にマスク情報の作成も行われる。
【0197】
ステップ500では、ラスタ形式のパターン画像情報を格納するためのパターン画像用のメモリ領域PA2をメモリ12Bに確保する。例えば、カラーの場合には、本実施の形態では、ラスタ形式のパターン画像情報は、1画素4バイト必要となるため、パターン画像の幅×高さ×4バイトのメモリ領域PA2が確保される。
【0198】
ステップ502では、上記確保したパターン画像用のメモリ領域PA2を0でクリアする。すなわち、本実施の形態では、パターン画像情報の全画素の色値が0を示すように初期化される。ここでは、各画素の色値が0となるように初期化したが、0に限定するものではなく、何らかの値であればよい。
【0199】
ステップ504では、マスク情報をエッジリスト形式で作成して初期化する。具体的には、マスク情報用のメモリ領域MA1をメモリ12Bに確保し、マスク情報のスキャンライン毎の先頭のエッジデータへのアドレス(先頭アドレス)を格納する先頭アドレステーブルを作成してメモリ12Bのマスク情報用のメモリ領域MA1に記憶する。そして、各先頭アドレスはNULLにして、先頭アドレステーブルを初期化する。先頭アドレスの数(スキャンラインの本数)は、上記パターン画像の高さを示す画素数に等しい。
【0200】
ステップ506では、yに0をセットする。
【0201】
ステップ508では、メモリ領域PA1に記憶されているエッジリスト形式のパターン画像情報からスキャンラインyのエッジリストの先頭のエッジデータを取得する。
【0202】
ステップ510では、スキャンラインyのエッジリストにエッジデータがあるか否かを判断する。ステップ510がステップ508の直後に実行される場合において、ステップ508での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ510では肯定判断され、ステップ508での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ510では否定判断される。また、ステップ510が後述するステップ516の直後に実行される場合において、ステップ516での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ510で肯定判断され、ステップ516での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ510で否定判断される。
【0203】
ステップ510で肯定判断した場合には、ステップ512で、メモリ領域PA2における、ラスタ形式のパターン画像の、始点(start, y)から終点(end, y)までの範囲の画素の色値(上記初期化により0となっている)を、取得したエッジデータの色値colorの値に変更する(colorの値を書き込む)。ここで、startは取得したエッジデータの始点startの値であり、endは取得したエッジデータの終点endの値である。
【0204】
ステップ512の後は、ステップ514で、マスク情報のエッジデータを作成する。ここでは、上記パターン画像情報から取得したエッジデータの始点startの値、及び終点endの値を、マスク情報のエッジデータの始点startの値及び終点endの値とし、マスク情報のエッジデータのマスク値maskの値を1にし、マスク情報のエッジデータのアドレスnextの値はNULLにして作成する。
【0205】
ステップ516では、マスク情報のスキャンラインyのエッジリストに、上記作成したエッジデータを追加する。エッジデータの追加処理は、図22に示した流れで行うが、マスク情報の場合には、どのエッジデータもマスク値が1であるため、図22のステップ284では、図23に示すエッジ挿入処理ではなく、図31に示すエッジ挿入処理を実行する。
【0206】
図31は、マスク情報のエッジ挿入処理の流れを示すフローチャートである。ステップ540では、新たに生成したエッジデータ(挿入するエッジデータ)をedgeAで表し、着目エッジリストの先頭のエッジデータをedgeBで表すものとする。そして、edgeAの始点startの値を、edgeA.startにセットし、edgeAの終点endの値を、edgeA.endにセットし、edgeAの次のアドレスnextの値(=NULL)を、edgeA.nextにセットする。また、edgeBの始点startの値を、edgeB.startにセットし、edgeBの終点endの値を、edgeB.endにセットし、edgeBの次のアドレスnextの値を、edgeB.nextにセットする。
【0207】
ステップ542では、edgeA.end<edgeB.startか否かを判断する。edgeA.endがedgeB.startより小さければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(1)に示す位置関係となる。従って、ステップ542で肯定判断した場合には、ステップ544で、edgeBの区間を変更せずに、edgeBの前にedgeAが挿入されるように、edgeAの次のエッジデータのアドレスnextを、NULLからedgeBの記憶領域を示すアドレスに変更する。なお、edgeA挿入前のedgeBが、先頭エッジデータであった場合には、先頭アドレステーブルの着目スキャンラインに対応する先頭アドレスを、edgeAの記憶領域のアドレスとなるように変更する。edgeA挿入前のedgeBが、先頭エッジデータではなかった場合には、edgeAの挿入前にedgeBの1つ前に連結されていたエッジデータのアドレスnextの値を、edgeAの記憶領域のアドレスに書き換える。
【0208】
また、ステップ542で、否定判断した場合には、ステップ546に進む。ステップ546では、edgeA.start>edgeB.endか否かを判断する。edgeA.startがedgeB.endより大きければ、edgeAとedgeBとのX軸方向の位置関係は、図24(B)の(2)に示す位置関係となる。この場合には、ステップ546で肯定判断し、ステップ550に進む。
【0209】
ステップ550では、edgeB.nextがNULLか否か、すなわち、edgeBの次のエッジデータが連結されていないか否かを判断する。ステップ550で肯定判断した場合には、ステップ552に進み、edgeBの区間を変更せずに、edgeBの後にedgeAが挿入されるように、edgeBの次のエッジデータのアドレスnextを、NULLからedgeAの記憶領域を示すアドレスとなるように変更する。
【0210】
さらにまた、ステップ550で、否定判断した場合には、ステップ554に進み、edgeB.nextが示すアドレスに記憶されている次のエッジデータをedgeBとしてステップ540に戻る。
【0211】
また、ステップ546で、否定判断した場合には、着目スキャンラインのX軸上において、edgeAの区間(範囲)の一部或いは全体が、edgeBの区間の一部或いは全体に重なっている関係であることを示す。そこで、ステップ548に進み、edgeAとedgeBとを合成する。具体的には、edgeBの始点startを、edgeA.start及びedgeB.startのいずれか小さい方となるように変更し、edgeBの終点endにを、edgeA.end及びedgeB.endのいずれか大きい方となるように変更する。その後、edgeAは削除する。また、逆に、edgeAの始点及び終点を上記と同様に変更して、edgeBをedgeAに置き換え、edgeBを削除するようにしてもよい。
【0212】
エッジ挿入処理の後、ステップ518では、スキャンラインyのエッジリストから次のエッジデータを取得する。具体的には、上記取得したエッジデータのアドレスnextに格納されているアドレスからエッジデータを取得する。ただし、アドレスnextの値がNULLの場合には取得失敗となる。ステップ518の後は、ステップ510に戻る。
【0213】
ステップ510において、否定判断した場合には、ステップ520に進み、yに1を加算する。そして、ステップ522において、yがパターン画像の高さptn_height未満か否かを判断する。ステップ522で肯定判断した場合には、パターン画像の全てのスキャンラインについてラスタ形式への変換が終了していないことを示しているため、次のスキャンラインのラスタ形式への変換を行なうために、ステップ510に戻る。
【0214】
また、ステップ522で否定判断した場合には、パターン画像の全てのスキャンラインについてラスタ形式への変換が終了したことを示しているため、ステップ524に進み、エッジリスト形式のパターン画像情報をメモリ領域PA1から削除し、メモリ領域PA1を解放する。
【0215】
ステップ526では、typeの値を「edgelist」から「hybrid」に変更する。
【0216】
次に、図18のステップ164で実行されるラスタ形式のパターン画像に対する描画処理について詳細に説明する。図32は、ラスタ形式のパターン画像に対する描画処理の流れを示すフローチャートである。
【0217】
ステップ600では、読み込んだ描画コマンドの種類を判断する。描画コマンドがイメージ描画コマンドであれば、ステップ602で、イメージ描画コマンドのラスタ形式描画処理を実行し、描画コマンドがグラフィックス描画コマンドであれば、ステップ604で、グラフィックス描画コマンドのラスタ形式描画処理を実行し、描画コマンドが文字描画コマンドであれば、ステップ606で、文字描画コマンドのラスタ形式描画処理を実行する。
【0218】
図33は、ステップ602で行われるイメージ描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【0219】
ステップ620では、イメージ描画コマンドにより指定された、イメージ画像のパターン画像における描画開始位置の情報を取得して、(x_offset、 y_offset)にセットすると共に、該イメージ画像の幅・高さの情報を取得して、(width, height)にセットする。
【0220】
ステップ622では、[x_offset+width]及び[ptn_width-1]のいずれか小さい方の値を、x_endにセットする。ここで、ptn_widthは、前述したように、パターン画像の幅を示す値である。
【0221】
更に、ステップ622では、[y_offset+width]及び[ptn_height-1]のいずれか小さい方の値を、y_endにセットする。ここで、ptn_heightは、前述したように、パターン画像の高さを示す値である。
【0222】
ステップ624では、yに0をセットする。
【0223】
ステップ626では、[y + y_offset]が、y_endより小さいか否か判断する。パターン画像の矩形領域外の部分に対する描画は不要であり、Y軸方向に不要な描画を行なわないためにステップ626が設けられている。ステップ626で、肯定判断した場合には、ステップ628に進む。
【0224】
ステップ628では、イメージ画像の矩形領域の左上を原点(0,0)としたときのイメージ画像の座標(0, y)から座標(x_end - x_offset, y)までの領域の各画素の色値を、パターン画像の矩形領域の左上を原点(0,0)としたときのパターン画像の座標(x_offset, y + y_offset)から座標(x_end, y + y_offset)までの領域の各画素の色値として、パターン画像用のメモリPA2に書き込む(コピーする)。
【0225】
ステップ630では、スキャンライン[y + y_offset]におけるx_offsetからx_endまでの範囲がマスク範囲(パターン画像における画像領域)となるように、マスク情報へのマスク範囲の追加処理を行なう。パターン画像用のメモリ領域PA2に新たにイメージ画像が描画されると、描画した画像及び描画位置によってはパターン画像における画像領域が変化することがある。そこで、マスク情報へのマスク範囲を追加する追加処理を行なうようにしている。詳細は後述する。
【0226】
ステップ630の後は、ステップ632に進み、yに1を加算して、ステップ626に戻り、次のスキャンラインについて、上記と同様に描画処理を行なう。
【0227】
なお、ステップ626で否定判断した場合には、本描画処理を終了する。これにより、Y軸方向においてパターン画像の矩形領域外の範囲に対する描画はなされない。
【0228】
次に、上記ステップ630で行われるマスク情報へのマスク範囲の追加処理について説明する。図34は、マスク情報へのマスク範囲の追加処理の流れを示すフローチャートである。
【0229】
ステップ650では、add_yに、追加するマスク範囲のY座標をセットする。本マスク範囲の追加処理ルーチンが図33のイメージ描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、add_yには、[y + y_offset]の値がセットされる。本マスク範囲の追加処理ルーチンが、後述するグラフィックス描画コマンドのラスタ形式描画処理ルーチン及び文字描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、add_yには、yの値がセットされる。
【0230】
また、ステップ650では、start_xに、追加する範囲のX座標の始点をセットする。本マスク範囲の追加処理ルーチンが図33のイメージ描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、start_xには、x_offsetの値がセットされる。本マスク範囲の追加処理ルーチンが、後述するグラフィックス描画コマンドのラスタ形式描画処理ルーチン及び文字描画コマンドのラスタ形式描画処理ルーチンから呼び出された場合には、start_xには、x_startの値がセットされる。
【0231】
また、ステップ650では、end_xに、追加する範囲のX座標の終点をセットする。ここでは、end_xには、x_endの値がセットされる。
【0232】
ステップ652では、typeの値がhybridか否かを判断する。ステップ652で肯定判断した場合には、マスク情報はメモリ領域MA1にエッジリスト形式で保持されているため、ステップ656で、マスク情報のエッジデータを作成する。ここでは、上記start_xの値をエッジデータの始点startの値とし、上記end_xの値をエッジデータの終点endの値とし、エッジデータのマスク値maskの値を1にし、アドレスnextの値はNULLにして作成する。
【0233】
ステップ658では、マスク情報のスキャンラインadd_yのエッジリストに、上記作成したエッジデータを追加する。ここで行われる、エッジリストへのエッジデータの追加処理は、着目スキャンラインをadd_yとして、図22及び図31を用いて説明したように実行する。
【0234】
ステップ660では、マスク情報のエッジデータ数が予め定められた閾値TH2を超えたか否かを判断する。ステップ660において、肯定判断した場合には、ステップ662に進み、エッジリスト形式のマスク情報をラスタ形式に変換する処理を行なう。ステップ662の処理は後述する。ステップ662の後は、ステップ664において、typeの値を、ラスタ形式を示すrasterに変更し、マスク範囲追加処理を終了する。。
【0235】
一方、ステップ660において、否定判断した場合には、ステップ662、664をスキップしてマスク範囲追加処理を終了する。
【0236】
一方、ステップ652で、否定判断した場合には、マスク情報はラスタ形式で保存されているため、マスク情報における座標(start_x, add_y)から座標(end_x, add_y)までの範囲の各画素のマスク値を1にする。すなわち、ラスタ形式のマスク情報では、1画素が1ビットで表されるため、該ビットを1にする。そして、マスク範囲追加処理を終了する。
【0237】
次に、上記ステップ662で行われるマスク情報をラスタ形式に変換する処理について説明する。図35は、マスク情報をラスタ形式に変換する処理の流れを示すフローチャートである。
【0238】
ステップ700では、ラスタ形式のマスク情報を格納するためのマスク情報用のメモリ領域MA2をメモリ12Bに確保する。本実施の形態では、ラスタ形式のマスク情報は、1画素1ビット必要となるため、パターン画像の幅×高さ×1ビットのメモリ領域MA2が確保される。
【0239】
ステップ702では、上記確保したマスク情報用のメモリ領域MA2を0でクリアする。すなわち、本実施の形態では、マスク情報の全画素のマスク値が0を示すように初期化される。
【0240】
ステップ704では、mask_yに0をセットする。
【0241】
ステップ706では、メモリ領域MA1に記憶されているエッジリスト形式のマスク情報からスキャンラインmask_yのエッジリストの先頭のエッジデータを取得する。
【0242】
ステップ708では、スキャンラインmask_yにエッジデータがあるか否かを判断する。ステップ708がステップ706の直後に実行される場合において、ステップ706での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ708で肯定判断され、ステップ706での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ708で否定判断される。また、ステップ708が後述するステップ712の直後に実行される場合において、ステップ712での取得が成功した(取得すべきエッジデータがあった)ときには、ステップ708で肯定判断され、ステップ712での取得が失敗した(取得すべきエッジデータがなかった)ときには、ステップ708で否定判断される。
【0243】
ステップ708で肯定判断した場合には、ステップ710で、マスク情報用のメモリ領域MA2における、ラスタ形式のマスク情報の、始点(start, mask_y)から終点(end, mask_y)までの範囲の画素に対するマスク値(上記初期化により0となっている)を、1に変更する(上書きする)。ここで、startは取得したエッジデータの始点startの値であり、endは取得したエッジデータの終点endの値である。
【0244】
ステップ712では、スキャンラインmask_yのエッジリストから次のエッジデータを取得する。具体的には、上記取得したエッジデータのアドレスnextに格納されているアドレスからエッジデータを取得する。ただし、アドレスnextの値がNULLの場合には取得失敗となる。ステップ712の後は、ステップ708に戻る。
【0245】
ステップ708において、否定判断した場合には、ステップ714に進み、mask_yに1を加算する。そして、ステップ716において、mask_yがパターン画像の高さptn_height未満か否かを判断する。ステップ716で肯定判断した場合には、全てのスキャンラインについてマスク情報のラスタ形式への変換が終了していないことを示しているため、次のスキャンラインの変換を行なうために、ステップ706に戻る。
【0246】
また、ステップ716で否定判断した場合には、全てのスキャンラインについてマスク情報のラスタ形式への変換が終了したことを示しているため、ステップ718に進み、エッジリスト形式のマスク情報をメモリ領域MA1から削除し、メモリ領域MA1を解放する。
【0247】
次に、ステップ604のグラフィックス描画コマンドのラスタ形式描画処理について説明する。図36は、グラフィックス描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【0248】
ステップ740では、グラフィックス描画コマンドにより指定された描画色を取得してg_colorにセットする。例えば、図10に示す定義命令に含まれるグラフィック描画コマンドfillRectに対して、with colorで指定された色が描画色である。
【0249】
ステップ742では、グラフィックス描画コマンドにより指定された描画領域のY座標の範囲を求める。例えば、図10に示す例では、図10の(2)に示す描画コマンドのfillRectに続く(0,0,3,3)において、最初の2つの数値が、パターン画像におけるグラフィックス画像の描画開始位置であり、それに続く2つの数値が、描画するグラフィックス画像の幅及び高さを示す画素数であることから、グラフィックス描画コマンドの描画領域のY座標の最小値は、描画開始位置のY座標0、Y座標値の最大値は、該描画開始位置Y座標0に高さ3を加算した3となる。そして、このY座標の最小値をy_startにセットし、最大値をy_endにセットする。
【0250】
ステップ744では、yにy_startの値をセットする。
【0251】
ステップ746では、グラフィックス描画コマンドにより描画するグラフィックス画像について、スキャンラインyにおけるスキャン変換処理(画像のエッジを抽出する処理)を行い、スキャンラインyにおけるX軸上の描画範囲x_start、x_endを求める。
【0252】
ステップ748では、ラスタ形式のパターン画像の、始点(x_start, y)から終点(x_end, y)までの範囲の画素の色値を、描画色g_colorの値に変更する(g_colorの値を書き込む)。
【0253】
ステップ750では、スキャンラインyにおけるx_startからx_endまでの範囲がマスク範囲となるように、マスク情報へのマスク範囲の追加処理を行なう。このマスク範囲の追加処理は、上記で図34を用いて説明したように実行する。
【0254】
ステップ752では、yに1を加算する。
【0255】
ステップ752では、yがy_end以下であるか否かを判断する。ステップ752で肯定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了していない状態であるため、ステップ746に戻り、次のスキャンラインについて上記処理を繰り返す。また、ステップ752で否定判断した場合には、グラフィックス画像が描画される描画範囲の全てのスキャンラインについての処理が終了した状態であるため、本グラフィックス描画コマンドのラスタ形式描画処理を終了する。
【0256】
次に、ステップ606の文字描画コマンドのラスタ形式描画処理について説明する。図37は、文字描画コマンドのラスタ形式描画処理の流れを示すフローチャートである。
【0257】
ステップ770では、文字描画コマンドにより指定された描画色を取得してt_colorにセットする。
【0258】
ステップ772では、文字描画コマンドにおいてパターン画像に配置(描画)するよう指定された文字画像の描画開始位置の情報を取得して、(x_offset, y_offset)にセットする。
【0259】
ステップ774では、文字ビットマップデータを取得する。
【0260】
ステップ776では、char_xに0をセットすると共に、char_yに0をセットする。
【0261】
ステップ778では、上記取得した文字ビットマップデータから文字のエッジ抽出を行なう。具体的には、上記で図27を用いて説明したように実行する。
【0262】
ステップ778の文字のエッジ抽出処理が終了した後は、ステップ780に進む。ステップ780では、エッジ抽出が成功したか否かを判断する。ステップ780で肯定判断した場合には、ステップ782に進み、x_startに[edge_x + x_offset]の値をセットし、x_endに[edge_x_end + x_offset]の値をセットし、yに[edge_y + y_offset]の値をセットする。
【0263】
ステップ784では、ラスタ形式のパターン画像の、始点(x_start, y)から終点(x_end, y)までの範囲の画素の色値を、描画色t_colorの値に変更する(t_colorの値を書き込む)。
【0264】
ステップ786では、スキャンラインyにおけるx_startからx_endまでの範囲がマスク範囲となるように、マスク情報へのマスク範囲の追加処理を行なう。具体的には、上記で図34を用いて説明したように実行する。
【0265】
ステップ786の後は、ステップ778に戻り、次のエッジの抽出を、上記と同様に行う。ステップ778の処理により、新たなエッジが抽出された場合には、ステップ780で肯定判断されるため、上記ステップ782以降の処理が同様に行われる。また、ステップ778で新たなエッジ抽出されなかった場合には、ステップ780で否定判断され、図37の文字描画コマンドのラスタ形式描画処理を終了する。
【0266】
次に、図16のステップ110のパターン塗りつぶし処理について詳細に説明する。
【0267】
図38は、パターン塗りつぶし処理の流れを示すフローチャートである。
【0268】
ステップ800では、使用するパターン画像に関する情報(幅ptn_width、高さptn_height、データ形式type、及びアドレスaddress)を、パターン画像のパターン名に基づいてパターン管理テーブルから取得する。
【0269】
ステップ802では、パターン塗りつぶし命令に含まれる塗りつぶしコマンドにより指定されている塗りつぶし範囲のY座標の範囲の最小値y_start、及び最大値y_endを求め(図3(B)も参照。)、該y_startの値をyにセットする。
【0270】
ステップ804では、スキャンラインyにおけるX軸方向の塗りつぶし範囲の最小値x_start、及び最大値x_endを求め(図3(B)も参照。)、該x_startの値をxにセットする。
【0271】
ステップ806では、塗りつぶし範囲の開始点(x, y)に対応するパターン画像の開始点(ptn_x, ptn_y)を求める(図3(A)も参照。)。更に、ptn_x_lenに、[ptn_width - ptn_x]及び[x_end - ptn_x]のいずれか小さい方の値をセットする。
【0272】
ステップ808では、x_nextに、[x_ + ptn_x_len]の値をセットする。x_nextは、塗りつぶし範囲の開始点にパターン画像の開始点を合わせてパターン画像を1つ配置して、ページバッファにパターン画像の色値を書き込んだ後の、次の描画開始点のX座標値である。
【0273】
ステップ810では、パターン情報のtypeを判断する。上記パターン管理テーブルから取得したtypeの値が、rasterであれば、ステップ812に進み、ラスタ形式のパターン塗りつぶし処理を行なう。ラスタ形式パターンの塗りつぶし処理では、ラスタ形式のパターン情報を用いて、ページバッファのスキャンラインyにおけるX座標値xから[x + ptn_x_len-1]までの範囲の描画(塗りつぶし)が行われる。
【0274】
上記パターン管理テーブルから取得したtypeの値が、edgelistであれば、ステップ814に進み、エッジリスト形式パターンの塗りつぶし処理を行なう。エッジリスト形式パターン塗りつぶし処理では、エッジリスト形式のパターン情報を用いて、ページバッファの、スキャンラインyにおけるX座標値xから[x + ptn_x_len -1]までの範囲の描画(塗りつぶし)が行われる。
【0275】
上記パターン管理テーブルから取得したtypeの値が、hybridであれば、ステップ816に進み、ハイブリッド形式パターンの塗りつぶし処理を行なう。ハイブリッド形式パターンの塗りつぶし処理では、ハイブリッド形式のパターン情報を用いて、ページバッファの、スキャンラインyにおけるX座標値xから[x + ptn_x_len -1]までの範囲の描画(塗りつぶし)が行われる。
【0276】
これら各塗りつぶし処理の詳細については後述する。
【0277】
ステップ812,814,及び816のいずれかが終了すると、ステップ818に進み、x_nextがx_end以下か否かを判断する。ステップ818において、否定判断した場合には、ステップ820に進み、xにx_nextの値をセットする。ステップ820の後は、ステップ806に戻り、上記と同様に処理する。
【0278】
すなわち、ステップ806〜ステップ820の処理を繰り返すことで、塗りつぶし範囲のスキャンラインyにおいて、塗りつぶし範囲のX軸方向の開始点をずらしながら、該開始点の各々を書込み位置として、パターン画像のスキャンラインptn_y上の色値を繰り返し複写する(書き込む)ようにしている。
【0279】
一方、ステップ818で、肯定判断した場合には、スキャンラインyにおけるX軸方向の塗りつぶし範囲の最大値x_endまでの塗りつぶし(描画)が終了した状態であるため、ステップ822に進む。ステップ822に進み、yがy_endより小さいか否かを判断する。ステップ822で否定判断した場合には、塗りつぶし範囲のY座標の範囲の最大値y_endまでの塗りつぶしはまだ終了していない状態であるため、ステップ824に進み、次のスキャンラインの塗りつぶしが行われるように、yに1を加算して、ステップ804に戻り、上記と同様に処理する。
【0280】
また、ステップ822で肯定判断した場合には、塗りつぶし範囲のY座標の範囲の最大値y_endまでの塗りつぶしが終了した状態、すなわち、塗りつぶし範囲に対するパターン画像の描画処理が終了した状態であるため、本パターン塗りつぶし処理を終了する。
【0281】
ここで、ステップ812、814、及び816の各塗りつぶし処理について、図39から図42までの各図面を用いて説明する。
【0282】
図39は、塗りつぶし処理を概念的に説明する説明図である。図39(A)は、パターン情報がエッジリスト形式の場合の塗りつぶし処理の説明図であり、図39(B)は、パターン情報がハイブリッド形式の場合の塗りつぶし処理の説明図であり、図39(C)には、パターン情報がラスタ形式の場合の塗りつぶし処理の説明図である。なお、図39では、パターン画像の開始点ptn_xからptn_x+lengthまでの領域が、塗りつぶし範囲に対応するスキャンラインptn_yの領域(タイリング領域)として図示されている。
【0283】
まず最初に、図39(C)及び図40を参照して、ステップ812で行われる、パターン情報がラスタ形式(パターン画像情報及びマスク情報の各々がラスタ形式)の場合の塗りつぶし処理について説明する。
【0284】
図40において、ステップ840では、パターン画像情報から座標(ptn_x, ptn_y)の色値を取得し、ptn_x_colorにセットする。
【0285】
ステップ842では、マスク情報から、座標(ptn_x, ptn_y)のマスク値を取得し、ptn_x_maskにセットする。
【0286】
ステップ844では、ptn_x_maskが1か否かを判断する。ステップ844で肯定判断した場合には、ステップ846に進み、ptn_x_colorの値をページバッファの座標(x,y)に書き込む(図39(C)も参照。)。
【0287】
一方、ステップ844で、否定判断した場合には、座標(ptn_x, ptn_y)のマスク値が、非画像領域の画素であることを示す0であるため、ステップ846の書込みを行なわずに(図39(C)も参照。)、ステップ848に進む。
【0288】
ステップ848では、ptn_x_lenから1を減算し、ptn_xに1を加算し、xに1を加算して、ステップ850に進む。
【0289】
ステップ850では、ptn_x_lenが0より大きいか否かを判断する。ステップ850で、肯定判断した場合には、ステップ840に戻り、次の画素について上記と同様に書込みを行なう。また、ステップ850で否定判断した場合には、本塗りつぶし処理を終了する。
【0290】
次に、図39(A)及び図41を参照して、ステップ814で行われる、パターン情報がエッジリスト形式(パターン画像情報がエッジリスト形式)の場合の塗りつぶし処理について説明する。
【0291】
ステップ870では、パターン画像情報のスキャンラインptn_yのエッジリストの先頭エッジデータptn_edgeを取得する。
【0292】
ステップ872では、エッジデータptn_edgeの始点startの値を、ptn_edge_sxにセットし、ptn_edgeの終点endの値を、ptn_edge_exにセットし、ptn_edgeの色値colorの値を、ptn_edge_colorにセットする。
【0293】
ステップ874では、[ptn_x + ptn_x_len - 1]の値が、取得したエッジデータの始点ptn_edge_sxの値より小さいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲(図39のタイリング領域)の終点が、取得したエッジデータの始点より小さければ、該エッジデータの区間はパターン画像の描画範囲外であることを示している。更に、エッジデータは、X軸方向に順に連結されるため、これ以降のエッジデータも、描画範囲外となる。従って、ここで肯定判断された場合には、本塗りつぶし処理が終了する。なお、図示は省略するが、もともとスキャンラインptn_yにエッジデータが存在せず、ステップ870でエッジデータが取得されなかった場合も、本塗りつぶし処理は終了する。
【0294】
一方、ステップ874で、否定判断した場合には、ステップ876に進む。ステップ876では、パターン画像におけるX軸上の開始点ptn_x(パターン画像のスキャンラインptn_yにおける描画範囲の始点)が、取得したエッジデータの終点ptn_edge_exより大きいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲の始点が、取得したエッジデータの終点より大きければ、取得したエッジデータの区間は、X軸方向においてパターン画像の描画範囲外に存在することとなる。従って、ステップ876で肯定判断された場合には、次のエッジデータを取得するため、ステップ888に進む。ステップ888については後述する。
【0295】
一方、ステップ876で否定判断した場合には、取得したエッジデータの区間の一部又は全体が、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複していることを示している。例えば、図39(A)に示すように、edge1及びedge2の各区間は、パターン画像におけるスキャンラインptn_y上の描画範囲の一部と重複している。このような位置関係の場合には、ステップ876で否定判断されるため、ステップ878に進む。
【0296】
ステップ878では、パターン画像におけるX軸上の開始点ptn_xが、取得したエッジデータの始点ptn_edge_sxより小さいか否かを判断する。ここで肯定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジデータの区間の始点が、例えば図39(A)のedge2に示す位置関係となっていることを示している。そこで、ステップ878で、肯定判断した場合には、ステップ880に進む。
【0297】
ステップ880では、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の値をセットする。そして、ステップ882に進む。
【0298】
一方、ステップ878で否定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジでデータの区間の始点が、例えば図39(A)のedge1に示す位置関係となっていることを示している。従って、ptn_xから描画されるよう、ステップ880をスキップしてステップ882に進む。
【0299】
ステップ882では、draw_lenに、[ptn_x_len]及び[ptn_edge_ex - ptn_edge_sx +1]のいずれか小さい方の値をセットする。draw_lenはX軸上の描画する範囲の長さを示している。
【0300】
ステップ884では、イメージバッファの座標(x, y)から座標(x + draw_len - 1, y)までの範囲へ、ptn_edge_colorの値を書き込む(図39の(A)も参照。)。
【0301】
ステップ886では、xにdraw_lenの値を加算し、ptn_x_lenからdraw_lenの値を減算し、ptn_xに、draw_lenの値を加算する。すなわち、[ptn_x + draw_len - 1]まで描画したので、次の描画の開始点を[ptn_x + draw_len]に移動する。
【0302】
ステップ886の処理後、及びステップ876で肯定判断した場合には、ステップ888に進む。
【0303】
ステップ888では、ptn_x_lenが0より大きく、かつ、次のエッジデータが存在するか否かを判断する。ステップ888で肯定判断した場合には、ステップ890で、エッジデータptn_edgeのアドレスnextに格納されているアドレスが示す記憶領域から、次のエッジデータを取得し、新たに取得したエッジデータを、エッジデータptn_edgeとして用いて、ステップ872に戻り、上記処理を繰り返す。また、ステップ888で否定判断した場合には、パターン画像のスキャンラインptn_yにおける描画が終了したことを示しているため、本塗りつぶし処理が終了する。
【0304】
次に、図39(B)及び図42を参照して、ステップ816で行われる、パターン情報がハイブリッド形式(パターン画像情報がラスタ形式でマスク情報がエッジリスト形式)の場合の塗りつぶし処理について説明する。
【0305】
ステップ900では、マスク情報のスキャンラインptn_yのエッジリストの先頭エッジデータptn_edgeを取得する。
【0306】
ステップ902では、エッジデータptn_edgeの始点startの値を、ptn_edge_sxにセットし、ptn_edgeの終点endの値を、ptn_edge_exにセットする。
【0307】
ステップ904では、[ptn_x + ptn_x_len - 1]の値が、取得したエッジデータの始点ptn_edge_sxの値より小さいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲(図39のタイリング領域)の終点が、取得したエッジデータの始点より小さければ、該エッジデータの区間はパターン画像の描画範囲外であることを示している。更に、エッジデータは、X軸方向に順に連結されるため、これ以降のエッジデータも、描画範囲外となる。従って、ここで肯定判断された場合には、本塗りつぶし処理が終了する。なお、図示は省略するが、もともとスキャンラインptn_yにエッジデータが存在せず、ステップ900でエッジデータが取得されなかった場合も、本塗りつぶし処理は終了する。
【0308】
一方、ステップ904で、否定判断した場合には、ステップ906に進む。ステップ906では、パターン画像におけるX軸上の開始点ptn_xが、取得したエッジデータの終点ptn_edge_exより大きいか否かを判断する。すなわち、パターン画像のスキャンラインptn_yにおける描画範囲(図39のタイリング領域)の始点が、取得したエッジデータの終点より大きければ、取得したエッジデータの区間は、X軸方向においてパターン画像の描画範囲外に存在することとなる。従って、ステップ904で肯定判断された場合には、次のエッジデータを取得するため、ステップ918に進む。ステップ918については後述する。
【0309】
一方、ステップ906で否定判断した場合には、取得したエッジデータの区間の一部又は全体が、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複していることを示している。例えば、図39(B)に示すように、edge3及びedge4の各区間は、パターン画像におけるスキャンラインptn_y上の描画範囲の一部又は全体と重複している。このような位置関係の場合には、ステップ906で否定判断されるため、ステップ908に進む。
【0310】
ステップ908では、パターン画像におけるX軸上の開始点ptn_xが、取得したエッジデータの始点ptn_edge_sxより小さいか否かを判断する。ここで肯定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジデータの区間の始点が、例えば図39(B)のedge4に示す位置関係となっていることを示している。そこで、ステップ908で、肯定判断した場合には、ステップ910に進む。
【0311】
ステップ910では、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の値をセットする。そして、ステップ912に進む。
【0312】
一方、ステップ908で否定判断した場合には、パターン画像におけるスキャンラインptn_y上の開始点ptn_xに対して、取得したエッジでデータの区間の始点が、例えば図39(B)のedge3に示す位置関係となっていることを示している。従って、ptn_xから描画されるよう、ステップ910をスキップしてステップ912に進む。
【0313】
ステップ912では、draw_lenに、[ptn_x_len]及び[ptn_edge_ex - ptn_edge_sx +1]のいずれか小さい方の値をセットする。draw_lenはX軸上の描画する範囲の長さを示している。
【0314】
ステップ914では、パターン画像情報の(ptn_x, ptn_y)から(ptn_x + draw_len -1, ptn_y)までの各画素の色値を、イメージバッファの(x, y)から(x + draw_len - 1, y)までの範囲に書き込む(図39の(B)も参照。)。
【0315】
ステップ916では、xにdraw_lenの値を加算し、ptn_x_lenからdraw_lenの値を減算し、ptn_xに、draw_lenの値を加算する。すなわち、[ptn_x + draw_len - 1]まで描画したので、次の描画の開始点を[ptn_x + draw_len]に移動する。
【0316】
ステップ916の処理後、及びステップ906で肯定判断した場合には、ステップ918に進む。
【0317】
ステップ918では、ptn_x_lenが0より大きく、かつ、次のエッジデータが存在するか否かを判断する。ステップ918で肯定判断した場合には、ステップ920で、エッジデータptn_edgeのアドレスnextに格納されているアドレスが示す記憶領域から、次のエッジデータを取得し、新たに取得したエッジデータを、エッジデータptn_edgeとして用いて、ステップ912に戻り、上記処理を繰り返す。また、ステップ918で否定判断した場合には、パターン画像のスキャンラインptn_yにおける描画が終了したことを示しているため、本塗りつぶし処理が終了する。
【0318】
ここでフローチャートの説明は終了するが、上記ではパターン画像情報をエッジリスト形式からラスタ形式に変換するか否かの判断に用いた閾値TH1、及びマスク情報をエッジリスト形式からラスタ形式に変換するか否かの判断に用いた閾値TH2の具体例については、何ら言及しなかったが、各閾値については以下のように予め設定して用いるようにしてもよい。
【0319】
まず、閾値TH1であるが、例えば、ラスタ形式で表したパターン画像情報のサイズ(データ量)がエッジリスト形式で表したパターン画像情報のサイズ(データ量)より小さくなるように閾値TH1を求めればよい。例えば、以下の(1)式を用いる。
【0320】
width×height×4 < height×4+edge×12 …(1)
【0321】
(1)式において、widthがパターン画像の幅、heightが高さ、edgeがエッジデータの数である。なお、(1)式の左辺は、図5で例示したラスタ形式で表したカラーのパターン画像情報のサイズを示しており、(1)式の右辺は、図8で例示したエッジリスト形式で表したパターン画像情報のサイズを示している。この(1)式を変形すると、下記(2)式が得られる。
【0322】
edge > {(width-1)×height}/3 …(2)
【0323】
(2)式の右辺の値は、ラスタ形式で表したパターン画像情報のサイズ(データ量)とエッジリスト形式で表したパターン画像情報のサイズ(データ量)とが等しくなるときのエッジデータの数であり、これを閾値TH1として用い、(2)式の条件を満たした場合に、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【0324】
次に、閾値TH2であるが、例えば、ラスタ形式で表したマスク情報のサイズ(データ量)がエッジリスト形式で表したマスク情報のサイズ(データ量)より小さくなるように閾値TH2を求めればよい。例えば、以下の(3)式を用いる。
【0325】
width×height/8 < height×4+edgem×9 …(3)
【0326】
(3)式において、widthがパターン画像の幅、heightが高さ、edgemがマスク情報のエッジデータの数である。(3)式を変形すると、下記(4)式が得られる。
【0327】
edgem> {(width - 32)×height} / 72 …(4)
【0328】
(4)式の右辺の値は、ラスタ形式で表したマスク情報のサイズ(データ量)とエッジリスト形式で表したマスク情報のサイズ(データ量)とが等しくなるときのエッジデータの数であり、これを閾値TH2として用い、(4)式の条件を満たした場合に、マスク情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【0329】
このように、(2)式により得られた閾値TH1及び(4)式により得られた閾値TH2を用いることで、パターン画像情報のメモリ使用量及びマスク情報のメモリ使用量の各々を個別に判断して、ラスタ形式及びエッジリスト形式のうち、各々のメモリ使用量が小さくなるほうのデータ形式で記憶されるが、パターン画像情報をラスタ情報に変換する場合には、エッジリスト形式の場合には必要なかったマスク情報が作成されるため、パターン情報全体でメモリ使用量が効率化されるように、閾値TH1を求めてもよい。例えば、下記(5)式を用いる。
【0330】
(width×height×4)+(height×4+edgem×9) < height×4+edge×12 …(5)
【0331】
(5)式の左辺は、図5で例示したラスタ形式で表したパターン画像情報のサイズと、エッジリスト形式で表したマスク情報のサイズとの合計値を示しており、(5)式の右辺は、図8で例示したエッジリスト形式で表したパターン画像情報のサイズを示している。
【0332】
なお、左辺のedgemは、マスク情報をエッジリスト形式で表したときのエッジデータの数である。マスク情報のエッジ数は、パターン画像のエッジ数以上にはならないため、
edgem≦edge
が成立する。図23、図24,及び図31を用いて説明したように、パターン画像の場合には、区間が隣接する或いは区間の少なくとも一部が重なる複数のエッジデータは、同色でないと合成されないが、マスク情報の場合には、エッジデータのマスク値は全て同じ値”1”であるため、色に関わりなく合成されるためである。
【0333】
従って、edgemを、edgemが取り得る最大値であるedgeに置き換えて、(5)式を変形すると、下記(6)式が得られる。
【0334】
edge > width × height × 4 / 3 …(6)
【0335】
(6)式の右辺を閾値TH1として用い、(6)式の条件を満たした場合に、パターン画像情報をエッジリスト形式からラスタ形式に変換してメモリ領域に記憶するようにすればよい。
【0336】
また、上記実施の形態では、パターン定義の際に、パターン画像情報毎、及びマスク情報毎にデータ形式を切替えて記憶する例について説明したが、これに限定されず、例えば、パターン画像情報及びマスク情報ともに、スキャンライン毎にデータ形式を判断して、スキャンライン毎に判断結果に応じたデータ形式でデータを記憶するようにしてもよい。この場合には、閾値TH1に代えて、上記閾値TH1をheightで除算した閾値TH1'をスキャンライン単位の閾値として用いればよい。例えば、下記(7)又は(8)の右辺の値を閾値TH1'とすればよい。
【0337】
edge > (width-1)/3 …(7)
edge > width × 4 / 3 …(8)
【0338】
また、マスク情報の各スキャンラインのデータ形式を判断するための閾値TH2'も、上記閾値TH2をheightで除算して求めればよい。例えば、下記(9)式の右辺の値を閾値TH2'とすればよい。
【0339】
edgem> (width - 32)/ 72 …(9)
【0340】
なお、スキャンライン単位で形式を切替えて記憶する際、上記実施の形態と同様に、定義命令に、描画コマンドが複数含まれる場合、且つ先に実行された描画コマンドにより既に描画されているスキャンラインが存在する場合において、該スキャンラインのデータ形式がラスタ形式で記憶されているときは、上記と同様に、閾値による判断をせずに、そのスキャンラインをラスタ形式で描画する。パターン画像だけでなく、マスク情報も同様である。
【0341】
また、上記では画像処理のプログラムの一例としてのプログラムが装置制御部12の記憶部12Cに記憶される態様を説明したが、これに限定されず、該プログラムを、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
【符号の説明】
【0342】
10 画像形成装置
12 装置制御部
12A CPU
12B メモリ
12C 記憶部
16 画像形成部
【特許請求の範囲】
【請求項1】
パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、
前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段と、
前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段と、
前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、
を備えた画像処理装置。
【請求項2】
前記第2の閾値を、前記マスク情報を前記第1の形式で表したときのデータ量と、前記マスク情報を前記第2の形式で表したときのデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項1記載の画像処理装置。
【請求項3】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項1又は請求項2に記載の画像処理装置。
【請求項4】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量に前記マスク情報を前記第2の形式で表したときのデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定した
請求項1又は請求項2に記載の画像処理装置。
【請求項5】
前記第1の記憶処理手段は、ライン単位で前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるか否かを判断し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるラインについては、前記第1の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超えるラインについては、前記第2の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、
前記第2の記憶処理手段は、ライン単位で前記マスク情報を前記第2の形式で表したときのエッジデータの数が前記第2の閾値以下となるか否かを判断し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値以下となるラインについては、前記第1の形式で表したマスク情報を前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超えるラインについては、前記第2の形式で表した前記マスク情報を前記記憶手段に記憶するように処理する
請求項1に記載の画像処理装置。
【請求項6】
前記第2の閾値を、前記マスク情報を前記第1の形式で表したときの1ライン分データ量と、前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項5記載の画像処理装置。
【請求項7】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項5又は請求項6に記載の画像処理装置。
【請求項8】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量に前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定した
請求項6又は請求項7に記載の画像処理装置。
【請求項9】
請求項1〜請求項8のいずれか1項記載の画像処理装置と、
前記画像処理装置により前記塗りつぶし命令が実行されて生成された出力画像情報に基づいて画像を形成する画像形成手段と、
を備えた画像形成装置。
【請求項10】
コンピュータを、
パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、
前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段、
前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段、及び
前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、
として機能させるためのプログラム。
【請求項1】
パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、
前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段と、
前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段と、
前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、
を備えた画像処理装置。
【請求項2】
前記第2の閾値を、前記マスク情報を前記第1の形式で表したときのデータ量と、前記マスク情報を前記第2の形式で表したときのデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項1記載の画像処理装置。
【請求項3】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項1又は請求項2に記載の画像処理装置。
【請求項4】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの前記パターン画像情報のデータ量と、前記パターン画像を前記第2の形式で表したときの前記パターン画像情報のデータ量に前記マスク情報を前記第2の形式で表したときのデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定した
請求項1又は請求項2に記載の画像処理装置。
【請求項5】
前記第1の記憶処理手段は、ライン単位で前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるか否かを判断し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値以下となるラインについては、前記第1の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超えるラインについては、前記第2の形式で表したパターン画像情報を前記記憶手段に記憶するように処理し、
前記第2の記憶処理手段は、ライン単位で前記マスク情報を前記第2の形式で表したときのエッジデータの数が前記第2の閾値以下となるか否かを判断し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値以下となるラインについては、前記第1の形式で表したマスク情報を前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超えるラインについては、前記第2の形式で表した前記マスク情報を前記記憶手段に記憶するように処理する
請求項1に記載の画像処理装置。
【請求項6】
前記第2の閾値を、前記マスク情報を前記第1の形式で表したときの1ライン分データ量と、前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項5記載の画像処理装置。
【請求項7】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量と、が等しくなるときのエッジデータの数となるように設定した
請求項5又は請求項6に記載の画像処理装置。
【請求項8】
前記第1の閾値を、前記パターン画像を前記第1の形式で表したときの1ライン分のデータ量と、前記パターン画像を前記第2の形式で表したときの1ライン分のデータ量に前記マスク情報を前記第2の形式で表したときの1ライン分のデータ量を加算した加算データ量と、が等しくなるときの前記パターン画像情報のエッジデータの数となるように設定した
請求項6又は請求項7に記載の画像処理装置。
【請求項9】
請求項1〜請求項8のいずれか1項記載の画像処理装置と、
前記画像処理装置により前記塗りつぶし命令が実行されて生成された出力画像情報に基づいて画像を形成する画像形成手段と、
を備えた画像形成装置。
【請求項10】
コンピュータを、
パターン画像を定義するための定義命令と、前記定義命令により定義されたパターン画像を指定された範囲に配列して塗りつぶす塗りつぶし命令とを含む描画情報を解釈して実行する際に、
前記定義命令により定義された前記パターン画像を、ライン毎に同一の画素値の画素が連続する区間及び該画素値を示すエッジデータを有する第1の形式で表したときの前記エッジデータの数が第1の閾値以下となる場合には、前記パターン画像を前記第1の形式で表したパターン画像情報を記憶手段に記憶するように処理し、前記パターン画像を前記第1の形式で表したときのエッジデータの数が前記第1の閾値を超える場合には、画素毎に画素値を有する第2の形式で前記パターン画像を表したパターン画像情報を前記記憶手段に記憶するように処理する第1の記憶処理手段、
前記第1の記憶手段に記憶されるパターン画像情報が前記第2の形式の場合に、前記第2の形式の前記パターン画像情報から前記塗りつぶし命令の塗りつぶしに使用される画素値を抽出するためのマスク情報を作成し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が第2の閾値以下となる場合には、前記マスク情報を前記第1の形式で表して前記記憶手段に記憶するように処理し、前記マスク情報を前記第1の形式で表したときのエッジデータの数が前記第2の閾値を超える場合には、前記マスク情報を前記第2の形式で表して前記記憶手段に記憶するように処理する第2の記憶処理手段、及び
前記記憶したパターン画像情報が前記第1の形式の場合には、該パターン画像情報を用いて前記塗りつぶし命令を実行し、前記記憶したパターン画像情報が前記第2の形式の場合には、該パターン画像情報と共に前記記憶手段に記憶した前記マスク情報も用いて前記塗りつぶし命令を実行する実行手段と、
として機能させるためのプログラム。
【図1】
【図5】
【図6】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図2】
【図3】
【図4】
【図7】
【図5】
【図6】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図2】
【図3】
【図4】
【図7】
【公開番号】特開2013−5105(P2013−5105A)
【公開日】平成25年1月7日(2013.1.7)
【国際特許分類】
【出願番号】特願2011−132415(P2011−132415)
【出願日】平成23年6月14日(2011.6.14)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】
【公開日】平成25年1月7日(2013.1.7)
【国際特許分類】
【出願日】平成23年6月14日(2011.6.14)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】
[ Back to top ]