(57)【特許請求の範囲】
【請求項１】
第１の描画命令と第２の描画命令とを取得する取得手段を有する装置であって、
前記第１の描画命令は第１の画像の描画を行う命令であり、前記第２の描画命令は第２の画像の描画を行う命令であり、前記第１の描画命令は前記第２の画像の描画が行われた後で、前記第２の画像と重なる位置に前記第１の画像の描画を行う命令であり、
当該装置は、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であるかを判定する判定手段と、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であると前記判定手段で判定された場合に、
前記第２の画像の描画を行い、さらに、当該第２の画像の上に前記第１の画像の描画を行うことで画像を描画し、当該描画された画像を印刷手段に出力し、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないと前記判定手段で判定された場合に、
前記第１の描画命令と、前記第２の描画命令とを前記印刷手段に出力する出力手段と、を有することを特徴とする装置。
【請求項２】
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であるとは、当該第１の描画命令が、当該先に描画された重なる位置の画像の上に、前記第１の画像を上書きする描画を行う命令であることを特徴とする請求項１に記載の装置。
【請求項３】
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないとは、当該第１の描画命令が、当該先に描画された重なる位置の画像を、前記第１の画像から透かす描画を行う命令であることを特徴とする請求項１または２に記載の装置。
【請求項４】
前記第２の描画命令は、先に描画された重なる位置の画像を、前記第２の画像から透かす描画を行う命令であることを特徴とする請求項３に記載の装置。
【請求項５】
前記出力手段で前記印刷手段に出力された前記第１の描画命令および前記第２の描画命令は、前記印刷手段において、前記第２の画像の描画を行った後で、前記第２の画像と重なる位置に前記第１の画像の描画を行うことを特徴とする請求項１乃至４の何れか１項に記載の装置。
【請求項６】
前記出力手段は、ＰＤＬコマンドに変換して出力を行うことを特徴とする請求項１乃至５の何れか１項に記載の装置。
【請求項７】
前記出力手段は、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であると前記判定手段で判定された場合に、
前記第２の画像の描画を行い、さらに、当該第２の画像の上に前記第１の画像の描画を行うことで画像を描画し、当該描画された画像をＰＤＬの命令に変換し、当該変換されたＰＤＬの命令を前記印刷手段に出力し、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないと前記判定手段で判定された場合に、
前記第１の描画命令をＰＤＬの命令に変換し、前記第２の描画命令をＰＤＬの命令に変換し、当該変換された２つのＰＤＬの命令を前記印刷手段に出力することを特徴とする請求項１乃至５の何れか１項に記載の装置。
【請求項８】
前記印刷手段は、前記装置と異なる印刷装置であることを特徴とする請求項１乃至７の何れか１項に記載の装置。
【請求項９】
第１の描画命令と第２の描画命令とを取得する取得手段を有する装置における描画命令の処理方法であって、
前記第１の描画命令は第１の画像の描画を行う命令であり、前記第２の描画命令は第２の画像の描画を行う命令であり、前記第１の描画命令は前記第２の画像の描画が行われた後で、前記第２の画像と重なる位置に前記第１の画像の描画を行う命令であり、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であるかを判定する判定工程と、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であると前記判定工程で判定された場合に、
前記第２の画像の描画を行い、さらに、当該第２の画像の上に前記第１の画像の描画を行うことで画像を描画し、当該描画された画像を印刷手段に出力し、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないと前記判定工程で判定された場合に、
前記第１の描画命令と、前記第２の描画命令とを前記印刷手段に出力する出力工程と、を含むことを特徴とする方法。
【請求項１０】
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であるとは、当該第１の描画命令が、当該先に描画された重なる位置の画像の上に、前記第１の画像を上書きする描画を行う命令であることを特徴とする請求項９に記載の方法。
【請求項１１】
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないとは、当該第１の描画命令が、当該先に描画された重なる位置の画像を、前記第１の画像から透かす描画を行う命令であることを特徴とする請求項９または１０に記載の方法。
【請求項１２】
前記第２の描画命令は、先に描画された重なる位置の画像を、前記第２の画像から透かす描画を行う命令であることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記出力工程で前記印刷手段に出力された前記第１の描画命令および前記第２の描画命令は、前記印刷手段において、前記第２の画像の描画を行った後で、前記第２の画像と重なる位置に前記第１の画像の描画を行うことを特徴とする請求項９乃至１２の何れか１項に記載の方法。
【請求項１４】
前記出力工程は、ＰＤＬコマンドに変換した出力を行うことを特徴とする請求項９乃至１３の何れか１項に記載の方法。
【請求項１５】
前記出力工程は、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であると前記判定工程で判定された場合に、
前記第２の画像の描画を行い、さらに、当該第２の画像の上に前記第１の画像の描画を行うことで画像を描画し、当該描画された画像をＰＤＬの命令に変換し、当該変換されたＰＤＬの命令を前記印刷手段に出力し、
前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないと前記判定工程で判定された場合に、
前記第１の描画命令をＰＤＬの命令に変換し、前記第２の描画命令をＰＤＬの命令に変換し、当該変換された２つのＰＤＬの命令を前記印刷手段に出力することを特徴とする請求項９乃至１４の何れか１項に記載の方法。
【請求項１６】
前記印刷手段は、前記装置と異なる印刷装置であることを特徴とする請求項９乃至１５の何れか１項に記載の方法。
【請求項１７】
請求項１乃至８の何れか１項に記載の取得手段、判定手段、出力手段として、コンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、描画命令を処理する装置、方法及びプログラムに関するものである。
【背景技術】
【０００２】
従来、高機能プリンタに対するプリンタドライバの印刷処理は、ＯＳから描画命令が渡されるとそれに対応するプリンタ記述言語の描画コマンドに置き換えてプリンタにデータの転送を行っている。かかるプリンタ記述言語（Page Description Language）を、以下ＰＤＬと略し、その方法をＰＤＬモードと言う。ＰＤＬモードは、ＰＤＬを持たずに入力はビットマップのみ（ダムプリンタ方式、ビデオプリンタ方式）という低機能プリンタと比較すると、通常はデータ量が少なくなり、高速に処理が行えるという特徴を持つ。
【０００３】
しかしながら、近年のパーソナルコンピュータの高速化、アプリケーションの高機能化などにより、豊かな表現がなされたプレゼンテーション資料などが作成される機会が増えている。これに伴い、ＰＤＬモードではデータ量が莫大になり、高機能プリンタでありながら、低機能プリンタと比較して却って遅くなるといった例が増えてきている。
【０００４】
遅くなる具体的な例としては、ＯＳから渡される描画命令で指定されるオブジェクトのデータサイズが極小で、数が膨大だった場合等がある。このようなケースでは、ＰＤＬ描画コマンドを生成してネットワークを介してプリンタに送って処理するよりも、ＣＰＵパワーやメモリ資源が潤沢なＰＣ上でビットマップに展開した方が全体のスループットが上がることがある。
【０００５】
そこで、プリンタドライバではページ全体をビットマップに展開してプリンタに転送するモード（以下、ラスタモード）を用意して、ＰＤＬモードかラスタモードかを手動または自動で切り替えている。また、特許文献１では、ＯＳから渡された描画命令を一旦保存し、隣接している描画命令を集めてイメージデータ形式のＰＤＬコマンドにすることで、ＰＤＬコマンドの数を削減する。これにより、ＰＤＬモードとイメージモードのよい所を取り入れて、パフォーマンスの低下を防いできた。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2004-030386号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記ラスターモードを用意してユーザにプリンタドライバで設定してもらうという対応において、ユーザからはＰＤＬ描画コマンドによるデータ量が莫大になるかどうかは認識出来ない。結果的に、低速なＰＤＬモードで印刷処理してしまうことが常である。プリンタドライバでページ毎にどちらのモードで処理した方が高速なのかを予測した場合も、１ページ分の印刷データを保存する必要があり、その間プリンタに印刷データが送付されずファーストプリント時間が遅延する。さらに、多量のＰＣリソースを要するという問題も残る。
【０００８】
一方、特許文献１の方法は、隣接する描画命令部分だけをイメージデータに変換し、それ以外は従来のＰＤＬコマンドを利用することで、上記問題を解決している。ところが、近年のアプリケーションの中には、各描画命令で、破線に見えても細かなイメージで個々の実線部分だけを描画してきたり（図４参照）、大きなイメージの黒色ピクセル部だけを微細なイメージで描画指定してくるもの（図６参照）が存在する。こうした細切れイメージは互いに隣接していないため、特許文献１の方法では合成することは出来ず、依然としてパフォーマンスの劣化の原因になっている。
【０００９】
本発明は、細切れイメージのように互いに隣接していないイメージを含むデータにおいて最適かつ高速に処理を行うための描画命令を処理する装置、方法及びプログラムを提供する。
【課題を解決するための手段】
【００１０】
本発明の一側面によると、第１の描画命令と第２の描画命令とを取得する取得手段を有する装置であって、前記第１の描画命令は第１の画像の描画を行う命令であり、前記第２の描画命令は第２の画像の描画を行う命令であり、前記第１の描画命令は前記第２の画像の描画が行われた後で、前記第２の画像と重なる位置に前記第１の画像の描画を行う命令であり、当該装置は、前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であるかを判定する判定手段と、前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令であると前記判定手段で判定された場合に、前記第２の画像の描画を行い、さらに、当該第２の画像の上に前記第１の画像の描画を行うことで画像を描画し、当該描画された画像を印刷手段に出力し、前記第１の描画命令が、先に描画された重なる位置の画像を隠す描画を行う命令でないと前記判定手段で判定された場合に、前記第１の描画命令と、前記第２の描画命令とを前記印刷手段に出力する出力手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明により、細切れイメージのように互いに隣接していないイメージを含むデータにおいて最適かつ高速に処理を行うことが出来る。
【００１２】
本発明では、ＰＤＬモードでありながら、局所的にデータ量が莫大になってしまう個所の描画命令を逐次ビットマップに展開してプリンタに送出する。それ以外は、ＰＤＬ描画コマンドとしてプリンタに転送する。
【００１３】
従って、隣接しない細切れイメージ（重なっていても、離れていても）を合成することで、ＰＤＬコマンドのサイズを削減（ヘッダ数削減、データ連続性を生かした圧縮率向上）が可能となり、トータル印刷時間を短縮できる。
【００１４】
また、逐次イメージを合成＆送出することで、プリンタとの並列演算処理が可能となり、全てのデータを蓄積してイメージとして一括送信するイメージモードよりパフォーマンスが向上する。
【図面の簡単な説明】
【００１５】
【図１】本実施形態の印刷処理方法が適用される印刷処理システムの構成の一例を示すブロック図である。
【図２】本実施形態の印刷処理方法で、入力装置から印刷命令が入力されてプリンタへデータを送り印刷するまでのデータの流れを示す概念図である。
【図３】図２のドライバ部分の処理内容を中心に詳しく示した図である。
【図４】従来のイメージ合成方法の課題を示した概念図である。
【図５】図４の従来のイメージ合成方法の課題を解決する本発明の処理を示した概念図である。
【図６】従来のイメージ合成方法の第２の課題を示した概念図である。
【図７】図６の従来のイメージ合成方法の第２の課題を解決する本発明の処理を示した概念図である。
【図８】本実施形態でWindowsのプリンタドライバがＯＳから受け取るイメージの情報を説明する図である。
【図９】本実施形態の合成テーブルデータの構成例を示す図である。
【図１０】本実施形態で水平の点線を合成する時のイメージデータの流れを説明する図である。
【図１１】本実施形態で斜めの点線を合成する時のイメージデータの流れを説明する図である。
【図１２】本実施形態で他の細切れイメージを合成する時のイメージデータの流れを説明する図である。
【図１３】本実施形態の情報処理装置のドライバによる印刷処理方法の手順例を示すフローチャートである。
【図１４】図１３の合成テーブルデータのフラッシュ処理の手順例を示すフローチャートである。
【図１５】図１３の合成条件確認処理の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、添付図面を参照して本発明に係る一実施形態を詳細に説明する。
【００１７】
＜本実施形態の情報処理装置を含む印刷処理システムの構成例＞
図１は、本発明の印刷処理方法が適用される印刷処理システムの構成の一例を示すブロック図である。
【００１８】
図１において、１０１は中央処理装置であり、情報処理装置および印刷処理システムを制御する。中央処理装置１０１は、システムに接続された媒体読取装置１０６を介して、ＦＤ，ＣＤ−ＲＯＭ，ＩＣメモリカード等の記憶媒体からプログラムおよび関連データを、補助記憶装置１０３に読み込む。補助記憶装置１０３から主記憶装置１０２にロードされたシステムプログラム、アプリケーションプログラムによって、中央処理装置１０１は、入力装置１０４から入力される情報を処理して、出力装置５やプリンタ７に出力する。
【００１９】
なお、本実施形態では、出力装置５はディスプレイなどの表示装置とし、本来出力装置に含まれるプリンタ７と区別している。また、入力装置４はキーボード、ポインティングデバイス等で構成されているものとする。さらに、上記補助記憶装置３は、ハードディスク、光磁気ディスクで構成されるものであってもいいし、これらの組み合わせで構成されるものであってもよい。また、それぞれの装置がバスで接続されていてもネットワークを介して接続されていても、本発明を制約するものではない。
【００２０】
図２は、本発明の印刷処理方法を実現する制御プログラムと関連するデータの流れとを示す概念図である。
【００２１】
主記憶装置１０２に読み込まれたＯＳ３０１による中央処理装置１０１の制御下で、アプリケーション３０２、ドライバ３０３ともに機能する。印刷処理においては、入力装置から印刷命令が入力されて、プリンタへ印刷ジョブデータを送り印刷が行われる。
【００２２】
なお、図２には明示していないが、主記憶装置１０２には、受信した描画命令、変換された中間データ、生成されたＰＤＬコマンドなどの一時記憶や、以下示すメモリバッフア３０６、合成用メモリ３０８、あるいは図１３から図１５のフローチャートにおける分岐の判断のためのフラグ、合成で高速化可能かを判断するための演算式などを記憶する領域が確保される。
【００２３】
図３は、図２の概念図のプリンタドライバ３０３の部分のデータ処理の流れを詳しく記した図である。
【００２４】
ＯＳ３０１から受け取った描画命令を、プリンタドライバ３０３は、中間データ変換モジュール３０４で中間データに変換する。同時に、以下で詳説するように、描画命令が合成条件に当てはまるか否かが判定される。合成条件に当てはまる中間データについては、メモリバッファ３０６に描画に必要な情報を保存する。合成条件に当てはまらない中間データは、ＰＤＬコマンド生成モジュール３０５でＰＤＬコマンドに変換して、プリンタ３０７に送出する。
【００２５】
メモリバッファ３０６に中間データが保存されてしている状態時に、次の状態が発生した場合は、メモリバッファ３０６の中間データを合成モジュール３０７で合成用メモリ３０８を使ってイメージデータに変換する。その状態とは、合成不可の描画命令を受けた時、メモリバッファ３０６が一杯になった時、１ページ分の描画命令が終了した時である。合成モジュール３０７で生成したイメージデータは、ＰＤＬコマンド生成モジュール３０５でＰＤＬコマンドに変換して、プリンタ３０７に送出する。
【００２６】
このようにして、次々とＯＳ３０１からの描画命令を中間データを経由して、一部の中間データはイメージデータに合成して、ＰＤＬコマンドに変換してプリンタへ転送し、再度ＯＳ３０１からの描画命令に対する処理を続ける。ＯＳ３０１からの描画命令に対する処理がすべて完了すると、メモリバッファ３０６内の中間データを上記と同様の処理でＰＤＬコマンドに変換してプリンタへ転送し、プリンタドライバ３０３の印刷処理が完了する。
【００２７】
＜本実施形態の印刷処理システムでの印刷処理方法の概念＞
まず、本発明における印刷処理方法の理解を助けるために、従来技術の印刷処理方法と本発明の印刷処理方法との相違を、２つの例で説明する。なお、本発明は、以下の２つの例のみを改善した技術ではなく、本発明の印刷処理方法の実行により細切れイメージのように互いに隣接していないイメージを有効に処理できることは、当業者には明らかであろう。
【００２８】
（水平の点線の従来の処理例）
図４は、細切れイメージの１例である水平の点線を印刷する従来の例を示す図である。図４には、ＰＤＬ描画コマンド展開とビットマップ展開したデータとを比較して、ＰＤＬ描画コマンドの方がデータ量が大きくなる例を示したものである。
【００２９】
一般的なアプリケーションで点線を描画する際、プリンタドライバには点線を描画する命令がひとつの関数で渡ってくる。
【００３０】
この際に、点線指定が可能な高級なＰＤＬ描画コマンドを持つ場合には、線描画命令に点線属性をつけることで、サイズの小さいＰＤＬ描画コマンドで点線の描画指示が可能である。
【００３１】
ところが、アプリケーションによっては、点線のライン実線部分（図４では高さ１、幅３ピクセル）の細切れイメージ４０１を多量に使って表現するものが存在する。ＯＳから渡されたイメージデータをプリンタドライバがＰＤＬ描画コマンドにすると、数ピクセル単位の細切れのイメージ描画命令４０２が大量にプリンタに送信されることになる。
【００３２】
大量の小さなイメージ描画命令４０２をプリンタに送信すると、(1)ＰＤＬコマンド中のヘッダサイズの比率が大きくなる、(2)PackBits圧縮のような連続性を使った圧縮が利き難くなる、などにより、データ転送速度が劣化する。また、情報処理装置であるＰＣに比べて、非力なＣＰＵやメモリ空間しか持たないプリンタで、大量の細切れイメージを処理するとコマンド解析時間などがかかり、印刷時間が増大してしまう。
【００３３】
（水平の点線の本発明の処理例）
図５は、細切れイメージの１例である水平の点線を印刷する本発明の例を示す図である。図５では、図４と同様な水平の点線を本発明の処理によれば、ＰＤＬ描画コマンド展開とビットマップ展開したデータとを比較して、ＰＤＬ描画コマンドの方がデータ量を少なくできる例を示したものである。
【００３４】
本発明では、図５の６０１ように描画命令同士でイメージが隣接していなくても、全体処理時間が短くなると判断した時は、６０２のようにイメージとマスクとに合成変換することで、印刷時間全体のパフォーマンスを上げるものである。本発明では、合成後のデータ量が制限を越えない限り１つのＰＤＬコマンドに合成されて、プリンタに送られる。
【００３５】
（斜めの点線の処理例）
図６は、細切れイメージの１例である斜めの点線を印刷する例を示す図である。図６には、図５のようなイメージとマスクとに合成変換を斜めの点線の処理にそのまま拡大すると、ＰＤＬ描画コマンド展開とビットマップ展開したデータとを比較して、結果的にＰＤＬ描画コマンドの方がデータ量が大きくなってしまう例を示したものである。
【００３６】
上記図５のような合成処理をそのままにして合成するイメージの範囲を広げると、図６のようなイメージ５０１を合成すると、５０２のように、ソースイメージを合計したよりも大きくなる可能性が高くなる（図１１も参照）。これでは、ＰＣ−プリンタ間のデータ転送時間が増大するため合成をするメリットがない。
【００３７】
そこで、本発明では、図５の処理に特殊な合成条件を加えることによって、図６の問題点を解決する。
【００３８】
（斜めの点線の本発明の処理例）
図７は、細切れイメージの１例である斜めの点線を印刷する本発明の例を示す図である。図７には、特殊な合成条件を加えることで、図５の処理を行なうと共に図６の問題点をも解決し、ＰＤＬ描画コマンド展開とビットマップ展開したデータとを比較して、ＰＤＬ描画コマンドの方がデータ量が小さくなる例を示したものである。
【００３９】
図７では、最適な描画命令同士だけを合成してＰＤＬ描画コマンド７０２を生成することを可能とするものである。図７では、特殊な合成条件により点線中の同一の点用に渡されたイメージ同士は合成しているが、離れたイメージは合成しない結果を示している。
【００４０】
なお、マスクパターンを作成する理由は、ビットマップは矩形で表され、そのうちのどの部分をプリンタで処理する必要があるかを示すためである。
【００４１】
＜本実施形態における描画命令および合成テーブルデータの構成例＞
以下、本実施形態の合成条件を説明するために、図８および図９を使ってウインドウズ（以下、Windows：登録商標）を例にしたプリンタドライバ内のイメージ描画処理の説明を行う。
【００４２】
（描画命令の構成例）
図８は、アプリケーション上で作成された点線描画を、Windows系プリンタドライバのＤＤＩ関数であるDrvStretchBlt関数８０１に対して、数ピクセルのイメージの描画命令として渡してきた様子を示すものである。
【００４３】
図８の例は、"psoSrc"が示すビットマップメモリ空間８０２内の"prclSrc"領域８０４を、"psoDest"が示すビットマップメモリ空間８０５内の、"prclDest"領域８０３に描画することを指示するものである。なお、"prclDest"領域８０４，"prclDest"領域８０３の構造体RECTLは、以下の通り四角い領域の位置を表すことが出来る。
【００４４】
typedef struct _RECTL { 
LONG left; 
LONG top; 
LONG right; 
LONG bottom; 
} RECTL, *PRECTL; 
その他にも、マスク領域をビットマップのオンピクセルで示す"psoMask"や、クリップ領域を示す"pco"なども存在するが、ここでは説明を省略する。なお、描画用ビットマップとマスクパターンによって作成される描画命令は、描画用ビットマップに対し、マスクパターンのマスクされている個所を描画するというコマンドである。あるいは、マスクパターンのマスクされている個所をクリアするというコマンドと、マスクパターンのマスクされていない個所をクリアされたビットマップをＯＲ処理で描画するというコマンドの複数である。
【００４５】
ここで、left, rightは、左右方向の最左をゼロとした描画位置を示し、top, bottomは、上下方向の最上をゼロとした描画位置を示す。
【００４６】
（合成テーブルデータの構成例）
続けて、図９を使って、メモリバッファ３０６に保存する中間データの、合成テーブルデータ形式のイメージデータの保存形式の説明を行う。
【００４７】
"rclUniImgArea"９０１は、それまでにメモリバッファ３０６に保存した中間データをイメージに合成した時の、最外接矩形領域を格納するものである。
【００４８】
"UniImgAreaSize"９０２は、"rclUniImgArea"９０１のイメージを生成した場合のデータサイズを求めたものである。
【００４９】
"TotalSrcImageSize"９０３は、保存した個々のイメージ本体のサイズの合計値であり、以下の式で求める。
【００５０】
ImageW＝rclDest.right - rclDest.left;
ImageH＝rclDest.bottom - rclDest.top;
TotalSrcImageSize＝Σ(ImageW*ImageH);
"ｒｏｐ"９０４は、それまでに保存したイメージ描画命令に指定された論理演算値を格納してある。メモリバッファ３０６に保存されている細切れイメージがある時は、格納済みｒｏｐ値と異なるｒｏｐ値を持つイメージは合成不可と判定する。
【００５１】
"ImgCnt"９０７は、保存したイメージの個数を示す。
【００５２】
"p1stimgtable"９０８は、保存したイメージデータ構造体の先頭アドレスを格納する。"plastimgtable"９０９は、最後に保存したイメージデータ構造体のポインタを示す。
【００５３】
上記９０１〜９０８は、保存イメージ全体を管理する全体管理テーブル９１０である。
【００５４】
保存するイメージデータ構造体９１１は、以下のデータで構成される。
【００５５】
ＯＳから渡されたソースイメージの領域情報"rclSrc"９０５と、展開領域情報"rclDst"９０９と、イメージデータ本体のサイズ"ImageSize"９０６の描画先領域である。"ImageData"にはイメージデータ本体が保存されている。
【００５６】
図９のように、１つの管理テーブル９１０に複数のイメージデータ構造体９１１（図９には、第一イメージ情報と第二イメージ情報が示されている）を連続して保存することが可能である。
【００５７】
＜本実施形態の合成可否の判断基準例＞
本実施形態では、合成した方が高速に処理できるか否かを高速に判定するために、イメージデータをＯＳから受け取り次第、以下のＡ式を実施し、論理TRUEであれば合成と判断し、論理FALSEであれば非合成と判断する。
【００５８】
(ImageW×ImageH×bitspixel＜maxSize)  ＆
(TotalSrcImageSize／UniImgAreaSize×100＞MinimamOcupationRasio)
...（Ａ式）
ここで、"bitspixel"は１画素を表現するビット数であり、"maxSize"は、細切れイメージだけを合成するための第１の閾値（定数）である。本実施形態では、縮小イメージはプリンタドライバでイメージを出力解像度に縮小し、拡大イメージはプリンタで拡大するので、rclDest領域から求めたビットマップサイズが閾値より小さい場合を細切れイメージとして処理する。かかる第１の閾値は、印刷処理システム毎に値は異なる。
【００５９】
また、"MinimamOcupationRasio"は、合成イメージ内の無駄領域が増えないように、合成イメージ中に占めるイメージ本体の領域の割合（比）を一定値より大きくするための第２の閾値（定数）である。かかる第２の閾値も、印刷処理システム毎に値は異なる。
【００６０】
なお、上記判断式のＡ式、あるいはその閾値などは、限定されず本発明の範囲内で変更可能である。
【００６１】
＜本実施形態の印刷処理方法による処理例＞
以下、図１０〜図１２で、本実施形態の細切れイメージ合成をシュミレーションする。なお、本実施形態では、maxSize＝80 byte, MinimamOcupationRasio＝20％として説明するが、これらの値は、印刷処理システムによって変化する。
【００６２】
（水平の点線の処理例）
図１０は、本実施形態の印刷処理方法による水平の点線の処理例を示す図である。
【００６３】
イメージ１（１００１）（ImageW＝３、ImageH＝１、bitspixel＝1、描画位置：X＝1, y＝2）は、Ａ式の合成条件を満たすので、合成イメージとしてメモリバッファに保存される。まだ１つしか格納されていないので、ImgOcupation＝100％である。１００２は、メモリバッファに保存されたイメージ１をビットマップ展開した場合の状態を示す図である。
【００６４】
続けてＯＳから渡されたイメージ２（１００３）（ImageW＝２、ImageH＝１、bitspixel＝1、描画位置：X＝8, y＝2）も、サイズはＡ式の合成条件を満たす。イメージ１とイメージ２とは重ならないが、同時にImgOcupation＝55％で条件を満たすので合成イメージとしてメモリバッファに保存する。１００４は、メモリバッファに保存された合成イメージ（イメージ１，２）をビットマップ展開した場合の状態を示す図である。
【００６５】
同様に、イメージ３もImgOcupation＝50％なので合成可能と判断し、メモリバッファに保存をし続ける。１００６は、メモリバッファに保存された合成イメージ（イメージ１，２，３）をビットマップ展開した場合の状態を示す図である。
【００６６】
（斜めの点線の処理例）
図１１は、本実施形態の印刷処理方法による斜めの点線の処理例を示す図である。。
【００６７】
図１１の場合は、イメージ１（１１０１）、イメージ２（１１０３）、イメージ３（１１０５）までは、ImgOcupation＝50％のため合成可能と判定される。その合成イメージをビットマップ展開した場合の状態が１１０２、１１０４、１１０６にそれぞれ示されている。
【００６８】
ところが、イメージ４（１１０７）を合成すると、合成イメージは１１０８に示すようになり、ImgOcupation＝１７％となる。このため、閾値の２０％を下まわって式Ａを満足しないので、イメージ４（１１０７）は合成しない。イメージ１（１１０１）からイメージ３（１１０５）までを合成し（１１０６）、ＰＤＬ描画コマンドを生成することを示している。
【００６９】
合成イメージのＰＤＬコマンド発行後、メモリバッファ３０６はクリアし、イメージ４（１１０７）を次の合成のためにイメージバッファ３０６に格納する。
【００７０】
このような処理を続けることで、先に図７に示した処理が実現する。
【００７１】
（他の互いに隣接していないイメージへの適用例）
図１２は、水平の点線（図１０）、斜めの点線（図１１）とは異なる互いに隣接していないイメージへの本実施形態の適用例を示す図である。
【００７２】
図１２の場合は、イメージ３（１２０５）までは図１１と同じである。従って、１２０２〜１２０６は図１１の１１０２〜１１０６と同様である。
【００７３】
図１２では、次のイメージ４（１２０７）の描画領域が、イメージ３（１２０５）までの最外郭矩形rclUniImgAreaと重なっている。
【００７４】
この場合の条件として、イメージ１〜イメージ３の描画命令が下地を使わない上書き描画である場合は、合成可能であると判断する。更に、イメージ４（１２０７）を合成してもImgOcupationは５８％のため合成可能と判断して、イメージ４を合成してメモリバッファ３０６に保存する。１２０８は、メモリバッファに保存された合成イメージ（イメージ１，２，３）をビットマップ展開した場合の状態を示す図である。
【００７５】
＜本実施形態の印刷処理方法の処理手順例＞
図１３、図１４、図１５は、以上の処理の流れを示すドライバ３０３が実行するフローチャートの例である。
【００７６】
（全体の処理手順例）
図１３のフローチャートを参照しながら本発明に係るドライバの印刷処理方法の全体の処理について説明する。
【００７７】
ドライバへの初期化メッセージに先立って、以下の処理を行われる。
【００７８】
まず、図１の入力装置１０４から印刷を実行するように命令が入力される。入力された命令を受けて、補助記憶装置１０３から主記憶装置１０２上に読み込まれたＯＳ、ドライバやアプリケーション（図２）のうち、ＯＳ３０１がそのメッセージを受け取る。ＯＳ３０１は、現在アクティブであるアプリケーション３０２に印刷実行メッセージを送る。
【００７９】
アプリケーション３０２は、そのメッセージをＯＳ３０１が認識できるコマンドに変換して、印刷するデータやコマンドのメッセージをＯＳ３０１に送る。ＯＳ３０１は、ドライバ３０３の認識できるコマンドに変換して、ドライバ３０３にメッセージを送る。
【００８０】
ドライバに初期化用のメッセージが送られてきたら、図１３のフローチャートが始まる。まず、初期化として、合成テーブルデータを格納するメモリバッファ３０６、イメージを合成するための合成用メモリ３０８をアロケートして、内容をクリアしておく（ステップＳ１３０１）。
【００８１】
ドライバは、ＯＳから送られてくるコマンドを取得して解析する（ステップＳ１３０２）。ステップＳ１３０３で、解析結果からページ終了コマンド検出し、ページ終了の場合はステップＳ１３０８に進み、それ以外のコマンドならステップＳ１３０４へ進む。
【００８２】
ステップＳ１３０４では、コマンドを中間データに変換し、ステップＳ１３０５で合成条件を確認する（図１５で詳細に説明する）。ステップＳ１３０６では、ステップＳ１３０５の確認結果から合成可能データか否かが判定される。合成可能データであればステップＳ１３０７へ処理を回す。ステップＳ１３０７では、メモリバッファ３０６の合成テーブルデータにイメージ情報をイメージ本体と共に保存し、ステップＳ１３０２に戻って次の命令を取得する。
【００８３】
一方、ステップＳ１３０６で合成不可能と判断したデータは、ステップＳ１３０９に進む。ステップＳ１３０９では、フラッシュ処理（図１４で詳細に説明する）を行い、ステップＳ１３０２に戻って次の命令を取得する。
【００８４】
ステップＳ１３０３の判断でページ終了の場合は、ステップＳ１３０８で、合成テーブルデータのフラッシュ処理（同じく図１４で詳細を説明する）を行う。ステップＳ１３１０では、ステップＳ１３０１で確保したメモリを開放して処理を終了する。
【００８５】
（合成テーブルデータのフラッシュ処理の手順例）
図１４は、図１３のステップＳ１３０８およびＳ１３０９で行なう合成テーブルデータのフラッシュ処理のフローチャートである。
【００８６】
ステップＳ１４０１では、メモリバッファ３０６中の合成テーブルデータのrclUniImgAreaの値を使って、合成に必要なビットマップ領域を合成用メモリ３０８に確保する。ステップＳ１３０２で、合成用メモリ３０８に確保したビットマップに、合成テーブルデータに登録されているイメージ情報９１１を登録順に描画する。ステップＳ１４０３で、合成用メモリ３０８上で合成したビットマップデータからＰＤＬコマンドを作成して、プリンタに送出する。
【００８７】
ステップＳ１４０５では、現在処理中の中間データが合成で高速化すると判断されたイメージデータの場合はステップＳ１４０７へ進み、高速化しないと判断されたデータならステップＳ１４０６へ進む、
ステップＳ１４０６では、現在処理中の中間データをＰＤＬコマンドに変換して、プリンタに送出する。一方、ステップＳ１４０７では、中間データをメモリバッファ３０６に保存する。
【００８８】
そして、合成テーブルデータのフラッシュ処理を終了してリターンする。
【００８９】
（合成条件確認処理の手順例）
図１５は、図１３のステップＳ１３０５で行なう合成条件確認処理のフローフローチャートである。
【００９０】
ステップＳ１５０１では、Ａ式により、イメージに合成することで高速化が可能か否かを判断する。イメージに合成することで高速化が可能と判断された時は、ステップＳ１５０２へ進み、高速化できないと判断された時はステップＳ１５０７へ進む。
【００９１】
ステップＳ１５０２では、メモリバッファ３０６中の合成テーブルデータに保存済みイメージデータがあるか否かを判断する。保存済みイメージデータがある場合はステップＳ１５０３へ進み、保存済みイメージデータがない場合は、ステップＳ１５０６へ進む。
【００９２】
ステップＳ１５０３では描画属性を確認し、下地を使う描画命令か否かを判断する。下地を使う描画命令の場合はステップＳ１５０４へ進み、下地を使う描画命令でなければステップＳ１５０５に進む。、
ステップＳ１５０４では、処理中の描画命令が保存済みイメージと重なるかどうかの確認を行い、重ならない場合はステップＳ１５０５へ進み、重なる場合は合成不可能なのでステップＳ１５０７へ進む。
【００９３】
ステップＳ１５０５では、保存済みイメージと描画属性（ｒｏｐ値やＣＬＩＰ値など）が同じであるかを確認し、同一種類であればステップＳ１５０６へ進み、異なっている場合はステップＳ１５０７へ進む。
【００９４】
ステップＳ１５０６で合成可能であることを決定する。一方、ステップＳ１５０７で合成不可能であることを決定する。例えば、フラグとして主記憶装置１０２内に確保された領域に記憶する。
【００９５】
上記処理をまとめると、合成可能の条件は、(1)保存済みイメージが無い場合、(2)保存済みイメージが有る場合で下地を使わず属性が同じ場合、(3)保存済みイメージが有る場合で下地を使うが重なりが無く属性が同じ場合、である。この３つの条件以外であれば、合成不可能と判断される。
【００９６】
以上の通り、プリンタドライバは、ＯＳから受け取った描画命令を逐次合成するかどうかを判断して中間データ保存する。合成条件に合わない描画命令を受け取った時は、それまで保存した中間データをビットマップ空間に描画合成する。描画合成したビットマップから印刷命令を作成し、即座にプリンタに送出するため、プリンタとの並列処理も可能である。
【００９７】
なお、プリンタドライバで、ＯＳから渡される描画命令や中間データから変換されるプリンタへの送信コマンドを、ＰＤＬ描画コマンドとしたが、必ずしもＰＤＬ描画コマンドである必要はない。例えば、デバイス非依存の描画コマンド、あるいは変換せずにＯＳから渡される描画命令としても、本発明は成立し同様の効果を奏する。
【００９８】
また、本発明は、複数の機器（例えばホストコンピュータ、インターフェース機器、プリンタなど）から構成されるシステムあるいは統合装置に適用しても、ひとつの機器からなる装置に適用してもよい。
【００９９】
又、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給する。そして、そのシステムあるいは装置のコンピュータ（またはu CPUやMPU）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
【０１００】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１０１】
又、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけではない。そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（OS）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１０２】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれる。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行う。このような処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１０３】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図１】
0005759511.tif 000002
【図２】
0005759511.tif 000003
【図３】
0005759511.tif 000004
【図４】
0005759511.tif 000005
【図５】
0005759511.tif 000006
【図６】
0005759511.tif 000007
【図７】
0005759511.tif 000008
【図８】
0005759511.tif 000009
【図９】
0005759511.tif 000010
【図１０】
0005759511.tif 000011
【図１１】
0005759511.tif 000012
【図１２】
0005759511.tif 000013
【図１３】
0005759511.tif 000014
【図１４】
0005759511.tif 000015
【図１５】
0005759511.tif 000016