(57)【要約】【課題】水平、垂直線分を含む文字記号パターン、特に漢字パターンを高い圧縮率で符号化する。【解決手段】漢字パターンを１ラインずつ符号化していくとき、垂直線分については、ＦＢＥ圧縮符号化を用いるものの、その先頭には水平線分が存在するか否かを示す１ビットの符号ＲＬｏｎ／ＲＬｏｆｆのいずれかを付加する。ＲＬｏｆｆの場合には、通常のＦＢＥ圧縮符号語をそのまま用い、ＲＬｏｎの場合には、「ＲＬ領域」に示すように、ＲＬ（ランレングス）圧縮符号を付随させる。【選択図】  図５
2004158926.tif 000002
【特許請求の範囲】
【請求項１】
文字記号パターンを圧縮符号化するパターン圧縮符号化方法であって、
圧縮符号化しようとする文字記号パターンの構成する線分を、水平及び垂直の２種類の線分領域とに分離し、分離した垂直領域の線分を、各水平ライン順に、前記水平線分が含まれるか否かを示す符号語、並びに、注目垂直線分の水平方向のエッジの変化を符号語として生成する第１の圧縮符号化工程と、
水平領域の線分については、当該各水平線分のランレングス符号化する第２の圧縮符号化工程と、
前記第１、第２の圧縮符号化工程で符号化して得られた符号語を対応付けて格納する格納工程と
を備えることを特徴とするパターン圧縮符号化方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ビットマップフォントを処理するためのプリンタ、ＦＡＸ、コピー機等に利用される、文字記号パターンの圧縮符号及び復号の技術に関するものである。
【０００２】
【従来の技術】
ＦＥＢ（Ｆａｓｔ  Ｂｏｕｎｄａｒｙ  Ｅｎｃｏｄｉｎｇ）というフォント用の圧縮方法が提案されている。
【０００３】
ＦＢＥ圧縮方法とは、ビットマップ・フォントを水平ライン方向に観たときに、そのライン上に描画される複数の水平ライン（これをＲＵＮと呼ぶ）の発生位置及びＲＵＮ長とそれらの水平ラインの左右エッジに注目して、これらのエッジが列方向に連続する場合のエッジの変化量を可変長符号化（ハフマン符号化）して、圧縮（伸長）する方法である。このＦＢＥ圧縮方法は、英数字、ひらがなのように、文字を構成する線が比較的連続的で、発生するエッジ数が少なく、且つ、各ライン間のエッジの変化が小さい文字に関しては非常に有効な圧縮方法である。
【０００４】
【発明が解決しようとする課題】
上記の如く、この方法は各種フォントでの英数字、ひらがなのように、文字を構成する線分が比較的連続的で、発生するエッジ数が少なく且つ、各ライン間のエッジの変化が小さい文字に関しては非常に有効な圧縮方法であるが、日本語等の漢字のように水平線と垂直線の交わりが多く含まれ、エッジの変化が大きな文字や記号に対しては逆に不利となる。ＦＢＥ圧縮では、ＲＵＮ長とエッジの変化量は、ハフマン符号化で値が大きくなるほど割り当てられるビット数が多くなるので、漢字が水平線を多く含むということは、それだけＲＵＮが長く、エッジの飛びの頻繁に大きく変化するからである。
【０００５】
本発明はかかる問題点に鑑みなされたものであり、垂直線分や水平線分が多く含まれる文字記号パターンを高い圧縮率で符号化可能な技術を提供しようとするものである。
【０００６】
【課題を解決するための手段】
この課題を解決するため、たとえば本発明のパターン圧縮符号化方法は以下の工程を備える。すなわち、
文字記号パターンを圧縮符号化するパターン圧縮符号化方法であって、
圧縮符号化しようとする文字記号パターンの構成する線分を、水平及び垂直の２種類の線分領域とに分離し、分離した垂直領域の線分を、各水平ライン順に、前記水平線分が含まれるか否かを示す符号語、並びに、注目垂直線分の水平方向のエッジの変化を符号語として生成する第１の圧縮符号化工程と、
水平領域の線分については、当該各水平線分のランレングス符号化する第２の圧縮符号化工程と、
前記第１、第２の圧縮符号化工程で符号化して得られた符号語を対応付けて格納する格納工程とを備える。
【０００７】
【発明の実施の形態】
以下、添付図面を参照して本発明に係る実施形態を詳細に説明する。
【０００８】
尚、実施形態では、印刷装置に適用した例を説明するが、これに限定されるものではない。
【０００９】
図１は、本実施形態の印刷装置のブロック構成図である。図中、１０２はホストより印刷データを取り込む入力部（入力インタフェース）である。１０８は演算処理を行うＣＰＵ（中央演算装置）である。１０３は前記入力部１０２より取り込まれた印刷データの保存やＣＰＵのワーク領域、ビットマップデータの描画領域として使われるＲＡＭ（ランダムアクセスメモリ）である。１０５はＣＰＵが実行するプログラム等、各種リード専用のデータを格納するファームウェアを格納するＲＯＭ（リードオンリー・メモリ）である。１０４は各種書体のフォントデータを圧縮した形で格納して置くフォント用のフォントＲＯＭ（詳細は後述）である。１０７はホストからの印刷データをもとに各種描画処理を施して、印刷データであるビットマップデータを前記ＲＡＭ上に作成する描画部である。１０９は前記描画部が作成したビットマップデータを最終的に記録紙等の記録媒体上に印刷する印刷部１１０へと転送する転送部である。１０６は各種制御信号、アドレス信号、データ信号を搬送するためのバスを表している。１０１は前記バス１０６に接続される全てのブロックのＲＡＭ及びＲＯＭへのアクセスの調停及び読み込み、書き込みを制御しているメモリ制御部である。
【００１０】
上記構成において、実施形態では、ホストコンピュータより受信した印刷データ（ＰＤＬデータ等）に含まれる文字コードに対応するデータをフォントＲＯＭ１０４より読出し伸長して文字パターンを生成し、それをＲＡＭに描画部１０７で描画し、印刷部１１０に出力する処理を行う。印刷部１１０は如何なるものでも良いが、例えばレーザビームプリンタエンジンや、インク液滴を吐出するタイプのエンジン等、高い解像度で印刷するエンジンが望ましい。
【００１１】
上記構成において、本実施形態における特徴となるのは、フォントＲＯＭ１０４に格納されているデータを読出し、伸長する処理であると同時に、そのフォントＲＯＭにフォントデータを格納する際の圧縮手法にに関するものである。
【００１２】
説明が分かりやすい様にするため、先ず、フォントパターンの圧縮について説明する。
【００１３】
図２は、漢字“電”の文字を６４×６４ビットのゴシック体で表現した例である。
【００１４】
このような文字を圧縮する方法にＦＢＥ（Ｆａｓｔ  Ｂｏｕｎｄａｒｙ  Ｅｎｃｏｄｉｎｇ）という圧縮方法が提案されている。以下に、まずこのＦＢＥ圧縮方法について図３及び図４を用いて説明する。
【００１５】
ＦＢＥ圧縮とは、要するに、文字のエッジの変化をハフマン符号化して圧縮する方法である。
【００１６】
説明を簡単なものとするため、図４に適当な図形（２つの孤立した領域が存在する）を示し、これに対するＦＢＥ圧縮を説明することとする。同図において、２つ図形のエッジに沿った「矢印」が各図形の左右エッジの変化を示している。その符号化形式は、
＜Ｌｉｎｅ＞＜ｅｄｇｅ＞・・・（ライン単位での繰り返し）−−−−−−（０）
と、第１符号＜Ｌｉｎｅ＞と第２符合＜ｅｄｇｅ＞の構成で表現するものである。
【００１７】
まず第１符号＜Ｌｉｎｅ＞は、そのラインの前ラインからエッジ数の変化の有無を示している。前ラインとエッジ数が等しい場合にはＬｉｎｅＥＱで表し、変化する場合にはＬｉｎｅＤＩＦ＜Ｎｕｍ＞で表す。ここで＜Ｎｕｍ＞はハフマンコード化された数値で、変化するエッジの個数を示す。
符号化形式の第２符合＜ｅｄｇｅ＞は、前ラインからのエッジがどのように変化するのか、すなわち変化の方向とその移動距離及びエッジの生成、消滅を表現する。
【００１８】
図３の“ＦＢＥの符号化形式”の項目に式（０）は、符号化表現及び実際に割り当てられる符号値を説明している。例として、図３の符号化形式を用いて図４の図形の符号化を行う。図４の右側にＦＢＥ符号化したものを示す。
【００１９】
図４の１ライン目は前ラインがないので、このラインからエッジの生成・消滅の符号化を開始する。すなわち、１ラインの前にエッジ無しの仮想的に０ラインが存在すると見なす。この結果、図示の場合、１ライン目は、エッジが存在しないのでＬｉｎｅＥＱで表現される。
【００２０】
２ライン目は１個の黒ＲＵＮ（“０”及び“１”の連続する領域をＲＵＮと呼ぶ。以下、便宜上“０”の続くＲＵＮを白ＲＵＮ、“１”の続くＲＵＮを黒ＲＵＮと呼ぶことにする）が発生して、それに伴い左右２個のエッジが発生している。このようにエッジは必ず２個ペアで発生・消滅する。
【００２１】
従って、２ライン目の第１符号はＬｉｎｅＤＩＦ＜２＞（エッジが２個増えた）と表現され、黒ＲＵＮがＯＰＥＮ（発生）するまでの白ＲＵＮ長とそこからの黒ＲＵＮ長でＯＰＥＮ＜３，２＞と表現する。
【００２２】
３ライン目は、さらに、１個の黒ＲＵＮが発生して、さらに前ラインから２個のエッジが追加される。従って、エッジの変化があるので第１符合はＬｉｎｅＤＩＦ＜２＞となる。第２符合は、まず前ラインの左エッジが左方向に＋１、右エッジが右方向に＋０に変化するのでａｄｖ１，ａｄｖ０と表現する。ついでその後に黒ＲＵＮが発生するのでＯＰＥＮ＜５、２＞と表現する。この２個目の黒ＲＵＮの発生位置は、直前の白ラン長から表す。また、エッジの変化についてであるが、図３に示すように、左エッジはその変化方向として左側を＋、右エッジはその変化方向として右側を＋として定めている。
【００２３】
４ライン目は、エッジ数の変化はないのでＬｉｎｅＥＱを生成し、最初の黒ＲＵＮの左右エッジに対しａｄｖ１，ａｄｖ２が与えられ、２つ目の黒ＲＵＮに対してａｄｖ１，ａｄｖ１と順に表現される。
【００２４】
５ラインは、はじめに発生したエッジが消滅する。エッジ数は先に説明したように「２」単位の増減であるが、２単位であるが故、その値を表現する際のバイナリレベルでのＬＳＢは０である。そこで、減少を表わす符号としてＬＳＢを反転することで対処できる。従って、エッジ数が２つ変化し、その変化が減少であるから第１符号はＬｉｎｅＤＩＦ＜３＞と表現する（“３”はバイナリ表現で“１１”である）。ついで第２符号は、はじめのエッジが消滅するので、まずＣＬＯＳＥ（消滅）することを表現して、残りのエッジの変化をａｄｖ０，ｓｗ１と表現する。
【００２５】
６ライン目はエッジに変化はないので、ＬｉｎｅＥＱ、ａｄｖ１，ｓｗ＜０＞と表現する。７ライン目は、さらに残りのエッジが消滅するので、ＬｉｎｅＤＩＦ＜３＞、ＣＬＯＳＥと表現して全てのラインのＦＢＥ符号化を完了する。
【００２６】
ここで、ＦＢＥ圧縮符号化形式によると、エッジの変化が順方向（左エッジは左方向、右エッジは右方向）に＋２まで、逆方向は＋１までは非常に短い符号で表現でき、高い圧縮率が期待できる。さらにＲＵＮ長も例えばＲＬ圧縮（ランレングス圧縮：白ＲＵＮ長と黒ＲＵＮ長でラインを圧縮する方法）を固定長（例えば１バイト）で表現する場合、ＲＵＮ長（白ＲＵＮ及び黒ＲＵＮ）が短い場合は非常に効率良く圧縮することが可能である。
【００２７】
かかる点を逆に考察すると、エッジの変化量が大きく、ＲＵＮ長が長い「文字及び記号（図形）」等のパターンは不得意であることがわかる。また、ＦＢＥ圧縮では、ＲＵＮが発生・消滅するごとにＯＰＥＮ・ＣＬＯＳＥの符号（各６ビットで表現）を添付しなければならないので、ＲＵＮが多数発生する場合の文字パターンの場合、圧縮効率が落ちる。
【００２８】
もう一度図２の文字（漢字）“電”を観ると、水平方向に比較的長いＲＵＮが多数存在するのがわかる。これは“電”に限らなず、他の漢字パターンにも言えることである。すなわち、特に漢字パターンは、１、２本の垂直線に多数の水平方向直線が交わっているケースが多く存在する。従って、ＦＢＥ圧縮では、アルファベットや平仮名のような比較的滑らかに連続的な文字は圧縮効率がよいが、漢字のように非連続性の強いもの（エッジの変化量が大きく、ＲＵＮの数も多い）は圧縮効率が落ちることが多い。図２では６４×６４ビットサイズの文字であるが、現在のプリンタの記録解像度が非常に高くなり、生成するフォントパターンが２５６×２５６ビットサイズの大きな文字（特に漢字）になることもあるので、その欠点は顕著なものとなる。
【００２９】
そこで本実施形態では、特に漢字を水平成分（比較的ＲＵＮ長の長い）と垂直成分とに分解して、水平成分をＲＬ圧縮方法、垂直成分をＦＢＥ圧縮方法で圧縮することにより、圧縮効率の更なる向上を目指すものである。
【００３０】
本実施形態の符号化形式を図３の後半の「本実施形態の符号化形式」に示し、以下にそれを説明する。ただし、実施形態でのフォントＲＯＭに格納する圧縮データを生成する際、個々の文字パターンの垂直成分、水平成分の区別は、個々の文字パターンを例えば画面に表示し、個々の線分を指定しては水平成文か垂直成分かユーザが指定することで行うものとする。
【００３１】
まず、垂直成分では、
＜ＲＬ＞＜Ｌｉｎｅ＞＜ｅｄｇｅ＞・・・（ラインの繰り返し）    …（１）
のように３つの符号構成で表現する。第２符合部及び第３符合部はＦＢＥ符号と同じである。第１符号＜ＲＬ＞は、１ビットで表現して、“１”の時は、水平成分が付随することを意味する。
【００３２】
一方、水平符号は、
＜ｒｌ＞＜ＲＬ＞・・・（ラインの繰り返し）              …（２）
のように２つの符号構成で表現する。
【００３３】
第１符号＜ｒｌ＞であるが、ｒｌＥＱの場合は前ラインのＲＬと等しい場合を示し、ｒｌＤＩＦ＜Ｎｕｍ＞は異なることを示している。ここで＜Ｎｕｍ＞はＦＢＥ符号化の場合と同じであり黒ＲＵＮの個数を示す。第２符合＜ＲＬ＞は通常のＲＬ圧縮と同じである。例えば白ＲＵＮ、黒ＲＵＮを固定長の各１バイトで表現する。
【００３４】
図５は、漢字の一部を抜き出したものである。図５（ａ）が通常のＦＢＥ圧縮、図５（ｂ）は本実施形態、すなわち、水平成分はＲＬ圧縮、垂直成分はＦＢＥ圧縮を用いたものの比較である。
【００３５】
同図の右側には圧縮符号が記載してある。図を比較すればわかるように、本実施形態の符号化では、垂直成分ではエッジの飛びがゼロで、最小のＦＢＥ符号で表現できることがわかる。
【００３６】
より分かりやすく説明すれば、例えば、第３ライン目のＦＢＥ符号を見ると、その先頭がＲＬｏｎとなっているので、水平成分のＲＬ符号が付属することが判明する。そして、続くＬｉｎｅＥＱ，ａｄｖ０，ａｄｖ０により、垂直成分（図示の縦線）の水平方向の変化がないことを示し、実際にその水平成分の変化を「ＲＬ領域」で記述した。
【００３７】
図示の場合、ＦＥＢ符号中の水平成分の変化は１ライン目から７ライン目まで変化がない、すなわち、垂直線は、水平線と交わるものの、継続して縦方向に延びていることを記述することに成功する。
【００３８】
一方、左右のエッジが大きな箇所は、結果的にＲＬ領域で示されるように符号で表現されることになり、高い圧縮率が期待できるようになる。特に、６ライン目のＲＬ領域における「ｒｌＥＱ」は、その前回のＲＬ領域として４ライン目と同じであることを示していることに注意されたい。
【００３９】
次に、具体的に示すために図２の“電”文字を例として、水平成分と垂直成分に分解する方法を説明する。
【００４０】
図６は図２における水平成分（図中の斜め線領域）を、図７は図２の垂直成分を示している。さらに、図８は、図６の水平成分を含む領域を抜き出した図である。最後に図９は、図８で垂直成分を抜き取り結合した図である。
【００４１】
図７に示される垂直成分の作成の仕方として、極力余分なＲＵＮが発生しなしように垂直データを作成する。必要であれば、水平成分を交わってもかまわない。もとの図２を通常のＦＢＥ圧縮をかけると、エッジがかなり頻繁に大きく変化して、ＲＵＮの発生も多いが、ＦＢＥ圧縮を施す図７の垂直成分ではＲＵＮの発生は最小で、エッジの飛びも最大＋２以内に収まっているのがわかる。また、最終的な水平成分を表す図９では、比較的前ラインと等しい黒ＲＵＮがあることがわかる。
【００４２】
漢字は縦長の矩形（長方形）の中に上下に水平ラインが重なるように配置される傾向が強い。特にゴシック体のような書体の漢字はｒｌＥＱ（前ラインと等しいＲＵＮ）が発生する可能性が高く圧縮効率が向上する。
【００４３】
実際に図２の６４×６４ビットのマトリックスに描画されている“電”文字パターンは、非圧縮時であると６４×６４＝４０９６ビット必要だが、これを全てＦＢＥ圧縮形式だけを施すと８６０ビットとなる。そして、上記本実施形態の圧縮手法を採用すると６９１ビットにまで更に圧縮できた。すなわち、通常にＦＢＥ圧縮を施すよりもさらに１６９ビット分圧縮効率を向上できたことになる。この差は、文字パターンを構成する画素数が多くなるほど顕著になることは容易に想像できよう。
【００４４】
次に、このように圧縮された文字をフォントＲＯＭに格納する際の圧縮データの構造例及び展開（伸長）する回路構成について図を用いて説明する。
【００４５】
図１０は、図１で説明したシステム構成図の中で特に本発明と関係の深い部分を抜き出したものである。メモリ制御部１０１とフォントＲＯＭ１０２は前記説明したとおりである。図１０の点線で囲まれた部分が、図１におけるＣＰＵ１０８、描画部１０７を包含する処理部を示している。
【００４６】
１００３はＲＯＭＩ／ＦでありフォントＲＯＭ１０４のデータを描画部内の各ブロックからの要求に従って読み込むインターフェースであり、また各ブロックのパラメータレジスタへＣＰＵが値を設定する場合の制御を行う。１００７は描画部内部の内部メモリ（キャッシュメモリ）である。文字の展開を高速にするために１文字分の圧縮データをこの内部メモリ内に一端溜め込み、その後に展開処理を行う。また、内部メモリには展開する文字データ（ビットマップデータ）を格納する場所でもある。１００４の内部メモリＩ／Ｆは、前記内部メモリへの要求へ調停や読み書きの制御を行う。１００５のＦｏｎｔ展開部は、内部メモリに一時格納された圧縮データから文字ビットマップデータへと展開する。１００６は描画回路であり、前記Ｆｏｎｔ展開部で展開された内部メモリ内のビットマップデータを読み取り、各種画像処理（例えば描画演算等）を施して、最終的な印刷データ（ビットマップデータ）を作成する。描画部内のこれらのブロックは内部バス（制御、データ）により互いに接続されている。
【００４７】
図１１は、フォントＲＯＭ（場合によっては一部ＲＡＭ内）内のデータ格納形式を示している。１１０１は各フォントの情報を記載したフォントヘッダテーブルである。１１０２はフォントの実体（ボディ）を示している。各フォントの実体を示すアドレスはヘッダに記載されている。本実施形態では、伸長する際の処理の単純化、及び、それにともなう高速化を得るため、ＦＢＥ領域とＲＬ領域は完全に分離させた。図５（ｂ）に示すように、ＲＬ符号が存在する場合、ＦＢＥのい先頭の符号がＲＬｏｎとなるので、ＦＢＥ符号とＲＬ符号は、その内部の順番さえ正しければ、互いに分離できるのは容易に理解できよう。但し、ライン単位でＦＢＥデータとＲＬデータを配置してもかまわない。
【００４８】
図１２は、フォントヘッダのデータフォーマットの例を示している（内容は図１２を参照、その説明は省略する）。
【００４９】
例えば、フォントボディ０のデータを得たいときには、ＣＰＵが描画部のフォント展開部に対して、フォントヘッダ０を示すアドレスをセットして起動をかける。フォント展開部は、ＲＯＭＩ／Ｆ部を介してヘッダ情報からのパラメータを所定のフォント展開部内レジスタにセット及びフォントボディのデータを内部メモリ上にキャッシングする（本実施形態では、ボディデータも内部メモリに全て取り込んで処理する例を示すが、フォント展開部のＦＢＥ回路ブロック及びＲＬ回路ブロックがそれぞれ必要なフォントＲＯＭ内をアクセスに行ってもよい）。所定量のデータの取り込み及びパラメータの設定が完了した時点でフォント展開部内の各ブロックに対して起動をかけてフォントボディ０を展開（伸長）する。
【００５０】
図１３は、１文字を展開するまでの処理の流れを示すフローチャートであり、図１４はフォント展開部内の回路ブロックである。以下、これらの図を用いて詳細に説明する。
【００５１】
先ず、ステップＳ１３０１では、図１４のＭａｉｎコントローラ１４０４がＣＰＵにより設定されたフォントヘッダのアドレスに対してヘッダ情報を読み込む。ステップＳ１３０２では、Ｍａｉｎコントローラ１４０１がそのヘッダ情報の解析し、圧縮モードを判別する。なお、説明が前後するが、アルファベットやひらかな等はＦＢＥ圧縮形式でも十分な圧縮率が得られるので、ヘッダにはそのフォントパターンがＦＢＥ圧縮形式であるのか、或いはＦＥＢ＋ＲＬ圧縮であるのかを示す情報（１ビットで良いであろう）が格納され、これを解析して圧縮モードを判別することになる。
【００５２】
ステップＳ１３０３では、圧縮モードを解析して、本実施形態の特徴であるＦＢＥ＋ＲＬ圧縮モードであった場合には、ステップＳ１３０５へ進み、図１４のＲＬ回路１４０３及びＦＢＥ回路１４０４に対してＤａｔａＳｅｔＢＵＳ（制御信号も含む）を介して必要なパラメータの設定を行う。違う場合には、他のルーチンへ飛んで１文字の処理を行う。Ｍａｉｎコントローラが所定のパラメータを設定完了したら、ステップＳ１３０６においてＦＢＥ回路とＲＬ回路のコントローラに対して起動信号（図１４のＦＢＥｓｔａｒｔ，ＲＬｓｔａｒｔ）を発行する。
【００５３】
ステップＳ１３０７では、各コントローラはＭａｉｎコントローラによって設定された情報に基づき各圧縮データを必要分逐次読み込み、まず１ライン分の描画準備を行う。ステップＳ１３０８では、Ｍａｉｎコントローラは、各コントローラから準備完了信号（図１４のＦＢＥｒａｄｙ，ＲＬｒａｄｙ）がアクティブになるまで待機する。両信号がアクティブとなったらステップＳ１３０９に進みＭａｉｎコントローラは、両回路に対して同期信号（図１４のｓｙｎｃ）を発行する。
【００５４】
Ｍａｉｎコントローラは、両回路からのデータ（図１４のＦＢＥｏｕｔｐｕｔ，ＲＬｏｕｔｐｕｔ）を図１４のＯＲ回路１４０５においてＯＲ演算（結合処理）を行い、逐次、ＦＩＦＯ１４０６へ格納する。ＦＩＦＯ１４０６に一定量保持したら、内部メモリＩ／Ｆを介して内部メモリに１ライン分を逐次描画する。１３１０では、Ｍａｉｎコントローラが両回路の１ライン分の展開処理終了したかどうかを判定する。１ライン処理終了信号（図１４のＦＢＥｅｎｄ，ＲＬｅｎｄ）がアクティブになったのを確認したら、ステップＳ１３１１に進み、さらに全ライン分の処理が終了したかどうかを判定する。全ライン終了していなければ、図１４のラインカウンタ１４０２を１進め、再び次のラインの処理を開始する。後はこの１連の処理を全ライン終了するまで繰り返し行い、全ライン終了したら１文字の処理を終了して、図１０の描画回路１００６に対して通知する。
【００５５】
描画回路は内部メモリの所定の位置に展開された文字情報を読み取り、必要な描画演算等を行う。ここで、例えば文字サイズが６４×６４ビットであった場合、ＦＢＥ回路はＤＯＴカウンタ（後述する水平方向へのカウンタ）は６４ドット分必ずカウントする。また、ＦＢＥ回路においては、必要分なデータ分の展開処理を完了しても、６４ライン分は、Ｍａｉｎコントローラとやり取りを行う。この場合出力は白データ（“０”データ）を出力する。ＲＬ回路は、必要分の展開処理が完了したら、ＲＬｒａｄｙ信号とＲＬｅｎｄ信号をアクティブにしたまま終了し、白データを出力すればよい。すなわち、ライン方向は、Ｍａｉｎコントローラが、水平方向のドットはＦＢＥコントローラが管理していることになる。
【００５６】
ここで、ＦＢＥ回路を図１５乃至１７、ＲＬ回路を図１８のブロック図を用いて、展開処理のアルゴリズムを説明する。
【００５７】
図１５は、ＦＢＥ回路内部のブロック図である。１５０１は、ＦＢＥコード解析部である。ここでは、ＦＢＥコントローラ１５０８にＭａｉｎコントローラからＦＢＥｓｔａｒｔ信号がくると、ＦＢＥコントローラからの指令により、ＦＢＥコード解析部は１ライン分のＦＢＥコードを読み込み解析を開始する。基本的には内部メモリからのデータをパラレル−シリアル変換して、必要なビット情報ごとに切り出して、各レジスタに設定する。
【００５８】
まず、先頭の第１符合＜ＲＬ＞符号を解析して、水平成分が付属すればＲＬ回路に対してＲＬｏｎ信号をアクティブにする。ついで第２符合＜Ｌｉｎｅ＞を解析してエッジの変化量をレジスタ１５０２に設定して、前ラインのエッジ数を記憶しているレジスタ１５０５とを加減算器１５０６で加算する。その加算結果は現ラインのエッジ数保持レジスタ１５０５に新たなエッジ数として書き込まれる。ここでセレクタ１５０４は、１ライン目においては、まだ前ライン情報がないので直接新しいエッジ保持レジスタに書き込むために使われる。他のデータも１ライン目は同様である。
【００５９】
ここからは２ライン目以降を想定して説明する。新しいエッジ数を保持したら、その新たなエッジ数の情報は、ＦＢＥコード解析部とｅｄｇｅカウンタ１５０７に設定される。ＦＢＥコード解析部では、そのエッジ情報をもとに第３符合＜ｅｄｇｅ＞の解析を行う。ここからは、前ラインまでのエッジアドレスに加減算器を介して、レジスタ１５０２に設定される今回の左右エッジ数の変化量を加減算することによる結果を新しいエッジの保持レジスタ１５０３へと逐次書き込んで行く。この操作をエッジ数分繰り返し、１ライン分のエッジアドレスが全て保持されると、レジスタ１５０８のエッジ数及びエッジアドレス情報を図のＷｒｉｔｅＢａｃｋＬｏｏｐにより、保持レジスタ１５０５に書き戻す。この情報は次のラインデータを作成するために使われる。
【００６０】
ここで、前記全てのレジスタ及びカウンタ、加減算器への制御はＦＢＥコントローラから制御されている（図１５の点線矢印で示す）。また、１５０３及び１５０５はライトイネーブル＆リードセレクタ付きレジスタである。例えば、文字サイズの最大を２５６×２５６ビットとして、エッジの最大数を３２個と固定した場合、１ラインのエッジアドレスは８ビット（１バイト）で指定することができる。これが３２個であるから１６ビット幅のレジスタを１６個含んだレジスタ群となる。
【００６１】
１５０３及び１５０５のレジスタ群は、書き込み動作において、この１６個のどれに書き込むかのライトイネーブル信号を入力信号として持ち、読み出しに置いては、１６個からひとつ選び、さらにそれを下位８ビットと上位８ビットに選択して取り出すことができるセレクト信号を入力信号として持つ保持レジスタである。
【００６２】
図１６は、新しいエッジアドレスを生成する一場面を表した図である。１６０１は前ラインのエッジアドレスを保持するレジスタである（図１５の１５０５）。１６０２は、これから描画する現ラインの新しいエッジアドレスを保持するレジスタである（図１５の１５０３）。中央に図示されている「±」は、ＦＢＥコード解析部が読み取ったエッジの変化量と加減算することを表している。前ラインの左右エッジ１は、それぞれの変化量が加減算され、現ラインの左右エッジ１となる。現ラインの左右エッジ２には、新たなエッジがペアでＯＰＥＮしている。従って、前ラインの左右エッジ２の情報は、それぞれの変化量が加減算されて、現ラインの左右エッジ３として保持される。次に現ラインの左右エッジ４は、前ラインの左右エッジ３がここで消滅するために、前ラインの左右エッジ４に、それぞれの変化量が加減算され、現ラインの左右エッジ４として保持される。
【００６３】
ここで、図１７は図１５のラッチ付き加減算器１５０６の内部ブロックを示した図である。図１６で説明したように、現ラインの左右エッジ２では新たにエッジが生成されるが、その左エッジは、右エッジ１のアドレスに新たにＯＰＥＮした白ＲＵＮ長を加算したものであるから、その場合右エッジ１を加減算した値を加減算データラッチ１７０２に保持しておく。左エッジ２のアドレスは、セレクタ１７０３でラッチ１７０２の値を選択して、白ＲＵＮ長と加算すれば求められる。また、次の右エッジ２のアドレスは、今求めた左エッジ２のアドレスに新たな黒ＲＵＮ長を加算すれば求めることができる。
【００６４】
再び図１５に戻って残りのデータ出力段までの説明を行う。ここまでで、１ラインを描画する準備が整ったら、ＦＢＥコントローラはＭａｉｎコントローラに対してＦＢＥｒａｄｙ信号を発行する。ここでＲＬ回路の準備も整えば、ＭａｉｎコントローラからＦＢＥコントローラへＲＬ回路との同期化のためのｓｙｎｃ信号が発行されるので、ＦＢＥコントローラは、この信号のタイミングにあわせて１ラインのデータを出力することになる。
【００６５】
１５１１はＤＯＴカウンタである。このカウンタには、文字サイズ情報にあわせて、水平方向の最大ドット数までカウントする。１５０９は左右エッジロードレジスタである。左右のエッジをまとめて図示しているが、内部的には左右それぞれ独立に設定されるものとする。ここには、現ラインエッジアドレス保持レジスタ１５０３の値を逐次読み出して、このレジスタに設定する。それをセレクタ１５１０により左から右エッジアドレスに切り替えて、前記ＤＯＴカウンタ値と比較器１５１２で比較して、左右エッジアドレスで一致するごとにトグルして出力データ生成部１５１３で白ＲＵＮデータ（“０”）及び黒ＲＵＮデータ（“１”）をＦＢＥｏｕｔｐｕｔとして出力する。ここで、セレクタ１５１０は、比較器１５１２が一致信号を出すごとに切り替えればよい。この一連の操作をレジスタ１５０７にセットされたエッジ数分処理して、さらに必要な水平サイズ分１５１１のＤＯＴカウンタでカウントした後に、ＦＢＥｅｎｄ信号をＭａｉｎコントローラに発行して１ラインの処理を終了する。
【００６６】
最後に図１８を用いて、ＲＬ回路の内部動作について説明する。
【００６７】
ＲＬコントローラ１８０６は、Ｍａｉｎコントローラから１ライン目のＲＬｓｔａｒｔ信号を受け取ると、ＲＬコード解析部１８０１に指令を出し、以下Ｍａｉｎコントローラのヘッダ解析時に設定されたデータサイズ分ライン単位で出力準備をひたすら行う。
【００６８】
ＲＬコントローラは、１ライ目の出力準備が自身で完了し、尚且つその時点でＦＢＥ回路からＦＢＥｒａｄｙ信号及びＲＬｏｎ信号（ＲＬが付随しているラインであることを示す信号）入力において、ＦＢＥｒａｄｙ信号がアクティブであれば、Ｍａｉｎコントローラに対してＲＬｒａｄｙ信号を返す。この時点でＲＬｏｎ信号がアクティブであれば黒ＲＵＮ数レジスタ１８０２に設定された数分の黒ＲＵＮの出力を完了した時点でＲＬｅｎｄ信号を返す。ここで、ＦＢＥｒａｄｙ信号がアクティブにもかかわらず、ＲＬｏｎ信号がアクティブでなければ、このラインにはＲＬデータは付随しないとみなし、ＲＬｒａｄｙ信号を返すと同時にＲＬｅｎｄ信号を返し、このラインでは、白データのみを出力する。また、このときに準備されたＲＵＮデータは、次回ＲＬｏｎ信号がアクティブのラインに使用される。
【００６９】
ＲＬデータ出力準備までの動作の説明をする。ＲＬコントローラより指令を受けたＲＬコード解析部は、１ライン目のＲＬデータを内部メモリの指定の位置から読み込み、パラレル−シリアル変換して、必要数のビットごとに切り出してＲＬ回路内部の各レジスタに設定する。１ライン目は、前ラインが存在しないので、ここでは２ライン目以降についての説明を行う。ＲＬコード解析部は、まず第１符号＜ｒｌ＞を解析して、ｒｌＤＩＦであれば、次の＜Ｎｕｍ＞の値を、黒ＲＵＮ数レジスタ１８０２に設定する。次にその黒ＲＵＮ数レジスタに設定した数分の白ＲＵＮ及び黒ＲＵＮの値を逐次、白＆黒ＲＵＮ長保持レジスタ１８０３に設定する。設定が完了した時点で設定が終了したことをＲＬコントローラに対して連絡する。
【００７０】
ここで、第１符合＜ｒｌ＞がｒｌＥＱであった場合には、前回設定した黒ＲＵＮ数及び白＆黒ＲＵＮ長をそのまま使用する。ここからは、各種レジスタへの設定準備が整い、ＲＬｏｕｔｐｕｔ（ＲＬの出力データ）を出力するまでを説明する。
【００７１】
ＲＬコントローラは、レジスタの設定準備が完了したことを知ると、１回目の白ＲＵＮ長と黒ＲＵＮ長の値を、白ＲＵＮカウンタ１８０４及び黒ＲＵＮカウンタ１８０５にロードする。全ての出力準備が完了すると、前記の条件に従い、ＲＬｒａｄｙ信号を発行して、Ｍａｉｎコントローラからの出力同期信号ｓｙｎｃに同期して、各カウンタがゼロ値で白ＲＵＮと黒ＲＵＮを切り替えて出力データ生成部１８０７より白ＲＵＮ及び黒ＲＵＮデータを出力する。黒ＲＵＮ数レジスタ分の黒ＲＵＮ出力が終了した時点で、ＲＬｅｎｄ信号を発行して、１ラインの処理を終了する。
【００７２】
以上説明したように、本実施形態によれば、フォントパターン、特に漢字等の水平線の多いパターンの圧縮率を向上させることが可能となる。また、圧縮率向上によって、より多くの書体のフォントをさらに追加可能となり、例えばプリンタに搭載した場合には印刷装置の表現力を向上させることができる。
【００７３】
＜第２の実施形態＞
上記実施形態では、フォントパターンを圧縮する際、垂直成分、水平成分に対しＦＢＥ圧縮、ＲＬ圧縮を行う例を説明したが、両成分に対してＦＢＥ圧縮を施しても構わない。以下、その例を第２の実施形態として説明する。
【００７４】
第１の実施形態との比較のため、第２の実施形態の圧縮ルールを図１９に示す。
【００７５】
まず、垂直成分では、
＜Ｈ＞＜Ｌｉｎｅ＞＜ｅｄｇｅ＞・・・（ラインの繰り返し）−−−−−（１９）
のように３つの符号構成で表現する。第２符合部及び第３符合部はＦＢＥ符号と同じである。第１符号＜Ｈ＞は、１ビットで表現して、“１”の時は、水平成分が付随することを意味する。水平符号では、ＦＢＥ符号と同一である。
【００７６】
＜Ｌｉｎｅ＞＜ｅｄｇｅ＞・・・（ラインの繰り返し）−−−−−−−−（２２）
図２０は、漢字の一部を抜き出したものである。同図（ａ）が通常のＦＢＥ圧縮、同図（ｂ）は本第２の実施形態における圧縮対称画像と符号との関係を示しており、水平成分と垂直成分を個別にＦＢＥ圧縮を用いたものである。
【００７７】
図の左側には圧縮符号が記載してある。図を比較すればわかるように、本第２の符号化では、垂直成分ではエッジの飛びがゼロで、最小のＦＢＥ符号で表現できることがわかる。また、水平成分においても、図２０（ａ）と比較するとエッジの飛びが減少していることがわかる。
【００７８】
水平成分と垂直成分に分解する手法については第１の実施形態と同様であるので、その説明については省略するが、第１のポイントは、図７に示される垂直成分作成の仕方として、極力余分なＲＵＮが発生しなしように垂直データを作成する。必要であれば、水平成分を交わってもかまわない。図２１は、図８で垂直成分を抜き取り結合した図である。第２のポイントとして、図２１に示すように水平成分を結合して、もとデータの含まれる大きなエッジの飛びを最小限に抑えることにある。さらに作成した水平成分をＦＢＥ圧縮を施すのに最適な領域に分割して圧縮をする（図２１の領域ａ、領域ｂ）。図７の垂直成分及び図２１の水平成分をＦＢＥ圧縮する場合と元データである図２を直接ＦＢＥ圧縮する場合とでは、明らかに元データの場合であると、エッジがかなり頻繁に大きく変化して、ＲＵＮの発生も多いが、本第２の実施形態の方法であるとエッジの変化量は最小に抑えられることがわかる。
【００７９】
漢字は縦長の矩形（長方形）の中に上下に水平ラインが重なるように配置される傾向が強い。特にゴシック体のような書体の漢字は、水平成分を結合して一塊のデータとすることにより、左右のエッジの変化量がゼロのライン間も多数発生し、また明朝体のような書体では、特に水平成分において文字の先を鋭利に表現するためにライン間で数個程度の段差をつけるケースが多いが、この場合も水平成分を結合することによりＦＢＥ圧縮の符号化の中でも少ない符号長で表現できる可能性が高く、いづれの場合でも元データをそのまま圧縮するよりも圧縮効率の向上が期待できる。
【００８０】
実際に図２の６４ｘ６４ビットのマトリックスに描画されている”電”文字は、非圧縮時であると６４ｘ６４＝４０９６ビット必要だが、これを全てＦＢＥ圧縮を施すと８６０ビット、本第２の実施形態の方法を用いると７６９ビットであった。通常通りＦＢＥ圧縮を施すよりもさらに９１ビット分圧縮効率を向上できる。この差は、文字サイズが大きくなるほど顕著となることは容易に想像できる。
【００８１】
次に、このように圧縮された文字をフォントＲＯＭに格納する例及び展開（伸長）する回路構成について図を用いて説明する。
【００８２】
図２２は、図１で説明したシステム構成図の中で特に本第２の実施形態と関係の深い部分を抜き出したものである。メモリ制御部１０１とフォントＲＯＭ１０４は前記の第１の実施形態での構成と同じである。図２２の点線で囲まれた部分が描画部の中身をさらに詳細なブロック図で表現している。
【００８３】
２００３のＲＯＭＩ／ＦはフォントＲＯＭのデータを描画部内の各ブロックからの要求に従って読み込むインターフェースであり、また各ブロックのパラメータレジスタへＣＰＵが値を設定する場合の制御を行う。２００７は描画部内部の内部メモリ（キャッシュメモリ）である。文字の展開を高速にするために１文字分の圧縮データをこの内部メモリ内に一端溜め込み、その後に展開処理を行う。また、内部メモリには展開する文字データ（ビットマップデータ）を格納する場所でもある。２００４の内部メモリＩ／Ｆは、前記内部メモリへの要求へ調停や読み書きの制御を行う。２００５のＦｏｎｔ展開部は、内部メモリに一時格納された圧縮データから文字ビットマップデータへと展開する。２００６は描画回路であり、前記Ｆｏｎｔ展開部で展開された内部メモリ内のビットマップデータを読み取り、各種画像処理（例えば描画演算等）を施して、最終的な印字データ（ビットマップデータ）を作成する。描画部内のこれらのブロックは内部バス（制御、データ）により互いに接続されている。
【００８４】
図２３は、フォントＲＯＭ（場合によっては一部ＲＡＭ内）内のデータ格納形式を示している。２１０１は各フォントの情報を記載したフォントヘッダテーブルである。２１０２はフォントの実体（ボディ）を示している。各フォントの実体を示すアドレスはヘッダに記載されている（本実施形態では、垂直成分と水平成分のデータは完全に分離しているが、ライン単位で垂直成分データと水平成分データを配置してもかまわないのは、第１の実施形態と同様である）。
【００８５】
図２４は、フォントヘッダのデータフォーマットの例を示している（内容の説明者省略する）。例えば、フォントボディ０のデータを得たいときには、ＣＰＵが描画部のＦｏｎｔ展開部に対して、Ｆｏｎｔヘッダ０を示すアドレスをセットして起動をかける。Ｆｏｎｔ展開部は、ＲＯＭＩ／Ｆ部を介してヘッダ情報からのパラメータを所定のＦｏｎｔ展開部内レジスタにセット及びフォントボディのデータを内部メモリ上にキャッシングする（本実施形態では、ボディデータも内部メモリに全て取り込んで処理する例を示すが、Ｆｏｎｔ展開部のＦＢＥ回路ブロックが必要なＦｏｎｔＲＯＭ内をアクセスに行ってもよい）。所定量のデータの取り込み及びパラメータの設定が完了した時点でＦｏｎｔ展開部内の各ブロックに対して起動をかけてフォントボディ０を展開（伸長）する。
【００８６】
さらに、図２５に、１文字を展開するまでの処理を示すフローチャートを示し、図２６にＦｏｎｔ展開部内の回路ブロック図を示し、以下にその動作を説明する。
【００８７】
ステップＳ２３０１では、図２６のＭａｉｎコントローラ２４０１がＣＰＵにより設定されたフォントヘッダのアドレスに対してヘッダ情報を読み込む。ステップＳ２３０２では、Ｍａｉｎコントローラがそのヘッダ情報の解析を開始する。ステップＳ２３０３では、圧縮モードを解析して、本第２の実施形態であるＦＢＥ（Ｖ：垂直）＋ＦＢＥ（Ｈ：水平）モードであった場合には、ステップＳ２３０５へ進み、図２６のＦＢＥ回路２４０３に対してＤａｔａＳｅｔＢＵＳ（制御信号も含む）を介して必要なパラメータの設定を行う。また、違う場合には、他のルーチンへ飛んで１文字の処理を行う（ステップＳ２３０４）。
【００８８】
ステップＳ２３０５でＭａｉｎコントローラが所定のパラメータを設定完了したら、ステップＳ２３０６においてＦＢＥ回路のコントローラに対して起動信号（図２６のＳｔａｒｔ信号）を発行する。ステップＳ２３０７では、各コントローラはＭａｉｎコントローラによって設定された情報に基づき各圧縮データを必要分逐次読み込み、まず１ライン分の描画準備を行う。ステップＳ２３０８では、Ｍａｉｎコントローラは、ＦＢＥコントローラから準備完了信号（図２６のＲａｄｙ信号）がアクティブになるまで待機する。Ｒａｄｙ信号がアクティブとなったらステップＳ２３０９に進みＭａｉｎコントローラは、同期信号（図２６のＳｙｎｃ）を発行する。Ｍａｉｎコントローラは、両回路からのデータ（図２６のＶＥＲＴＩＣＡＬ，ＨＯＲＩＺＯＮ）を図２６のＯＲ演算部２４０４でＯＲ演算を行い、逐次ＦＩＦＯ２４０５へ格納する。ＦＩＦＯ２４０５に一定量保持したら、内部メモリＩ／Ｆを介して内部メモリに１ライン分を逐次描画する。
【００８９】
ステップＳ２３１０では、Ｍａｉｎコントローラが１ライン分の展開処理終了したかどうかを判定する。１ライン処理終了信号（図２６のｅｎｄ信号）がアクティブになったのを確認したら、ステップＳ２３１１に進み、さらに全ライン分の処理が終了したかどうかを判定する。全ライン終了していなければ、図２６のラインカウンタ２４０２を１進め、再び次のラインの処理を開始する。後はこの１連の処理を全ライン終了するまで繰り返し行い、全ライン終了したら１文字の処理を終了して、図２２の描画回路２００６に対して通知する。
【００９０】
描画回路は内部メモリの所定の位置に展開された文字情報を読み取り、必要な描画演算等を行う。ここで、例えば文字サイズが６４×６４ビットであった場合、ＦＢＥ回路はＤＯＴカウンタ（後述する水平方向へのカウンタ）は６４ドット分必ずカウントする。また、ＦＢＥ回路においては、必要分なデータ分の展開処理を完了しても、６４ライン分は、Ｍａｉｎコントローラとやり取りを行う。この場合出力は白データ（”０”データ）を出力する。すなわち、ライン方向は、Ｍａｉｎコントローラが、水平方向のドットはＦＢＥコントローラが管理していることになる。
【００９１】
ここで、ＦＢＥ回路を図２７〜図２９のブロック図を用いて、展開処理のアルゴリズムを説明する。図２７は、ＦＢＥ向路内部のブロック図である。２５０１は、ＦＢＥコード解析部である。ここでは、２５０９のＦＢＥコントローラにＭａｉｎコントローラからＳｔａｒｔ信号がくると、ＦＢＥコントローラからの指令により、ＦＢＥコード解析部は１ライン分の垂直及び水平成分ＦＢＥコードを読み込み解析を開始する。基本的には内部メモリからのデータをパラレルーシリアル変換して、必要なビット情報ごとに切り出して、各レジスタに設定する。
【００９２】
まず、垂直成分ＦＢＥコード先頭の第１符合＜Ｈ＞符号を解析して、水平成分が付属すればＦＢＥコントローラに対してＨｏｎ信号をアクティブにする。ついで第２符合＜Ｌｉｎｅ＞を解析してエッジの変化量をレジスタ２５０２に設定して、レジスタ２５０５の前ライン（垂直成分）のエッジ数にレジスタ２５０７の加減算器を用いて加減算を行い、レジスタ２５０４の現ライン（垂直成分）のエッジ数保持レジスタに新たなエッジ数を書き込む。ここでセレクタ２５０３は、１ライン目においては、まだ前ライン情報がないので直接新しいエッジ保持レジスタに書き込むために使われる。他のデータも１ライン目は同様である。ここからは２ライン目以降を想定して説明する。
【００９３】
セレクタ２５０６は、垂直成分の保持レジスタと水平成分の保持レジスタの出力を切り替える働きをする。新しいエッジ数を保持したら、その新たなエッジ数の情報は、ＦＢＥコード解析部とｅｄｇｅカウンタ２５０８に設定される。ＦＢＥコード解析部では、そのエッジ情報をもとに第３符合＜ｅｄｇｅ＞の解析を行う。ここからは、前ラインまでのエッジアドレスに加減算器を介して、レジスタ２５０２に設定される今回の左右エッジ数の変化量を加減算することによる結果を新しいエッジの保持レジスタ２５０５へと垂直及び水平成分について逐次書き込んで行く。この操作をエッジ数分繰り返し、１ライン分の垂直及び水平成分のエッジアドレスが全て保持されると、レジスタ２５０４のエッジ数及びエッジアドレス情報を図のＷｒｉｔｅＢａｃｋＬｏｏｐにより、保持レジスタ２５０５に書き戻す。この情報は次のラインデータを作成するために使われる。ここで、前記全てのレジスタ及びカウンタ、加減算器への制御はＦＢＥコントローラから制御されている（図２７の点線矢印で示す）。また、２５０４及び２５０５はライトイネーブル＆リードセレクタ付きレジスタである。
【００９４】
例えば、文字サイズの最大を２５６×２５６ビットとして、エッジの最大数を３２個と固定した場合、１ラインのエッジアドレスは８ビット（１バイト）で指定することができる。これが３２個であるから１６ビット幅のレジスタを１６個含んだレジスタ群となる。
【００９５】
２５０４及び２５０５のレジスタ群は、書き込み動作において、この１６個のどれに書き込むかのライトイネーブル信号を入力信号として持ち、読み出しに置いては、１６個からひとつ選び、さらにそれを下位８ビットと上位８ビットに選択して取り出すことができるセレクト信号を入力信号としてそれぞれに持つ保持レジスタである。
【００９６】
図２８は、新しいエッジアドレスを生成する一場面を表した図である（垂直、水平成分に共通）。２６０１は前ラインのエッジアドレスを保持するレジスタである（図２７の２５０５）。２６０２は、これから描画する現ラインの新しいエッジアドレスを保持するレジスタである（図２７の２５０４）。中央に図示されている±は、ＦＢＥコード解析部が読み取ったエッジの変化量と加減算することを表している。前ラインの左右エッジ１は、それぞれの変化量が加減算され、現ラインの左右エッジ１となる。現ラインの左右エッジ２には、新たなエッジがペアでＯＰＥＮしている。従って、前ラインの左右エッジ２の情報は、それぞれの変化量が加減算されて、現ラインの左右エッジ３として保持される。次に項ラインの左右エッジ４は、前ラインの左右エッジ３がここで消滅するために、前ラインの左右エッジ４に、それぞれの変化量が加減算され、現ラインの左右エッジ４として保持される。
【００９７】
ここで、図２９は図２７のラッチ付き加減算器２５０７の内部ブロックを示した図である。図２８で説明したように、現ラインの左右エッジ２では新たにエッジが生成されるが、その左エッジは、右エッジ１のアドレスに新たにＯＰＥＮした白ＲＵＮ長を加算したものであるから、その場合右エッジ１を加減算した値を２７０２の加減算データラッチに保持しておき、左エッジ２のアドレスを求める際に、２７０３のセレクタを２７０２のラッチの値を選択して、白ＲＵＮ長と加算すれば求められる。また、次の右エッジ２のアドレスは、今求めた左エッジ２のアドレスに新たな黒ＲＵＮ長を加算すれば求めることができる。再び図２７に戻って残りのデータ出力段までの説明を行う。
【００９８】
ここまでで、１ラインを描画するための垂直及び水平成分の準備が整ったら、ＦＢＥコントローラはＭａｉｎコントローラに対してＲａｄｙ信号を発行する。するとＭａｉｎコントローラからＦＢＥコントローラへ同期化のためのＳｙｎｃ信号が発行されるので、ＦＢＥコントローラは、この信号のタイミングにあわせて１ラインのデータ（ＶＥＲＴＩＣＡＬ、ＨＯＲＩＺＯＮ）を出力することになる。
【００９９】
２５１０はＤＯＴカウンタである。このカウンタには、文字サイズ情報にあわせて、水平方向の最大ドット数までカウントする。２５１１（垂直）及び２５１５（水平）は左右エッジロードレジスタである。左右のエッジをまとめて図示しているが、内部的には左右それぞれ独立に設定されるものとする。ここには、現ラインエッジアドレス保持レジスタ２５０４の値を逐次読み出して、このレジスタに設定する。それを２５１２（垂直）及び２５１６（水平）のセレクタにより左から右エッジアドレスに切り替えて、前記ＤＯＴカウンタ値と２５１３（垂直）及び２５１７（水平）の比較器で比較して、左右エッジアドレスで一致するごとにトグルして２５１４（垂直）及び２５１８（水平）の出力データ生成部で白ＲＵＮデータ（“０”）及び黒ＲＵＮデータ（“１”）をＶＥＲＴＩＣＡＬ（垂直成分データ）、ＨＯＲＩＺＯＮ（水平成分データ）として出力する。ここで、２５１２、２５１６のセレクタは、２５１３、２５１７の比較器が一致信号を出すごとに切り替えればよい。この一連の操作を２５０８に設定されたエッジ数分処理して、さらに必要な水平サイズ分２５１０のＤＯＴカウンタでカウントした後に、Ｅｎｄ信号をＭａｉｎコントローラに発行して１ラインの処理を終了する。
【０１００】
以上説明したように本第２の実施形態によっても、フォント（特に漢字や水平線の多い記号）の圧縮率を向上させることが可能となる。また、圧縮率向上によって、より多くの書体のフォントをさらに追加可能となり、印刷装置の表現力を向上させることができる。
【０１０１】
なお、第１、第２の実施形態では、プリンタに適用する例を説明したが、フォントＲＯＭの内容をフォントデータファイルとしてハードディスク等に記憶管理し、パーソナルコンピュータ等における画面表示用に活用しても構わない。
【０１０２】
従って、本発明は、フォントファイルを利用するコンピュータプログラムをもその範疇とするのは明らかである。
【０１０３】
以上説明した第１、第２の実施形態の如く、本実施形態に開示された趣旨に従った範囲内であれば様々な修正等が可能であるが、少なくとも本願実施形態に従えば次のような実施態様を含むことは当業者であれば想到できよう。
【０１０４】
［実施態様１］  文字記号パターンを圧縮符号化するパターン圧縮符号化方法であって、
圧縮符号化しようとする文字記号パターンの構成する線分を、水平及び垂直の２種類の線分領域とに分離し、分離した垂直領域の線分を、各水平ライン順に、前記水平線分が含まれるか否かを示す符号語、並びに、注目垂直線分の水平方向のエッジの変化を符号語として生成する第１の圧縮符号化工程と、
水平領域の線分については、当該各水平線分のランレングス符号化する第２の圧縮符号化工程と、
前記第１、第２の圧縮符号化工程で符号化して得られた符号語を対応付けて格納する格納工程と
を備えることを特徴とするパターン圧縮符号化方法。
【０１０５】
［実施態様２］  前記第１の圧縮符号化工程は、ＦＢＥ圧縮符号化方法を含み、当該ＦＢＥ圧縮符号化方法で生成される符号語より前に、水平線分が交差しているか否かを示す符号を付加することを特徴とする実施態様１に記載のパターン圧縮符号化方法。
【０１０６】
［実施態様３］  文字記号パターンを圧縮符号化するパターン圧縮符号化方法であって、
圧縮符号化しようとする文字記号パターンの構成する線分を、水平及び垂直の２種類の線分領域とに分離し、分離した垂直領域の線分を、各水平ライン順に、前記水平線分が含まれるか否かを示す符号語、並びに、注目垂直線分の水平方向のエッジの変化を符号語として生成する第１の圧縮符号化工程と、
水平領域の線分については、当該各水平線分の、前回の水平成分のエッジの変化を符号語として生成する第２の圧縮符号化工程と、
前記第１、第２の圧縮符号化工程で符号化して得られた符号語を対応付けて格納する格納工程と
を備えることを特徴とするパターン圧縮符号化方法。
【０１０７】
［実施態様４］  前記第１、第２の圧縮符号化工程は、共に、ＦＢＥ圧縮符号化方法を含み、前記第１の圧縮符号化工程では、当該ＦＢＥ圧縮符号化方法で生成される符号語より前の位置に、水平線分が交差しているか否かを示す符号を付加することを特徴とする実施態様３に記載のパターン圧縮符号化方法。
【０１０８】
［実施態様５］  前記文字記号パターンはゴシック体の漢字パターンであることを特徴とする実施態様１乃至４のいずれか１項に記載のパターン圧縮符号化方法。
【０１０９】
［実施態様６］  実施態様１又は３のいずれかに記載の圧縮符号化方法で圧縮された符号語を格納しているメモリより、符号語を読出し、文字記号パターンを発生するパターン発生方法であって、
前記第１の圧縮符号化工程で生成された符号語に含まれる、水平線分が含まれるか否かを示す符号語を判別する判別工程と、
前記水平線分が含まれるか否かを示す符号語に後続する符号語、及び直前の水平ラインのエッジの位置に基づき、注目水平ラインにおけるエッジ位置を決定し、垂直線分の水平方向におけるパターンを発生する第１の発生工程と、
前記判別工程によって、水平線分が含まれると判断した場合、前記第２の圧縮符号化工程で生成された符号語に基づいて、水平線分のパターンを発生する第２の発生工程と、
前記第１、第２の発生工程を、順に繰り返すことで文字記号パターンを発生することを特徴とするパターン発生方法。
【０１１０】
［実施態様６］  前記メモリはフォントメモリであって、前記第１、第２の発生工程によって発生した文字記号パターンを、所定の印刷手段に出力する工程を備えることを特徴とする実施態様５に記載のパターン発生方法。
【０１１１】
【発明の効果】
以上説明したように本発明によれば、水平、垂直線分を含む文字記号パターン、特に漢字パターンを高い圧縮率で符号化することが可能になる。
【図面の簡単な説明】
【図１】実施形態における装置のブロック構成図である。
【図２】６４×６４ビットサイズのビットマップ・フォント例を示す図である。
【図３】実施形態における符号化ルールを示す図である。
【図４】ＦＢＥ圧縮符号化の例を示す図である。
【図５】漢字の一部分を抜き出して、ＦＢＥ圧縮のみで符号化した場合と本第１の実施形態の手法を用いて符合化した場合とを対比して示す図である。
【図６】漢字パターンの水平線分（斜線部）を、垂直線分と区別して示す図である。
【図７】漢字パターンの垂直線分（斜線部）を、水平線分と区別して示す図である。
【図８】図６の水平線分を有するラインを抜き出して示す図である。
【図９】図８の水平線分を有するラインを結合した例を示す図である。
【図１０】図１における描画部のブロック構成図である。
【図１１】図１におけるフォントＲＯＭ１０４のデータ構造を示す図である。
【図１２】図１１におけるＦｏｎｔヘッダの内容を示す図である。
【図１３】圧縮された１文字を展開（伸長）する手順を示すフローチャートである。
【図１４】Ｆｏｎｔ展開部内のブロック構成図である。
【図１５】図１４におけるＦＢＥ回路１４０４内部のブロック構成図である。
【図１６】現行ラインを描画するためのエッジ・アドレス情報を生成する過程を示す図である。
【図１７】ラッチ付き加減算器の内部構成を示したブロック図である。
【図１８】図１４におけるＲＬ回路１４０３のブロック構成図である。
【図１９】第２の実施形態における圧縮符号化のルールを示す図である。
【図２０】漢字の一部分を抜き出して、ＦＢＥ圧縮のみで符号化した場合と本第２の実施形態の手法を用いて符合化した場合とを対比して示す図である。
【図２１】第２の実施形態における、図８の水平線分を有するラインを結合した例を示す図である。
【図２２】第２の実施形態における図１の描画部のブロック構成図である。
【図２３】第２の実施形態におけるフォントＲＯＭ１０４のデータ構造を示す図である。
【図２４】第２の実施形態におけるＦｏｎｔヘッダの内容を示す図である。
【図２５】第２の実施形態における、圧縮された１文字を展開（伸長）する手順を示すフローチャートである。
【図２６】第２の実施形態におけるＦｏｎｔ展開部内のブロック構成図である。
【図２７】第２の実施形態におけるＦＢＥ回路２４０３内部のブロック構成図である。
【図２８】第２の実施形態における、現行ラインを描画するためのエッジ・アドレス情報を生成する過程を示す図である。
【図２９】図１４におけるＲＬ回路のブロック構成図である。
【図１】
2004158926.tif 000003
【図２】
2004158926.tif 000004
【図３】
2004158926.tif 000005
【図４】
2004158926.tif 000006
【図５】
2004158926.tif 000007
【図６】
2004158926.tif 000008
【図７】
2004158926.tif 000009
【図８】
2004158926.tif 000010
【図９】
2004158926.tif 000011
【図１０】
2004158926.tif 000012
【図１１】
2004158926.tif 000013
【図１２】
2004158926.tif 000014
【図１３】
2004158926.tif 000015
【図１４】
2004158926.tif 000016
【図１５】
2004158926.tif 000017
【図１６】
2004158926.tif 000018
【図１７】
2004158926.tif 000019
【図１８】
2004158926.tif 000020
【図１９】
2004158926.tif 000021
【図２０】
2004158926.tif 000022
【図２１】
2004158926.tif 000023
【図２２】
2004158926.tif 000024
【図２３】
2004158926.tif 000025
【図２４】
2004158926.tif 000026
【図２５】
2004158926.tif 000027
【図２６】
2004158926.tif 000028
【図２７】
2004158926.tif 000029
【図２８】
2004158926.tif 000030
【図２９】
2004158926.tif 000031