JPH08130647A - データ圧縮方法及び装置、データ伸長方法及び装置 - Google Patents
データ圧縮方法及び装置、データ伸長方法及び装置Info
- Publication number
- JPH08130647A JPH08130647A JP6264120A JP26412094A JPH08130647A JP H08130647 A JPH08130647 A JP H08130647A JP 6264120 A JP6264120 A JP 6264120A JP 26412094 A JP26412094 A JP 26412094A JP H08130647 A JPH08130647 A JP H08130647A
- Authority
- JP
- Japan
- Prior art keywords
- word
- byte
- value
- stored
- data stream
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Compression Of Band Width Or Redundancy In Fax (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
(57)【要約】
【目的】 印刷用データ・ストリームに適合するデータ
圧縮及び伸長技法を提供すること。 【構成】 1ワード(バイト)内に白ワード(バイト)
の長さと黒ワード(バイト)の長さを両方記述可能な合
理化された制御ワードを使用することによって、白ワー
ドと黒ワードが比較的短い周期で規則的にあらわれる、
コンピュータによって生成された罫線帳票、ハーフ・ト
ーン、グラフィックスなどの規則的なイメージ・データ
を極めて効率的に圧縮する。
圧縮及び伸長技法を提供すること。 【構成】 1ワード(バイト)内に白ワード(バイト)
の長さと黒ワード(バイト)の長さを両方記述可能な合
理化された制御ワードを使用することによって、白ワー
ドと黒ワードが比較的短い周期で規則的にあらわれる、
コンピュータによって生成された罫線帳票、ハーフ・ト
ーン、グラフィックスなどの規則的なイメージ・データ
を極めて効率的に圧縮する。
Description
【0001】
【産業上の利用分野】この発明は、データ圧縮及び伸長
を行うための方法及びシステムに関し、特に、印刷用デ
ータ・ストリームに適合するデータ圧縮及び伸長のため
の方法及びシステムに関するものである。
を行うための方法及びシステムに関し、特に、印刷用デ
ータ・ストリームに適合するデータ圧縮及び伸長のため
の方法及びシステムに関するものである。
【0002】
【従来の技術】パーソナル・コンピュータが使用され始
めた初期の頃は、印刷データのほとんどは、通常の文字
であり、それにときどき罫線が含まれる程度であった。
そして、典型的なシステムにおいては、プリンタに、個
々の文字に対応するフォントを格納したROM(読み出
し専用メモリ)を搭載し、パーソナル・コンピュータの
側からは、個々の文字に対応するコードを含む印刷デー
タ・ストリームをプリンタに送ることによって、印刷が
行われた。
めた初期の頃は、印刷データのほとんどは、通常の文字
であり、それにときどき罫線が含まれる程度であった。
そして、典型的なシステムにおいては、プリンタに、個
々の文字に対応するフォントを格納したROM(読み出
し専用メモリ)を搭載し、パーソナル・コンピュータの
側からは、個々の文字に対応するコードを含む印刷デー
タ・ストリームをプリンタに送ることによって、印刷が
行われた。
【0003】そのような場合、個々の文字は、1バイト
乃至2バイトであらわされるので、A4の用紙1枚に相
当するデータ・ストリームの量は、高々5000バイト
程度にしかならない。ところで、一般的に、通常望まし
いとされる印刷速度は、毎分8ページ以上であるが、す
ると、文字コードからなる印刷データ・ストリームにお
いては、パーソナル・コンピュータは、40Kバイト/
分程度のデータ処理を行えばよいので、これは、低速な
CPUでも造作なく処理し得る程度のものである。従っ
て、文字コードからなる印刷データ・ストリームの印刷
においてボトルネックとなるのは、寧ろプリンタ側の紙
送り速度などの機械的な特性であって、パーソナル・コ
ンピュータからプリンタ・ポートを介してのデータ転送
経路がボトルネックとなることはまず考えられない。
乃至2バイトであらわされるので、A4の用紙1枚に相
当するデータ・ストリームの量は、高々5000バイト
程度にしかならない。ところで、一般的に、通常望まし
いとされる印刷速度は、毎分8ページ以上であるが、す
ると、文字コードからなる印刷データ・ストリームにお
いては、パーソナル・コンピュータは、40Kバイト/
分程度のデータ処理を行えばよいので、これは、低速な
CPUでも造作なく処理し得る程度のものである。従っ
て、文字コードからなる印刷データ・ストリームの印刷
においてボトルネックとなるのは、寧ろプリンタ側の紙
送り速度などの機械的な特性であって、パーソナル・コ
ンピュータからプリンタ・ポートを介してのデータ転送
経路がボトルネックとなることはまず考えられない。
【0004】さて、最近のプロセッサの能力の増大や、
メモリ、ハードディスクなどの価格の低下、性能の向上
に伴って、OS/2(IBMの商標)、Windows
(マイクロソフトの商標)などのグラフィック・ユーザ
ー・インターフェース(GUI)をもつオペレーティン
グ・システムが頻繁に利用されるようになってきてい
る。これらのGUIシステムにおいては、文字の印刷で
あっても、それを文字コードとしてプリンタに送るので
はなく、一旦メモリ上でイメージ(ビットマップ)に展
開し、そうして展開した印刷イメージをプリンタに送る
ようにされる。なぜなら、もともと、GUI環境では、
画像バッファ上でビットマップ形式で表示イメージが存
在しているので、そのようにすることによって、マルチ
フォントや、文字とグラフ、イメージなどが混在表示さ
れた画面の表示をそのまま印刷する、いわゆるWysi
Wygが達成されるからである。
メモリ、ハードディスクなどの価格の低下、性能の向上
に伴って、OS/2(IBMの商標)、Windows
(マイクロソフトの商標)などのグラフィック・ユーザ
ー・インターフェース(GUI)をもつオペレーティン
グ・システムが頻繁に利用されるようになってきてい
る。これらのGUIシステムにおいては、文字の印刷で
あっても、それを文字コードとしてプリンタに送るので
はなく、一旦メモリ上でイメージ(ビットマップ)に展
開し、そうして展開した印刷イメージをプリンタに送る
ようにされる。なぜなら、もともと、GUI環境では、
画像バッファ上でビットマップ形式で表示イメージが存
在しているので、そのようにすることによって、マルチ
フォントや、文字とグラフ、イメージなどが混在表示さ
れた画面の表示をそのまま印刷する、いわゆるWysi
Wygが達成されるからである。
【0005】ところが、そのようなグラフやイメージを
含む印刷データ・ストリーム、すなわち非コード・デー
タ印刷ストリームにおいては、文字コードの場合のよう
に個々の印刷要素を予めコード化しておくことが不可能
なので、印刷すべき領域はビットマップのデータとして
あらわされることになる。すると、文字コードの場合で
は2バイトで済む領域をビットマップであらわすことが
必要となるために、A4一枚に700Kバイト程度もの
データ量を要することになる。
含む印刷データ・ストリーム、すなわち非コード・デー
タ印刷ストリームにおいては、文字コードの場合のよう
に個々の印刷要素を予めコード化しておくことが不可能
なので、印刷すべき領域はビットマップのデータとして
あらわされることになる。すると、文字コードの場合で
は2バイトで済む領域をビットマップであらわすことが
必要となるために、A4一枚に700Kバイト程度もの
データ量を要することになる。
【0006】従って、非コード・データの印刷データ・
ストリームの場合、コンピュータ側からプリンタへのデ
ータ転送速度(一般的に約20Kバイト/秒程度)がボ
トルネックになり、比較的高速のページ・プリンタを以
ってしても、例えば毎分2ページ程度の印刷速度しか達
成できない、ということがあり得る。
ストリームの場合、コンピュータ側からプリンタへのデ
ータ転送速度(一般的に約20Kバイト/秒程度)がボ
トルネックになり、比較的高速のページ・プリンタを以
ってしても、例えば毎分2ページ程度の印刷速度しか達
成できない、ということがあり得る。
【0007】そこで、従来より、プリンタに印刷データ
・ストリームを転送する前に、コンピュータ側でデータ
・ストリームを圧縮し、プリンタ側で、そのデータ・ス
トリームをバッファ上で伸長して印刷することによっ
て、コンピュータ側からプリンタへのデータ転送速度の
ボトルネックを回避することが試みられている。
・ストリームを転送する前に、コンピュータ側でデータ
・ストリームを圧縮し、プリンタ側で、そのデータ・ス
トリームをバッファ上で伸長して印刷することによっ
て、コンピュータ側からプリンタへのデータ転送速度の
ボトルネックを回避することが試みられている。
【0008】例えば、特開昭62−287332号公報
は、印刷装置のスプールに記憶されるデータ量及びスプ
ールからのデータ転送量を減少させるために、連続する
空白などの文字の並びを圧縮することを開示する。
は、印刷装置のスプールに記憶されるデータ量及びスプ
ールからのデータ転送量を減少させるために、連続する
空白などの文字の並びを圧縮することを開示する。
【0009】特に、データ・ストリームの圧縮方法につ
いては、以下のような刊行物に記載されている技法が知
られている。
いては、以下のような刊行物に記載されている技法が知
られている。
【0010】特開昭61−236224号公報は、3バ
イト以上連続する0またはスペースのデータ列を圧縮対
象として、データ列を、0またはスペースの識別符号と
そのデータ列のバイト数とからなる制御符号に変換し、
非圧縮対象のデータの前に、非圧縮対象をあらわす符号
と該非圧縮対象のデータのバイト数をあらわす符号とか
らなる制御符号を付加することを開示する。
イト以上連続する0またはスペースのデータ列を圧縮対
象として、データ列を、0またはスペースの識別符号と
そのデータ列のバイト数とからなる制御符号に変換し、
非圧縮対象のデータの前に、非圧縮対象をあらわす符号
と該非圧縮対象のデータのバイト数をあらわす符号とか
らなる制御符号を付加することを開示する。
【0011】特開平3−6924号公報は、送信する情
報において、連続した同一文字が一定以上あった場合は
その先頭に特殊コードを付与し、その特殊コードに続い
て連続した同一文字の数をあらわすカウント・バイトを
付加し、それに続いて実際の文字のコードを出力するこ
とにより圧縮を行うことを開示する。
報において、連続した同一文字が一定以上あった場合は
その先頭に特殊コードを付与し、その特殊コードに続い
て連続した同一文字の数をあらわすカウント・バイトを
付加し、それに続いて実際の文字のコードを出力するこ
とにより圧縮を行うことを開示する。
【0012】特開平4−175036号公報は、入力デ
ータより1バイト以上の連続するパターンを検出して、
該パターンを構成するバイト数と、前記連続するパター
ンの数と、前記連続するパターンの1個を出力するよう
に圧縮を行うことを開示する。
ータより1バイト以上の連続するパターンを検出して、
該パターンを構成するバイト数と、前記連続するパター
ンの数と、前記連続するパターンの1個を出力するよう
に圧縮を行うことを開示する。
【0013】これらの圧縮技法は、スペースや同一の文
字が連続して現れる場合のような特定の性質のデータ・
ストリームの圧縮には有効である。
字が連続して現れる場合のような特定の性質のデータ・
ストリームの圧縮には有効である。
【0014】さらに、MMRという圧縮方式を利用した
印刷データ・ストリームの圧縮技法を採用するシステム
も知られている。MMRは本来的に、タイプされたアル
ファベット文字のイメージを効果的に圧縮できるよう
に、統計的に解析することによって考案された技法であ
るため、例えば英文の印刷イメージの圧縮を効率的に行
うことができる、という性質を有する。
印刷データ・ストリームの圧縮技法を採用するシステム
も知られている。MMRは本来的に、タイプされたアル
ファベット文字のイメージを効果的に圧縮できるよう
に、統計的に解析することによって考案された技法であ
るため、例えば英文の印刷イメージの圧縮を効率的に行
うことができる、という性質を有する。
【0015】しかし、明らかに、GUI環境のアプリケ
ーション・プログラムによって作成され出力される印刷
イメージ・データは、必ずしも単に空白が連続したり、
アルファベットの文字しか含まないような単純なものに
限定されない。
ーション・プログラムによって作成され出力される印刷
イメージ・データは、必ずしも単に空白が連続したり、
アルファベットの文字しか含まないような単純なものに
限定されない。
【0016】例えば、頻繁に印刷されるグラフの例とし
て、ビジネス・チャート及びパイ・チャートがある。こ
れらにおいては、通常、グラフの個別の表示要素(例え
ば、ビジネス・チャートの個々のバーなど)を識別する
ために、個々の表要素には、異なるトーンまたは模様が
付けられる。それらのトーンまたは模様は、実際には、
コンピュータの演算によって生成された比較的短い周期
のビット・パターンである。
て、ビジネス・チャート及びパイ・チャートがある。こ
れらにおいては、通常、グラフの個別の表示要素(例え
ば、ビジネス・チャートの個々のバーなど)を識別する
ために、個々の表要素には、異なるトーンまたは模様が
付けられる。それらのトーンまたは模様は、実際には、
コンピュータの演算によって生成された比較的短い周期
のビット・パターンである。
【0017】ところが、上記従来の圧縮技法では、この
ような比較的短い周期のビット・パターンで構成される
ハーフ・トーンを含むイメージを効率的に圧縮すること
が困難であった。
ような比較的短い周期のビット・パターンで構成される
ハーフ・トーンを含むイメージを効率的に圧縮すること
が困難であった。
【0018】例えば、本願発明者による実験では、全面
がハーフ・トーンのイメージにMMRの圧縮処理を施し
たところ、結果のデータの量が、元のデータ量よりも却
って増加してしまう、という例も見出された。
がハーフ・トーンのイメージにMMRの圧縮処理を施し
たところ、結果のデータの量が、元のデータ量よりも却
って増加してしまう、という例も見出された。
【0019】
【発明が解決しようとする課題】この発明の目的は、典
型的にはGUIのアプリケーション・プログラムによっ
て生成される、一様なトーンの領域をもつビット・イメ
ージを効率的に圧縮するための方法及びシステムを提供
することにある。
型的にはGUIのアプリケーション・プログラムによっ
て生成される、一様なトーンの領域をもつビット・イメ
ージを効率的に圧縮するための方法及びシステムを提供
することにある。
【0020】この発明の他の目的は、少ないデータ処理
量でビット・イメージを効率的に圧縮するための方法及
びシステムを提供することにある。
量でビット・イメージを効率的に圧縮するための方法及
びシステムを提供することにある。
【0021】この発明のさらに他の目的は、そのようし
て圧縮されたデータを、効率的に伸長するための方法及
びシステムを提供することにある。
て圧縮されたデータを、効率的に伸長するための方法及
びシステムを提供することにある。
【0022】この発明のさらに他の目的は、該圧縮・伸
長技法を採用することによって、GUIのアプリケーシ
ョン・プログラムによって生成された印刷イメージを高
速で印刷し得るページ・プリンタの制御システムを提供
することにある。
長技法を採用することによって、GUIのアプリケーシ
ョン・プログラムによって生成された印刷イメージを高
速で印刷し得るページ・プリンタの制御システムを提供
することにある。
【0023】
【課題を解決するための手段】上記目的は、全て0(印
刷すべきドットを含まない)であるワードを白ワード、
1つでも1(印刷すべきドット)を含むワードを黒ワー
ドと定義し、GUIのアプリケーション・プログラムに
よって生成される、一様なトーンの領域が比較的短い黒
ワードの周期を有する、という統計的性質を利用して白
ワードの情報を畳み込む、本発明の圧縮技法によって達
成される。
刷すべきドットを含まない)であるワードを白ワード、
1つでも1(印刷すべきドット)を含むワードを黒ワー
ドと定義し、GUIのアプリケーション・プログラムに
よって生成される、一様なトーンの領域が比較的短い黒
ワードの周期を有する、という統計的性質を利用して白
ワードの情報を畳み込む、本発明の圧縮技法によって達
成される。
【0024】尚、本願発明者の観察によれば、印刷物な
どに使用される一般的なイメージ・データは、連続する
黒いワードの列の90%以上が、イメージ上で約6mm
以下の長さをもつ。この性質を利用するため、イメージ
の分解能に対して、6mmの大きさを占めるワード列の
個数の2の対数が、ワード長(ビット幅)の半分以下に
なるようにワード長を選ぶ。例えば、9.4ドット/m
m(240ドット/インチ)の分解能では、ワード長を
8ビット(1バイト)とする。というのは、ワード長を
8ビット(ドット)とすると、9.4ドット/mmの分
解能では、6mmの大きさには、7.05個のワードが
ある。これの2の対数をとると、約2.82で、これは
明らかに、ワード長の8の半分である4よりも小さい。
逆に、ワード長を8ビットと選んでおいて、これで対応
可能な分解能をxドット/mmとすると、
どに使用される一般的なイメージ・データは、連続する
黒いワードの列の90%以上が、イメージ上で約6mm
以下の長さをもつ。この性質を利用するため、イメージ
の分解能に対して、6mmの大きさを占めるワード列の
個数の2の対数が、ワード長(ビット幅)の半分以下に
なるようにワード長を選ぶ。例えば、9.4ドット/m
m(240ドット/インチ)の分解能では、ワード長を
8ビット(1バイト)とする。というのは、ワード長を
8ビット(ドット)とすると、9.4ドット/mmの分
解能では、6mmの大きさには、7.05個のワードが
ある。これの2の対数をとると、約2.82で、これは
明らかに、ワード長の8の半分である4よりも小さい。
逆に、ワード長を8ビットと選んでおいて、これで対応
可能な分解能をxドット/mmとすると、
【数1】log2(6*x/8)=4
【0025】という方程式がたてられ、これを解くと、
xは約21ドット/mmとなる。これを、ドット/イン
チに換算すると、約530ドット/インチとなって、こ
れは通常のプリンタが実現している分解能としては十分
である。従って、ワード長を8ビットと選んでおけば多
くの場合十分であることが分かる。また、8ビット=1
バイトは、多くのパーソナル・コンピュータのCPUの
基本的な処理単位なので、その意味でも、ワード長を8
ビットと選んでおくのが好都合である。従って、以下で
は、ワードと呼ぶ代わりに、バイトと称する。
xは約21ドット/mmとなる。これを、ドット/イン
チに換算すると、約530ドット/インチとなって、こ
れは通常のプリンタが実現している分解能としては十分
である。従って、ワード長を8ビットと選んでおけば多
くの場合十分であることが分かる。また、8ビット=1
バイトは、多くのパーソナル・コンピュータのCPUの
基本的な処理単位なので、その意味でも、ワード長を8
ビットと選んでおくのが好都合である。従って、以下で
は、ワードと呼ぶ代わりに、バイトと称する。
【0026】本発明においては、好適には、白バイトと
それに続く黒バイトの長さが、単一の制御バイトによっ
て指定されるように圧縮される。1つの実施例では、単
一の制御バイトは、白バイトの長さを示す5ビットと、
黒バイトの長さを示す3ビットからなる。この後には、
1〜7の長さの繰り返しを含まない任意の黒バイトが続
く。これは、白バイトが1〜31個続き、黒バイトが1
〜7個続くストリームの圧縮データをあらわす(ケース
1)。
それに続く黒バイトの長さが、単一の制御バイトによっ
て指定されるように圧縮される。1つの実施例では、単
一の制御バイトは、白バイトの長さを示す5ビットと、
黒バイトの長さを示す3ビットからなる。この後には、
1〜7の長さの繰り返しを含まない任意の黒バイトが続
く。これは、白バイトが1〜31個続き、黒バイトが1
〜7個続くストリームの圧縮データをあらわす(ケース
1)。
【0027】最初に白バイトが1〜255個続き、黒バ
イトが8〜31個続く場合は、制御バイトの下位3ビッ
トを0にし、上位5ビットに黒バイトの数を入れる。そ
して、制御バイトに続くバイトに、白バイトの数を入
れ、その後に実際に印刷すべき黒バイトを入れる(ケー
ス2)。
イトが8〜31個続く場合は、制御バイトの下位3ビッ
トを0にし、上位5ビットに黒バイトの数を入れる。そ
して、制御バイトに続くバイトに、白バイトの数を入
れ、その後に実際に印刷すべき黒バイトを入れる(ケー
ス2)。
【0028】上記の例に収まらない場合、すなわち、そ
の後に黒バイトが続かない白バイトに対しては、特殊な
制御バイト(例えば、X'00')の後に連続する白バイ
トの数が格納される(ケース3)。
の後に黒バイトが続かない白バイトに対しては、特殊な
制御バイト(例えば、X'00')の後に連続する白バイ
トの数が格納される(ケース3)。
【0029】同一の黒バイトの繰り返しの場合、別の特
殊な制御バイト(例えば、X'01')の後に、繰り返し
回数を格納するバイトと、その黒バイトが続く(ケース
4)。
殊な制御バイト(例えば、X'01')の後に、繰り返し
回数を格納するバイトと、その黒バイトが続く(ケース
4)。
【0030】白バイトによって先行されない繰り返しを
含まない黒バイトの列の場合、さらに別の特殊な制御バ
イト(例えば、X'02')の後に、黒バイトの長さを格
納するバイトと、実際の黒バイトの列が続く(ケース
5)。
含まない黒バイトの列の場合、さらに別の特殊な制御バ
イト(例えば、X'02')の後に、黒バイトの長さを格
納するバイトと、実際の黒バイトの列が続く(ケース
5)。
【0031】本発明の好適な実施例によれば、上記の、
ケース1、ケース2またはケース5に関して、そのバイ
ト列全体の繰り返しがあった場合そのをあらわすため
に、さらに別の特殊な制御バイト(例えば、X'03')
の後に、ケース1、ケース2またはケース5に該当する
バイト列が続く(ケース6)。
ケース1、ケース2またはケース5に関して、そのバイ
ト列全体の繰り返しがあった場合そのをあらわすため
に、さらに別の特殊な制御バイト(例えば、X'03')
の後に、ケース1、ケース2またはケース5に該当する
バイト列が続く(ケース6)。
【0032】本発明の知見によれば、コンピュータ処理
によって生成された均一なパターンのほとんどが、上記
ケース1、さらにはケース6に帰着される。そして、ケ
ース1は、わずか1バイトの制御ワード自体で、白バイ
トとそれに続く黒バイトの列の長さを得るので、全体と
して必要な制御バイトの数が相当に節約され、圧縮率の
向上に寄与する。
によって生成された均一なパターンのほとんどが、上記
ケース1、さらにはケース6に帰着される。そして、ケ
ース1は、わずか1バイトの制御ワード自体で、白バイ
トとそれに続く黒バイトの列の長さを得るので、全体と
して必要な制御バイトの数が相当に節約され、圧縮率の
向上に寄与する。
【0033】また、本発明によれば、基本的にほとんど
がバイト単位の演算で済むので、それほど高性能のプロ
セッサを用いなくても高速且つ容易に処理を進めること
が可能である。一方、MMRなどの既存の圧縮技術で
は、行単位のバイト値の相関をとる演算なども必要であ
り、本発明で必要とされるよりもかなり大きい演算量を
要する。
がバイト単位の演算で済むので、それほど高性能のプロ
セッサを用いなくても高速且つ容易に処理を進めること
が可能である。一方、MMRなどの既存の圧縮技術で
は、行単位のバイト値の相関をとる演算なども必要であ
り、本発明で必要とされるよりもかなり大きい演算量を
要する。
【0034】さらに、本発明によれば、上記の特殊な制
御ワードだけに注目していけば、少ない演算処理量で高
速に伸長処理を行うことが可能なので、プリンタ側に設
けた、コンピュータ側のプロセッサに比べて相対的に演
算速度が小さい処理装置でも、あまり負担なく印刷デー
タ・ストリームの伸長処理を行うことが可能である。
御ワードだけに注目していけば、少ない演算処理量で高
速に伸長処理を行うことが可能なので、プリンタ側に設
けた、コンピュータ側のプロセッサに比べて相対的に演
算速度が小さい処理装置でも、あまり負担なく印刷デー
タ・ストリームの伸長処理を行うことが可能である。
【0035】
【実施例】以下、図面を参照して本発明の第1の実施例
について説明する。
について説明する。
【0036】A.ハードウェア構成 図1を参照すると、ハードウェア構成のブロック図が示
されている。この構成は、大きく分けて、コンピュータ
装置1100と、それにケーブルを介して接続されたプ
リンタ装置1200とからなる。
されている。この構成は、大きく分けて、コンピュータ
装置1100と、それにケーブルを介して接続されたプ
リンタ装置1200とからなる。
【0037】コンピュータ装置1100は、演算及び入
出力制御を行うためのCPU1104、プログラム・ロ
ード用及び演算のバッファ領域を与えるランダム・アク
セス・メモリ(RAM)1106、文字やイメージ情報
を画面上に表示するためのCRT装置1008、CRT
装置1108を制御するためのビデオ・カード111
0、オペレータによりコマンドや文字を入力するための
キーボード1112、CRT装置1108の画面上の任
意の点をポイントしてその位置情報をシステムに送るた
めのマウス1114、プログラムやデータを読み書き可
能に且つ持久的に記憶する磁気ディスク装置1116、
及びプリンタ装置を共通のバス1102に接続した構成
を有する。
出力制御を行うためのCPU1104、プログラム・ロ
ード用及び演算のバッファ領域を与えるランダム・アク
セス・メモリ(RAM)1106、文字やイメージ情報
を画面上に表示するためのCRT装置1008、CRT
装置1108を制御するためのビデオ・カード111
0、オペレータによりコマンドや文字を入力するための
キーボード1112、CRT装置1108の画面上の任
意の点をポイントしてその位置情報をシステムに送るた
めのマウス1114、プログラムやデータを読み書き可
能に且つ持久的に記憶する磁気ディスク装置1116、
及びプリンタ装置を共通のバス1102に接続した構成
を有する。
【0038】特に、磁気ディスク装置1116には、シ
ステムの立ち上げ時にRAMにロードされるオペレーテ
ィング・システムや、本発明に関する後述する印刷デー
タ圧縮用ドライバや、ワードプロセッサ、スプレッドシ
ート、グラフ作成ツールなどの、ビットマップ印刷イメ
ージを生成し得るプログラムや、各種フォント・ファイ
ルなどが格納されている。
ステムの立ち上げ時にRAMにロードされるオペレーテ
ィング・システムや、本発明に関する後述する印刷デー
タ圧縮用ドライバや、ワードプロセッサ、スプレッドシ
ート、グラフ作成ツールなどの、ビットマップ印刷イメ
ージを生成し得るプログラムや、各種フォント・ファイ
ルなどが格納されている。
【0039】本発明の処理に適当なオペレーティング・
システムは、OS/2(IBMの商標)であるが、Wi
ndows(マイクロソフトの商標)、AIX(IBM
の商標)などの、GUIインターフェースを与えるオペ
レーティング・システムでもよく、本発明は、これらの
オペレーティング・システムに限定されず、MS−DO
S(マイクロソフトの登録商標)、PC−DOS(IB
Mの商標)などの、ビットマップ印刷イメージのデータ
・ストリームをプリンタに転送するプログラムを走らせ
ることができる任意のオペレーティング・システムを使
用することができる。
システムは、OS/2(IBMの商標)であるが、Wi
ndows(マイクロソフトの商標)、AIX(IBM
の商標)などの、GUIインターフェースを与えるオペ
レーティング・システムでもよく、本発明は、これらの
オペレーティング・システムに限定されず、MS−DO
S(マイクロソフトの登録商標)、PC−DOS(IB
Mの商標)などの、ビットマップ印刷イメージのデータ
・ストリームをプリンタに転送するプログラムを走らせ
ることができる任意のオペレーティング・システムを使
用することができる。
【0040】プリンタ装置1200は、光導電体の選択
された領域にレーザー・ビームを照射してトナーを付着
させ、次に、そのトナーを用紙に転写する機構をもつペ
ージ・プリンタである。しかし、本発明は、ページ・プ
リンタに限定されるものではなく、バブル・ジェット・
プリンタ、ワイヤドット・プリンタなどの、別個のデー
タ処理部を搭載した任意のプリンタに適用することがで
きる。
された領域にレーザー・ビームを照射してトナーを付着
させ、次に、そのトナーを用紙に転写する機構をもつペ
ージ・プリンタである。しかし、本発明は、ページ・プ
リンタに限定されるものではなく、バブル・ジェット・
プリンタ、ワイヤドット・プリンタなどの、別個のデー
タ処理部を搭載した任意のプリンタに適用することがで
きる。
【0041】プリンタ装置1200は、プリンタ・ケー
ブル1300を介して、コンピュータ装置1100のパ
ラレル・インターフェースから送られて来た印刷データ
・ストリームを一旦格納するバッファ1202と、コン
ピュータ装置1100から送られて来たエスケープ・シ
ーケンスなどの制御コマンドを解釈して、本発明に従う
データ・ストリームの伸長などの制御処理を行うCPU
1204と、CPU1204が演算を行うためのワーク
・メモリ領域を与えるRAM(ランダム・アクセス・メ
モリ)1205と、本発明に係る伸長ルーチンを含むC
PUの制御用プログラムをマイクロコードの形式で格納
するROM(読取り専用メモリ)1206と、CPU1
204によって演算され展開された印刷用ビットマップ
データを格納するためのメモリ1208と、メモリ12
08から1ページ分の印刷データを受け取って光導電体
(図示しない)に照射されるレーザー光を変調し、そう
して光導電体にトナーを付着させ、続いてそのトナーを
用紙に転写する機構をもつ印刷機構1210とを有す
る。
ブル1300を介して、コンピュータ装置1100のパ
ラレル・インターフェースから送られて来た印刷データ
・ストリームを一旦格納するバッファ1202と、コン
ピュータ装置1100から送られて来たエスケープ・シ
ーケンスなどの制御コマンドを解釈して、本発明に従う
データ・ストリームの伸長などの制御処理を行うCPU
1204と、CPU1204が演算を行うためのワーク
・メモリ領域を与えるRAM(ランダム・アクセス・メ
モリ)1205と、本発明に係る伸長ルーチンを含むC
PUの制御用プログラムをマイクロコードの形式で格納
するROM(読取り専用メモリ)1206と、CPU1
204によって演算され展開された印刷用ビットマップ
データを格納するためのメモリ1208と、メモリ12
08から1ページ分の印刷データを受け取って光導電体
(図示しない)に照射されるレーザー光を変調し、そう
して光導電体にトナーを付着させ、続いてそのトナーを
用紙に転写する機構をもつ印刷機構1210とを有す
る。
【0042】尚、この実施例では、メモリ1208は、
2ページ分の領域をもっている。これは、CPU120
4が次のページの印刷データを生成している間に並列的
に、現在のページのデータを印刷機構1210に転送す
ることができるようにするためである。
2ページ分の領域をもっている。これは、CPU120
4が次のページの印刷データを生成している間に並列的
に、現在のページのデータを印刷機構1210に転送す
ることができるようにするためである。
【0043】B.データ圧縮フォーマット 次に、図2以下を参照して、本発明に係るデータ圧縮フ
ォーマットについて説明する。この処理を行うプログラ
ム・モジュールは、 本発明は、複数ビットの集まりで
あるワードを圧縮単位とするものであるが、既に説明し
たように、一般的に使用されるプロセッサのアーキテク
チャがバイトを単位としていることと、バイト=8ビッ
トで、通常のプリンタが採用している以上の分解能をカ
バーできることにより、以下の実施例では、1ワード=
1バイトとして説明を行うが、その前に、以下の説明で
共通に使用する用語を定義しておく。
ォーマットについて説明する。この処理を行うプログラ
ム・モジュールは、 本発明は、複数ビットの集まりで
あるワードを圧縮単位とするものであるが、既に説明し
たように、一般的に使用されるプロセッサのアーキテク
チャがバイトを単位としていることと、バイト=8ビッ
トで、通常のプリンタが採用している以上の分解能をカ
バーできることにより、以下の実施例では、1ワード=
1バイトとして説明を行うが、その前に、以下の説明で
共通に使用する用語を定義しておく。
【0044】白バイト これは、全てのビットが0であるバイトのことである。
【0045】黒バイト これは、少なくとも1つのビットが1であるバイトのこ
とである。その1であるビットは、印刷されるデータの
1つの黒ドットに対応する。すなわち、例えば、X'0
1'というバイトは、2進数に変換すると、B'0000
0001'であって、7つのドットをスキップして、8
ドット目に1つの黒ペルを印刷することを示す。本発明
においては、圧縮処理を行う際に、MMR圧縮で行われ
ているような印刷ストリームの行単位の相関処理のよう
なものは行わず、単純にバイト単位でストリームに沿っ
た圧縮が行われる。尚、本発明における印刷データの縦
方向のビット数Xと横方向のビット数Yは、コンピュー
タ装置1100から圧縮されたデータを転送するための
モードを設定するエスケープ・シーケンスによって予め
指定される。また、特定のプリンタによっては、1バイ
ト中のビット0に応じてドットが印刷され、ビット1に
応じてドットの印刷が行われないように実装されるもの
もあるかもしれない。そのような場合、白バイトとは、
全てのビットが1であり、黒バイトとは、少なくとも1
つのビットが0であるようなバイトである、と読み替え
るものとする。
とである。その1であるビットは、印刷されるデータの
1つの黒ドットに対応する。すなわち、例えば、X'0
1'というバイトは、2進数に変換すると、B'0000
0001'であって、7つのドットをスキップして、8
ドット目に1つの黒ペルを印刷することを示す。本発明
においては、圧縮処理を行う際に、MMR圧縮で行われ
ているような印刷ストリームの行単位の相関処理のよう
なものは行わず、単純にバイト単位でストリームに沿っ
た圧縮が行われる。尚、本発明における印刷データの縦
方向のビット数Xと横方向のビット数Yは、コンピュー
タ装置1100から圧縮されたデータを転送するための
モードを設定するエスケープ・シーケンスによって予め
指定される。また、特定のプリンタによっては、1バイ
ト中のビット0に応じてドットが印刷され、ビット1に
応じてドットの印刷が行われないように実装されるもの
もあるかもしれない。そのような場合、白バイトとは、
全てのビットが1であり、黒バイトとは、少なくとも1
つのビットが0であるようなバイトである、と読み替え
るものとする。
【0046】B1.ケース1 ケース1は、連続する1〜31個の白バイトと、それに
続く繰り返しを含まない1〜7個の黒バイトからなるス
トリームを圧縮する場合のフォーマットを示す。この場
合、制御バイト202は、その上位5ビットに、連続す
る白バイトの個数Nwを含み、その下位3ビットに、そ
れに続く黒バイトのバイト数Nbを含む。制御ワード2
02に続いて、実際のNbバイトの黒ワードが続く。こ
のフォーマットは、白ワードの圧縮のための個別の制御
ワードを必要としない点に特徴がある。
続く繰り返しを含まない1〜7個の黒バイトからなるス
トリームを圧縮する場合のフォーマットを示す。この場
合、制御バイト202は、その上位5ビットに、連続す
る白バイトの個数Nwを含み、その下位3ビットに、そ
れに続く黒バイトのバイト数Nbを含む。制御ワード2
02に続いて、実際のNbバイトの黒ワードが続く。こ
のフォーマットは、白ワードの圧縮のための個別の制御
ワードを必要としない点に特徴がある。
【0047】B2.ケース2 ケース2は、連続する1〜255個の白バイトと、それ
に続く繰り返しを含まない1〜31個の黒バイトからな
るストリームを圧縮する場合のフォーマットを示す。こ
の場合、制御バイト302は、その上位5ビットに、連
続する黒バイトの個数Nbを含み、その下位3ビットは
0とする。そして、それに続く1つのバイトに白バイト
の個数Nwが格納され、その後、実際のNbバイトの黒
ワードが続く。このフォーマットは、ケース1のフォー
マットでカバーできない程度に黒バイトまたは白バイト
が続く場合に適用される。このフォーマットも、白ワー
ドの圧縮のための個別の制御ワードを必要としない点に
特徴がある。
に続く繰り返しを含まない1〜31個の黒バイトからな
るストリームを圧縮する場合のフォーマットを示す。こ
の場合、制御バイト302は、その上位5ビットに、連
続する黒バイトの個数Nbを含み、その下位3ビットは
0とする。そして、それに続く1つのバイトに白バイト
の個数Nwが格納され、その後、実際のNbバイトの黒
ワードが続く。このフォーマットは、ケース1のフォー
マットでカバーできない程度に黒バイトまたは白バイト
が続く場合に適用される。このフォーマットも、白ワー
ドの圧縮のための個別の制御ワードを必要としない点に
特徴がある。
【0048】B3.ケース3 ケース3は、ケース1または2であふれた連続する1〜
255個の白バイトを圧縮するためのフォーマットであ
り、図4に示すように、制御バイト402は、X'00'
という固定値である。尚、この実施例では、全ての固定
制御バイトは、上位5ビットが0という値をとる。制御
バイト402に続いて、連続する白バイトの個数をあら
わす整数値を格納した1バイト404が続く。従って、
256個以上の白バイトが連続する場合、圧縮されたデ
ータ・ストリームには、ケース3のフォーマットが1回
以上あらわれることになる。
255個の白バイトを圧縮するためのフォーマットであ
り、図4に示すように、制御バイト402は、X'00'
という固定値である。尚、この実施例では、全ての固定
制御バイトは、上位5ビットが0という値をとる。制御
バイト402に続いて、連続する白バイトの個数をあら
わす整数値を格納した1バイト404が続く。従って、
256個以上の白バイトが連続する場合、圧縮されたデ
ータ・ストリームには、ケース3のフォーマットが1回
以上あらわれることになる。
【0049】B4.ケース4 ケース4は、同一の黒バイトが(例えば4バイト以上)
連続する場合に使用されるフォーマットであり、図5に
示すように、制御バイト502は、X'01'という固定
値である。制御バイト502に続いて、連続する同一の
黒バイトの個数をあらわす整数値を格納した1バイト5
04が続き、その後に、実際の反復する黒バイトの値が
続く。
連続する場合に使用されるフォーマットであり、図5に
示すように、制御バイト502は、X'01'という固定
値である。制御バイト502に続いて、連続する同一の
黒バイトの個数をあらわす整数値を格納した1バイト5
04が続き、その後に、実際の反復する黒バイトの値が
続く。
【0050】ケース5は、ケース1またはケース2で白
バイトが0の場合、またはケース1またはケース2であ
ふれた黒バイトを圧縮するためのフォーマットであり、
図6に示すように、制御バイト602は、X'02'とい
う固定値である。制御バイト602に続いて、その黒バ
イト列の長さをあらわす整数値を格納した1バイト60
4が続き、その後に、実際の黒バイト列が続く。
バイトが0の場合、またはケース1またはケース2であ
ふれた黒バイトを圧縮するためのフォーマットであり、
図6に示すように、制御バイト602は、X'02'とい
う固定値である。制御バイト602に続いて、その黒バ
イト列の長さをあらわす整数値を格納した1バイト60
4が続き、その後に、実際の黒バイト列が続く。
【0051】ケース6は、図7に示すように、(a)ケ
ース1自体の反復、(b)ケース2自体の反復、または
(c)ケース5自体の反復をあらわすものであり、いず
れの場合も、制御バイト703としてのX'03'に続い
て、反復の回数をあらわす整数値を格納した1バイトが
続き、それに、ケース1、ケース2またはケース5自体
の内容が続く。
ース1自体の反復、(b)ケース2自体の反復、または
(c)ケース5自体の反復をあらわすものであり、いず
れの場合も、制御バイト703としてのX'03'に続い
て、反復の回数をあらわす整数値を格納した1バイトが
続き、それに、ケース1、ケース2またはケース5自体
の内容が続く。
【0052】C.データ圧縮処理 次に、図8及び図9を参照して、データ圧縮処理につい
て説明する。
て説明する。
【0053】図8において、先ずステップ802では、
データ圧縮処理すべきバイトの列が終了したかどうかが
チェックされる。この実施例では、1ページのデータ・
ストリーム毎にデータ圧縮を行うので、ここでいうデー
タ圧縮処理すべきバイトの列の終了とは、1ページのデ
ータ・ストリームの終了を意味するものとする。
データ圧縮処理すべきバイトの列が終了したかどうかが
チェックされる。この実施例では、1ページのデータ・
ストリーム毎にデータ圧縮を行うので、ここでいうデー
タ圧縮処理すべきバイトの列の終了とは、1ページのデ
ータ・ストリームの終了を意味するものとする。
【0054】ステップ802でバイト列の終了に達して
いないと判断された場合には、ステップ804で、白バ
イトの列の長さNwを数えながら、次に黒バイトに出会
うまで白バイトが読みとばれされる。
いないと判断された場合には、ステップ804で、白バ
イトの列の長さNwを数えながら、次に黒バイトに出会
うまで白バイトが読みとばれされる。
【0055】ステップ804で黒バイトに出会うと、処
理はステップ806に移り、ここで次に白バイトに出会
うまで、黒バイトが順次、Black_bytesと名付けられた
バッファに格納され、また、その長さNbがカウントさ
れる。尚、Black_bytesは、予想される最も長い黒バイ
ト列に遭遇しても溢れないように、予め十分大きく確保
される。
理はステップ806に移り、ここで次に白バイトに出会
うまで、黒バイトが順次、Black_bytesと名付けられた
バッファに格納され、また、その長さNbがカウントさ
れる。尚、Black_bytesは、予想される最も長い黒バイ
ト列に遭遇しても溢れないように、予め十分大きく確保
される。
【0056】ステップ806で白バイトに出会うと、処
理はステップ808に移り、そこで、Nw>255かど
うかが判断される。この判断は、ケース2で白バイトの
長さを指定する整数値の最大値が255であることか
ら、ケース2の圧縮フォーマットを使用したとき白バイ
トの溢れを予めケース3のフォーマットとして出力して
おくために行われる。
理はステップ808に移り、そこで、Nw>255かど
うかが判断される。この判断は、ケース2で白バイトの
長さを指定する整数値の最大値が255であることか
ら、ケース2の圧縮フォーマットを使用したとき白バイ
トの溢れを予めケース3のフォーマットとして出力して
おくために行われる。
【0057】ステップ808で、Nw>255であると
判断されると、ステップ810では、ケース3のフォー
マットを使用して、X’00FF’という2バイトのデ
ータが出力される。これは、255個の白バイトが連続
することを示す。
判断されると、ステップ810では、ケース3のフォー
マットを使用して、X’00FF’という2バイトのデ
ータが出力される。これは、255個の白バイトが連続
することを示す。
【0058】ステップ812では、255個の白バイト
が連続することを示すデータが出力されたことに応答し
て、Nwから255が引かれる。そうして、制御は、ス
テップ808へ戻る。
が連続することを示すデータが出力されたことに応答し
て、Nwから255が引かれる。そうして、制御は、ス
テップ808へ戻る。
【0059】ステップ808で、Nw<=255になっ
たと判断されたときは、図9に詳細に示す黒バイトの処
理に移行する。図9の処理は、255以下の個数のNw
と、ステップ806で見出された黒バイトの列との組み
合わせにより、ケース1またはケース2の圧縮フォーマ
ットを作成して出力し、余った黒バイトの圧縮データ
は、ケース4またはケース5のフォーマットを使用して
出力することを目的とするものである。
たと判断されたときは、図9に詳細に示す黒バイトの処
理に移行する。図9の処理は、255以下の個数のNw
と、ステップ806で見出された黒バイトの列との組み
合わせにより、ケース1またはケース2の圧縮フォーマ
ットを作成して出力し、余った黒バイトの圧縮データ
は、ケース4またはケース5のフォーマットを使用して
出力することを目的とするものである。
【0060】ステップ814の終了後は、バイト列の終
了を判断するステップ802に戻る。
了を判断するステップ802に戻る。
【0061】次に、図9を参照して、図8でステップ8
06として示された処理の詳細について説明する。図9
のステップ902では、Nw=0かどうかが判断され
る。Nw=0とは、図8のステップ804で、白バイト
に出会わなかった場合、または、連続する白バイトの長
さが、255の倍数であった場合に対応する。白バイト
に出会わなかった場合とは、1つのページの印刷データ
・ストリームの最初に、いきなり黒バイトが存在してい
た場合(例えば、印刷すべきページの外周に黒枠が存在
する場合)に相当する。
06として示された処理の詳細について説明する。図9
のステップ902では、Nw=0かどうかが判断され
る。Nw=0とは、図8のステップ804で、白バイト
に出会わなかった場合、または、連続する白バイトの長
さが、255の倍数であった場合に対応する。白バイト
に出会わなかった場合とは、1つのページの印刷データ
・ストリームの最初に、いきなり黒バイトが存在してい
た場合(例えば、印刷すべきページの外周に黒枠が存在
する場合)に相当する。
【0062】ステップ902で、Nw≠0であることが
決定された場合には、ステップ903に進み、Nw≦3
1かどうかが判断される。この判断は、ケース1とケー
ス2のどちらのフォーマットが使用可能であるかを決定
するために行われる。Nw≦31であると決定される
と、ケース1が利用可能であるので、ステップ904
で、Black_bytesバッファの先頭7バイトまでのデータ
が、所定の出力バッファに格納され、出力の用意がなさ
れる。この7バイトという値は、ケース1でNbとして
格納し得る値の最大値が7だからである。尚、Black_by
tesバッファに格納されている黒バイトの長さが7以下
である場合には、Black_bytesバッファの黒バイトすべ
てが出力されることになる。
決定された場合には、ステップ903に進み、Nw≦3
1かどうかが判断される。この判断は、ケース1とケー
ス2のどちらのフォーマットが使用可能であるかを決定
するために行われる。Nw≦31であると決定される
と、ケース1が利用可能であるので、ステップ904
で、Black_bytesバッファの先頭7バイトまでのデータ
が、所定の出力バッファに格納され、出力の用意がなさ
れる。この7バイトという値は、ケース1でNbとして
格納し得る値の最大値が7だからである。尚、Black_by
tesバッファに格納されている黒バイトの長さが7以下
である場合には、Black_bytesバッファの黒バイトすべ
てが出力されることになる。
【0063】そうして処理はステップ908に進み、ケ
ース1のフォーマットを利用して、図2に示すバイト2
02の上位5ビットにNwの値が格納され、バイト20
2の下位3ビットに、最大7までの黒バイトの長さが格
納され、その後ステップ904で取得された最大長さ7
までの黒バイトが続く圧縮フォーマットが出力される。
ース1のフォーマットを利用して、図2に示すバイト2
02の上位5ビットにNwの値が格納され、バイト20
2の下位3ビットに、最大7までの黒バイトの長さが格
納され、その後ステップ904で取得された最大長さ7
までの黒バイトが続く圧縮フォーマットが出力される。
【0064】Nw>31である場合には、その値は最
早、図2に示すバイト202の上位5ビットに収まらな
いので、ケース1のフォーマットではなく、ケース2の
フォーマットが使用される。この場合には、ステップ9
06に進み、Black_bytesバッファの先頭31バイトま
でのデータが、所定の出力バッファに格納され、出力の
用意がなされる。この31バイトという値は、ケース2
でNbとして格納し得る値の最大値が31だからであ
る。尚、Black_bytesバッファに格納されている黒バイ
トの長さが31以下である場合には、Black_bytesバッ
ファの黒バイトすべてが出力されることになる。
早、図2に示すバイト202の上位5ビットに収まらな
いので、ケース1のフォーマットではなく、ケース2の
フォーマットが使用される。この場合には、ステップ9
06に進み、Black_bytesバッファの先頭31バイトま
でのデータが、所定の出力バッファに格納され、出力の
用意がなされる。この31バイトという値は、ケース2
でNbとして格納し得る値の最大値が31だからであ
る。尚、Black_bytesバッファに格納されている黒バイ
トの長さが31以下である場合には、Black_bytesバッ
ファの黒バイトすべてが出力されることになる。
【0065】すなわちステップ910では、ケース2の
フォーマットが利用されるので、バイト302の下位3
ビットではなく上位5ビットに7までの黒バイトの長さ
が格納され、そのことを示唆するために、バイト302
の下位3ビットには、0が格納される。そうして、次の
バイトに、Nwの値が格納され、その後ステップ906
で取得された最大長さ31までの黒バイトが続く圧縮フ
ォーマットが出力される。
フォーマットが利用されるので、バイト302の下位3
ビットではなく上位5ビットに7までの黒バイトの長さ
が格納され、そのことを示唆するために、バイト302
の下位3ビットには、0が格納される。そうして、次の
バイトに、Nwの値が格納され、その後ステップ906
で取得された最大長さ31までの黒バイトが続く圧縮フ
ォーマットが出力される。
【0066】ステップ912では、Black_bytesバッフ
ァ全体が処理されてしまったかどうかが判断される。こ
れは、ステップ904で出力すべき黒バイトの長さが7
以下であったかまたは、ステップ906で出力すべき黒
バイトの長さが31以下であった場合に相当する。この
場合、黒バイトの処理は既に完了しており、制御は直ち
に、図8のステップ802に戻る。
ァ全体が処理されてしまったかどうかが判断される。こ
れは、ステップ904で出力すべき黒バイトの長さが7
以下であったかまたは、ステップ906で出力すべき黒
バイトの長さが31以下であった場合に相当する。この
場合、黒バイトの処理は既に完了しており、制御は直ち
に、図8のステップ802に戻る。
【0067】尚、本願発明者の実験によれば、コンピュ
ータによって生成されたハーフ・トーンの印刷ストリー
ムの場合、ほとんどがケース1の圧縮フォーマットに帰
着され、ステップ910またはステップ914に至る場
合はあまり多くない、ということが分かった。
ータによって生成されたハーフ・トーンの印刷ストリー
ムの場合、ほとんどがケース1の圧縮フォーマットに帰
着され、ステップ910またはステップ914に至る場
合はあまり多くない、ということが分かった。
【0068】ステップ908またはステップ910での
処理の完了後も、Black_bytesバッファに処理すべき黒
バイトが残っている場合には、ステップ914の処理に
進む。ステップ902で、Nw=0と判断された場合
も、直ちにステップ914の処理に来る。
処理の完了後も、Black_bytesバッファに処理すべき黒
バイトが残っている場合には、ステップ914の処理に
進む。ステップ902で、Nw=0と判断された場合
も、直ちにステップ914の処理に来る。
【0069】ステップ914では、出力すべき黒バイト
の長さカウンタCLと、連続する同一バイト値の黒バイト
の長さカウンタCCがともに1にセットされ、また、直前
の黒バイト値として、変数cに、実際には存在しない黒
バイト値である値(例えば−1)が格納される。
の長さカウンタCLと、連続する同一バイト値の黒バイト
の長さカウンタCCがともに1にセットされ、また、直前
の黒バイト値として、変数cに、実際には存在しない黒
バイト値である値(例えば−1)が格納される。
【0070】ここで、「連続する」とは、例えば、4個
以上連続であるとする。なぜなら、連続する同一の値の
黒バイト列を、ケース4のフォーマットを使用してあら
わすことができるが、ケース4のフォーマット自体3バ
イトを要するので、3バイト以下の連続する黒バイト列
にケース4のフォーマットを適用してもデータ圧縮にな
らないからである。
以上連続であるとする。なぜなら、連続する同一の値の
黒バイト列を、ケース4のフォーマットを使用してあら
わすことができるが、ケース4のフォーマット自体3バ
イトを要するので、3バイト以下の連続する黒バイト列
にケース4のフォーマットを適用してもデータ圧縮にな
らないからである。
【0071】ステップ916では、ステップ908また
はステップ910で出力済みの黒バイトの次の黒バイト
が指し示される。
はステップ910で出力済みの黒バイトの次の黒バイト
が指し示される。
【0072】ステップ918では、黒バイトの長さカウ
ンタCC > 255かどうかがチェックされ、もしそうなら、
CC = 255にして直ちに、黒バイトを出力するためのステ
ップ926に進む。
ンタCC > 255かどうかがチェックされ、もしそうなら、
CC = 255にして直ちに、黒バイトを出力するためのステ
ップ926に進む。
【0073】CC > 255でないなら、ステップ920に進
み、そこで、直前の黒バイト値と現在指し示さしてる黒
バイト値が等しいかどうかがチェックされる。もしそう
なら、ステップ922で、連続する同一バイト値の黒バ
イトの長さカウンタCCを1増分して、実際に黒バイトを
出力するステップ926及び928はスキップして、ス
テップ934に進む。
み、そこで、直前の黒バイト値と現在指し示さしてる黒
バイト値が等しいかどうかがチェックされる。もしそう
なら、ステップ922で、連続する同一バイト値の黒バ
イトの長さカウンタCCを1増分して、実際に黒バイトを
出力するステップ926及び928はスキップして、ス
テップ934に進む。
【0074】直前の黒バイト値と現在指し示さしてる黒
バイト値が等しくないなら、ステップ926で、CL > L
thかどうかが判断される。ここで、Lthとは、出力すべ
き黒バイトの長さの閾値で、例えば6である。Lthが小
さすぎると、ケース5のフォーマットで、細切れに黒バ
イトが出力される。しかし、図6に示すように、ケース
5のフォーマットは、先頭の2バイトの制御コードを要
するので、あまり頻繁に出力されるのは好ましくない。
Lthとしては、6以上で255以下の任意の値を選ぶこ
とができる。
バイト値が等しくないなら、ステップ926で、CL > L
thかどうかが判断される。ここで、Lthとは、出力すべ
き黒バイトの長さの閾値で、例えば6である。Lthが小
さすぎると、ケース5のフォーマットで、細切れに黒バ
イトが出力される。しかし、図6に示すように、ケース
5のフォーマットは、先頭の2バイトの制御コードを要
するので、あまり頻繁に出力されるのは好ましくない。
Lthとしては、6以上で255以下の任意の値を選ぶこ
とができる。
【0075】ステップ926でCL > Lthと判断される
と、CL-CC-1の長さの繰り返しを含まない黒バイト列が
ケース5のフォーマットで出力され(ステップ92
6)、文字cの繰り返し回数CCに対応する繰り返しフォ
ーマット(ケース4)が出力される(ステップ92
8)。尚、ステップ926またはステップ928で出力
されるのは、現在ポイントされている黒バイトの直前ま
での黒バイトであることに留意されたい。
と、CL-CC-1の長さの繰り返しを含まない黒バイト列が
ケース5のフォーマットで出力され(ステップ92
6)、文字cの繰り返し回数CCに対応する繰り返しフォ
ーマット(ケース4)が出力される(ステップ92
8)。尚、ステップ926またはステップ928で出力
されるのは、現在ポイントされている黒バイトの直前ま
での黒バイトであることに留意されたい。
【0076】また、ステップ924での判断が肯定的に
なったとき、CCが3以下であった場合には、上述した理
由により、その3バイト以内の連続する黒バイトは、ス
テップ918でケース5の圧縮フォーマットの一部とし
て出力され、ステップ928では何も出力されない。
なったとき、CCが3以下であった場合には、上述した理
由により、その3バイト以内の連続する黒バイトは、ス
テップ918でケース5の圧縮フォーマットの一部とし
て出力され、ステップ928では何も出力されない。
【0077】ステップ924での判断が否定的なら、処
理は直ちにステップ930に進み、これによってCCが1
にリセットされる。
理は直ちにステップ930に進み、これによってCCが1
にリセットされる。
【0078】ステップ292及びステップ930ではそ
れぞれ、直前の黒バイトまでの出力が完了したことによ
り、CL=1、CC=1にリセットされる。
れぞれ、直前の黒バイトまでの出力が完了したことによ
り、CL=1、CC=1にリセットされる。
【0079】ステップ932では、cに、現在の黒バイ
トの値が格納される。ステップ934では、次の黒バイ
トが指し示され、これに応答して、ステップ936では
CLが1だけ増分される。
トの値が格納される。ステップ934では、次の黒バイ
トが指し示され、これに応答して、ステップ936では
CLが1だけ増分される。
【0080】ステップ938では、現在指し示されてい
る黒バイトの位置が、Black_bytesの末端まで達してし
まったかどうか(すなわち、出力すべき黒バイトを過ぎ
てしまったかどうか)が判断される。これは、図8のス
テップ806で黒バイトの長さNbが取得されているの
で、既に出力した黒バイトの合計の長さとNbを比較す
ることによって可能である。
る黒バイトの位置が、Black_bytesの末端まで達してし
まったかどうか(すなわち、出力すべき黒バイトを過ぎ
てしまったかどうか)が判断される。これは、図8のス
テップ806で黒バイトの長さNbが取得されているの
で、既に出力した黒バイトの合計の長さとNbを比較す
ることによって可能である。
【0081】ステップ938での判断が否定的なら、ス
テップ918に戻る。しかし、ステップ938での判断
が肯定的であっても、直ちには処理はリターンしない。
というのは、ステップ920またはステップ924での
判断が肯定的になっていないため未出力の黒バイトが残
っている可能性があるからである。そこで、ステップ9
40で、実際は、ステップ926及びステップ928と
同等の処理が行われ、これによって、未出力の黒バイト
が完全に出力される。
テップ918に戻る。しかし、ステップ938での判断
が肯定的であっても、直ちには処理はリターンしない。
というのは、ステップ920またはステップ924での
判断が肯定的になっていないため未出力の黒バイトが残
っている可能性があるからである。そこで、ステップ9
40で、実際は、ステップ926及びステップ928と
同等の処理が行われ、これによって、未出力の黒バイト
が完全に出力される。
【0082】ステップ940の後は、図8のステップ8
02へ戻り、ここで、まだ1ページ分の印刷ストリーム
・データの終了に達していない場合には、次の白バイト
列を走査する処理に戻ることになる。
02へ戻り、ここで、まだ1ページ分の印刷ストリーム
・データの終了に達していない場合には、次の白バイト
列を走査する処理に戻ることになる。
【0083】尚、図9に戻って、ステップ908、ステ
ップ910及びステップ926に*印が付けられている
ことに注目されたい。いままでの説明では、ステップ9
08、ステップ910及びステップ926に関して、そ
れぞれ、ケース1、ケース2及びケース5のフォーマッ
トで圧縮されたバイト列を直ちに出力すると説明してき
た。本願発明者の実験によれば、それでも十分な圧縮率
が得られるが、好適には、ステップ908、ステップ9
10及びステップ926では次のようにして出力を遅延
させ、以って更なる圧縮率の向上を図る。
ップ910及びステップ926に*印が付けられている
ことに注目されたい。いままでの説明では、ステップ9
08、ステップ910及びステップ926に関して、そ
れぞれ、ケース1、ケース2及びケース5のフォーマッ
トで圧縮されたバイト列を直ちに出力すると説明してき
た。本願発明者の実験によれば、それでも十分な圧縮率
が得られるが、好適には、ステップ908、ステップ9
10及びステップ926では次のようにして出力を遅延
させ、以って更なる圧縮率の向上を図る。
【0084】すなわち、図示しないが、図8の処理の開
始時点で、出力バッファを用意し、また、繰り返し回数
をあらわす変数CX(これは、CCとは別である)に0を格
納しておく。また、出力バッファには、出力フォーマッ
ト1、2または5としてあらわれないような特殊なパタ
ーンを格納しておく。
始時点で、出力バッファを用意し、また、繰り返し回数
をあらわす変数CX(これは、CCとは別である)に0を格
納しておく。また、出力バッファには、出力フォーマッ
ト1、2または5としてあらわれないような特殊なパタ
ーンを格納しておく。
【0085】そうして、ステップ908、ステップ91
0及びステップ926では、CXが0かどうかを調べ、も
しそうなら、初期状態で出力バッファには無意味なデー
タが格納されてるだけなので、単に処理によって得られ
た出力フォーマットの内容を出力バッファに格納し、CX
を1にセットする。CXが1以上なら、処理によって得ら
れた出力フォーマットの内容を、出力バッファの内容と
比較する。一致すると、直ちにはバイト列を出力するこ
となく、単にCXを1だけ増分する。一方、出力バッファ
の内容と比較して不一致だと、CXの値を調べて、これが
1なら単に出力バッファの内容を出力する。ところが、
CXが2以上だと、ケース6のフォーマットを使用して、
先ずX'03'を出力し、次に、CXの値を1バイト出力
し、続いて出力バッファの内容を出力する。その後、CX
は1にリセットされ、出力バッファには、処理によって
得られた出力フォーマットの内容が格納される。
0及びステップ926では、CXが0かどうかを調べ、も
しそうなら、初期状態で出力バッファには無意味なデー
タが格納されてるだけなので、単に処理によって得られ
た出力フォーマットの内容を出力バッファに格納し、CX
を1にセットする。CXが1以上なら、処理によって得ら
れた出力フォーマットの内容を、出力バッファの内容と
比較する。一致すると、直ちにはバイト列を出力するこ
となく、単にCXを1だけ増分する。一方、出力バッファ
の内容と比較して不一致だと、CXの値を調べて、これが
1なら単に出力バッファの内容を出力する。ところが、
CXが2以上だと、ケース6のフォーマットを使用して、
先ずX'03'を出力し、次に、CXの値を1バイト出力
し、続いて出力バッファの内容を出力する。その後、CX
は1にリセットされ、出力バッファには、処理によって
得られた出力フォーマットの内容が格納される。
【0086】尚、ステップ928では、出力バッファの
データと処理によって得られた出力フォーマットとの比
較がなされることなく、(出力バッファの内容が上記初
期の値でないなら)単に、出力バッファの値とCXの値に
関連して、上述のように必要に応じてケース6のフォー
マットでの出力が行われる。その後、CCの値に基づくケ
ース4の出力が行われ、次にCXは0にリセットされる。
データと処理によって得られた出力フォーマットとの比
較がなされることなく、(出力バッファの内容が上記初
期の値でないなら)単に、出力バッファの値とCXの値に
関連して、上述のように必要に応じてケース6のフォー
マットでの出力が行われる。その後、CCの値に基づくケ
ース4の出力が行われ、次にCXは0にリセットされる。
【0087】また、当然ながら、ステップ908、ステ
ップ910及びステップ926では、CXが255を超え
た時、CX=255にセットして無条件でケース6のフォーマ
ットでの出力を行い、にCX=0とする処理も必要である。
ップ910及びステップ926では、CXが255を超え
た時、CX=255にセットして無条件でケース6のフォーマ
ットでの出力を行い、にCX=0とする処理も必要である。
【0088】このようなケース6についての遅延出力ス
キームを採用すると、ステップ802でバイトの列が終
了と判断されたときに、未出力のバイトが残る可能性が
ある。それは、例えば、ステップ940でケース5の出
力内容が出力バッファの内容と一致し、且つ、それに続
く連続するバイト列が存在しなかったので、ケース5ま
たはケース6のフォーマットとして直ちに出力されるチ
ャンスがないまま、1ページの印刷ストリームの終了に
達してしまった場合などである。この場合、図8のフロ
ーチャートでは、ステップ814からステップ802に
戻った時、ステップ816に進むので、ステップ816
でそのような残存の黒バイト列の出力が行われる。
キームを採用すると、ステップ802でバイトの列が終
了と判断されたときに、未出力のバイトが残る可能性が
ある。それは、例えば、ステップ940でケース5の出
力内容が出力バッファの内容と一致し、且つ、それに続
く連続するバイト列が存在しなかったので、ケース5ま
たはケース6のフォーマットとして直ちに出力されるチ
ャンスがないまま、1ページの印刷ストリームの終了に
達してしまった場合などである。この場合、図8のフロ
ーチャートでは、ステップ814からステップ802に
戻った時、ステップ816に進むので、ステップ816
でそのような残存の黒バイト列の出力が行われる。
【0089】D.データ伸長処理 次に、図10を参照して、データ伸長処理について説明
する。本発明において、データ伸長処理は、データ圧縮
処理よりも簡単であり、また、処理に要するバッファ・
メモリの量もかなり少なくて済む。一般的に、圧縮を行
うコンピュータ装置1100側のCPU1104に比
べ、コストを抑える必要性から、プリンタ装置1200
が備えるCPU1204はかなり処理能力が低いものが
使用される場合が多いので、CPU1204が行う必要
があるデータ伸長処理が簡単であることは、プリンタ装
置側のCPUの負担を軽減する点でメリットが大きい。
本実施例では、図10の処理を実現するためのコード
は、図1示すプリンタ装置1200中のROM1206
に格納されている。
する。本発明において、データ伸長処理は、データ圧縮
処理よりも簡単であり、また、処理に要するバッファ・
メモリの量もかなり少なくて済む。一般的に、圧縮を行
うコンピュータ装置1100側のCPU1104に比
べ、コストを抑える必要性から、プリンタ装置1200
が備えるCPU1204はかなり処理能力が低いものが
使用される場合が多いので、CPU1204が行う必要
があるデータ伸長処理が簡単であることは、プリンタ装
置側のCPUの負担を軽減する点でメリットが大きい。
本実施例では、図10の処理を実現するためのコード
は、図1示すプリンタ装置1200中のROM1206
に格納されている。
【0090】さて、図10のステップ1502では、所
定の変数である「繰り返しの数」が0にリセットされ
る。この繰り返しの数とは、図7にケース6のフォーマ
ットで、バイト704に格納されている値のことであ
る。
定の変数である「繰り返しの数」が0にリセットされ
る。この繰り返しの数とは、図7にケース6のフォーマ
ットで、バイト704に格納されている値のことであ
る。
【0091】ステップ1504では、バイトの列が終了
したかどうかが判断される。この実施例では、印刷デー
タ・ストリームはページ単位で圧縮・伸長されるので、
ここでいう「バイトの列の終了」とは、圧縮された1ペ
ージ分の印刷データ・ストリームの伸長が完了したこと
を意味する。
したかどうかが判断される。この実施例では、印刷デー
タ・ストリームはページ単位で圧縮・伸長されるので、
ここでいう「バイトの列の終了」とは、圧縮された1ペ
ージ分の印刷データ・ストリームの伸長が完了したこと
を意味する。
【0092】ステップ1504でバイトの列が終了して
いないと判断されると、ステップ1504に進み、最初
の(今読み出したばかりの)バイトがX'00'かどうか
が判断される。もしそうなら、ケース3の圧縮フォーマ
ット(図4)のバイト列に遭遇したことを意味するの
で、ステップ1508で、次のバイトに格納されている
整数値を読み込み、その数だけ白バイトが出力される。
いないと判断されると、ステップ1504に進み、最初
の(今読み出したばかりの)バイトがX'00'かどうか
が判断される。もしそうなら、ケース3の圧縮フォーマ
ット(図4)のバイト列に遭遇したことを意味するの
で、ステップ1508で、次のバイトに格納されている
整数値を読み込み、その数だけ白バイトが出力される。
【0093】ステップ1506で最初の(今読み出した
ばかりの)バイトがX'00'でなかった場合は、ステッ
プ1510でそれがX'01'かどうかが判断される。も
しそうなら、ケース4の圧縮フォーマット(図5)のバ
イト列に遭遇したことを意味するので、ステップ151
0で、次のバイトに格納されている整数値とさらにその
次のバイト値(黒バイト)を読み込み、その整数の数だ
け、読み込まれたバイト値が出力される。
ばかりの)バイトがX'00'でなかった場合は、ステッ
プ1510でそれがX'01'かどうかが判断される。も
しそうなら、ケース4の圧縮フォーマット(図5)のバ
イト列に遭遇したことを意味するので、ステップ151
0で、次のバイトに格納されている整数値とさらにその
次のバイト値(黒バイト)を読み込み、その整数の数だ
け、読み込まれたバイト値が出力される。
【0094】ステップ1510で最初の(今読み出した
ばかりの)バイトがX'01'でなかった場合は、ステッ
プ1514でそれがX'02'かどうかが判断される。も
しそうなら、ケース5の圧縮フォーマット(図6)のバ
イト列に遭遇したことを意味するので、ステップ151
6で、次のバイトに格納されている整数値を読み込み、
さらにその整数の数だけ黒バイトを読み込み出力する。
しかし、ステップ1516はこれだけでは終了しない。
なぜなら、現在注目しているケース5の圧縮フォーマッ
トが、図7のケース6の(c)に示すように、ケース6
の一部としてあらわれているかもしれないからである。
実際そうであるかどうかは、「繰り返しの数」が0より
大きいことによって示されている。そして、もし「繰り
返しの数」が0より大きいなら、その回数だけ、先程整
数の数だけ読み込まれた黒バイトの列を繰り返して出力
する。その後、繰り返しの回数は0にリセットされる。
ばかりの)バイトがX'01'でなかった場合は、ステッ
プ1514でそれがX'02'かどうかが判断される。も
しそうなら、ケース5の圧縮フォーマット(図6)のバ
イト列に遭遇したことを意味するので、ステップ151
6で、次のバイトに格納されている整数値を読み込み、
さらにその整数の数だけ黒バイトを読み込み出力する。
しかし、ステップ1516はこれだけでは終了しない。
なぜなら、現在注目しているケース5の圧縮フォーマッ
トが、図7のケース6の(c)に示すように、ケース6
の一部としてあらわれているかもしれないからである。
実際そうであるかどうかは、「繰り返しの数」が0より
大きいことによって示されている。そして、もし「繰り
返しの数」が0より大きいなら、その回数だけ、先程整
数の数だけ読み込まれた黒バイトの列を繰り返して出力
する。その後、繰り返しの回数は0にリセットされる。
【0095】ステップ1518で最初の(今読み出した
ばかりの)バイトがX'02'でなかった場合は、ステッ
プ1518でそれがX'03'かどうかが判断される。も
しそうなら、ケース6の圧縮フォーマット(図7)に遭
遇したことを意味するので、ステップ1520では、次
のバイト値を整数値として読み、それが「繰り返しの回
数」としてセットされる。
ばかりの)バイトがX'02'でなかった場合は、ステッ
プ1518でそれがX'03'かどうかが判断される。も
しそうなら、ケース6の圧縮フォーマット(図7)に遭
遇したことを意味するので、ステップ1520では、次
のバイト値を整数値として読み、それが「繰り返しの回
数」としてセットされる。
【0096】ステップ1506、1510、1514及
び1518が全て否定的であると、それは、遭遇した圧
縮フォーマットが、ケース1または2に該当することを
意味する。その場合、ステップ1522で、最初の(今
読み出したばかりの)バイトの上位5ビットの値がNw
としてセットされ、その下位3ビットがNbとしてセッ
トされる。
び1518が全て否定的であると、それは、遭遇した圧
縮フォーマットが、ケース1または2に該当することを
意味する。その場合、ステップ1522で、最初の(今
読み出したばかりの)バイトの上位5ビットの値がNw
としてセットされ、その下位3ビットがNbとしてセッ
トされる。
【0097】ステップ1524では、Nb=0かどうか
が判断される。なぜなら、図2及び図3から見て取れる
ように、最初の(今読み出したばかりの)バイトの下位
3ビットが0であるとき、それは、遭遇した圧縮フォー
マットが、ケース1ではなくケース2であることを意味
するからである。
が判断される。なぜなら、図2及び図3から見て取れる
ように、最初の(今読み出したばかりの)バイトの下位
3ビットが0であるとき、それは、遭遇した圧縮フォー
マットが、ケース1ではなくケース2であることを意味
するからである。
【0098】ステップ1524で、Nb=0の場合、次
のバイトが整数値として取り出され、それがNwとさ
れ、もとのNwの値がNbに代入される。このようにす
る理由は、図2及び図3を参照すると明らかなように、
ケース2では、ケース1のNwがNbで置き換えられて
いるからである。尚、ステップ1524でNb≠0の場
合、ステップ1522で取り出されたNw及びNbがそ
のまま使用される。
のバイトが整数値として取り出され、それがNwとさ
れ、もとのNwの値がNbに代入される。このようにす
る理由は、図2及び図3を参照すると明らかなように、
ケース2では、ケース1のNwがNbで置き換えられて
いるからである。尚、ステップ1524でNb≠0の場
合、ステップ1522で取り出されたNw及びNbがそ
のまま使用される。
【0099】ステップ1526では、Nwの数だけ白バ
イトが出力され、続いて、ステップ1528だけ黒バイ
トが読み込まれ、ステップ1530では、読み込んだ黒
バイトの列が出力される。
イトが出力され、続いて、ステップ1528だけ黒バイ
トが読み込まれ、ステップ1530では、読み込んだ黒
バイトの列が出力される。
【0100】ステップ1532では、繰り返しの数が0
よりも大きいかどうかが判断される。もしそうなら、現
在注目しているケース1またはケース2の圧縮フォーマ
ットが、図7のケース6の(a)または(b)に示すよ
うに、ケース6の一部としてあらわれていることを意味
するので、その回数だけ、ステップ1526と同様にN
wの数だけ白バイトを出力することと、ステップ153
0と同様に整数の数だけ読み込まれた黒バイトの列を出
力することとを繰り返して出力する。その後、ステップ
1534で繰り返しの回数は0にリセットされる。
よりも大きいかどうかが判断される。もしそうなら、現
在注目しているケース1またはケース2の圧縮フォーマ
ットが、図7のケース6の(a)または(b)に示すよ
うに、ケース6の一部としてあらわれていることを意味
するので、その回数だけ、ステップ1526と同様にN
wの数だけ白バイトを出力することと、ステップ153
0と同様に整数の数だけ読み込まれた黒バイトの列を出
力することとを繰り返して出力する。その後、ステップ
1534で繰り返しの回数は0にリセットされる。
【0101】そうして、制御はステップ1504に戻
り、1ページ分の印刷ストリームの伸長処理を完了して
しまうまで、図10の処理は続く。
り、1ページ分の印刷ストリームの伸長処理を完了して
しまうまで、図10の処理は続く。
【0102】ところで、図8及び図9の圧縮処理及び図
10の伸長処理が想定するケース2、ケース3、及びケ
ース6の「整数値」と称する1バイトの繰り返し回数の
値は、1〜255をそのまま利用するようにし、0とい
う値は使用しないようにしたが、上記実施例の範囲では
原理的に、この繰り返し回数の値が0のとき、ケース
2、ケース3、乃至ケース6のフォーマットが利用され
ることはない。そこで、「整数値」に格納されている実
際の値に1を足した値を、繰り返し回数であるとして、
図8及び図9の圧縮処理及び図10の伸長処理を実装す
ることもできる。これによって、ケース2、ケース3、
及びケース6の単一のフォーマットでカバーできる繰り
返し回数が256と、1回分増えることになって、少し
圧縮効率を高めることができる。
10の伸長処理が想定するケース2、ケース3、及びケ
ース6の「整数値」と称する1バイトの繰り返し回数の
値は、1〜255をそのまま利用するようにし、0とい
う値は使用しないようにしたが、上記実施例の範囲では
原理的に、この繰り返し回数の値が0のとき、ケース
2、ケース3、乃至ケース6のフォーマットが利用され
ることはない。そこで、「整数値」に格納されている実
際の値に1を足した値を、繰り返し回数であるとして、
図8及び図9の圧縮処理及び図10の伸長処理を実装す
ることもできる。これによって、ケース2、ケース3、
及びケース6の単一のフォーマットでカバーできる繰り
返し回数が256と、1回分増えることになって、少し
圧縮効率を高めることができる。
【0103】また、上記実施例で、ケース3、ケース
4、ケース5及びケース6のフォーマットは、それぞ
れ、その先頭に付く制御バイトとして、X'00'、X'
01'、X'02'、X'03'を使用しているが、勿論こ
のような割り当てに限定されるものではなく、次の2つ
の条件を満たす任意の制御バイトの割り当てを採用する
ことができる。 (1) 制御バイトは、その上位5ビットが全て0である。 (2) ケース3、ケース4、ケース5及びケース6に割り
当てられる制御バイトは、それぞれ、異なる値である。
4、ケース5及びケース6のフォーマットは、それぞ
れ、その先頭に付く制御バイトとして、X'00'、X'
01'、X'02'、X'03'を使用しているが、勿論こ
のような割り当てに限定されるものではなく、次の2つ
の条件を満たす任意の制御バイトの割り当てを採用する
ことができる。 (1) 制御バイトは、その上位5ビットが全て0である。 (2) ケース3、ケース4、ケース5及びケース6に割り
当てられる制御バイトは、それぞれ、異なる値である。
【0104】E.プリンタ装置における動作例 次に、図1のハードウェア構成と、図8、図9及び図1
0のフローチャートとを関連付けることによって、本発
明に従う圧縮・伸長技法が、コンピュータ装置及びそれ
に接続されたプリンタ装置においてどのように実現され
るかについて具体的に説明する。
0のフローチャートとを関連付けることによって、本発
明に従う圧縮・伸長技法が、コンピュータ装置及びそれ
に接続されたプリンタ装置においてどのように実現され
るかについて具体的に説明する。
【0105】先ず、図8及び図9に示すデータ圧縮制御
を行うコードを含むプログラムは、図1のコンピュータ
装置1100におけるディスク1116に格納されてい
る。このプログラムは、好適には、プリンタ・デバイス
・ドライバとして、スプレッドシート、ワードプロセッ
サなどの個別のアプリケーション・プログラムから呼び
出すことのできるものである。通常は、このようなプリ
ンタ・デバイス・ドライバは、オプション・フロッピ・
ディスクに格納されてプリンタ装置1200に同梱され
て出荷され、プリンタ装置1200を使用する前に、所
定のセットアップ手続きにより、コンピュータ装置11
00におけるディスク1116に導入される。
を行うコードを含むプログラムは、図1のコンピュータ
装置1100におけるディスク1116に格納されてい
る。このプログラムは、好適には、プリンタ・デバイス
・ドライバとして、スプレッドシート、ワードプロセッ
サなどの個別のアプリケーション・プログラムから呼び
出すことのできるものである。通常は、このようなプリ
ンタ・デバイス・ドライバは、オプション・フロッピ・
ディスクに格納されてプリンタ装置1200に同梱され
て出荷され、プリンタ装置1200を使用する前に、所
定のセットアップ手続きにより、コンピュータ装置11
00におけるディスク1116に導入される。
【0106】一方、図10に示すデータ伸長制御を行う
コードを含むプログラムは、図1のプリンタ装置120
0におけるROM1206に格納されている。
コードを含むプログラムは、図1のプリンタ装置120
0におけるROM1206に格納されている。
【0107】さて、本発明に係るデータ圧縮機能を印刷
オプションとして指定したアプリケーション・プログラ
ム(例えば、スプレッドシート・プログラム)は、次の
ような処理を行う。すなわち、ユーザーが、スプレッド
シートの複数のセルに格納されている文字及び数字デー
タに基づき円グラフを描き且つこれを印刷する処理を選
択すると、それに応答して、スプレッドシート・プログ
ラムは、先ず、印刷すべき円グラフのビットマップ・デ
ータをCPU1104の処理によって生成し、それをR
AM1106上に展開する。
オプションとして指定したアプリケーション・プログラ
ム(例えば、スプレッドシート・プログラム)は、次の
ような処理を行う。すなわち、ユーザーが、スプレッド
シートの複数のセルに格納されている文字及び数字デー
タに基づき円グラフを描き且つこれを印刷する処理を選
択すると、それに応答して、スプレッドシート・プログ
ラムは、先ず、印刷すべき円グラフのビットマップ・デ
ータをCPU1104の処理によって生成し、それをR
AM1106上に展開する。
【0108】こうして、1ページ分のビットマップ・デ
ータがRAM1106上に展開されると、この1ページ
分のビットマップ・データは、図8及び図9に示すデー
タ圧縮処理によって圧縮され、好適にはやはりRAM1
106上の所定のバッファ領域に一旦格納される。尚、
この圧縮処理には、図8に示す黒バイト・バッファBlac
k_bytesや、変数CL、CC、Cなどを確保するための作業メ
モリが必要であるが、それらもまたRAM1106上に
用意される。
ータがRAM1106上に展開されると、この1ページ
分のビットマップ・データは、図8及び図9に示すデー
タ圧縮処理によって圧縮され、好適にはやはりRAM1
106上の所定のバッファ領域に一旦格納される。尚、
この圧縮処理には、図8に示す黒バイト・バッファBlac
k_bytesや、変数CL、CC、Cなどを確保するための作業メ
モリが必要であるが、それらもまたRAM1106上に
用意される。
【0109】1ページ分の圧縮された印刷データ・スト
リームが用意されると、スプレッドシート・プログラム
は、印刷デバイス・ドライバの機能を呼び出すことによ
って、予め定められたエスケープ・シーケンスを、I/
Oポート1118を介して、プリンタ装置1200に送
る。このエスケープ・シーケンスは、本発明の技法によ
って圧縮されたデータ・ストリームが今から送られるこ
とを示すX'1b'で始まる固有のバイト列と、それ続
き、今から送られる1ページ分の(圧縮前のビットマッ
プの)X方向のサイズのビット数及びY方向のサイズの
ビット数と、最後に、圧縮されたデータ・ストリームの
バイト数とからなっている。
リームが用意されると、スプレッドシート・プログラム
は、印刷デバイス・ドライバの機能を呼び出すことによ
って、予め定められたエスケープ・シーケンスを、I/
Oポート1118を介して、プリンタ装置1200に送
る。このエスケープ・シーケンスは、本発明の技法によ
って圧縮されたデータ・ストリームが今から送られるこ
とを示すX'1b'で始まる固有のバイト列と、それ続
き、今から送られる1ページ分の(圧縮前のビットマッ
プの)X方向のサイズのビット数及びY方向のサイズの
ビット数と、最後に、圧縮されたデータ・ストリームの
バイト数とからなっている。
【0110】このエスケープ・シーケンスに続いて、実
際の圧縮されたデータ・ストリームが、やはりI/Oポ
ート1118を介して、プリンタ装置1200に送られ
る。
際の圧縮されたデータ・ストリームが、やはりI/Oポ
ート1118を介して、プリンタ装置1200に送られ
る。
【0111】エスケープ・シーケンスが必要である理由
は、プリンタ装置1200には、本発明に係る圧縮デー
タを受け取りそれを伸長するモード以外にも、単に文字
コードを受け取ってその文字コードに対応するフォント
をROMから読み取り印刷を行うキャラクタ・ベースの
印刷モードなどの様々な印刷モードが用意されており、
従って、どの印刷モードを使用するかを予め指定する必
要があるからである。
は、プリンタ装置1200には、本発明に係る圧縮デー
タを受け取りそれを伸長するモード以外にも、単に文字
コードを受け取ってその文字コードに対応するフォント
をROMから読み取り印刷を行うキャラクタ・ベースの
印刷モードなどの様々な印刷モードが用意されており、
従って、どの印刷モードを使用するかを予め指定する必
要があるからである。
【0112】上記エスケープ・シーケンスを受け取る
と、プリンタ装置1200は、CPU1204の制御に
よって、ROM1206に格納されている、本発明に係
るデータ伸長プログラムを有効化しあるいはRAM12
05にロードし、併せて伸長作業に必要なバッファ領域
をRAM1205上に確保する。
と、プリンタ装置1200は、CPU1204の制御に
よって、ROM1206に格納されている、本発明に係
るデータ伸長プログラムを有効化しあるいはRAM12
05にロードし、併せて伸長作業に必要なバッファ領域
をRAM1205上に確保する。
【0113】そうして、次に上記圧縮されたデータ・ス
トリームがバッファ1202に到着し始めると、図10
から見て取れるように、CPU1204は、1ページ分
の圧縮されたデータ・ストリーム全体が到着するのを待
つことなく、圧縮されたデータ・ストリームの最初の1
バイト目から早速伸長処理を開始することができる。こ
のとき、エスケープ・シーケンスの末尾で与えられる圧
縮されたデータ・ストリームのバイト数が、1ページ分
のデータの終了を知るために使用される(図10のステ
ップ1504を参照)。
トリームがバッファ1202に到着し始めると、図10
から見て取れるように、CPU1204は、1ページ分
の圧縮されたデータ・ストリーム全体が到着するのを待
つことなく、圧縮されたデータ・ストリームの最初の1
バイト目から早速伸長処理を開始することができる。こ
のとき、エスケープ・シーケンスの末尾で与えられる圧
縮されたデータ・ストリームのバイト数が、1ページ分
のデータの終了を知るために使用される(図10のステ
ップ1504を参照)。
【0114】伸長されたバイト列は、順次、ビットマッ
プ・メモリ1208に格納され、ビットマップ・メモリ
1208に1ページ分の印刷データが揃った段階で、そ
の1ページ分の印刷データに基づき印刷機構1210が
駆動され、印刷データに基づきレーザー・ビームが変調
されて光導電体(図示しない)に差し向けられ、以って
トナーによる現像及び用紙への転写が行われる。
プ・メモリ1208に格納され、ビットマップ・メモリ
1208に1ページ分の印刷データが揃った段階で、そ
の1ページ分の印刷データに基づき印刷機構1210が
駆動され、印刷データに基づきレーザー・ビームが変調
されて光導電体(図示しない)に差し向けられ、以って
トナーによる現像及び用紙への転写が行われる。
【0115】尚、この実施例では、印刷機構1210の
駆動中に並列的にCPU1204によって次のページの
データ・ストリームの伸長処理を行うことができるよう
に、ビットマップ・メモリ1208には、個別にアクセ
スされる1ページずつの印刷データを格納できるように
なされているが、ビットマップ・メモリ1208に1ペ
ージ分の記憶領域しかなくとも、伸長及び印刷処理は可
能である。
駆動中に並列的にCPU1204によって次のページの
データ・ストリームの伸長処理を行うことができるよう
に、ビットマップ・メモリ1208には、個別にアクセ
スされる1ページずつの印刷データを格納できるように
なされているが、ビットマップ・メモリ1208に1ペ
ージ分の記憶領域しかなくとも、伸長及び印刷処理は可
能である。
【0116】F.第2の実施例 第2の実施例では、前記ケース1からケース6の圧縮フ
ォーマットの組が、次のように変更される。すなわち、
ケース3からケース6までのフォーマットに、その先頭
の制御バイトに続く、長さをあらわす「整数値」とラベ
ルされた1バイトのフィールドが、2バイトに拡張され
たものが追加され、それをケース3'、ケース4'、ケー
ス5'及びケース6'と呼ぶことにすると、それらにおい
て、それぞれが、65535までの長さの連続する白あ
るいは、黒のバイトを表現することができるようにな
る。すると、第2の実施例では、ケース3、ケース
3'、ケース4、ケース4'、ケース5、ケース5'、ケ
ース6、ケース6'の各々に対して異なる固有の制御バ
イトを割り当てる必要があるが、この場合、第1の実施
例と同様に、制御バイトは、上位5ビットが0で下位3
ビットが任意であるので8種類あり、ケース3、ケース
4、ケース5、ケース6、ケース3'、ケース4'、ケー
ス5'、ケース6'に対して丁度1つずつ割り当てること
ができる。これらに制御バイトを割り当てる1つの方法
は、それぞれに順次、X'00'、X'01'、X'02'、
X'03'、X'04'、X'05'、X'06'、X'07'と
割り当てていくことであり、これは、図2〜図7に示し
た第1の実施例フォーマットの自然な拡張にもなってい
る。
ォーマットの組が、次のように変更される。すなわち、
ケース3からケース6までのフォーマットに、その先頭
の制御バイトに続く、長さをあらわす「整数値」とラベ
ルされた1バイトのフィールドが、2バイトに拡張され
たものが追加され、それをケース3'、ケース4'、ケー
ス5'及びケース6'と呼ぶことにすると、それらにおい
て、それぞれが、65535までの長さの連続する白あ
るいは、黒のバイトを表現することができるようにな
る。すると、第2の実施例では、ケース3、ケース
3'、ケース4、ケース4'、ケース5、ケース5'、ケ
ース6、ケース6'の各々に対して異なる固有の制御バ
イトを割り当てる必要があるが、この場合、第1の実施
例と同様に、制御バイトは、上位5ビットが0で下位3
ビットが任意であるので8種類あり、ケース3、ケース
4、ケース5、ケース6、ケース3'、ケース4'、ケー
ス5'、ケース6'に対して丁度1つずつ割り当てること
ができる。これらに制御バイトを割り当てる1つの方法
は、それぞれに順次、X'00'、X'01'、X'02'、
X'03'、X'04'、X'05'、X'06'、X'07'と
割り当てていくことであり、これは、図2〜図7に示し
た第1の実施例フォーマットの自然な拡張にもなってい
る。
【0117】第2の実施例では、白バイトの列と、それ
に続き次に再び白バイトまたはバイト列の終了に遭遇す
るまでの黒バイト列を1つの処理単位として一括して扱
う。図11でXとして示されているのが、そのような処
理単位である。従って、この実施例では、処理単位Xを
一度に格納できるような十分に大きいバッファが用意さ
れる(尤も、白バイト列は、その長さだけ分かっていれ
ばよいので、バッファに格納するのは、黒バイト列だけ
でよい)。
に続き次に再び白バイトまたはバイト列の終了に遭遇す
るまでの黒バイト列を1つの処理単位として一括して扱
う。図11でXとして示されているのが、そのような処
理単位である。従って、この実施例では、処理単位Xを
一度に格納できるような十分に大きいバッファが用意さ
れる(尤も、白バイト列は、その長さだけ分かっていれ
ばよいので、バッファに格納するのは、黒バイト列だけ
でよい)。
【0118】図11に示すように、一般的に処理単位X
は、白バイト列のみからなる部分X1と、白バイト列と
黒バイト列のペアからなる部分X2と、黒バイト列のみ
からなる部分X3に分けられる。
は、白バイト列のみからなる部分X1と、白バイト列と
黒バイト列のペアからなる部分X2と、黒バイト列のみ
からなる部分X3に分けられる。
【0119】このうち、部分X1は、ケース3またはケ
ース3'のフォーマットによって表現される。
ース3'のフォーマットによって表現される。
【0120】また、部分X2は、部分X1を取り去った
後の白バイトの数に応じて、ケース1またはケース2の
どちらかによって表現される。すなわち、部分X1は、
部分X2が占める白バイトが、31バイト以下になるよ
うに白バイトの長さを表現するものとする。
後の白バイトの数に応じて、ケース1またはケース2の
どちらかによって表現される。すなわち、部分X1は、
部分X2が占める白バイトが、31バイト以下になるよ
うに白バイトの長さを表現するものとする。
【0121】しかし、先頭の白バイト列の長さに基づき
部分X2における黒バイト列の長さを決定するのではな
くて、寧ろ、黒バイト列の繰り返しの存在を検出して、
繰り返しを含まない部分X2の長さを最少にするように
とるのが、より実際的である。
部分X2における黒バイト列の長さを決定するのではな
くて、寧ろ、黒バイト列の繰り返しの存在を検出して、
繰り返しを含まない部分X2の長さを最少にするように
とるのが、より実際的である。
【0122】部分X3は、例えば図9のステップ914
からステップ940までで示されているような処理によ
って、ケース4及びケース4'と、ケース5及びケース
5'のフォーマットで表現される。第1の実施例では、
そのときの繰り返しの限界値が255であったが、第2
の実施例では、これが65535まで拡張される。すな
わち、第2の実施例では、繰り返しの数が255以下の
ときはケース4またはケース5のフォーマットが使用さ
れ、繰り返しの数が256から65535までの間のと
きは、ケース4'またはケース5'のフォーマットが使用
される。
からステップ940までで示されているような処理によ
って、ケース4及びケース4'と、ケース5及びケース
5'のフォーマットで表現される。第1の実施例では、
そのときの繰り返しの限界値が255であったが、第2
の実施例では、これが65535まで拡張される。すな
わち、第2の実施例では、繰り返しの数が255以下の
ときはケース4またはケース5のフォーマットが使用さ
れ、繰り返しの数が256から65535までの間のと
きは、ケース4'またはケース5'のフォーマットが使用
される。
【0123】ところで、第1の実施例では、図9で星印
をつけたステップ908、ステップ910、及びステッ
プ926では、図7に示すケース6のフォーマットを使
用するために、一旦出力をバッファに格納し、繰り返し
をカウントする処理が行われた。
をつけたステップ908、ステップ910、及びステッ
プ926では、図7に示すケース6のフォーマットを使
用するために、一旦出力をバッファに格納し、繰り返し
をカウントする処理が行われた。
【0124】第2の実施例でも、やはり同様の繰り返し
のカウントを行い、繰り返しカウントが255以下のと
きはケース6が使用され、繰り返しカウントが256か
ら65535までの間のときはケース6'のフォーマッ
トが使用される。
のカウントを行い、繰り返しカウントが255以下のと
きはケース6が使用され、繰り返しカウントが256か
ら65535までの間のときはケース6'のフォーマッ
トが使用される。
【0125】第2の実施例の技法で圧縮されたデータ・
ストリームは、特定の制御バイトに応答して、次の1バ
イトでなく次の2バイトから繰り返しの整数値を取り出
すことを除けば、実質的に、図10のフローチャートに
示す処理と同様の処理によって伸長することができる。
ストリームは、特定の制御バイトに応答して、次の1バ
イトでなく次の2バイトから繰り返しの整数値を取り出
すことを除けば、実質的に、図10のフローチャートに
示す処理と同様の処理によって伸長することができる。
【0126】G.第3の実施例 ここまでの処理から、第2の実施例は、第1の実施例の
十分な拡張になっていることが見て取れる。しかし、依
然として、第2の実施例は、図11で示すバイト列Xを
圧縮した結果自体は、圧縮の対象としていない。このた
め、第3の実施例では、第2の実施例と同一の圧縮フォ
ーマットを使用するけれども、ケース6'のフォーマッ
トに対して、次のような解釈の変更を行う。
十分な拡張になっていることが見て取れる。しかし、依
然として、第2の実施例は、図11で示すバイト列Xを
圧縮した結果自体は、圧縮の対象としていない。このた
め、第3の実施例では、第2の実施例と同一の圧縮フォ
ーマットを使用するけれども、ケース6'のフォーマッ
トに対して、次のような解釈の変更を行う。
【0127】(1) 図9のステップ908、ステップ91
0及びステップ926に対応する処理で、第2の実施例
では、その繰り返しの数に応じて、ケース6またはケー
ス6'のフォーマットのどちらかが使用されたが、第3
の実施例では、このような場合に、ケース6しか使用し
ないようにする。従って、第3の実施例では、この際の
繰り返しの数は、255に限定される。 (2) 第2の実施例では、ケース6'の制御バイトに続く
2バイトは、繰り返しの数を格納するフィールドと解釈
されたが、第3の実施例では、制御バイトに続く1バイ
ト目は繰り返しの数を格納するフィールドとし、次の1
バイトを、以下に続く、このフォーマットの一部として
扱うべきバイト列の長さとする。 (3) このように解釈されるケース6'のフォーマット
は、専ら、図11のバイト列X全体を圧縮したバイト列
の繰り返しを扱うために使用される。
0及びステップ926に対応する処理で、第2の実施例
では、その繰り返しの数に応じて、ケース6またはケー
ス6'のフォーマットのどちらかが使用されたが、第3
の実施例では、このような場合に、ケース6しか使用し
ないようにする。従って、第3の実施例では、この際の
繰り返しの数は、255に限定される。 (2) 第2の実施例では、ケース6'の制御バイトに続く
2バイトは、繰り返しの数を格納するフィールドと解釈
されたが、第3の実施例では、制御バイトに続く1バイ
ト目は繰り返しの数を格納するフィールドとし、次の1
バイトを、以下に続く、このフォーマットの一部として
扱うべきバイト列の長さとする。 (3) このように解釈されるケース6'のフォーマット
は、専ら、図11のバイト列X全体を圧縮したバイト列
の繰り返しを扱うために使用される。
【0128】第3の実施例では、圧縮処理の開始時点
で、ケース6'の繰り返しの数を格納するためのカウン
タが0にセットされる。次に、図11で示すバイト列X
全体を圧縮した結果は一旦別のバッファに格納され、次
にカウンタの値を調べ、それが0なら、そのバイト長が
255に収まるかどうかが判断される。もしそのバイト
長に収まるなら、バイト列X全体を圧縮した結果は、出
力バッファに格納される。そして、カウンタは、1だけ
増分される。
で、ケース6'の繰り返しの数を格納するためのカウン
タが0にセットされる。次に、図11で示すバイト列X
全体を圧縮した結果は一旦別のバッファに格納され、次
にカウンタの値を調べ、それが0なら、そのバイト長が
255に収まるかどうかが判断される。もしそのバイト
長に収まるなら、バイト列X全体を圧縮した結果は、出
力バッファに格納される。そして、カウンタは、1だけ
増分される。
【0129】カウンタの値が0で、今回のバイト列X全
体を圧縮した結果がバイト長255に収まらないなら、
ケース6'のフォーマットは使用できないので、直ち
に、バイト列X全体を圧縮した結果が出力される。
体を圧縮した結果がバイト長255に収まらないなら、
ケース6'のフォーマットは使用できないので、直ち
に、バイト列X全体を圧縮した結果が出力される。
【0130】カウンタの値が1で、今回のバイト列X全
体を圧縮した結果がバイト長255に収まらないなら、
出力バッファに格納されている圧縮されたバイト列がそ
のまま出力され、次に、今回のバイト列X全体を圧縮し
た結果が出力される。そして、カウンタの値は0にリセ
ットされる。
体を圧縮した結果がバイト長255に収まらないなら、
出力バッファに格納されている圧縮されたバイト列がそ
のまま出力され、次に、今回のバイト列X全体を圧縮し
た結果が出力される。そして、カウンタの値は0にリセ
ットされる。
【0131】カウンタの値が2以上で、今回のバイト列
X全体を圧縮した結果がバイト長255に収まらないな
ら、出力バッファに格納されている圧縮されたバイト列
が、カウンタの値とその出力バッファに格納されている
圧縮されたバイト列の長さの値を使用して、ケース6'
のフォーマットで出力され、次に、今回のバイト列X全
体を圧縮した結果が出力される。そして、カウンタの値
は0にリセットされる。
X全体を圧縮した結果がバイト長255に収まらないな
ら、出力バッファに格納されている圧縮されたバイト列
が、カウンタの値とその出力バッファに格納されている
圧縮されたバイト列の長さの値を使用して、ケース6'
のフォーマットで出力され、次に、今回のバイト列X全
体を圧縮した結果が出力される。そして、カウンタの値
は0にリセットされる。
【0132】カウンタの値が1以上で、今回のバイト列
X全体を圧縮した結果がバイト長255に収まるなら、
出力バッファに格納されている圧縮されたバイト列と、
今回のバイト列X全体を圧縮した結果が比較される。
X全体を圧縮した結果がバイト長255に収まるなら、
出力バッファに格納されている圧縮されたバイト列と、
今回のバイト列X全体を圧縮した結果が比較される。
【0133】そして、それらが一致するなら、単にカウ
ンタの値は、1だけ増分される。
ンタの値は、1だけ増分される。
【0134】それらが不一致なら、カウンタの値が1で
ある場合、出力バッファに格納されている圧縮されたバ
イト列が先ずそのまま出力されて、代わりに、今回のバ
イト列X全体を圧縮した結果が出力バッファに格納され
る。このとき、カウンタの値は1のままである。
ある場合、出力バッファに格納されている圧縮されたバ
イト列が先ずそのまま出力されて、代わりに、今回のバ
イト列X全体を圧縮した結果が出力バッファに格納され
る。このとき、カウンタの値は1のままである。
【0135】それらが不一致で、カウンタの値が2以上
である場合、出力バッファに格納されている圧縮された
バイト列がケース6'のフォーマットを利用して出力さ
れて、代わりに、今回のバイト列X全体を圧縮した結果
が出力バッファに格納される。このとき、カウンタの値
は1にセットされる。
である場合、出力バッファに格納されている圧縮された
バイト列がケース6'のフォーマットを利用して出力さ
れて、代わりに、今回のバイト列X全体を圧縮した結果
が出力バッファに格納される。このとき、カウンタの値
は1にセットされる。
【0136】カウンタの値が255に達したときは、直
ちに、出力バッファに格納されている圧縮されたバイト
列がケース6'のフォーマットを利用して出力され、カ
ウンタの値は0にリセットされる。
ちに、出力バッファに格納されている圧縮されたバイト
列がケース6'のフォーマットを利用して出力され、カ
ウンタの値は0にリセットされる。
【0137】そして、データ・ストリームの終了時に、
カウンタの値が2以上ならケース6'のフォーマットを
使用して出力バッファの内容を出力し、カウンタの値が
1なら、出力バッファの内容をそのまま出力し、カウン
タの値が0なら何もしない。
カウンタの値が2以上ならケース6'のフォーマットを
使用して出力バッファの内容を出力し、カウンタの値が
1なら、出力バッファの内容をそのまま出力し、カウン
タの値が0なら何もしない。
【0138】第3の実施例の技法で圧縮されたデータ・
ストリームを伸長する場合、注意を要するのは、ケース
6'のフォーマットに出会ったときである。このとき
は、ケース6'のフォーマットからバイト長の値と、繰
り返しの値とを取得し、続いて、そのバイト長分だけ処
理用のバッファにバイト列を読み込み、この読み込んだ
バイト列を、(ケース6'を除く)第2の実施例と同様
の伸長技法で伸長し、その結果の全体をさらに、出力バ
ッファに格納する。そうして、取得した繰り返しの値だ
け、出力バッファに格納されているバイト列の出力を反
復する、という処理を行う。ケース6'のフォーマット
に遭遇しないときは、第2の実施例と同様の伸長処理で
よい。
ストリームを伸長する場合、注意を要するのは、ケース
6'のフォーマットに出会ったときである。このとき
は、ケース6'のフォーマットからバイト長の値と、繰
り返しの値とを取得し、続いて、そのバイト長分だけ処
理用のバッファにバイト列を読み込み、この読み込んだ
バイト列を、(ケース6'を除く)第2の実施例と同様
の伸長技法で伸長し、その結果の全体をさらに、出力バ
ッファに格納する。そうして、取得した繰り返しの値だ
け、出力バッファに格納されているバイト列の出力を反
復する、という処理を行う。ケース6'のフォーマット
に遭遇しないときは、第2の実施例と同様の伸長処理で
よい。
【0139】第2及び第3の実施例は、第1の実施例と
比べると、より長い周期の白または黒バイト列を扱うこ
とができるので、網掛け(シェーディング)や複雑なハ
ーフトーンなどの圧縮に一層相応しい技法である。
比べると、より長い周期の白または黒バイト列を扱うこ
とができるので、網掛け(シェーディング)や複雑なハ
ーフトーンなどの圧縮に一層相応しい技法である。
【0140】尚、第2及び第3の実施例における拡張さ
れたフォーマット長さや繰り返し回数をあらわす単位で
ある2バイトをさらに3バイトに拡張することも考えら
れ、すると、その3バイトで、1ページ全体が白バイト
であったり、あるいは1ページ全体が同一の黒バイトで
占められているようなデータ・ストリームが極めて有効
に圧縮される。しかし、そのような場合は極めて稀であ
り、長さや繰り返し回数をあらわす単位である2バイト
をさらに3バイトに拡張する意味はあまりないだろう。
れたフォーマット長さや繰り返し回数をあらわす単位で
ある2バイトをさらに3バイトに拡張することも考えら
れ、すると、その3バイトで、1ページ全体が白バイト
であったり、あるいは1ページ全体が同一の黒バイトで
占められているようなデータ・ストリームが極めて有効
に圧縮される。しかし、そのような場合は極めて稀であ
り、長さや繰り返し回数をあらわす単位である2バイト
をさらに3バイトに拡張する意味はあまりないだろう。
【0141】
【発明の効果】以上説明したように、この発明によれ
ば、1ワード(バイト)内に白ワード(バイト)の長さ
と黒ワード(バイト)の長さを両方記述可能な合理化さ
れた制御ワードを使用することによって、白ワードと黒
ワードが比較的短い周期で規則的にあらわれる、コンピ
ュータによって生成された罫線帳票、ハーフ・トーンの
パターンなどの規則的なイメージ・データを極めて効率
的に圧縮することが可能となる。因みに、特定のハーフ
・トーンのパターンの圧縮を、MMRに従い実行したと
ころ結果のファイル・サイズは、もとのファイル・サイ
ズの130%程度になり却って増大してしまったが、本
発明の従う技法では、数%程度に圧縮され、その効果は
極めて顕著であった。
ば、1ワード(バイト)内に白ワード(バイト)の長さ
と黒ワード(バイト)の長さを両方記述可能な合理化さ
れた制御ワードを使用することによって、白ワードと黒
ワードが比較的短い周期で規則的にあらわれる、コンピ
ュータによって生成された罫線帳票、ハーフ・トーンの
パターンなどの規則的なイメージ・データを極めて効率
的に圧縮することが可能となる。因みに、特定のハーフ
・トーンのパターンの圧縮を、MMRに従い実行したと
ころ結果のファイル・サイズは、もとのファイル・サイ
ズの130%程度になり却って増大してしまったが、本
発明の従う技法では、数%程度に圧縮され、その効果は
極めて顕著であった。
【0142】この発明に従う圧縮技法の更なる特徴は、
コンピュータの基本的な処理単位であるワード(バイ
ト)をベースとし、MMRのように、行をベースとする
相関処理を行なわないので、使用されるアルゴリズムが
シンプルであって、あまり高性能でないCPUでも十分
に高速に処理を行うことが可能である。
コンピュータの基本的な処理単位であるワード(バイ
ト)をベースとし、MMRのように、行をベースとする
相関処理を行なわないので、使用されるアルゴリズムが
シンプルであって、あまり高性能でないCPUでも十分
に高速に処理を行うことが可能である。
【0143】また、図10のフローチャートから見て取
れるように、本発明に従う伸長処理は、基本的に、最初
のワード(バイト)の値を見てその値に基づき分岐する
だけでよく、例えばC言語のswitch〜case文
によって記述されるような処理である。従って、圧縮処
理を行うのと同一の能力のCPUを使用したと仮定し
て、あるデータ・ストリームを圧縮するに要する時間よ
りもさらに短い時間で、伸長処理を行うことが可能であ
る。このことは、一般にプリンタ装置では、コストを抑
えるために、コンピュータ処理装置に使用されるよりも
安価な、処理能力が小さいCPUが使用される、という
事情ゆえに重要である。なぜなら、もし伸長処理が圧縮
処理と同程度以上の演算処理量を有するなら、コンピュ
ータ処理装置側で印刷データ・ストリームを圧縮してプ
リンタ装置に転送するに要する時間よりも、プリンタ装
置側で、圧縮された印刷データ・ストリームを伸長する
に要する時間の方が大きくなり、結局、コンピュータ処
理装置に搭載されている高性能のCPUの能力を印刷速
度に反映させることができなくなるからである。
れるように、本発明に従う伸長処理は、基本的に、最初
のワード(バイト)の値を見てその値に基づき分岐する
だけでよく、例えばC言語のswitch〜case文
によって記述されるような処理である。従って、圧縮処
理を行うのと同一の能力のCPUを使用したと仮定し
て、あるデータ・ストリームを圧縮するに要する時間よ
りもさらに短い時間で、伸長処理を行うことが可能であ
る。このことは、一般にプリンタ装置では、コストを抑
えるために、コンピュータ処理装置に使用されるよりも
安価な、処理能力が小さいCPUが使用される、という
事情ゆえに重要である。なぜなら、もし伸長処理が圧縮
処理と同程度以上の演算処理量を有するなら、コンピュ
ータ処理装置側で印刷データ・ストリームを圧縮してプ
リンタ装置に転送するに要する時間よりも、プリンタ装
置側で、圧縮された印刷データ・ストリームを伸長する
に要する時間の方が大きくなり、結局、コンピュータ処
理装置に搭載されている高性能のCPUの能力を印刷速
度に反映させることができなくなるからである。
【0144】尚、上記の実施例では、バイト(8ビッ
ト)単位でデータ・ストリームの圧縮を行うようにした
が、もちろんこれ限定されるものではなく、16ビット
単位で圧縮を行うようにしてもよく、要は、必要なデー
タ・ストリームの解像度及びCPUのアーキテクチャに
依存する。ただ、一般的に、好適なデータ・ストリーム
圧縮の処理ビット単位は、8の倍数であろう。
ト)単位でデータ・ストリームの圧縮を行うようにした
が、もちろんこれ限定されるものではなく、16ビット
単位で圧縮を行うようにしてもよく、要は、必要なデー
タ・ストリームの解像度及びCPUのアーキテクチャに
依存する。ただ、一般的に、好適なデータ・ストリーム
圧縮の処理ビット単位は、8の倍数であろう。
【0145】また、上記実施例のケース1及びケース2
の圧縮フォーマットでは、1バイトを5バイトと3バイ
トに分け、5バイトで白バイトの連続する長さを、3バ
イトで黒バイトの連続する長さをそれぞれあらわすよう
にしたが、この分け方はこれに限定されるのではなく、
例えば、白バイトと黒バイトのあらわれる統計的な性質
に応じて4バイトずつにするなど、任意の分け方を使用
してもよい。このことは、バイト(8ビット)単位以外
のデータ処理単位を採用したときも同様である。
の圧縮フォーマットでは、1バイトを5バイトと3バイ
トに分け、5バイトで白バイトの連続する長さを、3バ
イトで黒バイトの連続する長さをそれぞれあらわすよう
にしたが、この分け方はこれに限定されるのではなく、
例えば、白バイトと黒バイトのあらわれる統計的な性質
に応じて4バイトずつにするなど、任意の分け方を使用
してもよい。このことは、バイト(8ビット)単位以外
のデータ処理単位を採用したときも同様である。
【0146】さらに、上記実施例では、ページ・プリン
タ(レーザー・ビーム・プリンタ)を例にとって説明し
たが、勿論これに限定されることなく、インク・ジェッ
ト・プリンタ、ドット・マトリクス・プリンタなどの任
意のプリンタに適用可能である。留意すべきなのは、本
発明のデータ伸長技法においては、ページ単位のバッフ
ァすら必須ではない、ということである。すなわち、プ
リンタは、本発明に係るデータ伸長処理部さえ備えてお
けば、ページ単位のデータが揃うのを待つまでもなく、
伸長されたデータ列を直ちに印刷し始めてよいのであ
る。
タ(レーザー・ビーム・プリンタ)を例にとって説明し
たが、勿論これに限定されることなく、インク・ジェッ
ト・プリンタ、ドット・マトリクス・プリンタなどの任
意のプリンタに適用可能である。留意すべきなのは、本
発明のデータ伸長技法においては、ページ単位のバッフ
ァすら必須ではない、ということである。すなわち、プ
リンタは、本発明に係るデータ伸長処理部さえ備えてお
けば、ページ単位のデータが揃うのを待つまでもなく、
伸長されたデータ列を直ちに印刷し始めてよいのであ
る。
【0147】さらにまた、上記実施例では、便宜上、主
としてプリンタ用データ・ストリームに関する圧縮処理
について説明したが、勿論、本発明の適用範囲は、プリ
ンタ用データ・ストリームに限定されるものではなく、
データ通信、ファクシミリなどのデータ圧縮が必要とさ
れる任意の技術分野に広がり得るものである。特に、比
較的規則的なパターンの繰り返しを含むビットマップ・
データに優れた圧縮性能を示すことから、例えば、コン
ピュータ・グラフィックスによって生成されたビットマ
ップ・イメージを圧縮してコンピュータ・ネットワーク
を介して別のシステムに転送する場合などにおいても顕
著な効果を奏するものと考えられる。
としてプリンタ用データ・ストリームに関する圧縮処理
について説明したが、勿論、本発明の適用範囲は、プリ
ンタ用データ・ストリームに限定されるものではなく、
データ通信、ファクシミリなどのデータ圧縮が必要とさ
れる任意の技術分野に広がり得るものである。特に、比
較的規則的なパターンの繰り返しを含むビットマップ・
データに優れた圧縮性能を示すことから、例えば、コン
ピュータ・グラフィックスによって生成されたビットマ
ップ・イメージを圧縮してコンピュータ・ネットワーク
を介して別のシステムに転送する場合などにおいても顕
著な効果を奏するものと考えられる。
【図1】 コンピュータ装置と、プリンタ装置の構成を
示すブロック図である。
示すブロック図である。
【図2】 本発明の第1の実施例のデータ圧縮フォーマ
ットを示す図である。
ットを示す図である。
【図3】 本発明の第1の実施例のデータ圧縮フォーマ
ットを示す図である。
ットを示す図である。
【図4】 本発明の第1の実施例のデータ圧縮フォーマ
ットを示す図である。
ットを示す図である。
【図5】 本発明の第1の実施例のデータ圧縮フォーマ
ットを示す図である。
ットを示す図である。
【図6】 本発明の第1の実施例のデータ圧縮フォーマ
ットを示す図である。
ットを示す図である。
【図7】 本発明の第1の実施例のデータ圧縮フォーマ
ットを示す図である。
ットを示す図である。
【図8】 本発明の第1の実施例のデータ圧縮処理を示
すフローチャートの図である。
すフローチャートの図である。
【図9】 本発明の第1の実施例のデータ圧縮処理を示
すフローチャートの図である。
すフローチャートの図である。
【図10】 本発明の第1の実施例のデータ伸長処理を
示すフローチャートの図である。
示すフローチャートの図である。
【図11】 本発明の第2の実施例の圧縮処理を説明す
るための図である。
るための図である。
Claims (35)
- 【請求項1】コンピュータの処理により、データ・スト
リームを所定ビット幅(以下、ワードと称する)単位で
圧縮するための方法であって、(a) 1ワード中のビット
が全て第1の値であるワードを白ワードとし、1ワード
中の少なくとも1つのビットが第2の値であるワードを
黒ワードとし、上記データ・ストリームにおいて黒ワー
ドに出会うまで白ワードを走査して白ワードの数Nwを
数える段階と、(b) 次に白ワードに出会うまで黒ワード
をバッファに格納しつつ黒ワードの数Nbを数える段階
と、(c) 1ワードを2つの部分に分け、その第1の部分
に上記Nwの値を格納し、その第2の部分に上記Nbの
値を格納した制御ワードに続き、上記バッファに格納さ
れた黒ワードの列を出力する段階と、(d) 上記データ・
ストリームが終了するまで、上記段階(a)から上記段階
(c)までを繰り返す段階を有する、 データ圧縮方法。 - 【請求項2】上記データ・ストリームは印刷データ・ス
トリームであって、上記出力されるワード列は、プリン
タに送られる、請求項1に記載のデータ圧縮方法。 - 【請求項3】上記白バイトの長さが、上記制御ワードの
第1の部分に格納できる値よりも大きいことに応答し
て、上記制御ワードの第1の部分に上記Nbの値を格納
するとともに上記制御ワードの第1の部分に0を格納
し、上記制御ワードに続いて、上記Nwの値を含む第2
の制御ワードを出力し、次に上記バッファに格納された
黒ワードの列を出力する段階をさらに有する、請求項1
に記載のデータ圧縮方法。 - 【請求項4】上記ワードが8ビット幅(バイト)であ
る、請求項1に記載のデータ圧縮方法。 - 【請求項5】上記制御バイトの上記第1の部分が5ビッ
トであり、上記第2の部分が3ビットである、請求項4
に記載のデータ圧縮方法。 - 【請求項6】上記白バイトの長さが31よりも大きいこ
とに応答して、上記制御バイトの第1の部分に上記Nb
の値を格納するとともに上記制御バイトの第1の部分に
0を格納し、上記制御バイトに続いて、上記Nwの値を
含む第2の制御バイトを出力し、次に上記バッファに格
納された黒バイトの列を出力する段階をさらに有する、
請求項5に記載のデータ圧縮方法。 - 【請求項7】コンピュータの処理により、データ・スト
リームを所定ビット幅(以下、ワードと称する)単位で
圧縮するための方法であって、(a) 1ワード中のビット
が全て第1の値であるワードを白ワードとし、1ワード
中の少なくとも1つのビットが第2の値であるワードを
黒ワードとし、上記データ・ストリームにおいて黒ワー
ドに出会うまで白ワードを走査して白ワードの数Nwを
数える段階と、(b) 次に白ワードに出会うまで黒ワード
をバッファに格納しつつ黒ワードの数Nbを数える段階
と、(c) 1ワードを2つの部分に分け、その第1の部分
に上記Nwの値を格納し、その第2の部分に上記Nbの
値を格納した制御ワードと、それに続く、上記バッファ
に格納された黒ワードの列からなるワード列を作成する
段階と、(d) 上記作成されたワード列と、直前に作成さ
れたワード列とを比較し、もしそれらが一致するなら直
ちには上記作成されたワード列を出力することなく、繰
り返しカウント値を1だけ増分し、もしそれらが不一致
なら、繰り返しを示す所定の制御ワードに続いて、繰り
返しカウント値を含むワード値及び直前に作成されたワ
ード列を含むワード列を出力するとともに、該繰り返し
カウント値を0にクリアする段階と、(e) 上記データ・
ストリームが終了するまで、上記段階(a)から上記段階
(d)までを繰り返す段階を有する、 データ圧縮方法。 - 【請求項8】上記データ・ストリームは印刷データ・ス
トリームであって、上記出力されるワード列は、プリン
タに送られる、請求項7に記載のデータ圧縮方法。 - 【請求項9】上記段階(c)が、上記白バイトの長さが、
上記制御ワードの第1の部分に格納できる値よりも大き
いことに応答して、上記制御ワードの第1の部分に上記
Nbの値を格納するとともに上記制御ワードの第1の部
分に0を格納し、上記制御ワードに続いて、上記Nwの
値を含む第2の制御ワードを出力し、次に上記バッファ
に格納された黒ワードの列を出力する段階を有する、請
求項7に記載のデータ圧縮方法。 - 【請求項10】上記ワードが8ビット幅(バイト)であ
る、請求項7に記載のデータ圧縮方法。 - 【請求項11】上記制御バイトの上記第1の部分が5ビ
ットであり、上記第2の部分が3ビットである、請求項
10に記載のデータ圧縮方法。 - 【請求項12】上記段階(c)が、上記白バイトの長さが
31よりも大きいことに応答して、上記制御バイトの第
1の部分に上記Nbの値を格納するとともに上記制御バ
イトの第1の部分に0を格納し、上記制御バイトに続い
て、上記Nwの値を含む第2の制御バイトを出力し、次
に上記バッファに格納された黒バイトの列を出力する段
階を有する、請求項11に記載のデータ圧縮方法。 - 【請求項13】コンピュータの処理により、データ・ス
トリームを所定ビット幅(以下、ワードと称する)単位
で圧縮するための装置であって、(a) 1ワード中のビッ
トが全て第1の値であるワードを白ワードとし、1ワー
ド中の少なくとも1つのビットが第2の値であるワード
を黒ワードとし、上記データ・ストリームにおいて黒ワ
ードに出会うまで白ワードを走査して白ワードの数Nw
を数える手段と、(b) 次に白ワードに出会うまで黒ワー
ドをバッファに格納しつつ黒ワードの数Nbを数える手
段と、(c) 1ワードを2つの部分に分け、その第1の部
分に上記Nwの値を格納し、その第2の部分に上記Nb
の値を格納した制御ワードに続き、上記バッファに格納
された黒ワードの列を出力する手段と、(d) 上記データ
・ストリームが終了するまで、上記手段(a)、上記手段
(b)及び上記手段(c)を繰り返し実行させる手段を具備す
る、 データ圧縮装置。 - 【請求項14】上記白バイトの長さが、上記制御ワード
の第1の部分に格納できる値よりも大きいことに応答し
て、上記制御ワードの第1の部分に上記Nbの値を格納
するとともに上記制御ワードの第1の部分に0を格納
し、上記制御ワードに続いて、上記Nwの値を含む第2
の制御ワードを出力し、次に上記バッファに格納された
黒ワードの列を出力する手段をさらに有する、請求項1
3に記載のデータ圧縮装置。 - 【請求項15】上記ワードが8ビット幅(バイト)であ
る、請求項13に記載のデータ圧縮装置。 - 【請求項16】上記制御バイトの上記第1の部分が5ビ
ットであり、上記第2の部分が3ビットである、請求項
15に記載のデータ圧縮装置。 - 【請求項17】上記白バイトの長さが31よりも大きい
ことに応答して、上記制御バイトの第1の部分に上記N
bの値を格納するとともに上記制御バイトの第1の部分
に0を格納し、上記制御バイトに続いて、上記Nwの値
を含む第2の制御バイトを出力し、次に上記バッファに
格納された黒バイトの列を出力する手段をさらに有す
る、請求項16に記載のデータ圧縮装置。 - 【請求項18】コンピュータの処理により、データ・ス
トリームを所定ビット幅(以下、ワードと称する)単位
で圧縮するための装置であって、(a) 1ワード中のビッ
トが全て第1の値であるワードを白ワードとし、1ワー
ド中の少なくとも1つのビットが第2の値であるワード
を黒ワードとし、上記データ・ストリームにおいて黒ワ
ードに出会うまで白ワードを走査して白ワードの数Nw
を数える手段と、(b) 次に白ワードに出会うまで黒ワー
ドをバッファに格納しつつ黒ワードの数Nbを数える手
段と、(c) 1ワードを2つの部分に分け、その第1の部
分に上記Nwの値を格納し、その第2の部分に上記Nb
の値を格納した制御ワードと、それに続く、上記バッフ
ァに格納された黒ワードの列からなるワード列を作成す
る手段と、(d) 上記作成されたワード列と、直前に作成
されたワード列とを比較し、もしそれらが一致するなら
直ちには上記作成されたワード列を出力することなく、
繰り返しカウント値を1だけ増分し、もしそれらが不一
致なら、繰り返しを示す所定の制御ワードに続いて、繰
り返しカウント値を含むワード値及び直前に作成された
ワード列を含むワード列を出力するとともに、該繰り返
しカウント値をクリアする手段を具備する、 データ圧縮装置。 - 【請求項19】上記ワードは、8ビット(1バイト)で
ある、請求項18に記載のデータ圧縮装置。 - 【請求項20】上記制御ワード(バイト)の上記第1の
部分が5ビットであり、上記第2の部分が3ビットであ
る、請求項19に記載のデータ圧縮装置。 - 【請求項21】上記所定の制御バイトは、上記1バイト
における第1の部分が0に選択されているものである、
請求項20に記載のデータ圧縮装置。 - 【請求項22】コンピュータの処理により、請求項1の
方法によって圧縮されたデータ・ストリームを伸長する
方法であって、(a) 上記圧縮されたデータ・ストリーム
の1ワードを順次読み取る段階と、(b) 上記読み取られ
たワードの上記第1の部分に格納されている値の数だけ
白ワードを出力し、続いて、上記第2の部分に格納され
ている値の数だけ上記圧縮されたデータ・ストリームか
らワードを読取り出力する段階と、(c) 上記圧縮された
データ・ストリームが最後まで読み取られるまで、上記
段階(a)及び段階(b)を繰り返す段階を有する、 データ伸長方法。 - 【請求項23】コンピュータの処理により、請求項3の
方法によって圧縮されたデータ・ストリームを伸長する
方法であって、(a) 上記圧縮されたデータ・ストリーム
の1ワードを順次読み取る段階と、(b) 上記読み取られ
たワードの上記第2の部分に格納されている値が0でな
いことに応答して、該読み取られたワードの上記第1の
部分に格納されている値の数だけ白ワードを出力し、続
いて、上記第2の部分に格納されている値の数だけ上記
圧縮されたデータ・ストリームからワードを読取り出力
する段階と、(c) 上記読み取られたワードの上記第2の
部分に格納されている値が0であることに応答して、次
の1ワードを読取り、該次の1ワードに格納されている
値の数だけ白ワードを出力し、続いて、該読み取ったワ
ードの上記第1の部分に格納されている値の数だけ上記
圧縮されたデータ・ストリームからワードを読取り出力
する段階と、(d) 上記圧縮されたデータ・ストリームが
最後まで読み取られるまで、上記段階(a)から段階(c)ま
でを繰り返す段階を有する、 データ伸長方法。 - 【請求項24】上記ワードが8ビット幅(バイト)であ
る、請求項23に記載のデータ伸長方法。 - 【請求項25】コンピュータの処理により、請求項7の
方法によって圧縮されたデータ・ストリームを伸長する
方法であって、(a) 上記圧縮されたデータ・ストリーム
の1ワードを順次読み取る段階と、(b) 上記読み取られ
たワードが上記繰り返しを示す所定の制御ワードである
ことに応答して、次の1ワードを読取り、そのワードに
格納されている値を繰り返しの数としてセットする段階
と、(c) 上記読み取られたワードの上記第2の部分に格
納されている値が0でないことに応答して、該読み取ら
れたワードの上記第1の部分に格納されている値の数だ
け白ワードを出力し、続いて、上記第2の部分に格納さ
れている値の数だけ上記圧縮されたデータ・ストリーム
からワードを読取り出力し、さらに、上記セットされて
いる繰り返しの数が0よりも大きいことに応答して、該
読み取られたワードの上記第1の部分に格納されている
値の数だけ白ワードを出力すること及び、それに続い
て、上記第2の部分に格納されている値の数だけ上記圧
縮されたデータ・ストリームから取り出されたワードを
出力することを該繰り返しの数だけ繰り返し、上記繰り
返しの数を0にリセットする段階と、(d) 上記圧縮され
たデータ・ストリームの読み取られたワードの上記第2
の部分に格納されている値が0であることに応答して、
次の1ワードを読取り、該次の1ワードに格納されてい
る値の数だけ白ワードを出力し、続いて、該読み取られ
たワードの上記第1の部分に格納されている値の数だけ
上記圧縮されたデータ・ストリームからワードを読取り
出力し、さらに、上記セットされている繰り返しの数が
0よりも大きいことに応答して、該次の1ワードに格納
されている値の数だけ白ワードを出力すること及び、そ
れに続いて、該読み取ったワードの上記第1の部分に格
納されている値の数だけ上記圧縮されたデータ・ストリ
ームから読み取られたワードを出力することを該繰り返
しの数だけ繰り返し、上記繰り返しの数を0にリセット
する段階と、(e) 上記圧縮されたデータ・ストリームが
最後まで読み取られるまで、上記段階(a)から段階(c)ま
でを繰り返す段階を有する、 データ伸長方法。 - 【請求項26】上記ワードが8ビット幅(バイト)であ
る、請求項25に記載のデータ伸長方法。 - 【請求項27】コンピュータの処理により、請求項13
の装置によって圧縮されたデータ・ストリームを伸長す
る装置であって、(a) 上記圧縮されたデータ・ストリー
ムの1ワードを順次読み取る手段と、(b) 上記読み取ら
れたワードの上記第1の部分に格納されている値の数だ
け白ワードを出力し、続いて、上記第2の部分に格納さ
れている値の数だけ上記圧縮されたデータ・ストリーム
からワードを読取り出力する手段を具備する、 データ伸長装置。 - 【請求項28】コンピュータの処理により、請求項14
の装置によって圧縮されたデータ・ストリームを伸長す
る装置であって、(a) 上記圧縮されたデータ・ストリー
ムの1ワードを順次読み取る段階と、(b) 上記読み取ら
れたワードの上記第2の部分に格納されている値が0で
ないことに応答して、該読み取られたワードの上記第1
の部分に格納されている値の数だけ白ワードを出力し、
続いて、上記第2の部分に格納されている値の数だけ上
記圧縮されたデータ・ストリームからワードを読取り出
力する手段と、(c) 上記読み取られたワードの上記第2
の部分に格納されている値が0であることに応答して、
次の1ワードを読取り、該次の1ワードに格納されてい
る値の数だけ白ワードを出力し、続いて、該読み取った
ワードの上記第1の部分に格納されている値の数だけ上
記圧縮されたデータ・ストリームからワードを読取り出
力する手段を具備する、 データ伸長装置。 - 【請求項29】上記ワードが8ビット幅(バイト)であ
る、請求項28に記載のデータ伸長装置。 - 【請求項30】上記圧縮されたデータ・ストリームが印
刷データ・ストリームであり、上記手段(a)乃至手段(c)
は、プリンタ内に格納されている、請求項28に記載の
データ伸長装置。 - 【請求項31】上記プリンタは、少なくとも1ページ分
のビットマップ・メモリを有するレーザー・ビーム・プ
リンタである、請求項30に記載のデータ伸長装置。 - 【請求項32】コンピュータの処理により、請求項18
の装置によって圧縮されたデータ・ストリームを伸長す
る装置であって、(a) 上記圧縮されたデータ・ストリー
ムの1ワードを順次読み取る手段と、(b) 上記読み取ら
れたワードが上記繰り返しを示す所定の制御ワードであ
ることに応答して、次の1ワードを読取り、そのワード
に格納されている値を繰り返しの数として保持する手段
と、(c) 上記読み取られたワードの上記第2の部分に格
納されている値が0でないことに応答して、該読み取ら
れたワードの上記第1の部分に格納されている値の数だ
け白ワードを出力し、続いて、上記第2の部分に格納さ
れている値の数だけ上記圧縮されたデータ・ストリーム
からワードを読取り出力し、さらに、上記セットされて
いる繰り返しの数が0よりも大きいことに応答して、該
読み取られたワードの上記第1の部分に格納されている
値の数だけ白ワードを出力すること及び、それに続い
て、上記第2の部分に格納されている値の数だけ上記圧
縮されたデータ・ストリームから取り出されたワードを
出力することを該繰り返しの数だけ繰り返し、上記繰り
返しの数を0にリセットする手段と、(d) 上記圧縮され
たデータ・ストリームの読み取られたワードの上記第2
の部分に格納されている値が0であることに応答して、
次の1ワードを読取り、該次の1ワードに格納されてい
る値の数だけ白ワードを出力し、続いて、該読み取られ
たワードの上記第1の部分に格納されている値の数だけ
上記圧縮されたデータ・ストリームからワードを読取り
出力し、さらに、上記セットされている繰り返しの数が
0よりも大きいことに応答して、該次の1ワードに格納
されている値の数だけ白ワードを出力すること及び、そ
れに続いて、該読み取ったワードの上記第1の部分に格
納されている値の数だけ上記圧縮されたデータ・ストリ
ームから読み取られたワードを出力することを該繰り返
しの数だけ繰り返し、上記繰り返しの数を0にリセット
する手段を具備する、 データ伸長装置。 - 【請求項33】上記ワードが8ビット幅(バイト)であ
る、請求項32に記載のデータ伸長装置。 - 【請求項34】上記圧縮されたデータ・ストリームが印
刷データ・ストリームであり、上記手段(a)乃至手段(d)
は、プリンタ内に格納されている、請求項32に記載の
データ伸長装置。 - 【請求項35】上記プリンタは、少なくとも1ページ分
のビットマップ・メモリを有するレーザー・ビーム・プ
リンタである、請求項34に記載のデータ伸長装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6264120A JP2683506B2 (ja) | 1994-10-27 | 1994-10-27 | データ圧縮方法及び装置、データ伸長方法及び装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6264120A JP2683506B2 (ja) | 1994-10-27 | 1994-10-27 | データ圧縮方法及び装置、データ伸長方法及び装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08130647A true JPH08130647A (ja) | 1996-05-21 |
JP2683506B2 JP2683506B2 (ja) | 1997-12-03 |
Family
ID=17398768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP6264120A Expired - Lifetime JP2683506B2 (ja) | 1994-10-27 | 1994-10-27 | データ圧縮方法及び装置、データ伸長方法及び装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2683506B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7079691B2 (en) | 2000-10-31 | 2006-07-18 | Ricoh Company, Ltd. | Method of and apparatus for encoding, method of and apparatus for decoding, and image forming apparatus |
-
1994
- 1994-10-27 JP JP6264120A patent/JP2683506B2/ja not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7079691B2 (en) | 2000-10-31 | 2006-07-18 | Ricoh Company, Ltd. | Method of and apparatus for encoding, method of and apparatus for decoding, and image forming apparatus |
US7359557B2 (en) | 2000-10-31 | 2008-04-15 | Ricoh Company, Ltd. | Method of and apparatus for encoding, method of and apparatus for decoding, and image forming apparatus |
Also Published As
Publication number | Publication date |
---|---|
JP2683506B2 (ja) | 1997-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4366408B2 (ja) | グラフィック画像の圧縮システムおよび方法 | |
EP0585522B1 (en) | Page printer having automatic font compression | |
US5884014A (en) | Fontless structured document image representations for efficient rendering | |
US6741368B1 (en) | Method and apparatus for reducing storage requirements for display data | |
US6337747B1 (en) | System to adaptively compress raster image data | |
US6570664B2 (en) | Printing system, printing apparatus, information processing apparatus and storage medium storing font download control program | |
US5835685A (en) | Page printer, resolution converting method, and variable-length reversible compression process | |
GB2310746A (en) | Encoding and sending text | |
JP3582675B2 (ja) | 画像データをメモリに蓄積する装置及び方法 | |
JP2008117379A (ja) | エンコードされたラスタ文書を生成するシステム、方法およびコンピュータプログラム | |
US5970221A (en) | Printer with reduced memory | |
US6238105B1 (en) | Processor/memory non-intensive rendering for page printers | |
JP3327650B2 (ja) | 記録装置 | |
US6310693B1 (en) | Printing control apparatus and method, and printing system for reducing processing overhead | |
JP2683506B2 (ja) | データ圧縮方法及び装置、データ伸長方法及び装置 | |
JP2000165634A (ja) | 画像デ―タをメモリに蓄積する装置及び方法 | |
JPH06171160A (ja) | 印刷情報処理装置 | |
JP3211545B2 (ja) | 画像処理装置 | |
JPH09270919A (ja) | ページプリンタにおけるデータ圧縮方法 | |
JP3611921B2 (ja) | ページプリンタにおけるデータ圧縮・伸長方法及びページプリンタ | |
JPH09216349A (ja) | ページプリンタにおけるデータ処理方法 | |
JPH1023272A (ja) | ページプリンタにおけるデータ圧縮方法及び伸長方法 | |
JP4467715B2 (ja) | 画像出力制御装置及び方法 | |
JP3061562B2 (ja) | 印刷システム、情報処理装置、情報処理方法、印字装置および印字方法 | |
JP3606985B2 (ja) | ページプリンタにおけるデータ圧縮・伸長方法及びページプリンタ |