(57)【特許請求の範囲】
【請求項１】
ページ記述言語で記述された画像情報を入力する入力手段と、
前記入力手段で入力された前記画像情報の中から文字または線画部を抽出する抽出手段と、
前記抽出手段で抽出した文字または線画部を、ラスター展開するための中間的なコードであり、２値の階調を有する第１の中間コードに変換する第１の変換手段と、
前記第１の変換手段により変換された第１の中間コードを、当該第１の中間コードより低い解像度で多値の階調を有する第２の中間コードに変換する第２の変換手段と、
前記第１の変換手段により変換された第１の中間コードまたは前記第２の変換手段により変換された第２の中間コードに基づいて、前記入力手段で入力された前記画像情報の所定の領域毎に、当該領域を占める画像の種類を表すタグ情報を生成するタグ生成手段とを具備し、
前記タグ生成手段が生成する前記タグ情報は、前記第２の中間コードで表された文字または線画部であることを表す情報を少なくとも含むことを特徴とする画像処理装置。
【請求項２】
前記第２の中間コードと、当該第２の中間コードとは異なる中間コードとを合成する合成手段を有することを特徴とする請求項第１項に記載の画像処理装置。
【請求項３】
前記文字または線画部と、前記文字または線画部以外の部分との境界を検知する境界検知手段を有し、
前記タグ生成手段が生成する前記タグ情報は、前記境界検知手段により検知された境界であることを表す情報をさらに含むことを特徴とする請求項第２項に記載の画像処理装置。
【請求項４】
前記文字または線画部と、前記文字または線画部以外の部分との境界を検知する境界検知手段を有し、
前記境界検知手段における検知結果により前記合成手段における合成を異ならせることを特徴とする請求項第２項に記載の画像処理装置。
【請求項５】
前記第２の中間コードをラスター展開した画像と、前記第２の中間コードとは異なる中間コードをラスター展開した画像とを合成する合成手段を有することを特徴とする請求項第１項に記載の画像処理装置。
【請求項６】
前記文字または線画部と、前記文字または線画部以外の部分との境界を検知する境界検知手段を有し、
前記タグ生成手段が生成する前記タグ情報は、前記境界検知手段により検知された境界であることを表す情報をさらに含むことを特徴とする請求項第５項に記載の画像処理装置。
【請求項７】
前記文字または線画部と、前記文字または線画部以外の部分との境界を検知する境界検知手段を有し、
前記境界検知手段における検知結果により前記合成手段における合成を異ならせることを特徴とする請求項第５項に記載の画像処理装置。
【請求項８】
前記タグ情報は、前記第２の中間コードで表された文字または線画部の階調数により内容を異ならせることを特徴とする請求項第１ないし７のいずれかに記載の画像処理養置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、画像処理装置に関し、特に文字・線画を表す文字・線画データをラスター画像データに変換して出力する画像処理装置に関する。
【０００２】
【従来の技術】
近年、パーソナルコンピュータ（以下、ＰＣという）やワークステーション（以下、ＷＳという）で作成された文書をプリントアウトする機会が増えている。特に、オフィスでプリントアウトされる文書は、文字・グラフィクスあるいはスキャナで読み込んだ写真等が同一ページ内にレイアウトされたものが多く、最近では様々な色で彩られたカラー文書もプリントアウトする機会が増えている。また、複数のＰＣやＷＳがネットワークを介してプリンタを共有するシステム構成がとられることも多く、プリンタに対する高速化・高画質化の要求はますます強くなっている。
【０００３】
ところで、ＰＣやＷＳからプリンタへのデータ転送時間を短縮するためと、特性の異なるプリンタでもできるだけ同一の内容でプリントアウトするために、文書を描画コマンドの集合体であるプリント記述言語（以下、ＰＤＬという）で記述してプリンタに転送し、プリンタでＰＤＬを解釈してラスター画像に変換してプリントアウトすることが一般的となっている。しかしながら、現存するプリンタの解像度に合せてＰＤＬをラスター画像に変換してプリントアウトすると、特に文字や線画のエッジにジャギーを生じてしまう。
【０００４】
そこで、上述したジャギーを低減するために、例えば米国特許第４，８４７，６４１号に開示されている技術のように、変換後のラスター画像からジャギーが発生しうる領域をパターンマッチンクによって抽出して補正を施す方法が提案されている。しかしながら、この方法では、例えば明朝体文字のトメやハネのように、補正を施すべきでない領域であっても補正されてしまい、字体の変形を引き起こしてしまう。一方、太さが均一で等間隔かつ平行な直線群が解像度の制限によりラスター画像への変換の際に、太さにばらつきが生じたり、あるいは等間隔でない平行な直線群に変換されるような場合には、上記従来技術では補正できない。
【０００５】
そこで、例えば特開平６−４００７４号公報に開示されている技術のように、一旦ＰＤＬをプリンタの解像度より高い解像度の２値ラスター画像に変換し、該ラスター画像を解像度変換によってプリンタの解像度と同じ解像度の多値ラスター画像に変換して、画素値に応じてドットの大きさを変える方法が提案されている。しかしながら、後者の技術では、一旦ＰＤＬをプリンタの解像度より高い解像度の２値ラスター画像に変換する必要があるため、前者の技術と比較すると多大な記憶領域を要する。そこで、特開平６−１６８３３４号公報に開示されている技術のように、一旦ＰＤＬをプリンタの解像度より高い解像度の２値ラスター画像を表す２値コードデータに変換し、２値コードデータをプリンタの解像度と同じ解像度の多値ラスター画像を表す多値コードデータに変換して、多値コードデータを多値ラスター画像に変換する方法が提案されている。
【０００６】
【発明が解決しようとする課題】
ところで、プリンタでプリントアウトするドキュメントには、文字や線画以外にもグラフィクスや写真等の絵柄が混在することがある。高い画質のプリントアウトを得るためには、文字や線画には解像性が要求され、絵柄には階調性が要求される。したがって、文字や線画には上述した技術のようにジャギーを低減する処理が適用され、絵柄には面積階調処理が適用される。
【０００７】
また、さらに画質を高めるためには、例えばグラフィクスと写真とで面積階調処理の内容を異ならせるといったように、分類をさらに細かくし、その分類毎に適用する処理を変更する手法もある。しかしながら、ラスター画像から文字や線画、あるいはグラフィクスや写真等を完全に分離することは困難である。したがって、従来技術では、文字や線画に面積階調処理が適用されたり、絵柄にジャギーを低減する処理が適用される場合があり、画質向上を図ることが難しいという問題があった。
【０００８】
この発明は上述した事情に鑑みてなされたもので、ページ記述言語で記述された画像情報をラスター画像に変換する際に必要な記憶容量を少なくでき、より高画質のプリントアウトを得ることができる画像処理装置を提供することを目的としている。
【０００９】
【課題を解決するための手段】
上述した問題点を解決するために、請求項１記載の発明では、ページ記述言語で記述された画像情報を入力する入力手段と、前記入力手段で入力された前記画像情報の中から文字または線画部を抽出する抽出手段と、前記抽出手段で抽出した文字または線画部を、ラスター展開するための中間的なコードであり、２値の階調を有する第１の中間コードに変換する第１の変換手段と、前記第１の変換手段により変換された第１の中間コードを、当該第１の中間コードより低い解像度で多値の階調を有する第２の中間コードに変換する第２の変換手段と、前記第１の変換手段により変換された第１の中間コードまたは前記第２の変換手段により変換された第２の中間コードに基づいて、前記入力手段で入力された前記画像情報の所定の領域毎に、当該領域を占める画像の種類を表すタグ情報を生成するタグ生成手段とを具備し、前記タグ生成手段が生成する前記タグ情報は、前記第２の中間コードで表された文字または線画部であることを表す情報を少なくとも含むことを特徴とする。
【００１０】
この発明によれば、ページ記述言語で表され、入力手段から入力された画像情報の中から抽出手段により文字または線画部を抽出し、抽出した文字または線画部を第１の変換手段により２値の階調を有する第１の中間コードに変換し、第１の中間コードを第２の変換手段により上記第１の中間コードより低い解像度で多値の階調を有する第２の中間コードに変換する。また、タグ生成手段により、第１の中間コードまたは第２の中間コードに基づいて、入力された画像情報の所定の領域ごとに当該領域を占める画像の種類を表し、当該第２の中間コードで表された文字または線画部であることを表す情報を少なくとも含むタグ情報を生成する。したがって、ページ記述言語で記述された画像情報をラスター画像に変換する際に必要な記憶容量を少なくすることが可能となるとともに、より高画質のプリントアウトを得ることが可能となる。
【００１１】
【発明の実施の形態】
次に、図面を参照してこの発明の実施形態について説明する。なお、以下において、画像データは各色成分の１画素あたりの階調数は「２５６」であり、末尾に「ｂ」が付加されている数は２進表記、「ｈ」が付加されている数は１６進表記、何も付加されていない数は１０進表記とする。また、以下においては、１つの色成分の処理のみ説明するが、複数色成分の処理については、１つの色成分の処理を色成分の数だけ適用するか、あるいは全ての色成分を同時平行に処理してもよい。
【００１２】
まず、画像データをランレングスコーディングした形式のコードデータについて説明する。コードデータは、ラスター画像をライン単位でランレングスコーディングしたものであり、ある値の画素が主走査方向のある位置からどれだけ連続するかを記述したものである。例えば、画素値「２５５（黒画素）」の画素がライン先頭から１０番目の画素から２０画素連続している場合、「２５５」、「１０」、「２０」の３つの整数値が１組のデータとして記述される。このとき、画素値「０」の画素については記述する必要がないため、ラスター画像に比較するとデータ量を圧縮することができる。また、２値画像を対象とした場合には、画素値についても記述する必要がないため、さらにデータ量を圧縮することができる。一方、ラスター画像での種々の画像処理は、コードデータ間の操作に置き換えられるので、より高速に処理を行うことができる。以下、上述したコードデータをエッジリストと呼ぶこととし、エッジリストの具体例およびエッジリスト間の操作については後述する。
【００１３】
Ａ．実施形態の構成
図１は、本発明の実施形態による画像処理装置の一構成例を示すブロック図である。図において、１１はコマンド分離部、１２は多値文字処理部、１３は２値文字処理部、１４は多値ベクトル処理部、１５は２値ベクトル処理部、１６はグラフィクス処理部、１７はラスターイメージ処理部、１８は合成部である。コマンド分離部１１は、入力端Ａに入力されたＰＤＬを、多値文字描画コマンド、２値文字描画コマンド、多値ベクトル描画コマンド、２値ベクトル描画コマンド、グラフィクス描画コマンド、ラスターイメージ描画コマンドの６種類のコマンドに分類し、各々、多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５、グラフィクス処理部１６、ラスターイメージ描画コマンド１７に供給する。
【００１４】
なお、多値文字描画コマンドおよび２値文字描画コマンドは、ＡＳＣＩＩコード等の文字コードと、書体名・ポイント数・フェース・ウェイト・色等の印字特性を示す情報とからなり、さらに、文字描画を多値または２値のいずれで行うかを示す情報も含む。また、多値ベクトル描画コマンドおよび２値ベクトル描画コマンドは、直線・曲線等の線を表す情報であり、始点・終点・経由点等の座標情報および線幅・線の種類・線の色等の画情報からなり、さらに、ベクトル描画を多値または２値のいずれで行うかを示す情報も含む。また、グラフィクス描画コマンドは、領域を塗り潰す色を表す情報であり、塗り潰す領域の座標情報および塗り潰す色・塗り潰し方法を表す情報を含む。また、ラスターイメージ描画コマンドは、ラスター画像をＰＤＬで表現したものであり、主走査および副走査方向の画素数・解像度・色成分構成等の情報を含む。
【００１５】
多値文字処理部１２は、入力された多値文字描画コマンドを、プリンタ解像度のｎ倍（ｎは２以上の整数）の解像度の２値のエッジリスト（以下、高解像度エッジリストという）に変換した後、該エッジリストをプリンタ解像度と同じ解像度の多値のエッジリスト（以下、多値エッジリストという）に変換して合成部１８に供給する。２値文字処理部１３は、入力された２値文字描画コマンドを、プリンタ解像度と同じ解像度の２値のエッジリスト（以下、２値エッジリストという）に変換し、合成部１８に供給する。多値ベクトル処理部１４は、入力された多値ベクトルコマンドを、高解像度エッジリストに変換した後、該エッジリストを多値エッジリストに変換して合成部１８に供給する。
【００１６】
２値ベクトル処理部１５は、入力されたベクトルコマンドを、２値エッジリストに変換して合成部１８に供給する。グラフィクス処理部１６は、入力されたグラフィクス描画コマンドを、多値エッジリストに変換して合成部１８に供給する。ラスターイメージ処理部１７は、入力されたラスターイメージ描画コマンドを、多値エッジリストに変換して合成部１８に供給する。合成部１８は、多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５、グラフィクス処理部１６、ラスターイメージ処理部１７から供給されるエッジリストを合成するとともに、ラスター画像に変換して出力端Ａに出力する。また、ラスター画像への変換と同時にラスター画像の各画素の分類を示す分類データを生成し、出力端Ｂに出力する。なお、分類データには、エッジリストがどの処理部から出力されたかを示す情報とともに、異なる処理部から出力されたエッジリストがそれぞれ表すラスター画像の境界を示す情報も含まれる。
【００１７】
ここで、図２は、ＰＤＬの一例を示す概念図である。以下、図２に例示するＰＤＬが入力端Ａに入力された場合を例にとってさらに詳細に説明する。なお、図２において、ＴＹＰＥは文字描画コマンド、ＬＩＮＥは直線描画コマンド、ＰＡＩＮＴはグラフィクス描画コマンド、ＲＡＳＴＥＲはラスターイメージ描画コマンドである。また、コマンド名に続いて括弧（）で括られた部分は各コマンドのパラメータ、括弧｛｝で括られた部分はラスターイメージデータである。ＴＹＰＥコマンドの４つのパラメータは、先頭から順に描画開始ｘ座標、描画開始ｙ座標、フォントの種類、ポイント数、描画文字列、描画モードであり、図２の１行目は、文字列「ａｂｃｄｅｆｇ」を座標（ｘ１，ｙ１）を始点として多値モードで、２行目は、２値モードで描画することを意味する。
【００１８】
また、ＬＩＮＥコマンドの６つのパラメータは、先頭から順に描画開始ｘ座標、描画開始ｙ座標、描画終了ｘ座標、描画終了ｙ座標、線幅、描画モードであり、図２の３行目は、座標（ｘ２，ｙ２）から（ｘ３，ｙ３）に１ポイントの太さの直線を多値モードで、４行目は、２値モードで描画することを意味する。次に、図２の５行目は、座標（ｘ４，ｙ４）と座標（ｘ５、ｙ５）とを結ぶ直線を対角線とする矩形領域を、色空間をＲＧＢとして指定色ＲＥＤ（赤色）で塗り潰すことを意味する。また、図２の６行目は、座標（ｘ６，ｙ６）を左上隅として、ｐ画素×ｌラインのラスターイメージを、色空間をＲＧＢとし、主走査方向の解像度ｒｘ、副走査方向の解像度ｒｙで括弧｛｝内のラストイメージデータにしたがって描画することを意味する。なお、上記コマンドおよび各コマンドのパラメータは一例であり、コマンド名、各コマンドのパラメータ内容は、上記内容に限定されない。また、各描画動作に対するコマンドの設定も上記内容に限らず、例えばＴＹＰＥコマンドを２つ以上のコマンドに分割するといったように変更してもよい。
【００１９】
コマンド分離部１１は、多値文字描画コマンドとして図２に示す１行目を多値文字処理部１２へ、２値文字描画コマンドとして２行目を２値文字処理部１３へ、多値ベクトル描画コマンドとして３行目を多値ベクトル処理部１４へ、２値ベクトル描画コマンドとして４行目を２値ベクトル処理部１５へ、グラフィクス描画コマンドとして５行目をグラフィクス処理部１６へ、ラスターイメージ描画コマンドとして６行目をラスターイメージ処理部１７へそれぞれ出力する。
【００２０】
多値文字処理部１２は、多値文字描画コマンドとして入力された１行目のコマンドを解釈し実行する。すなわち、文字列を指定フォントで多値モードで描画する。フォントには、文字をラスター画像データで記述したビットマップフォントと、文字の輪郭を直線・曲線等の線の集合体として線の描画情報（アウトラインデータ）で記述したアウトラインフォントとがあるが、ポイント数・フェース・ウェートに対応した変形処理の容易さと変形処理後のディフェクトの少なさとから、本実施形態ではアウトラインフォントを使用することとする。アウトラインフォントを使用した場合、指定された文字のアウトラインデータが読み出され、該アウトラインデータに基づいて仮想座標平面に文字の輪郭が描画され、該輪郭で囲まれた閉領域が塗り潰されて仮想座標平面上で理想的な文字画像を得る。そして、上記仮想座標平面上の文字の輪郭（以下、単に文字輪郭という）に基づいて多値エッジリストを生成し、合成部１８に出力する。
【００２１】
２値文字処理部１３は、２値文字描画コマンドとして入力された２行目のコマンドを解釈し実行する。すなわち、文字列を指定フォントで２値モードで描画する。ここでは、多値文字処理部１２と同様にして仮想座標平面上で理想的な文字画像を得る。そして、文字輪郭に基づいて２値エッジリストを生成し、合成部１８に出力する。多値ベクトル処理部１４は、多値ベクトル描画コマンドとして入力された３行目のコマンドを解釈し実行する。すなわち、ベクトルを多値モードで描画する。まず、仮想座標平面上で指定された２つの座標点を端点とする直線が描画され、該直線から指定された線幅の半分の距維にある領域が塗り潰されて仮想座標平面上で理想的なベクトル画像を得る。そして、上記仮想座標平面上のベクトルの輪郭（以下、単にベクトル輪郭）に基づいて多値エッジリストを生成し、合成部１８に出力する。
【００２２】
次に、２値ベクトル処理部１５は、２値ベクトル描画コマンドとして入力された４行目のコマンドを解釈し実行する。すなわち、ベクトルを２値モードで描画する。ここでは、多値ベクトル処理部１４と同様にして仮想座標平面上で理想的なベクトル画像を得る。そして、上記仮想座標平面上のベクトルの輪郭に基づいて２値エッジリストを生成し、合成部１８に出力する。グラフィクス処理部１６は、グラフィクス描画コマンドとして入力された５行目のコマンドを解釈し実行する。すなわち、指定された領域を指定された色で塗り潰す。まず、仮想座標平面上で塗り潰し領域が設定され、該領域を指定された色で塗り潰す。そして、上記仮想平面上の塗り潰された領域に基づいて２値エッジリストを生成し、合成部１８に出力する。なお、塗り潰しの際に指定された色空間をプリンタに適合した色空間に変換するのは当然であり、さらにその際にプリンタの色再現特性に応じて色の近似処理を行う。この色空間変換処理および色近似処理の内容はどのようなものでも構わない。
【００２３】
次に、ラスターイメージ処理部１７は、ラスターイメージ描画コマンドとして入力された６行目のコマンドを解釈し実行する。すなわち、指定されたラスターイメージデータに従って指定された領域に指定された色空間および指定された解像度で描画する。まず、仮想座標平面上に主走査および副走査方向の画素数および解像度に応じた描画領域が設定され、該領域に指定された色空間で指定されたラスターイメージデータに従ってラスターイメージが描画される。なお、塗り潰しの際に指定された色空間をプリンタに適合した色空間に変換するのは当然であり、さらにその際にプリンタの色再現特性に応じて色の近似処理を行う。また、指定された解像度とプリンタの解像度とが一致しない場合には、解像度変換処理を行う。この色空間変換処理、色近似処理および解像度変換処理の内容はどのようなものでも構わない。
【００２４】
合成部１８は、多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５、グラフィクス処理部１６およびラスターイメージ処理部１７から供給されるエッジリストを１つのエッジリストに合成し、ラスター画像に変換して出力端Ａから外部に出力する。また、合成部１８に入力される各エッジリストがどの処理部から出力されたかを示すデータを画素毎に作成して上記ラスター画像と同期をとりながら出力端Ｂから外部に出力する。合成部１８での合成処理は、エッジリスト間の操作によって実現される。
【００２５】
Ｂ．実施形態の動作
次に、上述した実施形態の動作について説明する。まず、多値文字処理部１２での仮想座標平面上の文字の輪郭からの多値エッジリスト生成について詳述する。図３は、エッジリスト生成過程を説明するためのフローチャートである。まず、描画する文字に対応したアウトラインデータをロードし（ステップＳ１００）、高解像度エッジリストを作成し（ステップＳ１０１）、該エッジリストを多値エッジリストに変換する（ステップＳ１０２）。ＴＹＰＥコマンドで指定された文字列中の全ての文字の描画が終了すると、合成部１８に多値エッジリストを出力して処理を終え、描画してない文字がある場合には、ステップＳ１００以降を繰り返す。なお、以下においてはｎ＝２として説明する。
【００２６】
図４は、図３におけるステップＳ１０１での処理の詳細を示すフローチャートである。なお、図４において、ｉは主走査方向の処理位置、ｊは副走査方向の処理位置を示すインデックスであり、ｓｔは主走査方向の塗り潰し開始位置（以下、塗潰開始位置という）、ｒｌは塗り潰す画素の連続数（以下、塗潰画素連続数という）を格納する変数であり、ｆｌはその値が「１」のときは塗り潰し開始位置ｓｔおよび連続数ｒｌに有効データが残っており「０」のときは残っていないことを示すフラグである。また、ＰおよびＬは、１つの文字を描画する領域の主走査方向および副走査方向の画素数である。なお、記号＝は右辺の数または演算結果を左辺の変数に格納することを、記号＝＝は両辺が等しいことを意味する。
【００２７】
まず、処理に必要な変数を初期化する（ステップＳ２００、Ｓ２０１）。次に、インデックスｉおよびｊで示される仮想座標点ＴＰ（ｉ，ｊ）が塗り潰し領域にあるかどうかを判定し、塗り潰し領域にあるときは、ステップＳ２０３以降の処理を行い、塗り潰し領域にないときは、ステップＳ２０６以降の処理を行う（ステップＳ２０２）。なお、仮想座標点ＴＰ（ｉ，ｊ）は、プリンタの解像度の２倍の解像度の画素の中心点である。仮想座標点ＴＰ（ｉ，ｊ）が塗り潰し領域にあるときは、塗潰画素連続数ｒｌをインクリメントし（ステップＳ２０３）、フラグｆｌが「０」か否か、つまり塗潰開始位置ｓｔおよび塗潰画素連続数ｒｌに有効データが残っていないかどうかを調べ（ステップＳ２０４）、残っていなければ、現在の主走査方向の位置を主走査方向の塗潰開始位置ｓｔに設定する（ステップＳ２０５）。
【００２８】
一方、仮想座標点ＴＰ（ｉ，ｊ）が塗り潰し領域にないときは、フラグｆｌが「１」か否か、つまり塗潰開始位置ｓｔおよび塗潰画素連続数ｒｌに有効データが残っているかどうかを調べ（ステップＳ２０６）、残っていれば塗潰開始位置ｓｔおよび塗潰画素連続数ｒｌをリストに登録し（ステップＳ２０７）、塗潰開始位置ｓｔ、塗潰画素連続数ｒｌおよびフラグｆｌを初期化する（ステップＳ２０８）。ステップＳ２０５またはステップＳ２０８が終了するか、ステップＳ２０４またはステップＳ２０６での判定結果が「ＮＯ」である場合には、インデックスｉをインクリメントし（ステップＳ２０９）、主走査方向画素数Ｐを２倍した値とインデックスｉとを比較して（ステップＳ２１０）、等しいならば、ステップＳ２１１以降の処理を行い、等しくないならば、ステップＳ２０２以降の処理を行う。
【００２９】
インデックスｉが主走査方向画素数Ｐを２倍した値に等しい場合には、フラグｆｌが「１」か否か、つまり塗潰開始位置ｓｔおよび塗潰画素連続数ｒｌに有効データが残っているかどうかを調べ（ステップＳ２１１）、残っていれば塗潰開始位置ｓｔおよび塗潰画素連続数ｒｌをリストに登録する（ステップＳ２１２）。そして、ステップＳ２１２での処理が終了するか、ステップＳ２１１での判定結果が「ＮＯ」である場合には、リストに終端符号ＥＯＬを登録してインデックスｊをインクリメントし（ステップＳ２１３）、副走査方向画素数Ｌを２倍した値とインデックスｊとを比較して〈ステップＳ２１４）、等しいならば処理を終了し、等しくないならばステップＳ２０１以降の処理を行う。上述した処理により、プリンタ解像度の２倍の解像度の２値のエッジリストが作成される。なお、上述した処理においては、作成するエッジリストは２値であるため、印字する画素の開始位置および連続数のみがリストの内容となる。また、ライン終了時に終端符号ＥＯＬをリストに登録していることからも分かるように、エッジリストはライン単位で作成される。
【００３０】
次に、図５ないし図７は、図３のステップＳ１Ｏ２での処理の詳細を示すフローチャートである。なお、図５ないし図７において、ｉは主走査方向の処理位置、ｊは副走査方向の処理位置を示すインデックスであり、ｓｔ１〜ｓｔ６は主走査方向の塗り潰し開始位置、ｒｌ１〜ｒｌ６は塗り潰す画素の連続数を格納する変数であり、ｓｔは多値エッジリストに登録する主走査方向の塗り潰し開始位置、ｒｌは多値エッジリストに登録する塗り潰す画素の連続数、ｐｖは多値エッジリストに登録する画素値を格納する変数である。また、ｎ２は注目画素、ｎ１およびｎ３はその直上・直下の画素の状態を表す変数であり、ｍは画素値を格納する変数である。また、ＰおよびＬが表す数、記号＝および記号＝＝の意味は図４と同様であり、関数ＬＵＴ−Ａおよび関数ＬＵＴ−Ｂは互いに異なるルックアップテーブル（以下、ＬＵＴという）を用いて引数を変換する関数を意味する。
【００３１】
まず、インデックスｉに初期値を設定し（ステップＳ３００）、先頭ラインの処理を行う（ステップＳ３０１）。なお、先頭ラインの処理については後述する。次に、インデックスｉをインクリメントし（ステップＳ３０２）、ＳＴ１，ＲＬ１〜ＳＴ６，ＲＬ６を読み込むとともに、処理に必要な変数を初期化する（ステップＳ３０３）。なお、ＳＴｘ，ＲＬｘ（ｘ＝１〜６）は、図３のステップＳ１０２で作成した２値のエッジリストの（２・ｊ＋ｘ−３）番目のラインのリストから読み込んだ主走査方向の塗り潰し開始位置および塗り潰す画素の連続数である。例えば、ｊ＝１のときＳＴ１，ＲＬ１は０番目のライン（つまり先頭ライン）のリストから読み込んだ主走査方向の塗り潰し開始位置および塗り潰す画素の連続数である。次に、画素の状態を表す変数ｎ１、ｎ３を算出する（ステップＳ３０４）。表１に算出した値と画素の状態を示す。
【００３２】
【表１】
0003750396.tif 000002
表１において、状態欄の図形は、図３のステップＳ１０１で作成した２値のエッジリストのうち、注目画素に対応する部分の状態を模式的に示したものであり、白色矩形は塗り潰さない画素、黒色画素は塗り潰す画素を表す。なお、この算出方法については後述する。
【００３３】
次に、変数ｎ２が「３」に等しいどうかを調べ（ステップＳ３０５）、等しければステップＳ３０６以降の処理を行い、等しくなければステップＳ３０９以降の処理を行う。変数ｎ２が「３」に等しい場合、変数ｎ３が「０」または「１２」に等しいかどうかを調べ（ステップＳ３０６）、どちらかに等しい場合には変数ｎ２を表３に示すＬＵＴで濃度値に変換して変数ｍに格納する（ステップＳ３０７）。一方、どちらにも等しくない場合には変数ｎ２を表２に示すＬＵＴで濃度値に変換して変数ｍに格納する（ステップＳ３０８）。
【表２】
0003750396.tif 000003
【００３４】
【表３】
0003750396.tif 000004
【００３５】
一方、変数ｎ２が「３」に等しくない場合、変数ｎ２が「１２」に等しいかどうかを調べ（ステップＳ３０９）、等しければステップＳ３１０以降の処理を行い、等しくなければステップＳ３１２以降の処理を行う。変数ｎ２が「１２」に等しい場合、変数ｎ１が「０」または「３」に等しいかどうかを調べ（ステップＳ３１０）、等しければ表３に示すＬＵＴで濃度値に変換して変数ｍに格納し（ステップＳ３１１）、等しくなければ表２に示すＬＵＴで濃度値に変換して変数皿に格納する（ステップＳ３１２）。
【００３６】
上記ステップＳ３０７、ステップＳ３０８、ステップＳ３１１、ステップＳ３１２のいずれかでの処理が終了すると、濃度値が格納されている変数ｍと変数ｐｖが「０」より大きいかどうかを調べる（ステップＳ３１０）。そして、変数ｍと変数ｐｖがともに「０」より大きければ、変数ｍと変数ｐｖが等しいかどうかを調べ（ステップＳ３１２）、等しければ変数ｒｌをインクリメントし（ステップＳ３１３）、等しくなければ変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録し（ステップＳ３１４）、変数ｓｔにインデックスｉ、変数ｐｖに変数ｍ、変数ｒｌに「１」を設定する（ステップＳ３１５）。
【００３７】
一方、変数ｍが「０」であり、変数ｐｖが「０」より大きければ、変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録し（ステップＳ３１７）、変数ｐＶに「０」を設定する（ステップＳ３１８）。また、変数ｍが「０」より大きく、変数ｐｖが「０」であれば、変数ｓｔにインデックスｉ、変数ｐｖに変数ｍ、変数ｒｌに「１」を設定する（ステップＳ３１６）。つまり、ステップＳ３１０からステップＳ３１９における処理は、ランレングスコーディング処理である。
【００３８】
次に、ステップＳ３１３、ステップＳ３１５、ステップＳ３１６またはステップＳ３１８での処理が終了するか、ステップＳ３１０で変数ｍと変数ｐｖがともに「０」であった場合には、インデックスｉをインクリメントし（ステップＳ３１９）、インデックスｉがＰに等しいかどうかを調べる（ステップＳ３２０）。そして、等しければステップＳ３２１以降の処理を行い、等しくなければステップＳ３０４以降の処理を行う。
【００３９】
インデックスｉがＰに等しい場合、変数ｐｖが「０」より大きいかどうかを調べ（ステップＳ３２１）、大きければ変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録する（ステップＳ３２２）。そして、ステップＳ３２２での処理が終了するか、ステップＳ３２１での判定結果が「ＮＯ」であった場合、ＥＯＬをリストに登録してインデックスｊをインクリメントし（ステップＳ３２３）、インデックスｊがＬから「１」を減じた値に等しいかどうかを調べる（ステップＳ３２４）。そして、等しければ後述する最終ライン処理を行って（ステップＳ３２５）、全ての処理を終了し、等しくなければステップＳ３０３以降の処理を行う。
【００４０】
ここで、図５のステップＳ３０１における先頭ライン処理について説明する。図８および図９は、先頭ライン処理の詳細を示すフローチャートである。なお、図６において、図５ないし図７と同じ名前のインデックス、変数、記号および関数は、図５ないし図７と同様である。
【００４１】
まず、ＳＴ３，ＲＬ３〜ＳＴ６，ＲＬ６を読み込むとともに、処理に必要な変数を初期化する（ステップＳ４００）。次に、画素の状態を表す変数ｎ２、ｎ３を算出する（ステップＳ４０１）。次に、変数ｎ２が「３」に等しいどうかを調べ（ステップＳ４０２）、等しければステップＳ４０３以降の処理を行い、等しくなければステップＳ４０５以降の処理を行う。変数ｎ２が「３」に等しい場合には、変数ｎ３が「０」または「１２」に等しいかどうかを調べ（ステップＳ４０３）、どちらかに等しい場合には、変数ｎ２を表３に示すＬＵＴで濃度値に変換して変数ｍに格納する（ステップＳ４０４）。一方、どちらにも等しくない場合には、変数ｎ２を表２に示すＬＵＴで濃度値に変換して変数ｍに格納する（ステップＳ４０５）。
【００４２】
上記ステップＳ４０４、ステップＳ４０５のいずれかでの処理が終了すると、濃度値が格納されている変数ｍと変数ｐｖが「０」より大きいかどうかを調べ（ステップＳ４０６）、変数ｍと変数ｐｖとがともに「０」より大きければ、変数ｍと変数ｐｖとが等しいかどうかを調べる（ステップＳ４０７）。そして、等しければ、変数ｒｌをインクリメントし（ステップＳ４０８）、等しくなければ、変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録し（ステップＳ４０９）、変数ｓｔにインデックスｉ、変数ｐｖに変数ｍ、変数ｒｌに「１」を設定する（ステップＳ４１０）。一方、変数ｍが「０」であり、変数ｐｖが「０」より大きければ、変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録し（ステップＳ４１２）、変数ｐｖに「０」を設定する（ステップＳ４１３）。また、変数ｍが「０」より大きく、変数ｐｖが「０」であれば、変数ｓｔにインデックスｉ、変数ｐｖに変数ｍ、変数ｒｌに「１」を設定する（ステップＳ４１１）。つまり、ステップＳ４０６からステップＳ４１３における処理は、先頭ラインのランレングスコーディング処理である。
【００４３】
次に、ステップＳ４０８、ステップＳ４１０、ステップＳ４１１またはステップＳ４１３での処理が終了するか、ステップＳ４０６で変数ｎと変数ｐｖがともに「０」であった場合には、インデックスｉをインクリメントし（ステップＳ４１４）、インデックスｉがＰに等しいかどうかを調べ（ステップＳ４１５）、等しければステップＳ４１６以降の処理を行い、等しくなければステップＳ４０１以降の処理を行う。インデックスｉがＰに等しい場合、変数ｐｖが「０」より大きいかどうかを調べ（ステップＳ４１６）、大きければ変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録する（ステップＳ４１７）。そして、ステップＳ４１７での処理が終了するか、子テップＳ４１６での判定結果が「ＮＯ」であった場合、ＥＯＬをリストに登録して（ステップＳ４１８）、処理を終了する。
【００４４】
次に、図７のステップＳ３２５における最終ライン処理について説明する。図１０および図１１は、最終ライン処理の詳細を説明するためのフローチャートである。なお、図１０および図１１において、図５ないし図７と同じ名前のインデックス、変数、記号および関数は、図５ないし図７と同様である。
【００４５】
まず、ＳＴ１，ＲＬ１〜ＳＴ４，ＲＬ４を読み込むとともに、処理に必要な変数を初期化する（ステップＳ５００）。次に、画素の状態を表す変数ｎ１〜ｎ２を算出する（ステップＳ５０１）。次に、変数ｎ１が「１２」に等しいどうかを調べ（ステップＳ５０２）、等しければステップＳ５０３以降の処理を行い、等しくなければステップＳ５０５以降の処理を行う。変数ｎ２が「１２」に等しい場合には、変数ｎ１が「０」または「３」に等しいかどうかを調べ（ステップＳ５０３）、どちらかに等しい場合には、変数ｎ２を表３に示すＬＵＴで濃度値に変換して変数ｍに格納する（ステップＳ５０４）。一方、どちらにも等しくない場合には、変数ｎ２を表２に示すＬＵＴで濃度値に変換して変数ｍに格納する（ステップＳ５０５）。
【００４６】
上記ステップＳ５０４、ステップＳ５０５のいずれかでの処理が終了すると、濃度値が格納されている変数ｍと変数ｐｖが「０」より大きいかどうかを調べ（ステップＳ５０６）、変数ｍと変数ｐｖがともに「０」より大きければ変数ｍと変数ｐｖとが等しいかどうかを調べ（ステップＳ５０７）、等しければ変数ｒｌをインクリメントする（ステップＳ５０８）。一方、等しくなければ変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録し（ステップＳ５０９）、変数ｓｔにインデックスｉ、変数ｐｖに変数ｍ、変数ｒｌに「１」を設定する（ステップＳ５１０）。一方、変数ｍが「０」であり、変数ｐｖが「０」より大きければ、変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録し（ステップＳ５１３）、変数ｐｖに‘０’を設定する（ステップＳ５１４）。また、変数ｍが「０」より大きく、変数ｐｖが「０」であれば、変数ｓｔにインデックスｉ、変数ｐｖに変数ｍ、変数ｒｌに「１」を設定する（ステップＳ５１２）。つまり、ステップＳ５０６からステップＳ５１４における処理は、最終ラインのランレングスコーディング処理である。
【００４７】
次に、ステップＳ５０８、ステップＳ５１０、ステップＳ５１２またはステップＳ５１４での処理が終了するか、ステップＳ５０６で変数ｍと変数ｐｖとがともに「０」であった場合には、インデックスｉをインクリメントし（ステップＳ５１４）、インデックスｉがＰに等しいかどうかを調べる（ステップＳ５１５）。そして、双方が等しければステップＳ５１７以降の処理を、等しくなければステップＳ５０１以降の処理を行う。インデックスｉがＰに等しい場合、変数ｐＶが「０」より大さいかどうかを調べ（ステップＳ５１７）、大きければ変数ｓｔ、変数ｐｖおよび変数ｒｌをリストに登録する（ステップＳ５１８）。ステップＳ５１８での処理が終了するか、ステップＳ５１７での判定結果が「ＮＯ」であった場合には、ＥＯＬをリストに登録して（ステップＳ５１９）、処理を終了する。
【００４８】
次に、図５のステップＳ３０４、図８のステップＳ４０１および図１０のステップＳ５０１における変数ｎ１、ｎ３の算出方法について説明する。なお、この算出方法は、変数ｎ１〜ｎ３について同じであるため、変数ｎ１の場合についてのみ説明する。図１２および図１３は、変数ｎ１を算出するアルゴリズムを説明するためのフローチャートである。なお、図１２および図１８において、図ないし図７と同じ名前のインデックス、変数および記号は、図５ないし図７と同様であり、記号「｜」はビットＯＲ演算を示すものとする。
【００４９】
まず、変数ｎ１を初期化し（ステップＳ６００）、注目画素の主走査方向での位置を示すインデックスｉが変数ＳＴ１以上、かつ変数ＳＴ１と変数ＲＬ１との和より小さいか否かを調べる（ステップＳ６０１）。つまり、注目画素が塗潰領域にあるかどうかを調べる。ステップＳ６０１での判定結果が「ＹＥＳ」の場合、すなわち注目画素が塗潰領域にある場合には、変数ｎ１と定数「１０００ｂ」とのビットＯＲ演算結果を変数ｎ１に格納する（ステップＳ６０２）。一方、「ＮＯ」の場合、すなわち注目画素が塗潰領域にない場合には、インデックスｉが変数ＳＴ１と変数ＲＬ１の和以上であるか否かを調べる（ステップＳ６０３）。ステップＳ６０３での判定結果が「ＹＥＳ」の場合には、リストからＳＴ１およびＲＬ１を読み込む（ステップＳ６０４）。
【００５０】
次に、ステップＳ６０２またはステップＳ６０４での処理が終了するか、ステップＳ６０３での判定結果が「ＮＯ」である場合には、インデックスｉに「１」を加えた値が変数ＳＴ１以上、かつ変数ＳＴ１と変数ＲＬ１との和より小さいか否かを調べる（ステップＳ６０５）。つまり、注目画素の右の画素（以下、単に右画素という）が塗潰領域にあるか否かを調べる。ステップＳ６０５での判定結果が「ＹＥＳ」の場合、すなわち右画素が塗潰領域にある場合には、変数ｎ１と定数「１００ｂ」とのビットＯＲ演算結果を変数ｎ１に格納する（ステップＳ６０６）。一方、「ＮＯ」の場合、すなわち右画素が塗潰領域にない場合には、インデックスｉに「１」を加えた値が変数ＳＴ１と変数ＲＬ１との和以上であるか否かを調べる（ステップＳ６０７）。そして、ステップＳ６０７での判定結果が「ＹＥＳ」の場合には、リストからＳＴ１およびＲＬ１を読み込む（ステップＳ６０８）。
【００５１】
次に、ステップＳ６０６またはステップＳ６０８での処理が終了するか、ステップＳ６０７での判定結果が「ＮＯ」である場合には、インデックスｉが変数ＳＴ２以上で、かつ変数ＳＴ２と変数ＲＬ２との和より小さいか否かを調べる（ステップＳ６０９）。つまり、注目画素の下の画素（以下、単に下画素という）が塗潰領域にあるかどうかを調べる。ステップＳ６０９での判定結果が「ＹＥＳ」の場合、すなわち下画素が塗潰領域にある場合には、変数ｎ１と定数「１０ｂ」とのビットＯＲ演算結果を変数ｎ１に格納する（ステップＳ６１０）。一方、「ＮＯ」の場合、すなわち下画素が塗潰領域にない場合には、インデックスｉが変数ＳＴ２と変数ＲＬ２との和以上であるか否かを調べる（ステップＳ６１１）。そして、ステップＳ６１１での判定結果が「ＹＥＳ」の場合には、リストからＳＴ２およびＲＬ２を読み込む（ステップＳ６１２）。
【００５２】
次に、ステップＳ６１０またはステップＳ６１２での処理が終了するか、ステップＳ６１１での判定結果が「ＮＯ」である場合には、インデックスｉに「１」を加えた値が変数ＳＴ２以上で、かつ変数ＳＴ２と変数ＲＬ２との和より小さいか否かを調べる（ステップＳ６１３）。つまり、注目画素の右下の画素（以下、単に右下画素という）が塗潰領域にあるかどうかを調べる。ステップＳ６１３での判定結果が「ＹＥＳ」の場合、すなわち右下画素が塗潰領域にある場合には、変数ｎ１と定数「１ｂ」とのビットＯＲ演算結果を変数ｎ１に格納し（ステップＳ６１４）、当該処理を終了する。一方、「ＮＯ」の場合、すなわち次画素が塗潰領域にない場合には、インデックスｉに「１」を加えた値が変数ＳＴ２と変数ＲＬ２との和以上であるか否かを調べる（ステップＳ６１５）。ステップＳ６１５での判定結果が「ＹＥＳ」の場合には、リストからＳＴ２およびＲＬ２を読み込み（ステップＳ６１６）、当該処理を終了する。また、ステップＳ６１５での判定結果が「ＮＯ」である場合には、何もせずに当該処理を終了する。なお、上記処理において、画素の相対的な位置関係は、ラインの先頭画素を最左端、先頭ラインを最上端ラインとして記述している。
【００５３】
ここで、明朝体の文字「一」を例にとり、処理の具体例を示す。図１４は、処理過程でのラスタライズ画像ならびに比較対照のための概念図である。また、図１５は、図１４（ａ），（ｅ）の部分拡大図である。なお、図１４および図１５において、矩形は画素を表し、白色矩形以外の矩形の意味についてはそれぞれ右横の注釈の通りである。また、図１４においては、１つの文字を主走査方向１６画素、副走査方向１６画素の領域に展開するものとし、該領域の左上端を座標原点とし、上述した画素の相対的な位置関係と同様の位置関係で示している。また、図１５においては、破線矢印は、プリンタ解像度のｎ倍の解像度の２値の画像データを表すエッジリストを作成する際に仮想的に設定されるスキャンラインであり、主走査および副走査の両方向のスキャンラインの交点が図４における仮想座標点ＴＰ（ｉ，ｊ）である。なお、図１５では、上述と同様にｎ＝２の場合について示しているが、ｎの値が他の値であっても同様に仮想座標点を設定できるのは明らかである。
【００５４】
図１４（ａ）は、文字「一」を理想的に展開した場合の塗潰領域を示す概念図であるが、固有の解像度を有するプリンタに出力するためには、塗潰領域を含む画素の値を何らかの論理に従って決定する必要がある。例えば、図１４（ａ）に示す塗潰領域を少しでも含む画素を印字、含まない画素を非印字と決定すると、図１４（ｂ）に示すような印字結果が得られる。両図を見てもわかるように、この画素値決定論理では、高い画質の印字結果を得ることはできない。一方、前述した従来技術に記載されているように、ＰＤＬから作成したプリンタ解像度のｎ倍の解像度の２値の画像データを表すエッジリストから単純にプリンタ解像度の多値の画像データを表すエッジリストに変換してラスタライズすると、図１４（ｃ）に示すラスター画像が得られ、このラスター画像を印字すると図１４（ｄ）に示す印字結果が得られる。この場合、特に文字「一」の横棒部分が想定していた線幅よりも細い線幅で印字されてしまい、場合によっては途切れたり印字されないことがある。
【００５５】
一方、上述した本発明の実施形態によってラスタライズすると、図１４（ｅ）に示すラスター画像が得られ、このラスター画像を印字すると図１４（ｆ）に示す印字結果が得られる。図１５（ａ）および図１５（ｂ）は、それぞれ図１４（ａ）および図１４（ｅ）の部分拡大図である。以下、本発明によるラスタライズ処理例を図１４（ａ）、図１４（ｅ）、図１４（ｆ）および図１５を参照しながら説明する。まず、本実施形態において、入力されたＰＤＬのうち、多値展開を指定された文字についてＰＤＬからアウトラインデータ、さらにエッジリストへと変換が行われる。図４ないし図７に示したアルゴリズムに従って、各仮想座標点が塗潰領域にあるか否かが判定され、その結果エッジリストが作成されていく。
【００５６】
例えば、図１５（ａ）の７ライン目について見てみると、上側の主走査方向のスキャンライン（以下、単に主走査スキャンラインという）では、１３番目の画素の右側の仮想座標点が塗潰領域内にある。これは、図４のステップＳ２０２において、ｉ＝２７，ｊ＝１４のときに判定結果が「ＹＥＳ」となることを意味している。この仮想座標点までに、ステップＳ２０２における判定結果が「ＹＥＳ」となることはなく、また、この仮想座標点以降の同じ主走査スキャンライン上の仮想座標点についてもステップＳ２０２における判定結果が「ＮＯ」となるため、この主走査スキャンラインが終了した時点でのリストには、ｓｔ＝２７，ｒｌ＝１のみが登録されている。
【００５７】
一方、下側の主走査スキャンラインでは、１３番目の画素の左右両側および１４番目の画素の左側の仮想座標点が連続して塗潰領域内にある。従って、上側と同様に処理を行うと、この主走査スキャンラインが終了した時点でのリストには、ｓｔ＝２６，ｒｌ＝３がリストに追加されている。同様に８ライン目についても処理を行うと、上側の主走査スキャンラインでは、ｓｔ＝２，ｒｌ＝２６がリストに追加され、下側の主走査スキャンラインでは、何もリストに追加されない。上述したライン以外については、いずれの仮想座標点も塗演領域にはないため、最終的には表４に示すようなリストが得られる。
【表４】
0003750396.tif 000005
【００５８】
表４に示すリストは、一形態例であってリストを見やすい形で表現したものにすぎず、リストの記憶媒体でのデータ形式は、表４に隈定されるわけではなく、どの主走査スキャンラインにどのようなｓｔ，ｒｌが登録されているかが分かればどのような形態であっても構わない。なお、表４においては、ＥＯＬ符号のみが登録されている主走査スキャンラインおよびＥＯＬ符号については省略している。
【００５９】
次に、表４に示すリストに基づいて多値のエッジリストが作成される。この作成の具体例を図１５（ｂ）の７ライン目および８ライン目を例にとり説明する。まず、７ライン目では、１番目の画素から１２番目の画素までは、図１２または図１３におけるｎ１、ｎ２の算出でステップＳ６０１、ステップＳ６０５、ステップＳ６０９およびステップＳ６１３での判定結果がいずれも「ＮＯ」となり、ｎ３の算出でステップＳ６０１およびステップＳ６０５での判定結果がいずれも「ＹＥＳ」、ステップＳ６０９およびステップＳ６１３での判定結果がいずれも「ＮＯ」となるので、ｎ１＝０、ｎ２＝０、ｎ３＝１２となり、図５のステップＳ３０５およびステップＳ３０９での判定結果がいずれも「ＮＯ」となる。従って、変数ｎ２が表２に示すＬＵＴで変換され、画素値「０」が得られる。ゆえに、多値エッジリストには何も登録されない。同ラインの１３番目の画素の時点でｎ１＝０、ｎ２＝７、ｎ３＝１２、１４番目の画素の時点でｎ１＝０、ｎ２＝２、ｎ３＝１２となるので、それぞれ表２に示すＬＵＴから画素値「１９２」および画素値「６４」が得られる。
【００６０】
先頭画素および１５番目以降の画素については、いずれもｎ１＝０、ｎ２＝０、ｎ３＝０となるので、７ライン目の処理が終了した時点で、多値エッジリストには、ｓｔ＝１３、ｐｖ＝１９２、ｒｌ＝１およびｓｔ＝１４、ｐｖ＝６４、ｒｌ＝１が登録されている。次に、８ライン目では、１番目の画素から１２番目の画素までは、ｎ１＝０、ｎ２＝１２、ｎ３＝０となり、図５のステップＳ３０５での判定結果は「ＮＯ」、ステップＳ３０９およびステップＳ３１０での判定結果は「ＹＥＳ」となる。従って、変数ｎ２が表３に示すＬＵＴで変換され、画素値「１９２」が得られる。また、同ラインの１３番目の画素の時点で、ｎ１＝７、ｎ２＝１２、ｎ３＝０となり、１４番目の画素の時点で、ｎｌ＝２、ｎ２＝１２、ｎ３＝０となり、ともに画素値「１２８」が得られる。上述したライン以外については、いずれの画素についても、画素値は「０」となるため、最終的には、例えば表５に示すようなリストが得られる。
【表５】
0003750396.tif 000006
【００６１】
表５に示すリストは、一形態例であってリストを見やすい形で表現したものにすぎず、リストの記憶媒体でのデータ形式は表５に限定されるわけではなく、どのラインにどのようなｓｔ，ｐｖ，ｒｌが登録されているかが分かればどのような形態であっても構わない。なお、表５においては、ＥＯＬ符号のみが登録されている主走査スキャンラインおよびＥＯＬ符号については省略している。以上により、多値エッジリストが得られ、多値文字処理部１２から合成部１８に出力される。
【００６２】
次に、２値文字処理部１３での処理を説明する。まず、描画する文字に対応したアウトラインデータをロードし、２値エッジリストを作成する。ＴＹＰＥコマンドで指定された文字列中の全ての文字の描画が終了すると、合成部１８に２値エッジリストを出力して処理を終了し、描画してない文字がある場合には、アウトラインデータのロード以降を繰り返す。
【００６３】
なお、上述した処理のうちアウトラインデータのロードは、多値文字処理部１２と同じであり、文字輪郭からの２値エッジリストの作成は、多値文字処理部１２における高解像度エッジリストの作成と解像度の設定、つまり仮想座標点の設定が異なるのみで他は同じであるので、詳細な説明は省略する。文字「一」から作成したエッジリストを表６に示す。
【表６】
0003750396.tif 000007
【００６４】
次に、多値ベクトル処理部１４での処理を説明する。図１６は、多値ベクトル処理部１４での処理を示すフローチャートである。まず、指定されたベクトルを描画し（ステップＳ７００）、高解像度エッジリストを作成し（ステップＳ７０１）、該エッジリストを多値エッジリストに変換する（ステップＳ７０２）。全てのベクトルの描画が終了すると、合成部１８に多値エッジリストを出力して処理を終了し、描画していないベクトルがある場合には、ステップＳ７００以降を繰り返す。ステップＳ７０１以降は、多値文字処理部１２と同じであるので、ここでは、ステップＳ７００についてのみ説明する。まず、指定されたベクトルは、指定された座標点情報に従って仮想座標平面上に描画される。次に、仮想座標平面上に描画されたベクトルを中心として、指定された線幅の半分の距離にある領域を塗潰領域とする。そして、多値文字処理部１２と同様に仮想座標点を設定し、高解像度エッジリストの作成、および該エッジリストの多値エッジリストヘの変換を行っていく。
【００６５】
ここで、図１７は、多値ベクトル処理部１４での処理の具体例を説明するための概念図である。まず、指定されたベクトルが図１７（ａ）に示すハッチング領域の中心線のように描画される。次に、該中心線から指定された線幅の半分の距離にある領域が図１７（ａ）に示すハッチング領域のように塗潰領域に指定される。このとき、多値文字処理部１２においては、アウトラインデータをロードし、塗潰領域を設定したときと同じ状態であるので、上記処理以降では、多値文字処理部１２と同様の処理を行い、一旦、高解像度エッジリストを取得した後、多値エッジリストを取得する。表７は、高解像度エツジリストを示し、表８は、多値エッジリストを示す。また、図１７（ｃ）は、最終的に得られた多値エッジリストを印字した結果を示す図である。
【表７】
0003750396.tif 000008
【００６６】
【表８】
0003750396.tif 000009
【００６７】
次に、２値ベクトル処理部１５での処理を説明する。まず、指定された図形を描画し、２値エッジリストを作成する。全ての図形の描画が終了すると、合成部１８に２値エッジリストを出力して処理を終了し、描画していない図形がある場合には、描画以降を繰り返す。なお、上述した処理のうち、図形の描画は、多値ベクトル処理部１４と同じであり、ベクトルからの２値エッジリストの作成は、多値文字処理部１２における高解像度エッジリストの作成と解像度の設定、つまり仮想座標点の設定が異なるのみで、他は同じであるので、詳細な説明は省略する。図１７（ａ）に示す図形から作成したエッジリストを表９に示す。
【表９】
0003750396.tif 000010
【００６８】
次に、グラフィクス処理部１６での処理を説明する。ここでは、指定された領域を指定された色および指定された塗り潰し方法で塗り潰す処理が行われるが、塗り潰し方法が指定された領域を一様に塗り潰す方法である場合には詳述するまでもないので、一様に塗り潰さない方法について説明する。このような塗り潰し方法では、仮想座標平面上の座標位置の関数として各座標位置の画素値が決定される。この関数としては、例えば矩形領域内で主走査方向に最高濃度から最低濃度まで画素値が単調減少する関数がある。
【００６９】
ここで、図１８は、一様に塗り潰さない方法を説明するための概念図である。図１８（ａ）は、主走査方向１４画素、副走査方向１ラインの仮想座標平面上の領域に、該領域の主走査方向の左端を最高濃度、右端を最低濃度とし、その間は主走査方向の左から右に向かって単調減少する関数により描画した例、図１８（ｂ）は、プリンタ解像度と同じ解像度で仮想座標点を設定して各画素値を決定した例、図１８（ｃ）は、図１８（ｂ）に示す領域をプリントアウトした例である。なお、図１８（ｂ）の上側の数値は、その直下の画素の値を示している。なお、図１８に示す例は、一具体例であり、座標位置から画素値を決定する関数を様々に変えることにより、どのような領域の塗り潰し方法にも対応できるのは明らかである。ここで、座標位置によらず画素値が同じ値に決定される関数を用いれば、指定された領域を一様に塗り潰すことができるので、一様に塗り潰す方法も上述した塗り潰し方法に含まれる。画素値の決定が終了すると、決定した画素偉から多値エッジリストを作成し、合成部１８に出力する。表１０に図１８（ｂ）に示す領域の各画素値から作成したエッジリストを示す。
【表１０】
0003750396.tif 000011
【００７０】
次に、イメージ処理部１７での処理を説明する。ここでは、ラスターイメージデータに従って指定された領域に、指定された解像度および指定された色空間で描画するのみであるが、指定された解像度がプリンタ解像度と一致しない場合がある。このような場合には、プリンタ解像度と同じ解像度で設定した仮想座標点と、ラスターイメージデータの各画素の位置とが一致しないため、ある座標点の近傍にあるラスターイメージデータの各画素の値から近似画素値を算出することによりプリントアウトを可能にする。
【００７１】
つまり、解像度変換処理によって、ラスターイメージデータをプリンタ解像度に合せることにより、プリントアウトを可能にする。このときの近似画素値の算出方法は、周知の方法でよい。また、指定された色空間がプリントアウト可能な色空間と一致しない、あるいはラスターイメージデータの各画素値が表す色がプリンタで再現できない場合には、ラスターイメージデータの画素値を変更する。このときの画素値の変更方法も周知の方法でよい。上述したように、ラスターイメージデータをプリントアウト可能な解像度および色空間の画像に変換した後、変換した画像から多値エッジリストを作成し、合成部１８に出力する。
【００７２】
最後に、合成部１８での処理を説明する。合成部１８は、多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５、グラフィクス処理部１６およびラスターイメージ処理部１７から出力されたエッジリストを合成し、ラスター画像に変換して、出力端Ａを通じて外部に出力する。なお、この合成処理は、エッジリスト間の操作、例えばリストの連結・挿入・選択であり、優先順位はコマンド分離部１１に入力されたＰＤＬ内での描画順序に従う。例えば、何も指定がない場合には、ＰＤＬの先頭から最後尾に向けて優先順位が高くなる。
【００７３】
つまり、後から描画される文字またはベクトルが先に描画した文字またはベクトルに上書きされることとなる。このとき、後から描画される文字またはベクトルのエッジリストは、既存の出力用エッジリストに強制挿入され、既存の出力用エッジリストの該当部分は書きつぶされる。また、何らかの指定があった場合には、上記描画順序に従わずに指定された描画順序に従う。例えば、ＰＤＬの先頭に記述されている文字またはベクトルを最優先で描画するよう指定があった場合には、後から描画される文字またはベクトルのエッジリストを既存の出力用エッジリストに合成する際に、同じ画素位置にリストのデータがなければリストを連結し、同じものがある場合には何もしない。
【００７４】
次に、上述した合成部１８での処理の具体例を説明する。例えば、表５に示す多値エッジリストが多値文字処理部１２から出力され、その後、表１１に示す２値エッジリストが２値ベクトル処理部１５から出力されたとする。
【表１１】
0003750396.tif 000012
【００７５】
なお、ＰＤＬの記述では、表５に示す多値エッジリストに関する記述、すなわち文字「一」を多値展開する記述が、表１１に示す２値エッジリストに関する記述より先、すなわち副走査方向の画索幅「１」の直線を描画する記述より先にあるとする。ここで、描画順序に関する指定がない場合には、後から描画される文字またはベクトルが優先されるため、表１２に示すようなエッジリストが作成される。つまり、表５に示す多値エッジリストにデータがない６ライン目、７ライン目および９ライン目の８番目の画素については、表１１に示す２値エッジリストのデータが連結され、８ライン目の８番目の画素についてはともにデータが存在しているため、表１１に示す２値エッジリストのデータが挿入されている。
【表１２】
0003750396.tif 000013
【００７６】
一方、文字「一」を最優先で多値展開する指定があった場合には、同じ画素位置にデータがあっても、指定された文字またはベクトルが優先されるため、表１３に示すようなエッジリストが作成される。つまり、表５に示す多値エッジリストにデータがない６ライン目、７ライン目および９ライン目の８番目の画素については、表１１に示す２値エッジリストのデータが連結され、８ライン目の８番目の画素についてはともにデータが存在しているが、指定により多値エッジリストのデータが優先されるため、リストの操作は何も行われない。
【表１３】
0003750396.tif 000014
【００７７】
以上説明したように、合成部１８では、リストの合成処理が行われ、最終的にラスター画像に変換される。ラスター画像への変換は、ランレングス形式で記述されているエッジリストをその記述内容に従ってラスター画像に変換するのみであるので、詳細な説明は省略する。また、合成部１８では、多値エッジリストまたは２値エッジリストが多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５のいずれから出力されたかを検出し、その結果を識別データとして上記ラスター画像の画素毎に出力端Ｂから外部に出力する。なお、識別データ作成の際には、上述したリストの合成時の描画順序に関する処理結果が反映される。
【００７８】
ところで、上述したリストの合成処理の際には、同じ画素位置に、リストにデータがあるかどうかを調べるため、異なる処理部から出力されたエッジリストが表す画像の境界を容易に知ることができる。したがって、このような境界に対する処理、例えばグラフィクス領域中に黒色文字が埋め込まれているような場合に、プリント時のレジストレーションのずれを目立たなくするような境界処理も容易に行える。この境界処理は、以下のようにして実現できる。
【００７９】
まず、多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５のいずれかから出力されたエッジリストから画像の境界を検出する。この検出は、当該エッジリストをラスター画像に変換した場合に「０」でない画素値の画素群の主走査方向の始点と終点とを検出すること、つまりエッジリスト内で同じラインに位置する各リストデータの主走査方向の始点と終点とを調べ、さらに１つのリストデータの終点と他のリストデータの始点とが主走査方向に隣接する場合には、その２つのリストデータの隣接する始点と終点とを検出対象からはずすことにより行うことができる。
【００８０】
次に、合成部１８において、グラフィクス処理部１６またはイメージ処理部１７から出力されたエッジリストと、多値文字処理部１２、２値文字処理部１３、多値ベクトル処理部１４、２値ベクトル処理部１５のいずれかから出力されたエッジリストとを合成する際には、例えばグラフィクス処理部１６またはイメージ処理部１７から出力されたエッジリスト中のリストデータで、検出した画像の境界と始点あるいは終点とが一致するとき、一致した点が始点であった場合には、その値をデクリメントし、終点であった場合には、インクリメントする。このように境界処理を行えば、プリント時のレジストレーションのずれを目立たなくすることができる。
【００８１】
上述した処理に対して、エッジリスト合成時にリストデータを変更するのではなく、境界であることをどの処理部から出力されたかを示す識別データとは異なる内容の識別データとして出力端Ｂから外部に出力するようにしてもよい。
【００８２】
また、別の境界処理として、多値文字と背景との重ね合わせ処理がある。以下では、当該重ね合わせ処理の例を図１４を参照して説明する。ここで、図１９（ａ）は、色成分をＹＭＣＫの４成分として背景上に理想的に展開した例を示す概念図であり、各色成分の各画素は２５６階調である。図１９（ｂ）、（ｃ）は、図１９（ａ）に示した画像のうち、文字を多値展開した画像のそれぞれＫ成分・Ｃ成分を示す概念図、図１９（ｄ）は、図１９（ｂ）、（ｃ）に示す画像をプリントアウトした例を示す概念図である。なお、図１９において、矩形は画素を表し、白色でない矩形の画素値は階調を有する画素であり、図中の凡例に従う。
【００８３】
通常、文字を白色ではない背景に重ね合わせる場合、図１９（ｃ）に示すように、背景の画素のうち文字の有色画素と同じ位置にある画素は、文字の画素に置き換えられる。これに対して、多値展開した文字は、パルス幅変調等の解像度を拡張する印字方法により印字されるため、特に画素値が中間調である画素については、図１９（ｄ）に示すように、色成分間で白隙を生じることがある。したがって、多値展開文字の中間調画素を背景に重ね合わせる場合には、背景画素を多値展開文字の画素に単純に置き換えるのではなく、背景画素の色成分のうち、多値展開文字とは異なる色成分の画素の値を保存し、同一色成分の画素のみ背景画素を文字画素に置き換えるようにすればよい。図１９（ｅ）は、図１９（ａ）に示す画像を文字と背景の重ね合わせを上述した方法で行った場合のプリントアウト例を示す概念図である。上述した境界処理の実現方法は、プリント時のレジストレーションのずれを目立たなくする境界処理と同様であるため、詳細な説明は省略する。なお、上述において、ラスターイメージは、ラスターイメージ処理部１７でエッジリストに変換された後、他の処理部から出力されたエッジリストと合成処理されるとしているが、ラスターイメージ処理部１７では、ラスターデータの取り出しだけを行い、ラスターイメージ処理部１７から出力されるエッジリストを合成し、ラスタライズした後、当該ラスターデータとの合成処理を行うようにしてもよい。
【００８４】
Ｃ．変形例
以上、本発明の一実施形態について説明したが、本発明の実施形態は、これに限定されるわけではなく、例えば上記実施形態の合成部１８においては、複数の処理部から出力されたエッジリストをラスタライズする前に合成処理を行っているが、各エッジリストをラスタライズした後に合成処理を行っても、本発明の趣旨は何ら逸脱しない。以下では、本発明の変形例として後者の実施形態について説明する。
【００８５】
この変形例では、上記実施形態とは、合成部１８における合成処理が異なるのみで、コマンド分離部１１および各処理部における処理については同じであるため説明を省略する。合成部１８は、まず、各処理部から出力されたエッジリストをラスタライズする。ラスタライズした結果得られるラスター画像は、合成処理を行うために合成部１８内のメモリ（図示せず）に書き込まれる。メモリへは、メモリ上のラスター画像がそのまま外部に出力できるよう書き込まれる。具体的には、書き込もうとする画素のメモリ上での位置関係が画像全体での位置関係と一致するように書き込まれる。
【００８６】
しかしながら、書き込みの際には、他の処理部から出力されたエッジリストをラスタライズしたラスト画像が書き込まれている場合がある。したがって、この場合には、上記実施形態と同様に、ＰＤＬ内での描画順序に応じて書き込もうとする画素を、書き込もうとする位置の既存の画素に上書きするのか、上書きせずに既存の画素を保存するのかを決定する。この画素の上書きの可否決定は、上記実施形態の合成部１８におけるエッジリスト間の合成処理に相当するが、エッジリストとラスター画像との違いはあるが合成論理は変わらない。したがって、出力端Ａから外部に出力される画像については何ら相違はない。
【００８７】
また、上記実施形態の合成部１８における文字と背景との境界処理についてもエッジリスト間の合成処理と同様にラスター画像間で処理を行うことができる。上記実施形態では、文字と背景との境界を検出した後、境界部分のエッジリストの内容を操作することにより、プリント時のレジストレーションのずれを防止する処理あるいは多値展開文字と背景とを重ね合わせる際の多値文字周辺の白隙を防止する処理を行っている。これに対して、本変形例では、境界を検出した後、メモリに書き込む際に上記処理を行う。具体的には、プリント時のレジストレーションのずれを防止するために、境界部分の文字の画素をメモリに書き込む前に、その画素の主走査方向の１つ前あるいは１つ後の画素値のうち、文字とは異なる色成分の画素値を書き込む文字の画素の同一色成分の画素値とする。また、多値展開文字と背景とを重ね合わせる際に多値文字周辺の白隙を防止するために、多値展開文字の中間調画素をメモリに書き込む前に、その画素の主走査方向の１つ前あるいは１つ後の画素値のうち、文字とは異なる色成分の画素値を、書き込む文字の画素の同一色成分の画素値とする。
【００８８】
いずれも、上記実施形態でエッジリストの内容を繰作する処理を、ラスター画像間の処理に置き換えただけであり、両者とも最終的に出力端Ａから出力される画像の内容に相違はない。なお、書き込む画素の文字とは異なる色成分の画素値を、当該画素の主走査方向の１つ前あるいは１つ後の画素の同一色成分の値としているが、１つ前あるいは１つ後の画素のどちらを選択するかは上記実施形態における、プリント時のレジストレーションのずれを防止する処理での選択と同一論理とする。
【００８９】
ところで、上述した実施形態および変形例は、いずれもＰＤＬを出力するアプリケーションソフトウェアとプリントエンジンとの間に実装すればよいので、いくつかの異なる形態により実現することができる。例えば、印字を行うプリントエンジンと、プリントエンジンの制御、外部との通信の制御等を行うプリントコントローラとが１つの筐体に納められているプリンタでは、プリントコントローラで動作するソフトウェアとして実現できる。また、プリントエンジンとプリントコントローラとが別個の筐体となっている場合にも、プリントコントローラで動作するソフトウェアとして実現できる。あるいは、ＰＤＬを出力するアプリケーションソフトウェアが搭載されているＰＣあるいはＷＳで動作するソフトウェアとしても実現できる。さらに、処理速度を速めるために上記実施形態における処理の一部あるいは全部をハードウェアで実現してもよく、いずれの実施形態で実現しても本発明の趣旨を何ら逸脱するものではない。
【００９０】
以上、本発明による画像処理装置の実施例について述べたが、本発明による画像処理装置の実現形態は、上述した内容に限定されるものではなく、他の実現形態であっても本発明の趣旨を逸脱しない範囲ならばどのような実現形態であっても構わない。
【００９１】
【発明の効果】
以上、説明したように、この発明によれば、ページ記述言語で表され、入力手段から入力された画像情報の中から抽出手段により文字または線画部を抽出し、抽出した文字または線画部を第１の変換手段により２値の階調を有する第１の中間コードに変換し、第１の中間コードを第２の変換手段により上記第１の中間コードより低い解像度で多値の階調を有する第２の中間コードに変換し、また、タグ生成手段により、第１の中間コードまたは第２の中間コードに基づいて、入力された画像情報の所定の領域ごとに当該領域を占める画像の種類を表し、当該第２の中間コードで表された文字または線画部であることを表す情報を少なくとも含むタグ情報を生成するようにしたので、ページ記述言語で記述された画像情報をラスター画像に変換する際に必要な記憶容量を少なくすることができ、より高画質のプリントアウトを得ることができるという利点が得られる。
【図面の簡単な説明】
【図１】  本発明による画像処理装置の一構成例を示すブロック図である。
【図２】  本発明による画像処理装置に入力されるＰＤＬの一例を示す概念図である。
【図３】  エッジリスト生成過程を示すフローチャートである。
【図４】  ２値エッジリスト作成処理の詳細を示すフローチャートである。
【図５】  ２値エッジリスト作成処理の詳細を示すフローチャートである。
【図６】  ２値エッジリスト作成処理の詳細を示すフローチャートである。
【図７】  ２値エッジリスト作成処理の詳細を示すフローチャートである。
【図８】  先頭ライン処理の詳細を示すフローチャートである。
【図９】  先頭ライン処理の詳細を示すフローチャートである。
【図１０】  最終ライン処理の詳細を説明するためのフローチャートである。
【図１１】  最終ライン処理の詳細を説明するためのフローチャートである。
【図１２】  変数ｎ１を算出するアルゴリズムを説明するためのフローチャートである。
【図１３】  変数ｎ１を算出するアルゴリズムを説明するためのフローチャートである。
【図１４】  処理過程でのラスタティズ画像ならびに比較対照のための概念図である。
【図１５】  図１４（ａ），（ｂ）の部分拡大図である。
【図１６】  多値ベクトル処理部１４での処理を示すフローチャートである。
【図１７】  多値ベクトル処理部１４での処理の具体例を説明するための概念図である。
【図１８】  グラフィクス処理部１６での指定された領域を一様に塗り潰さない方法を説明するための概念図である。
【図１９】  多値文字と背景との重ね合わせ処理を説明するための概念図である。
【符号の説明】
１１  コマンド分離部（入力手段、抽出手段）
１２  多値文字処理部（第１の変換手段）
１３  ２値文字処理部（第１の変換手段）
１４  多値ベクトル処理部（第１の変換手段）
１５  ２値ベクトル処理部（第１の変換手段）
１６  グラフィクス処理部
１７  ラスターイメージ処理部
１８  合成部（第２の変換手段、タグ生成手段、合成手段、境界検知手段）
【図１】
0003750396.tif 000015
【図２】
0003750396.tif 000016
【図３】
0003750396.tif 000017
【図４】
0003750396.tif 000018
【図５】
0003750396.tif 000019
【図６】
0003750396.tif 000020
【図７】
0003750396.tif 000021
【図８】
0003750396.tif 000022
【図９】
0003750396.tif 000023
【図１０】
0003750396.tif 000024
【図１１】
0003750396.tif 000025
【図１２】
0003750396.tif 000026
【図１３】
0003750396.tif 000027
【図１４】
0003750396.tif 000028
【図１５】
0003750396.tif 000029
【図１６】
0003750396.tif 000030
【図１７】
0003750396.tif 000031
【図１８】
0003750396.tif 000032
【図１９】
0003750396.tif 000033