(57)【特許請求の範囲】
【請求項１】
水平方向Ｘドット、垂直方向Ｙドットからなるビットマップフォントを水平方向Ｋドット（Ｋは２以上の整数）、垂直方向ＹドットからなるＸ／Ｋ個のサブブロックに分割し、さらに各サブブロックを水平方向Ｋドット、垂直方向１ドットからなる小ブロックに分割し、前記Ｘ／Ｋ個の各サブブロックにおいて、同一内容の小ブロックが垂直方向に連続する回数である同一データ数を符号化するとともに、当該小ブロックの内容である実データを符号化し、前記符号化された同一データ数の符号と前記符号化された実データの符号とを隣合って配置した符号データによりビットマップフォントの圧縮符号化データを生成することを特徴とするビットマップフォントの圧縮符号化方法。
【請求項２】
前記同一データ数をハフマン符号に対応付ける同一データ数用ハフマンテーブルと前記実データをハフマン符号に対応付ける実データ用ハフマンテーブルを前記Ｘ／Ｋ個のサブブロックの各々について作成し、各サブブロックから得られる同一データ数の符号化では、当該サブブロックについて作成された同一データ数用ハフマンテーブルを利用して同一データ数をハフマン符号に変換し、各サブブロックから得られる実データの符号化では、当該サブブロックについて作成された実データ用ハフマンテーブルを利用して実データをハフマン符号に変換することを特徴とする請求項１に記載のビットマップフォントの圧縮符号化方法。
【請求項３】
前記符号データを配置して前記圧縮符号化データを生成する際、前記圧縮符号化データに既に配置された符号データが示す同一データ数のサブブロック毎の累積値が最小であるサブブロックを求め、当該サブブロックにおいて前記圧縮符号化データに未だ配置されておらず、かつ、垂直方向における符号データの出現の順番が最も若い符号データを前記圧縮符号化データに配置する処理を繰り返すことを特徴とする請求項１または２に記載のビットマップフォントの圧縮符号化方法。
【請求項４】
請求項１に記載のビットマップフォントの圧縮符号化方法により圧縮符号化された圧縮符号化データを復号化する方法において、
前記同一データ数を示す符号を復号化して同一データ数を生成するとともに、前記同一データ数を示す符号と隣合う前記実データを示す符号を復号化して実データを生成し、前記復号化した同一データ数が示す回数だけ前記復号化した実データを出力する処理を繰り返すことにより前記各サブブロックを復号化することを特徴とするビットマップフォントの圧縮符号化データの復号化方法。
【請求項５】
請求項１に記載のビットマップフォントの圧縮符号化方法により圧縮符号化された圧縮符号化データを復号化する処理をコンピュータに実行させるプログラムにおいて、
前記各サブブロック毎に、
前記同一データ数を示す符号を復号化して同一データ数を生成する処理と、
前記同一データ数を示す符号と隣合う前記実データを示す符号を復号化して実データを生成する処理と、
前記復号化した同一データ数が示す回数だけ前記復号化した実データを出力する処理を繰り返す処理と
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、フォントを構成する各ドットのオン／オフを１ビットで表現したビットマップフォントの圧縮符号化および復号化を行うための技術に関する。
【背景技術】
【０００２】
この種のビットマップフォントの圧縮符号化アルゴリズムに関する文献として、特許文献１〜３および非特許文献１がある。特許文献１に開示された圧縮符号化アルゴリズムは、ビットマップフォントを複数の矩形のブロック（実施形態では８ドット×８ドット（図４参照））に分割し、複数のブロックが同一のビットマップデータである場合には最初に読み出したブロックのビットマップデータのみを記録し、それ以降のブロックは上記ビットマップデータの格納領域を示すアドレスのみを記録する、というものである。特許文献２に開示された圧縮符号化アルゴリズムでは、複数の比較行バッファを備えて、それらを初期化した後、フォントの画像データの処理対象行のデータとの間でＸＯＲ演算を行う。それらの差分値のうちの最小差分値とその差分値に対応する比較行バッファとを中間データとして出力する。そして、上記比較行バッファを画像データの処理対象行のデータで置き換える。画像データのすべての行についての処理が終了すると、中間データを圧縮符号化する。特許文献３に開示された圧縮符号化アルゴリズムは、漢字フォントデータを構成する漢字構成要素データ（漢字を構成する辺、冠、構え等を表すデータ）の過去における統計的な利用頻度に基づき、データ圧縮対象の漢字フォントデータの中から基準漢字フォントデータを選択して設定し、この設定された基準漢字フォントデータに基づき、データ圧縮対象の漢字フォントデータをデータ圧縮処理する、というものである。非特許文献１に開示された圧縮符号化アルゴリズムは、ビットマップフォントをｍドット×ｎドットのサブブロックに分割し、このサブブロックを構成する各ドットを横に並べ、各ドットの白黒を０、１に置換してビット列を構成し、このビット列を数値とみなしてハフマン符号化するものである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−２２２７４７号公報
【特許文献２】特開２００８−１２４６３２号公報
【特許文献３】特開２００５−１２２１５８号公報
【非特許文献】
【０００４】
【非特許文献１】“画素形漢字パターンの伝送のためのデータ圧縮に関する一考察”、電子通信学会論文誌’８０／０５Ｖｏｌ．Ｊ６３−Ｄ  Ｎｏ．５
【発明の概要】
【発明が解決しようとする課題】
【０００５】
さて、文字等の画像を表示する装置として、フレームバッファ方式の画像表示装置とラインバッファ方式の画像表示装置がある。前者のフレームバッファ方式の画像表示装置は、１画面分の画像データを記憶するフレームバッファを有し、垂直走査周期毎にこのフレームバッファ内の画像データを表示する装置である。このフレームバッファ方式の画像表示装置において、ある画面に文字フォントを表示させる場合、その画面を表示する垂直走査周期に間に合うように、表示対象の文字フォントの圧縮符号化データを復号化してフレームバッファに書き込めばよい。従って、文字フォントの圧縮符号化アルゴリズムに関する制約は少ない。しかし、このフレームバッファ方式の画像表示装置は、フレームバッファとして大容量のＲＡＭ（Random Access Memory）が必要であり、コスト高になるとともに、ＲＡＭが雑音の影響を受けた場合に表示画面が乱れるという問題がある。
【０００６】
後者のラインバッファ方式の画像表示装置は、１ライン分の画像データを記憶するラインバッファを有し、水平走査周期毎にこのラインバッファ内の画像データを表示する装置である。このラインバッファ方式の画像表示装置は、ラインバッファの記憶容量が少なくて済むので、フレームバッファ方式の画像表示装置において発生するコスト高および雑音混入の問題は発生しない。しかし、このラインバッファ方式の画像表示装置に文字フォントを表示させるためには、各水平走査周期において表示対象となる文字フォントの各ラインを１ラインずつラインバッファに書き込む必要がある。一方、上述した特許文献１、３および非特許文献１に開示された圧縮符号化アルゴリズムは、高い圧縮率が得られるものの、各圧縮符号化アルゴリズムにより得られた圧縮符号化データから文字フォントを１ラインずつ復号化することができない。従って、これらの圧縮符号化アルゴリズムは、ラインバッファ方式の画像表示装置には適さない。特許文献２に開示された圧縮符号化アルゴリズムにより圧縮符号化データを生成した場合、この圧縮符号化データから文字フォントを１ラインずつ復号化することが可能である。しかし、この圧縮符号化アルゴリズムには十分な圧縮率が得られないという問題がある。以上のように、従来、高い圧縮率が得られ、かつ、ラインバッファ方式の画像表示装置に適したビットマップフォントの圧縮符号化アルゴリズムは提供されていなかった。
【０００７】
この発明は、以上説明した事情に鑑みてなされたものであり、ビットマップフォントの圧縮符号化データの圧縮率を高くし、かつ、圧縮符号化データからビットマップフォントを１ラインずつ復号化することを可能にする技術的手段を提供することを目的とする。
【課題を解決するための手段】
【０００８】
この発明は、水平方向Ｘドット、垂直方向Ｙドットからなるビットマップフォントを水平方向Ｋドット（Ｋは２以上の整数）、垂直方向ＹドットからなるＸ／Ｋ個のサブブロックに分割し、さらに各サブブロックを水平方向Ｋドット、垂直方向１ドットからなる小ブロックに分割し、前記Ｘ／Ｋ個の各サブブロックにおいて、同一内容の小ブロックが垂直方向に連続する回数である同一データ数を符号化するとともに、連続する小ブロックの内容である実データを符号化することを特徴とするビットマップフォントの圧縮符号化方法を提供する。
【０００９】
一般的に文字のビットマップフォントでは、垂直方向の実データの相関が高く、同一の実データが垂直方向に連続する確率が高い。従って、各サブブロックにおいて発生する同一データ数と実データの組の数が少なくなる場合が多い。従って、この発明によれば高い圧縮率が得られる。
【００１０】
この発明に係る圧縮符号化方法により得られる圧縮符号化データは次のデータ構造を有する。すなわち、水平方向Ｘドット、垂直方向Ｙドットからなるビットマップフォントを分割して得られる水平方向Ｋドット（Ｋは２以上の整数）、垂直方向ＹドットからなるＸ／Ｋ個のサブブロックの各々において、各サブブロックを構成する水平方向Ｋドット、垂直方向１ドットからなる小ブロックが垂直方向に連続して同一内容となる回数である同一データ数を圧縮符号化した符号と、連続する小ブロックの内容である実データを圧縮符号化した符号とを具備することを特徴とするビットマップフォントの圧縮符号化データのデータ構造である。
【００１１】
また、この発明は、このデータ構造を有するビットマップフォントの圧縮符号化データを復号化する方法として、次の復号化方法を提供する。すなわち、前記同一データ数を示す符号を復号化して同一データ数を生成するとともに、前記同一データ数と同じラインに対応した前記実データを示す符号を復号化して実データを生成し、同一データ数が示す回数だけ実データを垂直方向に繰り返す処理を繰り返すことにより前記各サブブロックを復号化することを特徴とするビットマップフォントの圧縮符号化データの復号化方法である。
【００１２】
この復号化方法によれば、サブブロック毎に１ラインずつビットマップフォントを復号化することができる。従って、この復号化方法をラインバッファ方式の画像表示装置に適用し、上記データ構造を有するビットマップフォントの圧縮符号化データを１ラインずつ復号化し、ラインバッファ方式の画像表示装置の表示画面にビットマップフォントを表示させることができる。
【図面の簡単な説明】
【００１３】
【図１】この発明の一実施形態によるビットマップフォントの圧縮符号化方法を実行するための圧縮符号化プログラムの内容を示す図である。
【図２】同実施形態におけるサブブロック毎の同一データ数用ハフマンテーブルおよび実データ用ハフマンテーブルの作成方法を示す図である。
【図３】同実施形態における圧縮符号化データのデータ構造を例示する図である。
【図４】同データ構造におけるデータの並びの決定方法の例を示す図である。
【図５】同実施形態による圧縮符号化データの復号化方法を示す図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照し、この発明の一実施形態について説明する。図１（ａ）は、この発明の一実施形態によるビットマップフォントの圧縮符号化方法を実行するための圧縮符号化プログラムの構成を示す図である。また、図１（ｂ）は同プログラムを構成する各処理の内容を具体的に示す図である。
【００１５】
本実施形態によるビットマップフォントの圧縮符号化プログラムは、図１（ａ）に示すサブブロック分割処理１０１と、同一データ数探索処理１０２と、ハフマン符号化処理１０３と、２進数／１０進数変換処理１０４と、ハフマン符号化処理１０５と、併合処理１０６とをコンピュータに実行させるプログラムである。
【００１６】
サブブロック分割処理１０１では、図１（ｂ）に示すように、圧縮符号化の対象である水平方向Ｘドット、垂直方向Ｙドット（図示の例ではＸ＝１６、Ｙ＝１６）のビットマップフォントを水平方向Ｋドット、垂直方向Ｙドットからなるサブブロックに分割する。好ましい態様において、サブブロックの水平方向のサイズＫは、４ドット、６ドットまたは８ドットである（図示の例ではＫ＝４）。このサイズＫは、圧縮符号化の対象であるビットマップフォントの水平方向のサイズＸを等分割したサイズとなるように、サイズＸに合わせて決定すればよい。
【００１７】
同一データ数探索処理１０２では、Ｋドット×Ｙドットの各サブブロックを水平方向Ｋドット、垂直方向１ドットの小ブロックに分割し、Ｘ／Ｋ個の各サブブロックにおいて、同一内容の小ブロック（以下、小ブロックの内容を実データという）が連続する回数（以下、同一データ数という）を垂直方向に探索する。
【００１８】
図１（ｂ）には、文字Ａを表す１６ドット×１６ドットのビットマップフォントを分割して得られる４個のサブブロックのうち左から３番目のサブブロックについて同一データ数探索処理１０２を実行した結果が例示されている。この例では、ライン０からライン１まで実データ０，０，０，０が２個連続し、ライン２からライン３まで実データ１，０，０，０が２個連続し、ライン４からライン６まで実データ１，１，０，０が３個連続し、…、ラインＹ−３からラインＹ−１まで実データ０，０，０，０が３個連続する、という探索処理結果が得られている。
【００１９】
以上、３番目のサブブロックについての同一データ数探索処理１０２の結果を整理すると次の通りとなる。
ライン              同一データ数            実データ
０〜１                  ２                  ０，０，０，０
２〜３                  ２                  １，０，０，０
４〜６                  ３                  １，１，０，０
：                        ：
Ｙ−３〜Ｙ−１          ３                  ０，０，０，０
【００２０】
このようにして得られる同一データ数および実データの組のうち同一データ数はハフマン符号化処理１０３に、実データは２進数／１０進数変換処理１０４に各々引き渡される。ハフマン符号化処理１０３では、各種の内容の同一データ数をエントロピー符号の一種であるハフマン符号に対応付ける同一データ数用ハフマンテーブルを参照し、この同一データ数用ハフマンテーブルにおいて同一データ数探索処理１０２から引き渡される各同一データ数に対応付けられた各ハフマン符号（以下、単に同一データ数のハフマン符号という）を出力する。図１（ｂ）には、ビットマップフォントのライン２からライン３まで同一の実データが連続している回数を示す同一データ数２が同一データ数のハフマン符号０１に変換される様子が例示されている。なお、ハフマン符号化処理１０３において参照する同一データ数用ハフマンテーブルの詳細については後述する。
【００２１】
２進数／１０進数変換処理１０４では、同一データ数探索処理１０２から引き渡される各実データを２進数表現された数値とみなし、この２進数を１０進数による数値に変換してハフマン符号化処理１０５に引き渡す。ハフマン符号化処理１０５では、各種の内容の実データをハフマン符号に対応付ける実データ用ハフマンテーブルを参照し、この実データ用ハフマンテーブルにおいて２進数／１０進数変換処理１０４から引き渡される各実データ（１０進数）に対応付けられた各ハフマン符号（以下、単に実データのハフマン符号という）を出力する。図１（ｂ）には、ビットマップフォントのライン２からライン３まで連続している実データ１，０，０，０が２進数／１０進数変換処理１０４により１０進数の８に変換され、この８がハフマン符号化処理１０５により実データのハフマン符号１００に変換される様子が例示されている。なお、ハフマン符号化処理１０５において参照する実データ用ハフマンテーブルの詳細についても後述する。
【００２２】
併合処理１０６は、ビットマップフォントの垂直方向の並び順に従って、ハフマン符号化処理１０３から同一データ数のハフマン符号を１個ずつ順次受け取るとともに、ハフマン符号化処理１０５から実データ数のハフマン符号を１個ずつ順次受け取り、１個の同一データ数のハフマン符号の後に同一ラインに対応した１個の実データのハフマン符号が続くように、同一データ数のハフマン符号と実データのハフマン符号を併合し、１サブブロックを圧縮符号化した符号データとして出力する。図１（ｂ）には、ライン２からライン３までに対応した同一データ数のハフマン符号０１と実データのハフマン符号１００が符号データとして順次出力される様子が示されている。図示は省略したが、この後は、ライン４からライン６までに対応した同一データ数のハフマン符号と実データのハフマン符号が順次出力され、…、ラインＹ−３からラインＹ−１までに対応した同一データ数のハフマン符号と実データのハフマン符号が順次出力され、という具合に、ビットマップフォントの垂直方向の並び順に従って、１サブブロック分の同一データ数のハフマン符号と実データのハフマン符号が符号データとして順次かつ交互に出力される。
【００２３】
以上の処理が全てのサブブロックについて実行され、１個のビットマップフォントを圧縮符号化した符号データが得られる。そして、フォントセットを構成する各ビットマップフォントについて以上の圧縮符号化処理が実行され、この結果得られる全てのビットマップフォントの符号データがＲＯＭ（Read Only Memory）等の記憶媒体に格納される。
【００２４】
次に同一データ数用ハフマンテーブルおよび実データ数用ハフマンテーブルについて説明する。本実施形態では、１フォントセット毎に、各種の同一データ数の出現頻度と各種の実データの出現頻度を算出し、出現頻度の高い同一データ数になる程、符号長の短いハフマン符号に対応付ける同一データ数用ハフマンテーブルと、出現頻度の高い実データになる程、符号長の短いハフマン符号に対応付ける実データ用ハフマンテーブルとを作成する。従って、同一データ数用ハフマンテーブルおよび実データ数用ハフマンテーブルは、フォントセット毎に作成されることとなる。ここで、フォントセットとは、日本語フォントのＩＳＯ−２０２２−ＪＰや中国語フォントのＧＢ２３１２のような幾つかのフォントの集合体のことを指す。
【００２５】
一般的に文字のビットマップフォントでは、垂直方向の実データの相関が高く、同一の実データが垂直方向に連続する確率が高い。従って、各サブブロックにおいて発生する同一データ数と実データの組の数が少なくなる場合が多い。そして、本実施形態では、出現頻度の高い同一データ数および出現頻度の高い実データになる程、符号長の短いハフマン符号に変換される。従って、本実施形態によれば、ビットマップフォントを圧縮符号化する際の圧縮率を高くすることができる。
【００２６】
好ましい態様では、さらに圧縮率を高めるため、サブブロック毎に別々の同一データ数用ハフマンテーブルおよび実データ数用ハフマンテーブルを作成して、各サブブロックの圧縮符号化に利用する。何故ならば、例えばビットマップフォントの両端のサブブロックは余白が多く、中央寄りのサブブロックは黒塗り領域が多い等、各サブブロックの水平方向における位置により、各種の同一データ数の出現頻度の分布、各種の実データの出現頻度の分布が異なったものになるからである。
【００２７】
図２はアルファベットのフォントセットの圧縮符号化に用いる同一データ数用ハフマンテーブルおよび実データ数用ハフマンテーブルの作成方法を例示している。この例では、ＡからＺまでの各ビットマップフォントをＳＢ０からＳＢ３までの４個のサブブロックに分割し、サブブロック毎に同一データ数の出現頻度と実データの出現頻度を算出し、同一データ数用ハフマンテーブルと実データ用ハフマンテーブルを作成する。
【００２８】
そして、上述したハフマン符号化処理１０３においてサブブロックＳＢｋ（ｋは０から３までの任意の数）から得られた同一データ数の符号化を行う際には、同サブブロックＳＢｋについて作成された同一データ数用ハフマンテーブルを使用し、上述したハフマン符号化処理１０５においてサブブロックＳＢｋから得られた実データの符号化を行う際には、同サブブロックＳＢｋについて作成された実データ用ハフマンテーブルを使用するのである。
【００２９】
この態様によれば、サブブロック毎に最適化された同一データ数用ハフマンテーブルおよび実データ用ハフマンテーブルを用いて同一データ数のハフマン符号化および実データのハフマン符号化を行うので、全サブブロックに共通のハフマンテーブルを利用する場合に比べて、圧縮率をさらに高めることができる。
【００３０】
本実施形態の効果を確認するため、ビットマップフォントのサイズとして１６×１６と４８×４８の各サイズを選び、ＩＳＯ−２０２２−ＪＰに規定する日本語７３３８文字のフォントセットと、ＧＢ２３１２に規定する中国語７７０８文字のフォントセットについて、本実施形態（サブブロック毎にハフマンテーブルを作成する形態）による圧縮符号化処理を実行し、圧縮率を求めた。この結果、ＩＳＯ−２０２２−ＪＰに規定する日本語７３３８文字のフォントセットに関しては、フォントサイズ１６×１６での圧縮率が６７．２％となり、フォントサイズ４８×４８での圧縮率が２８．５３％となった。また、ＧＢ２３１２に規定する中国語７７０８文字のフォントセットに関しては、フォントサイズ１６×１６での圧縮率が６６．９％となり、フォントサイズ４８×４８での圧縮率が３２．６％となった。本実施形態では特にフォントサイズが大きい場合に高い圧縮率の得られることが確認された。
【００３１】
図３（ａ）は本実施形態において圧縮符号化され、記憶媒体に記憶された１フォントセット分の圧縮符号化データのデータ構造を例示するものである。この例において、圧縮符号化データは、ヘッダと、サブブロックＳＢ０〜ＳＢ３の各々について作成された同一データ数用ハフマンテーブルと、サブブロックＳＢ０〜ＳＢ３の各々について作成された実データ用ハフマンテーブルと、１フォントセットを構成する各フォントの圧縮データを順次並べた構成となっている。ヘッダは、各フォントの圧縮データの符号長等、各フォントの圧縮データへのアクセスに使用される情報を含む。
【００３２】
１つのフォントの圧縮データは、複数の符号データＳＢＣＥ＿ｘ＿ｙを順次並べた構成となっている。ここで、符号データＳＢＣＥ＿ｘ＿ｙは、図３（ｃ）に示すように、サブブロックＳＢｘにおけるｙ番目の同一データ数および実データの組の符号データを意味する。
【００３３】
本実施形態におけるフォントの圧縮データのデータ構造の特徴の１つは、この符号データＳＢＣＥ＿ｘ＿ｙの並びにある。この符号データＳＢＣＥ＿ｘ＿ｙの並びは、フォントの圧縮データの復号化時にビットマップフォントの構成ビットを１ラインずつ復号化するのに適した並びとなっている。
【００３４】
ここで、図３（ｂ）を参照し、１フォントの圧縮データにおいて各符号データＳＢＣＥ＿ｘ＿ｙの出現する順番の決定方法を説明する。図３（ｂ）には、サブブロックＳＢ０〜ＳＢ３が示されるとともに、各サブブロックを構成する小ブロックが細線の矩形で示されている。そして、図３（ｂ）において、太線の矩形は、１つの符号データＳＢＣＥ＿ｘ＿ｙが適用される領域を示しており、太線の矩形の下辺近傍の数字は、図３（ｃ）に示すように、１フォントの圧縮データにおいて符号データＳＢＣＥ＿ｘ＿ｙが出現する順番を示している。
【００３５】
符号データＳＢＣＥ＿ｘ＿ｙの出現の順番の決定方法に関しては各種の態様が考えられるが、例を示すと次の通りである。
【００３６】
＜第１の例＞
この例では、次の手順により圧縮データにおける各符号データＳＢＣＥ＿ｘ＿ｙの順番を決定する。
【００３７】
（１）サブブロックＳＢ０〜ＳＢ３の各々における最初の符号データＳＢＣＥ＿０＿０、ＳＢＣＥ＿１＿０、ＳＢＣＥ＿２＿０、ＳＢＣＥ＿３＿０に順番１、２、３、４を各々割り当てる。また、符号データＳＢＣＥ＿０＿０における同一データ数＝「３」をサブブロックＳＢ０に対応したライン累積値ＬＳＢ０に、符号データＳＢＣＥ＿１＿０における同一データ数＝「２」をサブブロックＳＢ１に対応したライン累積値ＬＳＢ１に、符号データＳＢＣＥ＿２＿０における同一データ数＝「４」をサブブロックＳＢ２に対応したライン累積値ＬＳＢ２に、符号データＳＢＣＥ＿３＿０における同一データ数＝「１」をサブブロックＳＢ３に対応したライン累積値ＬＳＢ３に設定する。
【００３８】
（２）次にライン累積値ＬＳＢ０〜ＬＳＢ３の中から最小のライン累積値ＬＳＢｘを求め、そのライン累積値ＬＳＢｘに対応したサブブロックＳＢｘ（この場合はサブブロックＳＢ３）の各符号データＳＢＣＥ＿ｘ＿ｙの中から順番が未だ割り当てられておらず、かつ、番号ｙの最も若い符号データＳＢＣＥ＿ｘ＿ｙ（この場合はＳＢＣＥ＿３＿１）を選び、その符号データＳＢ＿ｘ＿ｙに順番（この場合は順番５）を割り当てる。ここで、最小のライン累積値ＬＳＢｘが複数発生する場合もあり得る（例えばＬＳＢｘ１およびＬＳＢｘ２（ｘ１＜ｘ２）とする）。この場合、番号ｘの小さいサブブロックＳＢｘ１に対応した符号データＳＢＣＥ＿ｘ１＿ｙに順番を割り当てる。最小のライン累積値ＬＳＢｘが３個以上発生する場合も同様であり、番号ｘの最も小さいサブブロックＳＢｘの符号データＳＢＣＥ＿ｘ＿ｙに順番の割り当てを行う。
【００３９】
（３）次に上記（２）において順番の割り当てを行ったサブブロックＳＢｘの符号データＳＢＣＥ＿ｘ＿ｙ（この場合、ＳＢＣＥ＿３＿１）の同一データ数（この場合、同一データ数＝「２」）をサブブロックＳＢｘに対応したライン累積値ＬＳＢｘ（この場合、ＬＳＢ３）に加える（この結果、ＬＳＢ３＝「３」となる）。
そして、上記（２）に戻って同様な処理を繰り返す。
【００４０】
以上の処理の繰り返しにおいて、ライン累積値ＬＳＢ０〜ＬＳＢ３および順番が割り当てられる符号データの変遷を時系列的に示すと次のようになる。
ＬＳＢ０    ＬＳＢ１    ＬＳＢ２    ＬＳＢ３      順番を割り当てた符号データ
３          ２          ４          １          ＳＢＣＥ＿０＿０
〜ＳＢＣＥ＿３＿０
３          ２          ４          ３          ＳＢＣＥ＿３＿１
３          ５          ４          ３          ＳＢＣＥ＿１＿１
７          ５          ４          ３          ＳＢＣＥ＿０＿１
（以下、省略）
【００４１】
上記の例において、符号データＳＢＣＥ＿１＿１に順序を割り当てた後、ライン累積値ＬＳＢ０およびＬＳＢ３の両方が最小値「３」となっている。この場合、ライン累積値ＬＳＢ０に対応したサブブロックＳＢ０の方がライン累積値ＬＳＢ３に対応したサブブロックＳＢ３よりもサブブロックＳＢｘの番号ｘが小さいので、サブブロックＳＢ０の符号データＳＢＣＥ＿０＿１に順序「７」が割り当てられている。
【００４２】
＜第２の例＞
図４は、圧縮データにおける各符号データＳＢＣＥ＿ｘ＿ｙの順番の決定方法の第２の例を示すものである。ここでは、図４に示すように、１個の符号データＳＢＣＥ＿ｘ＿ｙが同一データ数ＳＢＮ＿ｘ＿ｙおよび実データＳＢＤ＿ｘ＿ｙ（ここでは、いずれもハフマン符号化前のデータを意味する。）から構成されているものとする。第２の例では、次の手順により圧縮データにおける各符号データＳＢＣＥ＿ｘ＿ｙの順番を決定する。
【００４３】
（１）サブブロックＳＢ０〜ＳＢ３の各々に対応して設けた同一データ数カウンタＮＳＢ０〜ＮＳＢ３に初期値「０」を設定する。
（２）同一データ数カウンタＮＳＢ０〜ＮＳＢ３の中からカウント値が「０」であるものを探索し、その探索した同一データ数カウンタＮＳＢｘに対応したサブブロックＳＢｘに属する符号データＳＢＣＥ＿ｘ＿ｙであって、出現の順番が未だ割り当てられておらず、かつ、番号ｙの最も若い符号データＳＢＣＥ＿ｘ＿ｙに順番を割り当てる。また、あるサブブロックＳＢｘに属する符号データＳＢＣＥ＿ｘ＿ｙに順番の割り当てを行った場合には、その符号データＳＢＣＥ＿ｘ＿ｙにおける同一データ数ＳＢＮ＿ｘ＿ｙをそのサブブロックＳＢｘに対応した同一データ数カウンタＮＳＢｘに設定する。ここで、複数の同一データ数カウンタＮＳＢｘの値が同時に「０」となる場合もある。この場合、番号ｘの小さいサブブロックＳＢｘ１に対応した符号データＳＢＣＥ＿ｘ１＿ｙから順に順番を割り当てる。第１回目は、同一データ数カウンタＮＳＢ０〜ＮＳＢ３の全てが「０」になっている。従って、図４に示すように、符号データＳＢＣＥ＿０＿０、ＳＢＣＥ＿１＿０、ＳＢＣＥ＿２＿０、ＳＢＣＥ＿３＿０に対して、順番１、２、３、４が各々割り当てられ、同一データ数カウンタＮＳＢ０、ＮＳＢ１、ＮＳＢ２、ＮＳＢ３に対し、同一データ数ＳＢＮ＿０＿０＝「３」、ＳＢＮ＿１＿０＝「２」、ＳＢＮ＿２＿０＝「４」、ＳＢＮ＿３＿０＝「１」が各々設定されることとなる。
【００４４】
（３）次に同一データ数カウンタＮＳＢ０〜ＮＳＢ３の各カウント値を「１」だけダウンカウントする。そして、上記（２）に戻って同様な処理を繰り返す。
【００４５】
この結果、２回目の上記処理（２）では、同一データ数カウンタＮＳＢ３が「０」となって、サブブロックＳＢ３に属する符号データＳＢＣＥ＿３＿１に順番５が割り当てられ、同一データ数カウンタＮＳＢ３に同一データ数ＳＢＮ＿３＿１＝「２」が設定される。次に３回目の上記処理（２）では、同一データ数カウンタＮＳＢ１が「０」となって、サブブロックＳＢ１に属する符号データＳＢＣＥ＿１＿１に順番６が割り当てられ、同一データ数カウンタＮＳＢ１に同一データ数ＳＢＮ＿１＿１＝「３」が設定される。次に４回目の上記処理（２）では、同一データ数カウンタＮＳＢ０およびＮＳＢ３が同時に「０」となる。この場合、サブブロックＳＢ０およびＳＢ３のうちサブブロックＳＢ０が優先されるため、符号データＳＢＣＥ＿０＿１に順番７が、符号データＳＢＣＥ＿３＿２に順番８が割り当てられる。また、同一データ数カウンタＮＳＢ０に同一データ数ＳＢＮ＿０＿１＝「４」が、同一データ数カウンタＮＳＢ３に同一データ数ＳＢＮ＿３＿２＝「３」が各々設定される。
以下、同様である。
以上が本実施形態によるフォントの圧縮データのデータ構造である。
【００４６】
次に、以上説明したフォントの圧縮データを読み出してフォントデータを復元する復号化方法について説明する。まず、図３（ａ）に示すヘッダを参照して、同一データ数用ハフマンテーブル、実データ用ハフマンテーブルを読み出し、ハフマン符号の復号化に備える。次に出力対象であるフォントの圧縮データを読み出し、その復号化を行う。図５はこの場合の１フォント分の復号化処理の内容を示す図である。
【００４７】
この復号化処理では、同一データ数カウンタＮＳＢ０〜ＮＳＢ３と、出力データバッファＤＳＢ０〜ＤＳＢ４を用いて、前掲図３（ａ）のデータ構造を持った圧縮データの復号化を行う。ここで、同一データ数カウンタＮＳＢ０〜ＮＳＢ３は、前掲図４のものと同じ役割を果たすカウンタである。また、出力データバッファＤＳＢ０〜ＤＳＢ４は、各水平走査周期においてラインバッファに出力する１ライン分のドットデータを記憶する手段を構成しており、各出力データバッファＤＳＢｘ（ｘ＝０〜３）は、１ライン分のドットデータのうちサブブロックＳＢｘに属する４ドットのデータを記憶するものである。
【００４８】
ここでは、前掲図３（ａ）の圧縮データの復号化を例に本実施形態による復号化処理を説明する。また、図４の例と同様、１個の符号データＳＢＣＥ＿ｘ＿ｙが同一データ数ＳＢＮ＿ｘ＿ｙおよび実データＳＢＤ＿ｘ＿ｙ（ここでは、いずれもハフマン符号化前のデータを意味する。）から構成されているものとする。
【００４９】
本実施形態による復号化処理では、次の処理（１）〜（３）のうち処理（１）を最初に実行し、以後、フォントの表示を行う表示器の水平走査周期に同期して、処理（２）および（３）を繰り返すことにより圧縮データの復号化を行う。
【００５０】
（１）サブブロックＳＢ０〜ＳＢ３の各々に対応して設けた同一データ数カウンタＮＳＢ０〜ＮＳＢ３に初期値「０」を設定する。
【００５１】
（２）同一データ数カウンタＮＳＢ０〜ＮＳＢ３の中からカウント値が「０」であるものを探索し、この探索した数と同じ数の符号データＳＢＣＥ＿ｘ＿ｙを所望のフォントの圧縮データ（ここでは図３（ａ）における１番目のフォント圧縮データとする）の中から読み出す。そして、読み出した１または複数の符号データＳＢＣＥ＿ｘ＿ｙにおける同一データ数ＳＢＮ＿ｘ＿ｙをカウント値が「０」である同一データ数カウンタＮＳＢｘに設定し、実データＳＢＤ＿ｘ＿ｙをこの同一データ数カウンタＮＳＢｘと同じサブブロックＳＢｘに対応した出力データバッファＤＳＢｘに設定する。ここで、複数の同一データ数カウンタＮＳＢｘの値が同時に「０」となって、複数の符号データＳＢＣＥ＿ｘ＿ｙを読み出した場合、読み出した複数の符号データＳＢＣＥ＿ｘ＿ｙにおける同一データ数ＳＢＮ＿ｘ＿ｙおよび実データＳＢＤ＿ｘ＿ｙの組を各々の読み出し順に書き込み対象とする。また、同時に「０」になった複数の同一データ数カウンタＮＳＢｘに対応した各サブブロックＳＢｘのうち番号ｘの小さいサブブロックに対応した同一データ数カウンタＮＳＢｘおよび出力データバッファＤＳＢｘの組から順に書き込み先とする。そして、順位の若いものから順に、書き込み対象である同一データ数ＳＢＮ＿ｘ＿ｙおよび実データＳＢＤ＿ｘ＿ｙの組を書き込み先である同一データ数カウンタＮＳＢｘおよび出力データバッファＤＳＢｘに各々書き込んでゆく。第１回目は、４個の同一データ数カウンタＮＳＢ０〜ＮＳＢ３の全てが「０」になっている。従って、図３（ａ）に示す４個の符号データＳＢＣＥ＿０＿０、ＳＢＣＥ＿１＿０、ＳＢＣＥ＿２＿０、ＳＢＣＥ＿３＿０が順に読み出され、同一データ数カウンタＮＳＢ０、ＮＳＢ１、ＮＳＢ２、ＮＳＢ３に対し、同一データ数ＳＢＮ＿０＿０＝「３」、ＳＢＮ＿１＿０＝「２」、ＳＢＮ＿２＿０＝「４」、ＳＢＮ＿０＿０＝「１」が各々設定されることとなる。また、出力データバッファＤＳＢ０、ＤＳＢ１、ＤＳＢ２、ＤＳＢ３に対し、実データＳＢＤ＿０＿０、ＳＢＤ＿１＿０、ＳＢＤ＿２＿０、ＳＢＤ＿３＿０が各々設定されることとなる。
【００５２】
（３）次に同一データ数カウンタＮＳＢ０〜ＮＳＢ３の各カウント値を「１」だけダウンカウントする。また、出力データバッファＤＳＢ０〜ＤＳＢ３内の実データをラインバッファに転送する。そして、上記（２）に戻って同様な処理を繰り返す。
【００５３】
この結果、２回目の上記処理（２）では、同一データ数カウンタＮＳＢ３が「０」となって、図３（ａ）に示す符号データＳＢＣＥ＿３＿１が圧縮データの中から読み出される。そして、同符号データＳＢＣＥ＿３＿１における同一データ数ＳＢＮ＿３＿１＝「２」が同一データ数カウンタＮＳＢ３に設定され、同符号データＳＢＣＥ＿３＿１における実データＳＢＤ＿３＿１が出力データバッファＤＳＢ３に設定される。次に３回目の上記処理（２）では、同一データ数カウンタＮＳＢ１が「０」となって、図３（ａ）における符号データＳＢＣＥ＿１＿１が圧縮データの中から読み出される。そして、同符号データＳＢＣＥ＿１＿１における同一データ数ＳＢＮ＿１＿１＝「３」が同一データ数カウンタＮＳＢ１に設定され、同符号データＳＢＣＥ＿１＿１における実データＳＢＤ＿１＿１が出力データバッファＤＳＢ１に設定される。次に４回目の上記処理（２）では、同一データ数カウンタＮＳＢ０およびＮＳＢ３が同時に「０」となって、図３（ａ）に示す符号データＳＢＣＥ＿０＿１、ＳＢＣＥ＿３＿２が圧縮データの中から順次読み出される。この場合、サブブロックＳＢ０およびＳＢ３のうちサブブロックＳＢ０が優先されるため、符号データＳＢＣＥ＿０＿１における同一データ数ＳＢＮ＿０＿１＝「４」が同一データ数カウンタＮＳＢ０に設定され、符号データＳＢＣＥ＿３＿２における同一データ数ＳＢＮ＿３＿２＝「３」が同一データ数カウンタＮＳＢ３に各々設定される。また、符号データＳＢＣＥ＿０＿１における実データ数ＳＢＤ＿０＿１が出力データバッファＤＳＢ０に設定され、符号データＳＢＣＥ＿３＿２における実データＳＢＤ＿３＿２が出力データバッファＤＳＢ３に各々設定される。
以下、同様である。
【００５４】
以上のように、本実施形態によれば、水平走査周期に同期して、所望のフォントの圧縮データをライン単位で復号化し、フォントのドットデータを１ラインずつラインバッファに格納することができる。
【００５５】
＜他の実施形態＞
以上、この発明の一実施形態を説明したが、この発明には、他にも各種の実施形態が考えられる。例えば次の通りである。
【００５６】
（１）上記実施形態では、２進数の実データを１０進数に変換してからハフマン符号に変換したが、２進数の実データをハフマン符号に直接変換するようにしてもよい。
【００５７】
（２）上記実施形態では、この発明による圧縮符号化方法を実行するための圧縮符号化プログラムと、この発明による復号化方法を実行するための復号化プログラムを開示した。しかし、この発明は、同圧縮符号化方法に従ってビットマップフォントの圧縮符号化を行うエンコーダ（圧縮符号化装置）または同復号化方法に従って圧縮符号化データの復号化を行うデコーダ（復号化装置）として実施してもよい。ここで、エンコーダやデコーダは、上記圧縮符号化プログラムまたは復号化プログラムがインストールされたＲＯＭと、このＲＯＭ内のプログラムを実行するプロセッサとにより構成してもよく、上記圧縮符号化プログラムまたは復号化プログラムに従って実行される処理と同じ処理を実行する電子回路により構成してもよい。また、エンコーダやデコーダは単体の製品としてもよく、他の装置とともに大規模な製品の中に組み込んでもよい。例えばラインバッファ方式の画像表示装置を実現するための画像ＬＳＩの回路の一部として、上記デコーダを実現する態様が考えられる。
【符号の説明】
【００５８】
１０１……サブブロック分割処理、１０２……同一データ数探索処理、１０３，１０５……ハフマン符号化処理、１０４……２進数／１０進数変換処理、１０６……併合処理。
【図１】
0005630129.tif 000002
【図２】
0005630129.tif 000003
【図３】
0005630129.tif 000004
【図４】
0005630129.tif 000005
【図５】
0005630129.tif 000006