(57)【特許請求の範囲】
【請求項１】
画像データの解像度を変換する解像度変換モジュールであって、
変換前後の解像度を表わす情報を外部より受け取るステップと、
前記情報から変換前の原画像の各画素の倍率を求めるステップと、
変換後の画像サイズを基準に分割された処理領域の情報を外部より受け取るステップと、
前記分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求めるステップと、
求められた前記変換前の原画像上の領域に対応する情報を外部に渡すステップと、
外部より、前記領域の原画像データを受け取るステップと、
前記受け取った原画像データのサイズを前記各画素の倍率を基に変更するステップと、
外部に対して、前記領域の解像度変換後のデータを渡すステップとを備えることを特徴とする解像度変換モジュール。
【請求項２】
画像処理プログラムに組み込まれて使用され画像データの解像度を変換する解像度変換モジュールであって、
変換前後の解像度を表わす情報を前記画像処理プログラムから受け取るステップと、
前記情報から変換前の原画像の各画素の倍率を求めるステップと、
変換後の画像サイズを基準に分割された処理領域の情報を、前記画像処理プログラムから受け取るステップと、
前記分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求めるステップと、
前記画像処理プログラムに対し、前記求められた原画像上の領域の情報を渡すと共に原画像データの受渡し要求をし、該領域の原画像データを受け取るステップと、  前記求められた原画像上の領域毎に、前記各画素の倍率を基に画像のサイズを変更するステップと、
前記画像処理プログラムに対し、サイズ変更後のデータの引き取り要求をし、前記領域の解像度変換後のデータを渡すステップとを備えることを特徴とする解像度変換モジュール。
【請求項３】
前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズであることを特徴とする請求項１又は２記載の解像度変換モジュール。
【請求項４】
前記画像処理プログラムはプリンタドライバであって、前記変換後の解像度はプリンタの解像度、前記変換後の画像サイズを基準に分割された処理領域はバンド領域であることを特徴とする請求項２記載の解像度変換モジュール。
【請求項５】
前記変換前の原画像の各画素の倍率は、複数画素の倍率が変換前後の解像度の倍率になるような整数倍或は整数分の１の組み合わせからならることを特徴とする請求項１又は２記載の解像度変換モジュール。
【請求項６】
前記分割された処理領域の情報は領域の開始点の位置及び領域の大きさであることを特徴とする請求項１又は２記載の解像度変換モジュール。
【請求項７】
前記原画像上の領域を求めるステップは、
解像度変換処理に必要な画素数を使って開始点及び大きさを調整するステップと、
原画像の端部を考慮して領域の開始点及び大きさを調整するステップとを含むことを特徴とする請求項６記載の解像度変換モジュール。
【請求項８】
前記求められた原画像上の領域の情報は領域の開始点の位置及び領域の大きさであることを特徴とする請求項１又は２記載の解像度変換モジュール。
【請求項９】
前記画像のサイズを変更するステップは、画像データを１ライン分ずつ受け取るステップと、受け取った画像データをサイズ変更に必要なライン分保持するステップと、必要でなくなったラインの画像データを破棄して新たなラインの画像データに更新するステップと、処理後のデータを１ラインずつ出力するステップとを含むことを特徴とする請求項１又は２記載の解像度変換モジュール。
【請求項１０】
画像データの解像度変換モジュールが組み込まれたプリンタドライバであって、
前記解像度変換モジュールが、
変換前後の解像度を表わす情報を前記ドライバから受け取るステップと、
前記情報から変換前の原画像の各画素の倍率を求めて、これを記憶するステップと、
変換後の画像サイズを基準に分割された処理領域の情報を、前記ドライバから受け取るステップと、
前記分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求めるステップと、
前記ドライバに対し、前記求められた原画像上の領域の情報を渡すと共に原画像データの受渡し要求をし、該領域の原画像データを受け取るステップと、
前記求められた原画像上の領域毎に、前記各画素の倍率を基に画像のサイズを変更するステップと、
前記ドライバに対し、サイズ変更後のデータの引き取り要求をし、前記領域の解像度変換データを渡すステップとを備えることを特徴とするプリンタドライバ。
【請求項１１】
前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズであることを特徴とする請求項１０記載のプリンタドライバ。
【請求項１２】
画像データの解像度変換を行う画像解像度変換方法であって、
解像度変換を行う解像度変換モジュールと画像データの解像度変換を必要とする画像処理プログラムとがある場合に、
前記画像処理プログラムから前記解像度変換モジュールへ、変換前後の解像度を表わす情報と、変換後の画像サイズを基準に分割された処理領域の情報とを渡し、
前記解像度変換モジュールは、前記変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求め、前記分割された処理領域からこれに対応する変換前の原画像上の領域を前記各画素の倍率を基に求めて、該領域の情報を前記画像処理プログラムに渡して、前記原画像上の領域の原画像データの受渡しを要求し、
前記画像処理プログラムから前記解像度変換モジュールへ、前記領域の原画像データが渡されると、前記解像度変換モジュールは、前記原画像上の領域毎に前記各画素の倍率を基に画像のサイズを変更して、サイズの変更された画像データを前記画像処理プログラムに返すことを特徴とする画像解像度変換方法。
【請求項１３】
前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズであることを特徴とする請求項１２記載の画像解像度変換方法。
【請求項１４】
前記原画像上の領域を求める場合に、解像度変換処理に必要な画素数を使って開始点及び大きさを調整し、原画像の端部を考慮して領域の開始点及び大きさを調整することを特徴とする請求項１２記載の画像解像度変換方法。
【請求項１５】
画像データの解像度を変換するプログラムを格納するコンピュータ可読メモリであって、
変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求める倍率作成モジュールと、
変換後の画像サイズを基準に分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求める対応領域計算モジュールと、
前記求められた領域の原画像データのサイズを前記各画素の倍率を基に変更するサイズ変更処理モジュールと、
外部より、前記変換前後の解像度を表わす情報、前記分割された処理領域の情報、及び前記求められた領域の原画像データを受け取り、外部に対して、前記求められた領域の情報と前記分割された領域の解像度変換後のデータとを渡すインターフェースモジュールとを含むことを特徴とするコンピュータ可読メモリ。
【請求項１６】
画像データの解像度を変換するプログラムを格納するコンピュータ可読メモリであって、
解像度の変換を行う解像度変換モジュールと該解像度変換モジュールを組み込むプリンタドライバとを有し、
前記解像度変換モジュールは、
変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求める倍率作成モジュールと、
変換後の画像サイズを基準に分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求める対応領域計算モジュールと、
前記求められた領域の原画像データのサイズを前記各画素の倍率を基に変更するサイズ変更処理モジュールと、
前記プリンタドライバより、前記変換前後の解像度を表わす情報、前記分割された処理領域の情報、及び前記求められた領域の原画像データを受け取り、前記プリンタドライバに対して、前記求められた領域の情報と前記分割された領域の解像度変換後のデータとを渡すインターフェースモジュールとを含むことを特徴とするコンピュータ可読メモリ。
【請求項１７】
前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズであることを特徴とする請求項１５又は１６記載のコンピュータ可読メモリ。
【請求項１８】
画像データの解像度変換を行う画像解像度変換方法であって、
変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求め、
変換後の画像サイズを基準に分割された処理領域の情報からこれに対応する変換前の原画像上の領域を前記各画素の倍率を基に求め、
前記原画像上の領域の原画像データ単位に、前記各画素の倍率を基に画像のサイズを変更することを特徴とする画像解像度変換方法。
【請求項１９】
前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズであることを特徴とする請求項１８記載の画像解像度変換方法。
【請求項２０】
前記変換前の原画像の各画素の倍率は、複数画素の倍率が変換前後の解像度の倍率になるような整数倍或は整数分の１の組み合わせからなることを特徴とする請求項１８記載の画像解像度変換方法。
【請求項２１】
前記原画像上の領域を求める場合に、解像度変換処理に必要な画素数を使って開始点及び大きさを調整し、原画像の端部を考慮して領域の開始点及び大きさを調整することを特徴とする請求項１８記載の画像解像度変換方法。
【請求項２２】
画像データの解像度変換を伴なう画像処理を行う画像処理装置であって、
前記解像度変換が、
変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求める倍率作成手段と、
変換後の画像サイズを基準に分割された処理領域の情報からこれに対応する変換前の原画像上の領域を前記各画素の倍率を基に求める対応領域計算手段と、
前記原画像上の領域の原画像データ単位に、前記各画素の倍率を基に画像のサイズを変更するサイズ変更手段とにより行われることを特徴とする画像処理装置。
【請求項２３】
前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズであることを特徴とする請求項２２記載の画像処理装置。
【請求項２４】
前記変換前の原画像の各画素の倍率は、複数画素の倍率が変換前後の解像度の倍率になるような整数倍或は整数分の１の組み合わせからなることを特徴とする請求項２２記載の画像処理装置。
【請求項２５】
前記原画像上の領域を求める場合に、解像度変換処理に必要な画素数を使って開始点及び大きさを調整し、原画像の端部を考慮して領域の開始点及び大きさを調整することを特徴とする請求項２２記載の画像処理装置。
【請求項２６】
前記変換後の解像度はプリンタの解像度、前記変換後の画像サイズを基準に分割された処理領域はバンド領域であることを特徴とする請求項２２記載の画像処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画像を表現する画素数を増加したり減少したりして画像の解像度を変換するための画像解像度変換方法に関するものである。特に、ホストコンピュータ上のプリンタドライバに組み込み可能な該画像解像度変換方法を実現する解像度変換モジューやそれが組み込まれたプリンタドライバに関し、コンピュータ上の画像データの解像度をインクジェットプリンタ等の出力装置の解像度に合わせて変更すること等を目的とする。
【０００２】
【従来の技術】
一般に、コンピュータシステムでは、入出力装置間、入出力装置とコンピュータ本体間、或はシステム間で、それぞれが目的に適合する解像度を使用するため異なる解像度で画像を処理することが多い。この中で、最も頻繁に発生するのは、コンピュータ本体内或いは表示の解像度とプリンタの解像度との相違である。
【０００３】
そこで、プリンタが印刷するデータを作成してプリンタに描画命令を出力するプリンタドライバと呼ばれるコンピュータ上で動作するプログラムが、各ＯＳにおいて標準化された文字や図形や画像を描画する命令を、各プリンタが解釈できる描画命令に変換する処理を行うが、この際、プリンタドライバは、アプリケーション上での処理解像度と実際に印刷を行うプリンタでの解像度との違いを意識する必要がある。例えば、アプリケーションが９０ｄｐｉでデータを管理しており、３６０ｄｐｉの解像度のプリンタから出力する場合には、縦横ともに４倍の画素数からなるページを作成する必要がある。
【０００４】
本発明が特に好適に適用されるところのインクジェットプリンタに代表されるシリアルプリンタでは、ＰＤＬ（ページ記述言語）を持たず、プリンタドライバで生成されたビットマップデータを基本とする印刷命令を受け取って印刷を行うのが一般的である。したがって、これらのプリンタドライバにおいてはベクターで表現された文字や図形データは、プリンタの解像度に見合った画素数で直接メモリ上に描画することで出力解像度のビットマップデータに変換し、また元来ビットマップデータであった画像データは出力解像度に合わせて拡大や縮小操作によってそのサイズを変更することで出力解像度のビットマップデータに変換する。
【０００５】
ビットマップデータを拡大したり縮小することによる解像度変換方法には各種あり、例えば拡大では、各画素を単純に拡大倍率分繰り返す０次補間、拡大によって生じた画素を元の画素からの距離の比率等によって埋める線形補間、周囲の画素の配置状態によって各種の補間方法を切り替えて最適な拡大を行う方法（特開平７−１０５３５９号）等がある。
【０００６】
【発明が解決しようとする課題】
しかしながら、プリンタドライバにおける画像処理には多くの制約があり、実際には、各方式そのままでは非整数倍率を含む任意の倍率に対応できない、バンド間で出力結果に不連続が生じるような任意のライン数単位での処理に対応できない等の理由で、解像度変換処理のドライバへの組み込みができない或いは難しいという問題があった。この問題は、特にそれぞれの画素の処理に際し、周囲の画素を必要とするデジタルイメージフィルタ系の画像処理方法においては顕著である。しかしながら、一般にデジタルイメージフィルタ系の処理は、周囲の画素を使用しない０次補間方法のような単純な処理に比べて処理後の画質は良いとされている。
【０００７】
本発明は、簡単な操作及び手順で非整数倍率を含む任意の倍率に対応できる画像解像度変換方法及びそれを実現する画像解像度変換モジュールを提供する。
特に、コンピュータ上でソフトウェアとして実現されるデジタルフィルタ系の拡大縮小方法であっても、統一されたインターフェースによってプリンタドライバに効率良く組み込まれる画像解像度変換方法及びそれを実現する画像解像度変換モジュールを提供する。
【０００８】
更に、上記画像解像度変換モジュールが組み込まれたプリンタドライバを提供する。
【０００９】
【課題を解決するための手段】
そこで、上記課題を解決するために、本発明の解像度変換モジュールは、画像データの解像度を変換する解像度変換モジュールであって、変換前後の解像度を表わす情報を外部より受け取るステップと、前記情報から変換前の原画像の各画素の倍率を求めるステップと、変換後の画像サイズを基準に分割された処理領域の情報を外部より受け取るステップと、前記分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求めるステップと、求められた前記変換前の原画像上の領域に対応する情報を外部に渡すステップと、外部より、前記領域の原画像データを受け取るステップと、前記受け取った原画像データのサイズを前記各画素の倍率を基に変更するステップと、外部に対して、前記領域の解像度変換後のデータを渡すステップとを備えることを特徴とする。なお、前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズである。
【００１０】
ここで、前記解像度変換モジュールは画像処理プログラムに組み込まれる。また、前記画像処理プログラムはプリンタドライバであって、前記変換後の解像度はプリンタの解像度、前記変換後の画像サイズを基準に分割された処理領域はバンド領域である。また、前記変換前の原画像の各画素の倍率は、複数画素の倍率が変換前後の解像度の倍率になるような整数倍或は整数分の１の組み合わせからなる。また、前記分割された処理領域の情報は領域の開始点の位置及び領域の大きさである。また、前記原画像上の領域を求めるステップは、解像度変換処理に必要な画素数を使って開始点及び大きさを調整するステップと、原画像の端部を考慮して領域の開始点及び大きさを調整するステップとを含む。また、前記求められた原画像上の領域の情報は領域の開始点の位置及び領域の大きさである。また、前記画像のサイズを変更するステップは、画像データを１ライン分ずつ受け取るステップと、受け取った画像データをサイズ変更に必要なライン分保持するステップと、必要でなくなったラインの画像データを破棄して新たなラインの画像データに更新するステップと、処理後のデータを１ラインずつ出力するステップとを含む。
【００１１】
又、本発明のプリンタドライバは、画像データの解像度変換モジュールが組み込まれたプリンタドライバであって、前記解像度変換モジュールが、変換前後の解像度を表わす情報を前記ドライバから受け取るステップと、前記情報から変換前の原画像の各画素の倍率を求めて、これを記憶するステップと、変換後の画像サイズを基準に分割された処理領域の情報を、前記ドライバから受け取るステップと、前記分割された処理領域からこれに対応する変換前の原画像上の領域を、前記各画素の倍率を基に求めるステップと、前記ドライバに対し、前記求められた原画像上の領域の情報を渡すと共に原画像データの受渡し要求をし、該領域の原画像データを受け取るステップと、前記求められた原画像上の領域毎に、前記各画素の倍率を基に画像のサイズを変更するステップと、前記ドライバに対し、サイズ変更後のデータの引き取り要求をし、前記領域の解像度変換データを渡すステップとを備えることを特徴とする。なお、前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズである。
【００１２】
又、本発明の画像解像度変換方法は、画像データの解像度変換を行う画像解像度変換方法であって、解像度変換を行う解像度変換モジュールと画像データの解像度変換を必要とする画像処理プログラムとがある場合に、前記画像処理プログラムから前記解像度変換モジュールへ、変換前後の解像度を表わす情報と、変換後の画像サイズを基準に分割された処理領域の情報とを渡し、前記解像度変換モジュールは、前記変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求め、前記分割された処理領域からこれに対応する変換前の原画像上の領域を前記各画素の倍率を基に求めて、該領域の情報を前記画像処理プログラムに渡して、前記原画像上の領域の原画像データの受渡しを要求し、前記画像処理プログラムから前記解像度変換モジュールへ、前記領域の原画像データが渡されると、前記解像度変換モジュールは、前記原画像上の領域毎に前記各画素の倍率を基に画像のサイズを変更して、サイズの変更された画像データを前記画像処理プログラムに返すことを特徴とする。なお、前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズである。ここで、前記原画像上の領域を求める場合に、解像度変換処理に必要な画素数を使って開始点及び大きさを調整し、原画像の端部を考慮して領域の開始点及び大きさを調整する。
【００１３】
又、本発明の画像解像度変換方法は、画像データの解像度変換を行う画像解像度変換方法であって、変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求め、変換後の画像サイズを基準に分割された処理領域の情報からこれに対応する変換前の原画像上の領域を前記各画素の倍率を基に求め、前記原画像上の領域の原画像データ単位に、前記各画素の倍率を基に画像のサイズを変更することを特徴とする。なお、前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズである。ここで、前記変換前の原画像の各画素の倍率は、複数画素の倍率が変換前後の解像度の倍率になるような整数倍或は整数分の１の組み合わせからなる。また、前記原画像上の領域を求める場合に、解像度変換処理に必要な画素数を使って開始点及び大きさを調整し、原画像の端部を考慮して領域の開始点及び大きさを調整する。
【００１４】
又、本発明の画像処理装置は、画像データの解像度変換を伴なう画像処理を行う画像処理装置であって、前記解像度変換が、変換前後の解像度を表わす情報から変換前の原画像の各画素の倍率を求める倍率作成手段と、変換後の画像サイズを基準に分割された処理領域の情報からこれに対応する変換前の原画像上の領域を前記各画素の倍率を基に求める対応領域計算手段と、前記原画像上の領域の原画像データ単位に、前記各画素の倍率を基に画像のサイズを変更するサイズ変更手段とにより行われることを特徴とする。なお、前記変換前後の解像度を表わす情報は、画素数で表された変換前後の画像データのサイズである。ここで、前記変換前の原画像の各画素の倍率は、複数画素の倍率が変換前後の解像度の倍率になるような整数倍或は整数分の１の組み合わせからなる。また、前記原画像上の領域を求める場合に、解像度変換処理に必要な画素数を使って開始点及び大きさを調整し、原画像の端部を考慮して領域の開始点及び大きさを調整する。また、前記変換後の解像度はプリンタの解像度、前記変換後の画像サイズを基準に分割された処理領域はバンド領域である。
【００１５】
【発明の実施の形態】
以下、添付図面にしたがって、本発明による実施の形態を詳細に説明する。
（第１の実施の形態）
第１の実施の形態を図１から図１５に基づき説明する。
＜本実施の形態の画像解像度変換方法を実現するシステム構成例＞
図１は、本発明の実施形態を示すシステム構成図である。尚、本実施の形態では、本発明の画像解像度変換方法をプリンタドライバに組み込んだ構成について説明するが、これに限定されることなく、本発明の画像解像度変換方法を他のドライバに組み込んでも、独立して解像度変換モジュールとして使用しても、同様の作用効果を得られることは明らかである。
【００１６】
図中、１は本実施の形態の画像解像度変換方法を具備するプリンタドライバを動作させるためのホストコンピュータであり、ＣＰＵ、ＲＡＭ、ＲＯＭ、外部記憶装置、プリンタポート等を備えている。ホストコンピュータ１では、ＲＯＭ内に格納されたプログラム、或は外部記憶装置からＲＡＭにロードされたプログラムに従って、ＣＰＵにより演算・制御が行われて、描画命令の作成、ビットマップデータの作成、解像度の変換、印刷コマンドの作成・出力を行う。２はプリンタドライバによって制御する、例えばインクジェットプリンタ等の２値カラープリンタである。ホストコンピュータ１とプリンタ２とは通信ケーブル３で接続され、ホストコンピュータ１からプリンタ２に対してビットマップデータをベースとする印刷データが送信され、印刷が行われる。
【００１７】
図２は、本発明の実施の形態であるところの解像度変換方法を組み込んだプリンタドライバ１００を使用して印刷を行う場合のデータの流れ図である。
このプリンタドライバ１００では、アプリケーションから画像１０２、図形１０３、文字１０４の各描画命令を受けると、各命令に対応した描画ルーチン１０５〜１０７を使用してバンドバッファ上にビットマップデータ１０８をプリンタ２の解像度で作成する。その後、作成されたビットマップデータ１０８は印刷コマンド生成部１０９によってプリンタ２が印刷できる形式のデータ（印刷コマンド１１０）に変換され、通信ケーブル３を通じてプリンタ２へ送信され、印刷される。
【００１８】
図３は、図２における画像描画部１０５のブロック図である。
画像描画部１０５は、画像描画命令１０２をアプリケーション１０１から受け取ると、ホストコンピュータ１のモニタ上で観察される画像の色とプリンタ２から出力される印刷物の色とができるだけ近付くように、カラーマッチング部２００で画像データ内の各画素の色を変更し、次に解像度変換部２０１でカラーマッチングされた画像データをプリンタ２の持つ解像度に合わせるように、そのサイズを変更して画素数を調整する。
【００１９】
例えば、アプリケーション１０１から渡された画像描画命令１０２による画像データが、縦横ともに１００画素からなる正方形の画像でありその解像度が９０ｄｐｉであったならば、３６０ｄｐｉの解像度を持つプリンタ２から同じ面積を持つ画像を出力するためには、縦横ともに４００画素からなる正方形の画像に大きさを変更しなければならない。つまり、アプリケーション１０１から渡された画像データの各画素はそれぞれ１６（４×４）倍の画素数になるように解像度変換部２０１によって処理される。
【００２０】
この場合に画像の大きさを変更（拡大）する方法には様々なものがあるが、本実施の形態によれば、解像度変換方法のインターフェースを統一することができるようになる。
＜実施の形態１の画像解像度変換方法の手順例＞
図４は、本発明の実施の形態であるところの画像解像度変換方法の処理の流れを示す図面である。以下順に処理の流れを説明する。
【００２１】
まず、ステップＳ３００にて、処理に必要な作業メモリの確保などの初期化処理を行う。次に、ステップＳ３０１において解像度変換のためのサイズ変更情報を獲得する。具体的には、原画像の縦横の各画素数（ＤＨとＤＷ）、各画素のビット長、各画素の格納され方、及び解像度変換後の縦横の各画素数（ＳＨとＳＷ）等の情報を得る。そしてこれらの内、解像度変換前後の縦横の各画素数の情報から、ステップＳ３０２において各画素の倍率（拡大倍率又は縮小倍率）を保持するテーブルを作成する。
【００２２】
尚、ステップＳ３０１において、本例のように解像度変換モジュールがプリンタドライバに組み込まれている場合には、サイズ変更情報をプリンタドライバより獲得することとなる。ここで、プリンタドライバがサイズ変更情報をユーザインタフェースを介してユーザの指定により得るか、プリンタからの情報伝送により自動的に得るかは問わない。一方、解像度変換モジュールを独立で使用する場合は、直接ユーザインタフェースを介してユーザの指定により設定されても良い。
【００２３】
解像度変換例として、図５に示した画像５００（縦４画素、横６画素）を図６に示したサイズの画像６００（縦６画素、横１０画素）に変換する場合を示す。この例では、画像５００が縦横にそれぞれ６／４、１０／６倍に拡大されることを示している。
（倍率テーブル例及びその作成手順例）
図７は、本例での倍率テーブルの内容を示したものであり、画像５００の各列はそれぞれＸ方向の倍率テーブル７０１にしたがって２，１，２，２，１，２倍され、各行はそれぞれＹ方向の倍率テーブル７０２にしたがって２，１，２，１倍されることが示されている。そしてこれらのテーブルによって、画像５００における画素５０１は画像６００における領域６０１（縦２画素、横２画素）の、画素５０２は領域６０２（縦１画素、横２画素）の領域を作成する元（原画素）となることがわかる。このように縦横それぞれの倍率テーブルを用意することで、縦横独立して非整数倍を含む任意の倍率で画像の解像度変換処理を行うことができるようになる。
【００２４】
図８は、倍率テーブル７０１，７０２の作成方法の手順を示した図面である。図中、ＳＨ、ＳＷはそれぞれ解像度変換前の画像の縦と横の画素数（例ではＳＨ＝４、ＳＷ＝６）を示し、ＤＨ、ＤＷはそれぞれ解像度変換後の画像の縦と横の画素数（例ではＤＨ＝６、ＤＷ＝１０）を示している。ＴＹ［ｉ］はＹ方向の倍率テーブル７０２のｉ番目の要素を示し、ＴＸ［ｉ］はＸ方向の倍率テーブル７０１のｉ番目の要素を示している。なお割算は整数演算であり結果は切り捨てられる（例えば、１０／６＝１）。ここで、ステップＳ８０１やＳ８０５に示す変数＝ａ，ｂ，ｃは、変数をａからｂまでｃ単位で増加（ｃがマイナス値であれば減少）させながら、下位に接続されているステップを繰り返すことを意味している。以下、同様である。
【００２５】
処理の流れを説明すると、まずステップＳ８００で演算の誤差を格納する変数ｅを０で初期化する。次にステップＳ８０１では変数ｉを１ずつ増やしながら０からＳＨ−１まで、ステップＳ８０２とＳ８０３とを繰り返す。ステップＳ８０２では、Ｙ方向の倍率テーブルの各要素の値を蓄積された計算誤差を考慮しながら求め、ステップＳ８０３では計算誤差の更新を行う。この結果、例えばＴＹ［ｉ］（ｉ＝０〜３）としてＹ方向の倍率テーブル７０２が作成される。
【００２６】
同様にステップＳ８０４で演算の誤差を格納する変数ｅを再度０で初期化し、次にステップＳ８０５では変数ｉを１ずつ増やしながら０からＳＷ−１までステップＳ８０６とＳ８０７とを繰り返す。ステップＳ８０６ではＸ方向の倍率テーブルの各要素の値を蓄積された計算誤差を考慮しながら求め、ステップＳ８０７では計算誤差の更新を行う。この結果、、例えばＴＸ［ｉ］（ｉ＝０〜５）としてＸ方向の倍率テーブル７０１が作成される。
【００２７】
倍率テーブル７０１，７０２は上記方法によって作成されたテーブルである。倍率テーブルの各要素はここに示したように整数値である。倍率テーブルを使う本実施の形態は、整数倍の組み合わせにより擬似的に任意の倍率の解像度変換ができるようになっている。このことは整数倍の画像サイズの変更しかできない解像度変換方法であっても、それを本実施の形態の方法に使用すれば擬似的に非整数倍の画像サイズ変更が可能になることを示している。尚、本実施の形態の方法によれば、倍率テーブルの各要素の値の合計は拡大の場合は処理後の縦横それぞれの画素数に一致する。本例では、Ｘ方向の倍率テーブル７０１の各要素の合計は１０（２＋１＋２＋２＋１＋２）となり、拡大後の画像６００の横の画素数１０と一致し、Ｙ方向の倍率テーブル７０２の各要素の合計は６（２＋１＋２＋１）となり、拡大後の画像６００の縦の画素数６と一致する。
【００２８】
（解像度変換処理例）
さて、ステップＳ３０２によって倍率テーブルが作成されたならば、次にステップＳ３０３において処理対象となる全ての領域の処理が終了したかどうかをチェックしながら、ステップＳ３０４からＳ３１２までを各領域に対して繰り返し適用する。ここで、領域の定義については以下に詳細に示す。
【００２９】
（領域の分割例及び周辺画素の使用例）
ステップＳ３０４では、解像度変換処理を行う領域を決定することで、処理領域の分割を行う。本実施の形態の方法が適用されるプリンタドライバではメモリ使用量に制限があることが多く、この様な領域分割ができることが必要である。特にインクジェットプリンタに代表されるシリアルプリンタ用のドライバでは、バンド（対象処理領域を短冊状に区切ったもの）と呼ばれる単位で画像処理、コマンド生成処理が行われるのが一般であるが、本実施の形態ではより自由度の高い任意の矩形領域単位に処理ができるような構成になっている。なお、この領域分割はプリンタドライバという事情から解像度変換後の領域の分割を指定することで行われる。つまり、印刷用にどの部分のデータを作成するかによって分割が決まることを意味しており、現状では先に述べたようにバンド単位に分割が行われるのが一般的であるが、これに限定されない。
【００３０】
図９は、拡大後の画像６００の占める領域から領域９０１を切り出した場合と、この領域の処理に必要な原画像５００中の領域９０２との関係を示した図である。
領域９０２の決定には、先に示した倍率テーブル７０１，７０２を使用している。倍率テーブル７０１，７０２は原画像５００の各画素の拡大率を格納しているが、これを用いることで拡大後の画像６００の各画素が原画像５００のどの画素を拡大した結果であるかをも同時に知ることができる。したがって、拡大後の領域９０１から拡大前の領域９０２を求める際には、領域９０１に含まれる各画素の拡大元の画素の集合を求めれば良い。ただし、画素５０１と領域６０１の関係からも明らかなように拡大後の各画素は元の画素を拡大した領域の一部でしかないが、それが領域９０１に属しているのならば、その拡大元の画素は領域９０２に含めるようにしなければならない。
【００３１】
図１０は、画像６００を４つの領域１００１，１００２，１００３，１００４に分割して処理を行う場合の分割例を示している。
このとき、それぞれの領域に対応する原画像の領域は、図１１に示した領域１１０１，１１０２，１１０３，１１０４である。先に述べた理由から、ある原画素の拡大後の領域を跨いだ分割の場合（図１０）、原画像中の４つの領域１１０１，１１０２，１１０３，１１０４は一部が互いに重なりあった状態となる。例えば領域１１０１と領域１１０２とでは３つの画素（３，０）、（３，１）、（３，２）が両方の領域内に存在することとなる。
【００３２】
ところで、画像の解像度変換処理では変換後のある画素を作り出すために、変換元の画素の周辺の画素も必要とするものが少なくない。例えば線形補間法では、拡大後の画素の位置によって拡大前の隣接する画素間の割合を求めて新しい画素を作り出している。また、前出の特開平７−１０５３５９号における解像度変換方法でも、処理の際に周囲の画素を必要とする。ところが周辺画素が何画素必要であるかは各方法によって、さらには求める処理精度によっても変化する。本実施の形態では、解像度変換モジュールが変換後の領域に対応する原領域を決定する際に予めこの情報を含めておくことで、ドライバ側が各方法毎にデータを引き渡す方法を変更しなくても済むようにしている。
【００３３】
例えば、倍率テーブル７０１，７０２によって求められた領域１１０１は領域１００１に対応する原領域であるが、ドライバから呼び出される拡大方法が各原画素の周囲１画素を必要とする場合には、領域１１０１に領域１１１１を足した領域をドライバに通知することで、必要なデータの全てをドライバから渡してもらえることとなる。同様に領域１００２，１００３，１００４に対してはそれぞれ１１０２＋１１１２、１１０３＋１１１３、１１０４＋１１１４が対応することになる。そしてこの際、新たに必要な領域（１１１１，１１１２，１１１３，１１１４）が原画像で賄えるならばこれを使用することで、領域毎に処理を分けた場合でも処理後の結果は領域を分割しなかった場合と全く同じ連続した画像が得られる。何故ならば、先に述べたように各領域の周辺部分は他の領域と重なり合っているので重複して処理される部分が多少発生するものの、各画素に対しては全く同じ処理が施されることになるからである。
【００３４】
図１２は、画像の領域分割に際して更に画像の周囲部分の処理（端部処理）を組み込んだ例を示した図である。
図において、１２００は原画像を示し、指定された領域から周辺画素を含んでいない原領域１２０１が倍率テーブル７０１，７０２によって求められたとする。この時、原画像１２００のサイズは縦ＳＨ画素、横ＳＷ画素であり、領域１２０１のサイズは縦ＲＨ画素、横ＲＷ画素であって、領域１２０１の左上の画素１２０２は画像１２００の画素（ＲＸ，ＲＹ）に位置するものとする（図１２の例では、ＳＨ＝１０，ＳＷ＝１０，ＲＨ＝５，ＲＷ＝８，ＲＸ＝０，ＲＹ＝１）。そして、拡大処理に原画素の周囲Ｂ画素（図１２の例では、Ｂ＝３）の情報が必要であるとすると、その一部は原画像１２００中には存在しない位置の画素となってしまう。この場合、本実施の形態では、原画像１２００中から得られる画素はできるだけこれを利用し、原画像から得られない画素は最も近い画素の値をコピーすることで仮想的な画像１２０６を作成し、これを解像度変換処理に使用することで画像処理手順の簡略化及び画像周辺での画質劣化を防止する。
【００３５】
図１２において領域１２０３は原画像を利用して調整された領域であり、領域１２０４は領域１２０３の周辺の画素をコピーして作成された領域である。この時、ドライバには領域１２０３の開始点１２０５の座標（ＲＸ’，ＲＹ’）とそのサイズの縦ＲＨ’画素、横ＲＷ’画素の情報を通知することで、原画像１２００の内で最大限利用できる領域を解像度変換処理モジュールはドライバから得ることができる（図１２の例では、ＲＸ’＝０，ＲＹ’＝０，ＲＨ’＝９，ＲＷ’＝１０）。また、同時に周辺でのコピーする画素数の情報を保存しておくことで画像１２０６を作り出すことができることは容易に想像できる。図１２では、ＣＴ、ＣＢ、ＣＬ、ＣＲがそれぞれ領域１２０３での上端、下端、左端、右端でのコピー画素数を示している（図１２の例では、ＣＴ＝２，ＣＢ＝０，ＣＬ＝３，ＣＲ＝１）。このとき、当然のことながら、Ｂ＋ＲＨ＋Ｂ＝ＣＴ＋ＲＨ’＋ＣＢ、及び、Ｂ＋ＲＷ＋Ｂ＝ＣＬ＋ＲＷ’＋ＣＲの２式が必ず成立しなければならない。
【００３６】
以上のステップＳ３０５の対応領域の計算方法の流れを示したものが、図１３である。ここでは、座標（ＤＲＸ，ＤＲＹ）を左上の点とする縦ＲＤＨ画素、横ＤＲＷ画素からなる領域に対応する原領域を、倍率テーブルＴＸとＴＹを使って計算する。また同時に、開始点（ＤＲＸ，ＤＲＹ）が原画素（ＲＸ，ＲＹ）を拡大した時の領域のどの位置に対応しているかを、ＯＸとＯＹとに格納している。このＯＸとＯＹの情報は、拡大方法によっては出力開始点の計算をする上で計算係数の初期値を決める際などに利用される重要な値となる。
【００３７】
ステッ０プＳ１３０１からＳ１３０６は、領域１２０１の左上の点のＹ座標を求める操作である。縦方向の倍率テーブルＴＹ［ｉ］の各要素を順に加算しながら（ステップＳ１３０４；ｚに加算後、ｉを１増加）、開始点のＹ座標値ＤＲＹと比較することで（ステップＳ１３０３）、開始点の元となる画素のＹ座標ＲＹをテーブルのインデックスｉの値から求めている（ステップＳ１３０６）。また途中の値を利用してＯＹの値を求めることができる（ステップＳ１３０５）。
【００３８】
ステップＳ１３０７からＳ１３０９は、領域１２０１の縦の画素数を求める操作である。縦方向の倍率テーブルＴＹ［ｉ］の各要素を更に順に加算しながら（ステップＳ１３０４；ｚに加算後、ｉを１増加）、値ＤＲＹ＋ＤＲＨと比較することで（ステップＳ１３０８）、領域１２０１の縦の画素数ＲＨをテーブルのインデックスｉと先に求めたＲＹの値から求めている（ステップＳ１３０９）。
【００３９】
ステップＳ１３１０からＳ１３１５は、領域１２０１の左上の点のＸ座標と求める操作である。横方向の倍率テーブルＴＸ［ｉ］の各要素を順に加算しながら（ステップＳ１３１３；ｚに加算後、ｉを１増加）、開始点のＸ座標値ＤＲＸと比較することで（ステップＳ１３１２）、開始点の元となる画素のＸ座標ＲＸをテーブルのインデックスｉの値から求めている（ステップＳ１３１５）。また途中の値を利用してＯＸの値を求めることができる（ステップＳ１３１４）。
【００４０】
ステップＳ１３１６からＳ１３１８は、領域１２０１の横の画素数を求める操作である。横方向の倍率テーブルＴＸ［ｉ］の各要素を更に順に加算しながら（ステップＳ１３１７；ｚに加算後、ｉを１増加）、値ＤＲＸ＋ＤＲＷと比較することで（ステップＳ１３１６）、領域１２０１の横の画素数ＲＷをテーブルのインデックスｉと先に求めたＲＸの値から求めている（ステップＳ１３１８）。
【００４１】
領域１２０１の開始点座標（ＤＲＸ，ＤＲＹ）と大きさ（ＤＲＷ，ＤＲＨ）が求まったならば、次に必要な周辺画素の数と原画像の大きさを考慮して、ドライバに要求する領域１２０１＋１２０３の開始点とその大きさを求める。
ステップＳ１３１９，Ｓ１３２０は以下の操作のための準備であり、ＣＴ、ＣＢ、ＣＬ、ＣＲを０で初期化し、ＲＸ’、ＲＹ’、ＲＷ’、ＲＨ’をそれぞれに対応する値ＲＸ、ＲＹ、ＲＷ、ＲＨで初期化しておく。
【００４２】
ステップＳ１３２１からＳ１３２５は、領域１２０１の上側の調整を行う操作である。先に求めた領域１２０１の開始点のＹ座標ＲＹと周辺画素数Ｂを１ずつ減じた値（ステップＳ１３２１）とを比較して（ステップＳ１３２２）、ＲＹの値がこれに同じか、大きければ使用できる原画素が上方にあることを意味するので、領域１２０１を上側に１画素分拡張する（ステップＳ１３２３，Ｓ１３２４）。逆にＲＹの方が小さければ、領域１２０１は原画像１２００の上端を越えるので、上端部のコピー画素数を記憶するＣＴに１を加算する（ステップＳ１３２５）。
【００４３】
ステップＳ１３２６からＳ１３３０は、領域１２０１の下側の調整を行う操作である。先に求めた値ＲＹ’とＲＨ’とを加算した値Ｒ（ステップＳ１３２６）と、原画像１２００の縦の画素数ＳＨから、周辺画素数Ｂを１ずつ減じた値（ステップＳ１３２７）を差し引いた値とを比較して（ステップＳ１３２８）、Ｒの値がこれに同じか、小さければ使用できる原画素が下方にあることを意味するので、領域１２０１を下側に１画素分拡張する（ステップＳ１３２９）。逆にＲの方が大きければ領域１２０１は原画像１２００の下端を越しているので、下端部のコピー画素数を記憶するＣＢに１を加算する（ステップＳ１３３０）。
【００４４】
ステップＳ１３３１からＳ１３３５は、領域１２０１の左側の調整を行う操作である。先に求めた領域１２０１の開始点のＸ座標ＲＸと周辺画素数Ｂを１ずつ減じた値（ステップＳ１３３１）値とを比較して（ステップＳ１３３２）、ＲＸの値がこれに同じか、大きければ使用できる原画素が左方にあることを意味するので、領域１２０１を左側に１画素分拡張する（ステップＳ１３３３，Ｓ１３３４）。逆にＲＸの方が小さければ領域１２０１は原画像１２００の左端を越えているので、左端部のコピー画素数を記憶するＣＬに１を加算する（ステップＳ１３３５）。
【００４５】
ステップＳ１３３６からＳ１３４０は、領域１２０１の右側の調整を行う操作である。先に求めた値ＲＸ’とＲＹ’とを加算した値Ｒ（ステップＳ１３３６）と、原画像１２００の横の画素数ＳＷから、周辺画素数Ｂを１ずつ減じた値（ステップＳ１３３７）を差し引いた値とを比較して（ステップＳ１３３８）、Ｒの値がこれに同じか、小さければ使用できる原画素が右方にあることを意味するので、領域１２０１を右側に１画素分拡張する（ステップＳ１３３９）。逆にＲの方が大きければ領域１２０１は原画像１２００の右端を越えているので、右端部のコピー画素数を記憶するＣＲに１を加算する（ステップＳ１３３０）。
【００４６】
以上、上記ステップＳ１３０１からＳ１３４０によって求めた各値をドライバ側と解像度変換処理モジュール側とで使用することで、画像１２０６をメモリ上に作り出すことができる。そして画像１２０６を処理することで画像周辺の歪みを抑えた、また各領域間で不連続が生じない出力を得ることが可能となる。
（分割領域の解像度変換例）
さて、分割された領域に対する原画像上の領域（開始点（ＲＸ’，ＲＹ）、縦ＲＨ’画素、横ＲＷ’画素）がステップＳ３０５によって得られたならば、ステップＳ３０６からＳ３１２によって、この領域の解像度変換を行う。
【００４７】
解像度変換は、ステップＳ３０８で得られる状態変数Statusの値によって制御される。Statusは解像度変換の終わりを示すＥＮＤ、次のデータの引渡を要求するＰＡＳＳ＿ＳＲＣ、解像度変換処理モジュールからの出力の引き取りを指示するＴＡＫＥ＿ＤＳＴのいずれか、あるいはＰＡＳＳ＿ＳＲＣとＴＡＫＥ＿ＤＳＴとの組合せを保持する。
【００４８】
ステップＳ３０６では、StatusをＰＡＳＳ＿ＳＲＣで初期化し、原領域の最初のラインを解像度変換処理モジュールに引き渡すよう指示する。そして、ステップＳ３０６の後は、Statusの値がＥＮＤになるまでステップＳ３０８からＳ３１２までの操作を繰り返す（ステップＳ３０７）。
このように状態変数Statusを導入するのは、拡大処理の場合には１ラインの入力から複数のラインの出力が得られること、周辺の画素を必要とする処理方法では最初の数ラインの入力からは出力が得られないこと、縮小処理の場合には複数ラインの入力で１ラインの出力しか得られないこと等、画像処理の違いによる事情に同時に対処するためである。状態変数を導入することで、ドライバはどんな処理方法を使っても解像度変換処理モジュールの返す状態にしたがって、入力の引き渡し、出力の引き取りをしさえすれば良い。そしてこのように１ラインずつの処理というインターフェースを実現することで、ドライバは任意の大きさの領域（任意のライン数単位の領域）の任意の倍率での拡大／縮小を、画像解像度変換処理モジュールを使って統一的に処理できるようになる。
【００４９】
ところで、全ての解像度変換処理において１ラインずつの処理を実現するためには、解像度変換処理モジュール内に解像度変換処理に必要なバッファを用意する必要がある。幅がＲＷ画素である原領域を周辺Ｂ画素を必要とする方法で解像度変換する場合には、少なくともＲＷ＋Ｂ＋Ｂ画素分の幅のものがＢ＋Ｂ＋１ライン分必要となる。解像度変換処理モジュールではこれらのバッファに順次入力されたデータを蓄え、バッファが一杯になった段階で解像度変換処理を開始する。そして必要に応じてバッファをシフト（最も古いデータを捨てて次の入力を格納する）して、次のラインの処理を開始する。なお、データの取り込みの際には、先に求めたＣＬ、ＣＲの値を使ってバッファの両端を調整する。
【００５０】
解像度変換処理モジュール内のバッファの様子を示したのが図１５である。
図１５において、（ａ）は空の状態、（ｂ）は最初の１ライン目がバッファ１５０５に取り込まれた状態、（ｃ）から（ｅ）は２から４番目のラインがバッファシフトを行いながら次々とバッファ１５０５に取り込まれていった状態を示している。（ｆ）に至り解像度変換処理モジュール内の全てのバッファは入力データによって満たされた状態となり、画素１５０６の処理が領域１５０７の画素を用いて行われる。各画素の処理は（ｇ）から（ｉ）に示したように右に１画素ずつずれて（１５０８，１５１０，１５１２）行き、それに伴って使用される領域も右に１画素ずつ移動して行く（１５０９，１５１１，１５１３）。そして、バッファ１５０３の処理が終わったならば、結果を出力し、このラインを使っての処理が終わったならば、（ｊ）に示すように、バッファをシフトして新たなラインを取り込んで、画素１５１４の処理を領域１５１５の画素を使って開始する。
【００５１】
図１４にステップＳ３０８における処理の流れを示す。
ステップＳ１４０１では指定領域の全ての処理が終わったかどうかを判定する。これは既に何ライン出力したかを調べること等で実現できる。そして全ての処理が終了しているのならば、状態変数StatusにＥＮＤをセットして終了する。この結果、ステップＳ３０７によって原領域での処理の終了が検出され、ステップＳ３０３によって次の領域の処理が開始される。
【００５２】
逆にステップＳ１４０１によって原領域での全ての処理が終わっていないと判定されたならば、状態変数Statusの値を調べて（ステップＳ１４０３）、もしこの時の状態がＰＡＳＳ＿ＳＲＣを含んでいれば、次のデータがドライバより渡されて来ているので、ステップＳ１４０４においてバッファのシフトを行い、ステップＳ１４０５において渡された次のラインをバッファに取り込む。そして最初のラインが渡された時に上端のコピーが必要であれば、ＣＴに格納されたライン数分、バッファに格納されたラインデータのコピーを行う（ステップＳ１４０６〜Ｓ１４０９）。
【００５３】
ラインデータの取り込が終わったならば、全てのバッファがラインデータで満たされていることを確認して（ステップＳ１４１０）、１ライン分の処理を行う（ステップＳ１４１１）。この処理にはこれまで述べて来たように様々な方法を使うことができるが、拡大なのか縮小なのかそもそもステップＳ１４１１が実行されたのかにより出力ラインが作成されない場合があることに留意する必要がある。このためステップＳ１４１２において出力ラインが作成されたかを調べ、作成されていたならばステップＳ１４１３によってStatusにＴＡＫＥ＿ＤＳＴをセットし、そうでなければステップＳ１４１４によってStatusに０（ＥＮＤ、ＰＡＳＳ＿ＳＲＣ、ＴＡＫＥ＿ＤＳＴのいずれでもまた組合せでもない値）をセットしておく。
【００５４】
そして、次回の処理に次のラインデータの入力が必要であるかをステップＳ１４１５において判定し、もしそうであればステップＳ１４１６において次のデータが存在するかを判定する。もし現在のラインが原画像の下端であり次のデータが取得できない場合には、ステップＳ１４１７でバッファシフトを行い、ステップＳ１４１８で最後に入力されたラインデータをバッファにコピーする。また、現在のラインが画像の下端に達していなければ、ステップＳ１４１３またはＳ１４１４で設定したStatusにＰＡＳＳ＿ＳＲＣを追加して処理をステップＳ１４０１へ戻す。
【００５５】
こうして設定された状態変数Statusの値はステップＳ３０９及びＳ３１１で調べられ、値に応じた対応を行った後にステップＳ３０７へ戻る。
さて、ステップＳ３０８において設定されたStatusがもしＰＡＳＳ＿ＳＲＣを保持していたならば、次回に解像度変換処理モジュールを呼び出す際に引き渡す入力データを現在の次のラインに更新する（ステップＳ３１９）。また、ステップＳ３０８において設定されたStatusがもしＴＡＫＥ＿ＤＳＴを保持していたならば、解像度変換処理モジュールからの出力をあらかじめ用意した出力バッファに書き込む（ステップＳ３１２）。なお、ステップＳ３１０とＳ３１２は、同一ループ内ではStatusの値によりどちらか一方のみ実行されることもあり、両方とも実行されることもある。
【００５６】
以上、図４に示した画像解像度変換処理の流れを中心に、本発明の第１の実施の形態について述べた。ここで説明したように、本実施の形態によれば、従来の問題点が解決され、様々な種類の画像解像度変換処理方法をプリンタドライバに対して統一したインターフェイスで組み込むことが可能となり、解像度変換処理のドライバへの組み込みが可能となった。
【００５７】
（第２の実施の形態）
第２の実施の形態を図１６から図１９に基づき説明する。
第１の実施の形態では原画像を縦横ともに拡大する例を示したが、本発明の適用はこの場合に限定されるものではない。拡大と縮小の組み合わせにより倍率テーブルの作成手順のみ若干異なることになるが、基本的な処理手順は全く同じである。本実施の形態では縮小の場合の手順を示すが、倍率テーブルの作成部分を中心に記述する。例として挙げるのは、図５に示した画像５００（縦４画素、横６画素）を図１６に示したサイズの画像１６００（縦３画素、横４画素）に変換する場合である。この例では画像５００が縦横にそれぞれ３／４、４／６倍に縮小される。
【００５８】
図１７は、この例での倍率テーブルの内容を示したものであり、倍率の逆数で表されている。
画像５００の各列はそれぞれＸ方向の倍率テーブル１７０１にしたがって１／２，１，１／２，１倍され、各行はそれぞれＹ方向の倍率テーブル１７０２にしたがって１，１／２，１倍されることが示されている。そしてこれらのテーブルによって、画像５００における画素５０１は、画像１６００における画素（１，１）の一部１６０１に、画素５０２は画素（３，１）の一部となることが分かる。一般に縮小の場合には、複数の原画素により変換後の１画素が生成されることとなる。この様な場合、変換後の各画素は、これを構成する複数の原画素の中から１画素を選ぶ（間引き）方法や複数の原画素を混ぜ合わせる方法等によって作成されることが一般的であるが、本実施の形態では縮小の方法にも特に制限はなく拡大と同じインターフェイスで画像の縮小が可能である。
【００５９】
図１８は、倍率テーブル１７０１，１７０２の作成方法を示した図面である。図中ＳＨ、ＳＷはそれぞれ解像度変換前の画像の縦と横の画素数（例ではＳＨ＝４，ＳＷ＝６）を示し、ＤＨ、ＤＷはそれぞれ解像度変換後の画像の縦と横の画素数（本例では、ＤＨ＝３，ＤＷ＝４）を示している。またＴＹ［ｉ］はＹ方向の倍率テーブル１７０２のｉ番目の要素を示し、ＴＸ［ｉ］はＸ方向の倍率テーブル１７０１のｉ番目の要素を示している。なお割算は整数演算であり結果は切り捨てられる（例えば、４／３＝１）。
【００６０】
処理の流れを説明すると、まずステップ１８００で演算の誤差を格納する変数ｅを０で初期化する。次にステップＳ１８０１では変数ｉを１ずつ増やしながら０からＤＨ−１までステップＳ１８０２とＳ１８０３を繰り返す。ステップＳ１８０２ではＹ方向の倍率テーブルの各要素の値を蓄積された計算誤差を考慮しながら求め、ステップＳ１８０３では計算誤差の更新を行う。この結果、ステップＳ１８００からＳ１８０３によってＹ方向の倍率テーブル１７０２が作成される。
【００６１】
同様にステップＳ１８０４で演算の誤差を格納する変数ｅを再度０で初期化し、次にステップＳ１８０５では変数ｉを１ずつ増やしながら０からＤＷ−１までステップＳ１８０６とＳ１８０７を繰り返す。ステップＳ１８０６ではＸ方向の倍率テーブルの各要素の値を蓄積された計算誤差を考慮しながら求め、ステップＳ１８０７では計算誤差の更新を行う。この結果、ステップＳ１８０４からＳ１８０７によってＸ方向の倍率テーブル１７０１が作成される。
【００６２】
倍率テーブル１７０１，１７０２はこの方法によって作成されたテーブルである。倍率テーブルの各要素は個々に示したように整数値である。倍率テーブルを使う本実施の形態は整数倍の組み合わせにより任意の縮小の解像度変換ができるようになっている。このことは、整数分の１倍の画像サイズの変更しかできない方法であっても、非整数分の１倍の画像サイズ変更が可能になることを示している。なお、倍率テーブルの各要素の値の合計は縮小の場合は処理前の縦横それぞれの画素数に一致する。例えば、Ｘ方向の倍率テーブル１７０１の各要素の合計は６（２＋１＋２＋１）となり、縮小前の画像５００の横の画素数６と一致し、Ｙ方向の倍率テーブル１７０２の各要素の合計は３（１＋２＋１）となり、縮小前の画像５００の縦の画素数４と一致する。
【００６３】
図１９は、縮小の場合の対応領域の計算方法の手順である。ここでは、座標（ＤＲＸ，ＤＲＹ）を左上の点とする縦ＤＲＨ画素、横ＤＲＷ画素からなる領域に対応する原領域を倍率テーブルＴＸとＴＹを使って計算する。拡大時に求めていたＯＸとＯＹは縮小時にはあまり意味がないので、本例では０を格納している。ステップＳ１９０１からＳ１９０６は、領域１２０１の左上の点のＹ座標を求める操作である。縦方向の倍率テーブルＴＹ［ｉ］の各要素を順に加算しながら（ステップＳ１９０４）、倍率テーブルのインデックスｉと開始点のＹ座標値ＤＲＹと比較することで（ステップＳ１９０３）、開始点の元となる画素のＹ座標ＲＹをテーブルの各要素の加算値から求めている（ステップＳ１９０６）。
【００６４】
ステップＳ１９０７からＳ１９０９は、領域１２０１の縦の画素数を求める操作である。縦方向の倍率テーブルＴＹ［ｉ］の各要素を更に順に加算しながら（ステップＳ１９０７）、倍率テーブルのインデックスｉと値ＤＲＹ＋ＤＲＨと比較することで（ステップＳ１９０８）、領域１２０１の縦の画素数ＲＨをテーブルの各要素の加算値と先に求めたＲＹの値から求めている（ステップＳ１９０９）。
【００６５】
ステップＳ１９１０からＳ１９１５は、領域１２０１の左上の点のＸ座標を求める操作である。横方向の倍率テーブルＴＸ［ｉ］の各要素を順に加算しながら（ステップＳ１９１３）、倍率テーブルのインデックスｉと開始点のＸ座標値ＤＲＸと比較することで（ステップＳ１９１２）、開始点の元となる画素のＸ座標ＲＸをテーブルの各要素の加算値から求めている（ステップＳ１９１５）。
【００６６】
ステップ１９１６ＳからＳ１９１８は、領域１２０１の横の画素数を求める操作である。横方向の倍率テーブルＴＸ［ｉ］の各要素を更に順に加算しながら（ステップＳ１９１７）、倍率テーブルのインデックスｉと値ＤＲＸ＋ＤＲＷと比較することで（ステップＳ１９１６）、領域１９０１の横の画素数ＲＷをテーブルの各要素の加算値と先に求めたＲＸの値から求めている（ステップＳ１９１８）。
【００６７】
領域１２０１の開始点座標と大きさが求まったならば、次に必要な周辺画素の数と原画像の大きさとを考慮して、ドライバに要求する領域１２０１＋１２０３の開始点とその大きさを求めるが、この手順は第１の実施の形態と全く同じであるため説明は省略する。
そしてこれまで説明した手順により画像１２０６を作成できるパラメータが揃ってしまえば、どんな解像度変換処理でも利用できる。図１４に関しては縮小の場合も拡大と同じに動作するが、縮小の場合はステップＳ１４１７に入り込まない限り、Statusには必ずＰＡＳＳ＿ＳＲＣが含まれることになる。
【００６８】
以上説明したように、縮小の場合も倍率テーブルの作成手順と変換後の領域から変換前の領域を作成する手順を若干手直しするだけで、拡大の時と全く同様に解像度変換処理を扱うことができる。
（第３の実施の形態）
第３の実施の形態を図２０から図２１に基づき説明する。
【００６９】
第１の実施の形態では原画像を縦横ともに拡大する例を、第２の実施の形態では原画像を縦横ともに縮小する例を示したが、本発明の適用はこれらの場合に限定されるものではない。本例として挙げるのは、図５に示した画像５００（縦４画素、横６画素）を図２０に示したサイズの画像２０００（縦６画素、横４画素）に変換する場合である。本例では画像５００が縦には６／４倍に拡大され、横には４／６倍に縮小される。
【００７０】
図２１は、本例での倍率テーブルの内容を示したものであり、Ｘ方向は倍率の逆数、Ｙ方向は倍率が示されている。
画像５００の各列はそれぞれＸ方向の倍率テーブル２００１にしたがって１／２，１，１／２，１倍され、各行はそれぞれＹ方向の倍率テーブル２００２にしたがって２，１，２，１倍されることが示されている。そしてこれらのテーブルによって、画像５００における画素５０１は画像２０００における領域２００１に、画素５０２は画素２００２となることが分かる。
【００７１】
このように拡大と縮小が混在する場合には、第１の実施の形態と第２の実施の形態とで示した倍率テーブルの作成手順と変換後の領域から変換前の領域を作成する手順を組み合わせることで、画像１２０６を作成するための全パラメータを容易に得ることができ、その後は拡大と縮小の方法を順に適用することで目的の画像が得られることが容易に想像できる。
【００７２】
以上説明したように、拡大と縮小が混在する場合も倍率テーブルの作成手順と変換後の領域から変換前の領域を作成する手順を若干手直しするだけで、他の場合と全く同様に解像度変換処理を扱うことができる。
なお、本発明は、複数の機器（例えばホストコンピュータ，インタフェイス機器，リーダ，プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機，ファクシミリ装置など）に適用してもよい。
【００７３】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００７４】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００７５】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００７６】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードを格納することになるが、簡単に説明すると、図２２のメモリマップ例に示す各モジュールを記憶媒体に格納することになる。すなわち、少なくとも倍率テーブル作成モジュール、対応領域計算モジュール、サイズ変更処理モジュール、および（他のプログラムとの）インターフェースモジュールの各モジュールのプログラムコードを記憶媒体に格納すればよい。更に、これらモジュールを解像度変換モジュールとして組み込んだプリンタドライバを、記憶媒体に格納してもよい。
【００７７】
【発明の効果】
以上説明したように、本発明によれば、簡単な操作及び手順で、非整数倍率を含む任意の倍率に対応できる画像解像度変換方法及びそれを実現する画像解像度変換モジュールが提供できる。
特に、コンピュータ上でソフトウェアとして実現されるデジタルフィルタ系の拡大縮小方法であっても、統一されたインターフェースによってプリンタドライバに効率良く組み込まれる画像解像度変換方法及びそれを実現する画像解像度変換モジュールが提供できる。
【００７８】
更に、、上記画像解像度変換モジュールが組み込まれたプリンタドライバを提供できる。
具体的な適用によれば、どんな解像度変換の方法であっても統一されたインターフェイスでプリンタドライバへの組み込みを可能にすることにより、各処理方法それぞれにおいて非整数倍率を含む任意の倍率に対応できないという問題、バンド間で出力結果に不連続が生じるという問題、任意のライン数単位での処理に対応できないという問題があってもこれらを解消することができ、プリンタドライバ内でこれらを使用することができるようになる。
【００７９】
また、全ての処理方法が任意の矩形領域を処理単位として利用できるようになるので、メモリ量の都合によってはバンドという処理単位を更に細かく分割して処理することもできるようになるという効果がある。また、同様の理由で印刷方向の変化（portraitとlandscape ）によるバンド分割の方向の変化に柔軟に対応できるという効果もある。さらには、各処理方法によらずドライバからの呼び出し方法が統一されることになるのでドライバ側の処理が簡略化でき、したがってドライバ本体のプログラムサイズを小さくできる、ドライバ本体のコードに誤りが入りにくくなるなどの効果もある。
【図面の簡単な説明】
【図１】本発明の実施の形態のシステム構成例を示す図である。
【図２】本実施の形態を含む印刷処理部の構成を示すブロック図である。
【図３】画像データに関する描画処理の構成を示すブロック図である。
【図４】画像解像度変換処理の手順例を示す図である。
【図５】原画像の例を示す図である。
【図６】拡大時の変換後の画像の例を示す図である。
【図７】拡大時の倍率テーブルの例を示す図である。
【図８】拡大時の倍率テーブル作成の手順例を示す図である。
【図９】変換前後の領域の対応を示す図である。
【図１０】領域分割の例を示す図である。
【図１１】領域分割された原画像上の領域を示す図である。
【図１２】原領域の調整を説明する図である。
【図１３Ａ】対応領域作成の手順例を示す図である。
【図１３Ｂ】対応領域作成の手順例を示す図である。
【図１４】サイズ変更処理の手順例を示す図である。
【図１５】バッファの使用状態を説明する図である。
【図１６】縮小時の変換後の画像の例を示す図である。
【図１７】縮小時の倍率テーブルの例を示す図である。
【図１８】縮小時の倍率テーブル作成の手順例を示す図である。
【図１９Ａ】対応領域作成の手順例を示す図である。
【図１９Ｂ】対応領域作成の手順例を示す図である。
【図２０】拡大と縮小が組み合わされた場合の変換後の画像の例を示す図である。
【図２１】拡大と縮小が組み合わされた場合の倍率テーブルの例を示す図である。
【図２２】記憶媒体上のメモリマップ例を示す図である。
【図１】
0003667025.tif 000002
【図２】
0003667025.tif 000003
【図３】
0003667025.tif 000004
【図４】
0003667025.tif 000005
【図５】
0003667025.tif 000006
【図６】
0003667025.tif 000007
【図７】
0003667025.tif 000008
【図８】
0003667025.tif 000009
【図９】
0003667025.tif 000010
【図１０】
0003667025.tif 000011
【図１１】
0003667025.tif 000012
【図１２】
0003667025.tif 000013
【図１３Ａ】
0003667025.tif 000014
【図１３Ｂ】
0003667025.tif 000015
【図１４】
0003667025.tif 000016
【図１５】
0003667025.tif 000017
【図１６】
0003667025.tif 000018
【図１７】
0003667025.tif 000019
【図１８】
0003667025.tif 000020
【図１９Ａ】
0003667025.tif 000021
【図１９Ｂ】
0003667025.tif 000022
【図２０】
0003667025.tif 000023
【図２１】
0003667025.tif 000024
【図２２】
0003667025.tif 000025