説明

ラスタ画像を生成する装置、ラスタ画像生成方法、およびプログラム

【課題】 レンダリング処理、特に合成処理の高速化を図る。
【解決手段】 ラスタ画像データの画像領域を分離する。色データが閾値以上同一色の画像領域を単色の色データに変換する。画像領域毎に合成処理の処理手順を切り替える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ラスタ画像を生成する装置、ラスタ画像生成方法、およびプログラムに関する。
【背景技術】
【0002】
レンダリング処理における合成処理とは、前面画像と背面画像を合成して結果の画像を形成する処理である。合成処理の方法は、非特許文献1により開示されている。非特許文献1には、12個の合成演算子を体系化し、透過合成処理に対応した合成処理の方法が開示されている。
【0003】
また、アルファブレンド処理におけるCPUの負荷を軽減して処理の高速化を図る技術として特許文献1がある。特許文献1には、各画像要素の画素値とアルファ値を夫々ラン形式で生成し、生成されたラン形式のデータを伸長し、画素値とアルファ値を1画素毎に合成演算を行う方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008−228168号公報
【非特許文献】
【0005】
【非特許文献1】T.Porter and T.Duff:“Compositing Digital Images”,Computer Graphics,Vol.18,No.3,ACM 1984.
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述の如く、従来技術は、ラスタ画像の合成処理を画素値とアルファ値の1画素毎に行っている。そのため、同一の画素値が連続しているラスタ画像データであっても、1画素毎に合成演算が行われる。これは、ラスタ画像の合成対象となるオブジェクトによっては、無駄な合成演算が行われることを意味する。
【0007】
本発明は、上述の課題を解決するための装置、およびラスタ画像生成方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一実施形態に係る装置は、単色のオブジェクトとビットマップのオブジェクトの2つのオブジェクトを合成する場合に、該2つのオブジェクトが重なる領域における各画素位置の画素値を、画素位置毎に合成演算して求める演算手段と、ラスタ画像を単色のオブジェクトとビットマップのオブジェクトとに分離する分離手段とを有し、前記演算手段は、前記分離手段により分離された単色の塗り情報のオブジェクトと、該単色の塗り情報のオブジェクトとは異なる単色の塗り情報のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトの塗り情報の合成演算を一度行い、該2つのオブジェクトが重なる領域における各画素位置の画素値を前記合成演算の結果とすることを特徴とする。
【発明の効果】
【0009】
本発明によれば、同一の画素値が連続しているラスタ画像データに対し、合成演算の回数を削減してレンダリング速度の高速化を図ることができる。
【図面の簡単な説明】
【0010】
【図1】実施例1における従来の合成処理の例を示す図。
【図2】実施例1における画像処理装置100の構成を示す図。
【図3】実施例1におけるラスタ画像処理部(RIP)103によるラスタ画像生成処理のフローチャート。
【図4】実施例1におけるラスタ画像処理部(RIP)103の各種機能を示す図。
【図5】実施例1における画像領域分離部906による像域分離処理のフローチャート。
【図6】実施例1におけるオブジェクトに対してスキャンライン(水平線)が交差している様子を示す図。
【図7】実施例1におけるジョブデータ生成部903により生成されたジョブデータの構造を示す図。
【図8】実施襟1における画像記憶部902による像域分離処理から画像圧縮するまでの処理のフローチャート。
【図9】実施例1における画像読込部904による画像解凍からジョブデータをマージするまでの処理を示すフローチャート。
【図10】実施例1におけるマージ処理後のジョブデータの構造を示す図。
【図11】実施例1におけるジョブデータマージ部912によるマージ処理により更新されたジョブデータの構造を示す図。
【図12】実施例1におけるS203のレンダリング処理のフローチャート。
【図13】実施例2におけるラスタ画像処理部(RIP)1200の構成を示す図。
【図14】実施例2におけるS506.5による解像度変更処理を示すフローチャート。
【図15】実施例3におけるラスタ画像処理部(RIP)1500の構成を示す図。
【図16】実施例3におけるレンダリング部1500による量子化処理を示す図。
【発明を実施するための形態】
【0011】
以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。
【実施例1】
【0012】
始めに、合成処理について説明する。図1は、合成処理の例を図示化したものである。図1(A)は、単色の色データ同士を合成した場合の合成処理を示している。具体的には、例えば、単色の色データがオブジェクトに対して定義されているオブジェクト同士が挙げられる。また、図1(B)は、ラスタ画像データと単色の色データを合成した場合の合成処理を示している。図1(A)は、互いに単色の色データであるので、合成演算は一回で済んでいる。なぜなら、2つの図形が重なる領域は、全て同じ色データとなるからである。しかし、図6(B)は、一方がラスタ画像データであるため、合成処理を行う場合には画素位置毎に合成演算を行う必要がある。なぜなら、ラスタ画像は単色の色データの画像とは異なり、ラスタ画像の全ての画素位置が同じ色データではない可能性があるからである。そのため、1画素毎に合成演算を行わなくてはならない。結果、ラスタ画像を合成しない場合と比較してレンダリング速度の低下が起こる。
【0013】
そこで実施例1では、画像領域の広い範囲において単一色が続くラスタ画像と、単色の色データを合成する場合に、従来よりも合成演算回数を減らすことが可能になる方法を開示する。
【0014】
ここで、実施例1において使われる用語について説明する。オブジェクトのタイプには、ラスタ画像、フラットグラフィックが存在する。ラスタ画像とは、例えば、BMP、JPG等の写真データを始めとする、ビットマップグラフィックスに分類されるオブジェクトのことを指す。実施例1におけるフラットグラフィックスとは、ベクタグラフィックスであって、オブジェクトに対して単一色の色データが定義されたオブジェクトのことを指す。実施例1では、このオブジェクトのことを単色のオブジェクトと呼ぶ。また、その他のオブジェクトのタイプも複数存在し、例えば、グラデーショングラフィックス、テキスト等が挙げられる。
【0015】
また、後述する像域分離処理を実行することで、ラスタ画像は、フラットフィル部、ビットマップ部の2つの画像領域の内、少なくとも1つの画像領域に分離される。分離された夫々の画像領域は、別々のオブジェクトとして扱われる。即ち、オブジェクトであるラスタ画像は、複数のオブジェクトに分離されることになる。そのため、フラットフィル部をフラットフィルオブジェクト、ビットマップ部をビットマップオブジェクトとも呼ぶ。
【0016】
以下、図2を参照して実施例1における画像処理装置の構成について詳細に説明する。図2は、実施例1における画像処理装置100の構成を示す図である。
【0017】
画像処理装置100は、描画命令に基づき画像を形成、および出力する装置であり、入力部101、解釈部(インタプリタ)102、ラスタ画像処理部(RIP)103、画像形成部104、出力部105から構成される。
【0018】
入力部101は、画像処理装置100に接続されている外部装置から描画命令を受け付ける箇所である。解釈部(インタプリタ)102は、入力部101で受け付けた描画命令を解釈する箇所である。実施例1における描画命令の形式は、PDL(Page Description Language)である。 ラスタ画像処理部(RIP)103は、解釈部(インタプリタ)102により解釈された描画命令を基にレンダリングを行い、ラスタ画像を生成する。画像形成部104はラスタ画像処理部(RIP)103により生成されたラスタ画像に対し、ハーフトーン処理等の画像処理を施して出力画像を形成する。出力部105は、画像形成部104により形成された出力画像を出力する。なお、実施例1における画像処理装置は、MFP(Multi Function Printer)であり、出力部105は、記録紙に印刷を行うことで出力画像を出力する。なお、解釈部(インタプリタ)102は、インタプリタを実現するプログラムをCPUが実行することで実現される。また、ラスタ画像処理部(RIP)103は、ラスタ画像処理部を実現するプログラムをCPUが実行することで実現される。また、画像形成部104は、画像形成プログラムをCPUが実行することで実現される。なお、夫々のプログラムはRAM(Random Access Memory)にロードされ、CPUが実行することで実現される。また、ラスタ画像処理部(RIP)103は、CPUではなくラスタ画像を生成するための専用のハードウェアで実現されても良い。例えば、ASIC(Application Specific Integrated Circuit)にラスタ画像処理部の機能を実行させることが考えられる。
【0019】
次に、ラスタ画像(RIP)103によるラスタ画像の生成処理について詳細に説明する。図3は、ラスタ画像処理部(RIP)103によるラスタ画像生成処理を示すフローチャートである。始めに、ラスタ画像処理部(RIP)103は、図1の解釈部(インタプリタ)102で解釈した描画命令に基づき、オブジェクトを生成する(S201)。なお、上述の如く、オブジェクトの種類(塗りタイプ)は複数存在し、夫々のオブジェクトはいずれかのオブジェクトの種類(塗りタイプ)に分類される。
【0020】
また、図3に示すように、複数のオブジェクトの描画領域が重なることもある。例えば、図3においては、ひし形20が背面画像、丸21が前面画像として重なっている。ひし形20、および丸21が透過合成として合成されていない場合、重なっている部分は丸21の色データとして描画される。透過合成の場合は、ひし形20、および丸21の透過合成演算により算出された色データが描画される。
【0021】
続いて、S201において生成されたオブジェクトの座標情報を基に、ラスタ画像処理部(RIP)103は、夫々のオブジェクトのエッジを検出しジョブデータを生成する(S202)。最後に、S202において生成されたジョブデータを基に、ラスタ画像処理部(RIP)103は、ラスタ画像をレンダリングする(S203)。なお、ジョブデータについては、後述する。
【0022】
次に、ラスタ画像処理部(RIP)103の内部構成について詳細に説明する。図4は、ラスタ画像処理部(RIP)103の各種機能を示す図である。ラスタ画像処理部(RIP)103は、描画描画オブジェクト生成部901、画像記憶部902、ジョブデータ生成部903、画像読込部904、レンダリング部905、画像記憶領域909から構成される。描画オブジェクト生成部901は、解釈部(インタプリタ)102により解釈された描画命令を受け付けて、オブジェクトを生成する箇所である。
【0023】
次に画像記憶部902について説明する。画像記憶部902は、画像領域分離部906、圧縮方法選択部907、画像圧縮部908から構成される。画像領域分離部906は、ラスタ画像のオブジェクトを、フラットフィル部とビットマップ部とに像域分離する。なお、分離方法については後述する。
【0024】
圧縮方法選択部907は、像域分離された各画像領域に対して、夫々の画像領域に適した圧縮方法を選択する。実施例1において、ビットマップ部はJPEGが圧縮方法として選択されるものとする。圧縮処理部908は、像域分離された各画像領域を、選択した圧縮方法に従って画像圧縮する。圧縮された各画像領域におけるラスタ画像データは、画像記憶領域909に記憶される。なお、フラットフィル部の圧縮方法については後述する。
【0025】
次に、ジョブデータ生成部903を説明する。ジョブデータ生成部903は、エッジ検出部910、ジョブデータ構築部911から構成される。エッジ検出部910は、オブジェクトのエッジを検出する。ジョブデータ構築部911は、辺情報と、塗り合成ストアと、塗り情報とから構成されるジョブデータを生成する。なお、ジョブデータ生成部903による、ジョブデータ生成処理については後述する。
【0026】
次に、画像読込部904を説明する。画像読込部904は、画像解凍部914、塗り情報変換部913、ジョブデータマージ部912から構成される。画像解凍部914は、画像記憶領域909に保存されているラスタ画像を解凍する。塗り情報変換部913は、画像解凍部914により解凍されたラスタ画像を、画像領域別に等価な塗り情報へ変換する。具体的には、フラットフィル部の塗り情報は、等価かつ単色の色データへ変換される。また、実施例1では、フラットグラフィックスと同様に、変換されたフラットフィル部を単色のオブジェクトとして扱う。さらに、ビットマップ部の塗り情報は、ビットマップ部の色データへと変換される。なお、ビットマップ部の色データは、分離されラスタ画像の一部であるので、各画素位置に対して色データが定義されている。よって、ビットマップ部の色データと言うと、分離されたラスタ画像(ビットマップ部)における各画素位置の色データと言える。
【0027】
ジョブデータマージ部912は、塗り情報変換部913により変換されたラスタ画像の塗り情報を、ジョブデータ生成部903により生成されたジョブデータにマージする。これにより、ジョブデータの辺情報と、塗り合成ストアと、塗り情報とを更新する。なお、ジョブデータマージ処理については後述する。
【0028】
レンダリング部905を説明する。レンダリング部905は、ジョブデータ評価部916、塗り描画部915から構成される。ジョブデータ評価部916は、それぞれの塗り合成レコードに保持された塗りノード群を、単一の塗りノードへとするために合成演算を行う。塗り描画部915は、塗り領域の各画素位置におけるラスタ画素値を、ジョブデータ評価部916により合成演算された値とし、対応するラスタ画像の記憶領域に書き込む。全ての塗り領域について本処理を行うことにより、ラスタ画像が生成される。
【0029】
次に、画像領域分離部906による像域分離処理について詳細に説明する。像域分離処理は、ラスタ画像を1ライン毎に読み込むことから開始される。なお、画像領域分離部906は、ラスタ画像を画像処理装置100の主走査方向に対し1ライン毎に読み込むものとする。図5は、像域分離処理を示すフローチャートである。
【0030】
始めに、特定のスキャンラインを読み込み、スキャンラインのループを開始する(S1701)。S1701において、上端のスキャンラインを読み込み、読み込んだスキャンラインの左端のピクセルを読み込み、ピクセルのループを開始する(S1702)。S1702において、スキャンラインの左端のピクセルを読み込んだ場合、読み込んだピクセルが、左隣のランと同色か否かを判定する(S1703)。S1703において、左隣のランと同色と判定された場合、左隣のランに、読み込んだピクセルを加える(S1704)。S1703において、左隣のランと同色と判定されなかった場合(読み込んだピクセルがスキャンラインにおいて一番左だった場合も含む)、読み込んだピクセルを新しいランとする(S1705)。S1704、またはS1705の処理を終えた場合、読み込んだピクセルから次のピクセルへ移動する(S1706)。移動したピクセルの色データを読み込み、S1702から処理を開始する。S1706において、読み込んだスキャンライン上の全てのピクセルに対し、S1704、またはS1705の処理を施した場合、S1707へ処理を移す。
【0031】
S1707において、読み込んだスキャンラインにおける左端のランを読み込み、ランのループを開始する(S1708)。S1708において、読み込んだランと同じ色のランが、一つ前のスキャンライン上に存在し、かつお互いが隣接しているか否かを判定する(S1708)。S1708において、隣接していると判定された場合、読み込んだランを一つ前のスキャンライン上のランに加え、像域を更新する(S1709)。S1708において、隣接していると判定されなかった場合、読み込んだランを新しい像域とする(S1710)。S1709、またはS1710の処理を終えた場合、読み込んだランから次のランへ移動する(S1711)。移動したランにおける色データを読み込み、S1707から処理を開始する。S1711において、読み込んだスキャンライン上の全てのランに対し、S1710、またはS1711の処理を施した場合、S1712へ処理を移す。
【0032】
S1712へ処理を移した場合、読み込んだスキャンラインから次のスキャンラインへ移動する(S1712)。移動したラインにおけるスキャンラインを読み込み、S1701から処理を開始する。S1712において、ラスタ画像における全てのスキャンラインを読み込んだ場合、S1713へ処理を移す。S1713へ処理を移した場合、ラスタ画像の夫々の像域におけるピクセル数をカウントし、ピクセル数が閾値を越える(同一色が閾値以上連続している)像域をフラットフィル部、閾値を越えなかった(同一色が閾値以上連続していない)像域をビットマップ部とする。なお、フラットフィル部、ビットマップ部は、オブジェクトであるラスタ画像を分離したことで、夫々、別々のオブジェクトとして扱われる。以上、説明したように像域分離処理を行う。
【0033】
次に、ジョブデータ生成部903によるジョブデータ生成処理について詳細に説明する。ジョブデータ生成処理は、エッジ検出処理でオブジェクトの輪郭点を抽出し、ジョブデータを生成する処理のことを指す。図6は、オブジェクトに対してスキャンライン(水平線)が交差している様子を示す図である。
【0034】
図6では、図中の矢印で示すように(4ライン目)、4つの輪郭点が抽出されている。図6で示すように、スキャンラインとオブジェクトが交差する点(ピクセル)が、輪郭点とみなされる。なお、図6において、P301、P302、P303、P304が輪郭点として抽出されている。図6に示すように、P302、およびP303のように、オブジェクト同士が重なる領域についても新たな輪郭点が抽出されることになる。この輪郭点を抽出する処理を、描画範囲の各スキャンライン(図6においては、1ライン目から10ライン目まで)に対して行うことで、オブジェクトによって区分けされる領域(塗り領域)を検出することが可能となる。
【0035】
図6を基に塗り領域の具体例を述べると、左端からP301までが一つの塗り領域になり、第1の塗り領域となる。また、P301からP302までが一つの塗り領域になり、第2の塗り領域となる。また、P302からP303までが一つの塗り領域になり、第3の塗り領域となる。また、P303からP304までが一つの塗り領域となり、第4の塗り領域になる。また、P304から右端までが一つの塗り領域になり、第5の塗り領域となる。なお、第1の塗り領域と第5の塗り領域は同じ背景色が塗られるため、第5の塗り領域を第1の塗り領域としてみなす。各スキャンライン毎に塗り領域を確定していき、夫々のスキャンラインにおける同じ塗り領域同士を合わせて、塗り領域を更新していく。
【0036】
図7は、ジョブデータ生成部903により生成されたジョブデータの構造を示している。ジョブデータは、辺情報と、塗り合成ストアと、塗り情報とから構成される。なお、図7の画像データは、前面画像であるフラットグラフィックのオブジェクトと、背面画像であるラスタ画像のオブジェクトが、透過で重なっている。
【0037】
始めに、辺情報について詳細に説明する。ジョブデータにおける辺情報には、上述の塗り領域の情報が保持されている。具体的には、あるY座標における、夫々の塗り領域の開始位置と終了位置の情報が保持されている。具体的に図6を用いて述べると、4ライン目(Y座標が4)における第1の塗り領域の開始位置は1、終了位置は2として保持されている。なお、第5の塗り領域の開始位置10、終了位置12も第1の塗り領域として保持されている。また、3ライン目の1から2までの領域、同じく3ライン目の11から12までの領域も第1の領域として保持される。これにより、夫々の塗り領域における全ての画素位置を特定することができる。また、辺情報における各塗り領域は、後述する塗り合成ストアのレコード(塗り合成レコード)を参照する。図7の例では、辺情報401の塗り領域は、フラットグラフィックタイプとラスタ画像タイプのオブジェクト要素が重なる塗り領域を表し、塗り合成レコード403を参照している。
【0038】
次に、塗り合成ストアについて詳細に説明する。塗り合成ストアは、複数の塗り合成レコードから構成される。塗り合成レコードは、1、または複数の塗りノードで構成される。塗りレコードは、対応する塗り領域内に存在するオブジェクトの重なりの順序をスタックで保持している。例えば、図4における塗り合成レコード403を例に挙げると、グレーのグラフィックのオブジェクトの方が、ラスタ画像のオブジェクトよりも前面であるため、前面(左側)に保持されている。各塗りノードは、後述する塗り情報を参照している。
【0039】
次に、塗り情報について詳細に説明する。塗り情報は、オブジェクトの塗り方法を表現する。即ち、塗り情報は、色データから構成されていると言える。オブジェクトタイプがフラットグラフィックスであれば、フラットグラフィックスの塗り情報は単色の色データであり、ラスタ画像であれば、ラスタ画像の塗り情報はラスタ画像の色データとなる。なお、ラスタ画像は各画素位置に対して色データが定義されているので、ラスタ画像の色データと言うと、各画素位置の色データのことを指す。図7の例では、塗りノード404はグレーの色データ406を参照し、塗りノード405はラスタ画像データ407を参照している。
【0040】
次に、ジョブデータマージ処理について説明する。塗り合成レコードにラスタ画像の描画オブジェクトを含むとき、その塗り合成レコード、およびそれを参照する塗り領域がマージ処理の対象となる。なお、ここでは便宜上、ラスタ画像の描画オブジェクトをラスタ画像要素、それ以外の描画オブジェクトを非ラスタ画像要素とする。
【0041】
第一ケースとして、塗り合成レコードにラスタ画像要素一つのみが存在していた場合について述べる。まず、画像領域分離における画像領域の境界を、描画領域内のピクセル位置にマップする。マップ処理は、例えば、アフィン変換によってスケーリングを行う。
【0042】
次に、マップした境界で区分けされた領域を新しい塗り領域として新規の辺情報を作成する。塗り領域は以下のような塗り合成レコードを参照する。区分けした領域がフラットフィル部だったならば、変換した単色の色データを参照する塗りノード一つを保持する。区分けした領域がビットマップ部だったならば、領域のラスタ画像データを参照する塗りノード一つを保持する。最後に、区分けされた領域全てに対して新規の辺情報作成が完了したら、マージ前の該塗り合成レコードを塗り合成ストアから削除する。以上が、第一ケースのマージ処理である。
【0043】
第二ケースとして、塗り合成レコードにラスタ画像要素一つと、非ラスタ画像要素一つ以上とが存在していた場合について述べる。新規の辺情報を作成する直前までは、第一ケースと同じ処理であるが、辺情報の作成方法、具体的には、塗り合成レコードの塗りノードの構成が異なる。第二ケースでは、第一ケースと同様のフラットフィル部及びビットマップ部に対応する塗りノード一つと、非ラスタ画像要素を表す塗りノード一つ以上とを塗り合成レコードに保持する。
【0044】
非ラスタ画像要素を表す塗りノードとは、マージ前の塗り合成レコードが保持していた塗りノードのうち、ラスタ画像要素を除いた塗りノードである。このとき描画オブジェクト要素の重なり順序を維持するように塗り合成レコードを構成する。区分けされた領域全てに対して新規の辺情報作成が完了したら、マージ前の塗り合成レコードを塗り合成ストアから削除する。以上が、第二ケースのマージ処理である。
【0045】
第三ケースとして、塗り合成レコードにラスタ画像要素二つ以上が存在していた場合について述べる。塗り合成レコードに非ラスタ画像要素が存在しなければ第一ケースの処理、
存在していれば第二ケースの処理を、ラスタ画像要素のいずれか一つに対して適用する。
【0046】
適用後に、残りのラスタ画像要素に対しても同様に一つずつ前記処理を適用し、全てのラスタ画像要素に対して適用が完了すれば、第三ケースのマージ処理は終了である。
【0047】
次に、画像記憶部902における像域分離処理から画像圧縮するまでの処理について詳細に説明する。図8は、画像記憶部902による像域分離処理から画像圧縮するまでの処理のフローチャートである。
【0048】
始めに、描画範囲内から最初のオブジェクトを読み込み、オブジェクトのループを開始する(S1001)。S1001において、特定のオブジェクトを読み込んだ場合、
読み込んだオブジェクトがラスタ画像であるか否かを判定する(S1002)。S1002において、ラスタ画像でないと判定された場合は、次のオブジェクトを読み込む(S1012)。S1002において、ラスタ画像であると判定された場合は、ラスタ画像を像域分離する(S1003)。S1003において、ラスタ画像を像域分離した場合、特定の画像領域を読み込み、画像領域のループを開始する(S1004)。S1004において、読み込んだ画像領域がフラットフィルであるか否かを判定する(S1005)。S1005において、フラットフィル部でないと判定された場合(実施例1においては、ビットマップ部を指す)、ビットマップ部を圧縮する(S1009)。S1005において、フラットフィル部であると判定された場合、色タイプを判定し圧縮する(S1006)。
【0049】
なお、実施例1において、色タイプはFOREGROUND、BACKGROUND、FLATの3つ存在し、FOREGROUNDはRGB値が(0、0、0)を、BACKGROUNDはRGB値が(255、255、255)を意味する。この2つのタイプの内いずれかのタイプである場合、色タイプと色データが対応しているので、色データを保持する必要はない。一方、FLATは、上述の2色以外の色データを示しているので、色データを保持する必要がある。また、実施例1における色タイプの圧縮とは、FOREGRUOUNDを00、BACKGROUNDを01、FLATを10とする2ビットの符号割り当てのことである。
【0050】
S1006において、色タイプを判定した場合、色タイプがFLATか否かを判定する(S1007)。S1007において、色タイプがFLATではないと判定されなかった場合、特定の画像領域(フラットフィル部のラスタ画像)の色タイプはFLATであるので、色データを圧縮する(S1008)。
【0051】
ここで、色タイプがFLATであるラスタ画像の色データの圧縮処理について説明する。圧縮前のラスタ画像は、色データを画素位置毎に保持している。しかし、圧縮を行うことで1ピクセル分の色データを保持する形式へ変換される。即ち、圧縮を行ったラスタ画像は、画素位置毎に色データを保持するのではなく、1ピクセル分の色データを保持する形式へと変換される。
【0052】
S1007において、色タイプがFLATではないと判定された場合、およびS1008の処理が終了した場合、次の画像領域を読み込みS1004から処理を開始する。全ての画像領域を読み込んだ場合、圧縮したデータを画像記憶領域に記憶する(S1011)。
【0053】
S1011において、ラスタ画像を圧縮したデータを画像記憶領域に記憶した場合、次の描画オブジェクトを読み込む(S1012)。次の描画オブジェクトが存在する場合は、S1001から処理を開始する。次の描画オブジェクトが存在しない場合は、処理を終了とする。
【0054】
次に、画像読込部904における画像解凍からジョブデータのマージ処理までの処理について詳細に説明する。図9は、画像読込部904による画像解凍からジョブデータをマージするまでの処理を示すフローチャートである。
【0055】
始めに、ジョブデータを基に最初のラスタ画像を特定し、特定したラスタ画像の参照情報を参照し、ループを開始する(S1101)。実施例1における参照情報は、ラスタ画像の圧縮データが存在する画像記憶領域909内のアドレスである。
【0056】
参照情報を基にラスタ画像の圧縮データを画像記憶領域909から読み込む(S1102)。S1102において、圧縮データを読み込んだ場合、画像領域を特定し、ループを開始する(S1103)。S1103において、画像領域を特定した場合、その画像領域がフラットフィル部であるか否かを判定する(S1104)。
【0057】
S1104において、フラットフィル部であると判定されなかった場合、即ち、特定した画像領域がビットマップ部であった場合、ビットマップ部の解凍を行う(S1109)。実施例1では、JPEG方式の解凍アルゴリズムで解凍することとする。S1109において、ビットマップ部の画像を解凍した場合、解凍したラスタ画像データを塗り情報とする(S1110)。即ち、ラスタ画像の画素位置毎に色データが定義されることになるので、合成の際は、画素位置毎に合成演算が行われることになる。
【0058】
S1104において、フラットフィル部であると判定された場合、色タイプの解凍を行う(S1105)。具体的には、色タイプが00をFOREGROUND、色タイプが01をBACKGROUND、色タイプが11をFLATとして解凍し読み込む。S1105において、色タイプの解凍を行い読み込んだ場合、読み込んだ色タイプがFLATであるか否かを判定する(S1106)。S1106において、色タイプがFLATであると判定されなかった場合、即ち、FOREGROUND、またはBACKGROUNDと判定された場合、夫々のタイプが示す色データを特定した画像領域の塗り情報とする(S1108)。また、S1106において、色タイプがFLATであると判定された場合、色データの解凍を行う(S1107)。なお、色データを解凍することで、色データが何色であるかを特定することができる。S1107において、色データを解凍した場合、特定した色データを特定した画像領域の塗り情報とする(S1108)。
【0059】
S1108、またはS1110の処理を終えた場合、次の画像領域を特定しS1103から処理を開始する(S1111)。S1112において、全ラスタ画像データの全画像領域に対して塗り情報が決定された場合、ジョブデータ作成部903により作成されたジョブデータと全ラスタ画像データの全画像領域の塗り情報とをマージする(S1113)。以上説明したように、画像読込部904は画像解凍からジョブデータのマージ処理を行う。
【0060】
次に、マージ処理によるジョブデータの更新について説明する。図10は、ジョブデータマージ部912によるマージ処理により更新されたジョブデータの構造を示す図である。始めに、塗り情報の更新について説明する。画像領域分離部906、および塗り情報変換部913によって、塗り情報407は、塗り情報810、および塗り情報811に示すように分離・変換され、塗り情報が更新される。塗り情報810はフラットフィル部の色データであり、塗り情報811はビットマップ部の色データである。
【0061】
上述のように、塗り情報が更新される塗りレコードを参照している辺情報はマージ処理の対象となる。
【0062】
図11は、実施例1における、フラットフィル部、および単色の色データの合成処理の一例を示している。ラスタ画像データの画像領域をフラットフィル部及びビットマップ部に分離することになるが、図11は、2つのフラットフィル部の領域に分離される。この場合、単色の色データ同士の合成処理となるため、レンダリング処理における合成演算は塗り領域毎にそれぞれ1回ずつで済む。
【0063】
次に、レンダリング部905によるレンダリング処理について詳細に説明する。図12は、S203のレンダリング処理のフローチャートである。始めに、描画範囲内の辺情報から塗り領域を一つ特定し、Edgeに代入する(S501)。
【0064】
S501において、塗り領域を特定した(Edgeに代入した)場合、塗り領域の参照する塗り合成レコードを読み込む(S502)。S502において、塗り合成レコードを読み込んだ場合、塗り合成レコードから最前面の塗りノードを取り出し、取り出した塗りノードをResへ代入する(S503)。なお、塗り合成レコードから取り出した塗りノードは削除する。
【0065】
S503において、取り出した塗りノードをResとした場合、塗りレコードに取り出されていない塗りノードが残っているか否かを判定する(S504)。S504において、塗りレコードに取り出されていない塗りノードが残っていると判定された場合、Resの値を一時的にSrcへ代入する(S505)。S505において、Srcへ代入した場合、塗りレコードから塗りノードを取り出してDestへ代入する(S506)。S506において、Destへ代入した場合、SrcとDestに対して合成処理を行い、結果として生成された塗りノードを新しいResとする(S507)。S507の処理の後は、S504に戻る。なお、このS507において、フラットフィル部と単色の色データを合成する場合は、合成演算を一度行うだけで済む。また、それ以外の場合、例えば、ビットマップ部と単色の色データを合成する場合は、画素位置毎に合成演算を行うことになる。
【0066】
S504において、塗りレコードに取り出されていない塗りノードが残っていると判定されなかった場合、S508へ処理が移る。なお、塗りレコードが空になっていれば、最終的な合成結果の塗りノードはResにおかれていることになる。続いて、塗り領域内から画素位置を一つ特定し、Posへ代入する(S508)。
【0067】
S508において、画素位置を特定した(Posへ代入した)場合、特定した画素位置におけるラスタ画素値を合成結果Resから読み込みValへ代入する(S509)。S509において、合成結果ResをValへ代入した場合、Posに対応するラスタ画像の画素値をValにするため、ラスタ画像の記憶領域にValの値を書き込む。次に、塗り領域内の別の画素位置を特定する(S511)。特定した後、S508から処理を再び開始する。塗り領域の全ての画素位置についてラスタ画素値の書き込みが終了したら、次の塗り領域の処理へ移る(S512)。描画範囲内の全ての塗り領域について処理を行うことより、描画範囲におけるレンダリング処理すなわちラスタ画像の生成が完了する。以上が、レンダリング処理の説明になる。
【0068】
以上説明したように、実施例1ではラスタ画像をフラットフィル部とビットマップ部に分離し、フラットフィル部に対する合成演算の回数を削減している。これにより、レンダリング処理の高速化を図ることが可能となる。
【実施例2】
【0069】
次に実施例2について説明する。実施例1はラスタ画像のフラットフィル部に対してレンダリング処理、具体的には、合成処理の高速化を目的としていた。実施例2は、フラットフィル部でない領域(実施例1におけるビットマップ部)に対しても、レンダリング処理の高速化を図るものである。
【0070】
具体的には、ビットマップ部と単色の色データを合成する処理において、透明度が所定の条件を満たす場合に、ビットマップ部の解像度を下げる。透明度が高い透過処理では高解像度の色データが失われてしまうので、解像度を下げてもレンダリング後のビットマップ部に対するユーザの視覚的影響は少ない。そこで、実施例2では、予めビットマップ部の解像度を下げ、合成演算の対象となる画素数を削減し、レンダリング処理の高速化を図ることを目的とする。
【0071】
始めに、実施例2におけるラスタ画像処理部(RIP)1200の構成について説明する。図13は、実施例2におけるラスタ画像処理部(RIP)1200の構成を示す図である。実施例1と異なるのは、レンダリング部1205に、解像度変更判定部1217、および解像度変更部1218が追加されている点である。
【0072】
解像度変更判定部1217は、塗り情報におけるラスタ画像(ビットマップ部)の解像度を変更すべきか否かを判定する。解像度変更部1218は、解像度変更判定部1217により解像度を変更すべきと判定された場合に、ラスタ画像(ビットマップ部)の解像度を変更する。
【0073】
次に、解像度変更処理について説明する。実施例2では、図12のフローチャートのS506とS507の間にS506.5というステップが加わる。S506.5は、SrcとDestの解像度を変更するステップである。
【0074】
S506.5の処理について説明する。図14は、S506.5による解像度変更処理を示している。図14(A)のステップS1401、およびS1402でSrcとDestを別々に解像度変更する。解像度変更処理をさらに詳細に説明したフローチャートが図14(B)である。
【0075】
始めに、NodeにSrc、またはDestのいずれか1つの塗りノードを代入し、Nodeの参照する塗り情報をFillとおく(S1403)。S1403において、NodeにFillを代入した場合、Fillがラスタ画像データであるか否かを判定する(S1404)。S1404において、ラスタ画像であると判定された場合、Fillの重要度Uを計算する(S1405)。重要度とは、各ラスタ画像がレンダリング後のラスタ画像にどの程度影響を与えるかを表す数値である。計算方法は例えば次のようになる:
U=W1(Fill)/S1(Fill)
W1は、ラスタ画像の透明度を重み掛けする関数であり、α値×定数で定義される。S1はラスタ画像データの画素数を求める関数である。以上により計算された重要度Uは、透明度の重みが画素数に比例するというモデルにおいて、ラスタ画像データにおける一画素あたりの透明度の重みを表す。
【0076】
さらに、ステップS1406で解像度変更する重要度の閾値Vを計算する(S1406)。計算方法は例えば次のようになる:
V=W2(Edge)/S2(Edge)
重要度の閾値Vは、Edgeの塗り領域で描画する一画素あたりの透明度の重みを表す。W2、およびS2は、それぞれW1及びS1と同様に定義される。ただし、塗り領域そのものに透明度が設定されていない実施形態のときには、W2は引数によらず定数で定義される。ステップS1407でUがVより大きい、即ち、ラスタ画像の透明度の重みが塗り領域で描画する透明度の重みより大きいならば、解像度の変更率Rを計算する(S1408)。Rは次の式で与えられる:
R=√(V/U)
最後に解像度をR倍する(S1409)。以上が、解像度変更の処理の説明である。
【0077】
以上のように、解像度を低解像度に変更し、ラスタ画像の色データを間引くことで、フラットフィル部でない領域に対してもレンダリング処理の高速化を図ることが出来る。なお、フラットフィル画像の透明度が所定値よりも高い場合に、ビットマップ部の解像度を変更して合成演算を行っても実現可能である。
【実施例3】
【0078】
次に実施例3について説明する。実施例3は、実施例2と同様に、フラットフィル部でない領域(実施例1におけるビットマップ部)に対しても、レンダリング処理の高速化を図るものである。
【0079】
具体的にはビットマップ部と単色の色データを合成する処理において、透明度に関する所定の条件を満たす場合に、ビットマップ部の色データを量子化する。透明度が高い透過処理では高精細な色データが失われてしまうので、ビットマップ部の色データを量子化しても視覚的影響は少ない。
【0080】
ここで、実施例3におけるレンダリング処理の合成演算において、合成演算の結果の画素値をRAMにキャッシュするものとする。既にキャッシュされている画素値と同じ画素値になるピクセルについては、合成演算をスキップすることでレンダリング処理の高速化を図ることが可能になる。
【0081】
始めに、実施例3におけるラスタ画像処理部(RIP)1500の構成について説明する。図15は、実施例3におけるラスタ画像処理部(RIP)1500を示す図である。実施例1と異なるのは、レンダリング部1505が色情報量子化判定部1517、および色情報量子化部1518を有しているということである。実施例3は、実施例2における解像度変更部1218、解像度変更判定部1217が、色情報量子化部1518、色情報量子化部1517に置き換わったものである。色データの量子化は、一例としてはRGB24ビットカラーをRGB16ビットカラーに量子化するということが挙げられる。このように、量子化によってビットマップ部の塗り情報である、ビットマップ部の色データは減る。
【0082】
図16(A)に示すように、実施例3を適用する前は、ビットマップ部1601と単色の色データ1602の合成演算を画素位置毎に行う。その様子をさらに詳細に示したのが図16(B)である。図16(B)では、ビットマップ部1601に含まれる画素値の部分集合1603と、単色の色データ1602の画素値1604とを画素位置毎に合成演算を行っている。合成演算の結果が画素値1605である。なお、画素値1606と画素値1604の合成演算の結果が1608になる。また、画素値1607と画素値1609とを合成した結果が1609である。
【0083】
次に、ビットマップ部の色データの色データを量子化し、合成演算処理を行う処理について説明する。始めに、ビットマップ部の色データを量子化する。これを示したのが図16(C)である。図16(C)では、ビットマップ部1601に含まれる画素値の部分集合1610は、ビットマップ部の色データが全て同じ画素値になっている。上述と同様に、画素値1613と画素値1611とを合成演算した結果が画素値1615になる。このとき、画素値1615を画素値変数1616にキャッシュしておく。なお、画素値変数1616はRAMにより実現される。
【0084】
次に、画素値1614と画素値1611とを合成演算する前に、この画素値の組み合わせが前回の合成演算と同じか否かを判定する。同じでなければ再び同様の合成演算を行い、結果の画素値を画素値変数1616に再度代入する。同じならば合成演算を行わずに、画素値変数1616に代入(キャッシュ)されている画素値を、結果として読み出す。読み出した画素値を合成演算の結果とする。例えば、画素値1613と画素値1611、画素値1614と画素値1611の組み合わせは同じなので、画素値変数1616にキャッシュされている画素値を読み出す。以上が、ビットマップ部の色データを量子化し、合成演算処理を行う処理の説明である。
【0085】
なお、量子化を行うか否かを判断する処理は、図14で示した処理と同じである。即ち、ビットマップ部の透明度が所定値を超えた場合に量子化を行う。変更点は、S1408とS1409の代わりに、量子化を行うステップが入るという点である。以上説明したように、実施例3ではフラットフィル部でない領域に対して、透明度に応じて色データの量子化、および合成演算結果のキャッシュを行うことによって、レンダリング処理の高速化を図ることが出来る。
【0086】
〔その他の実施例〕
以下のような実施例も考えられる。画像領域分離において、使用色数が閾値以下になる領域も分離候補にして、該画像領域に好適な圧縮及び解凍を実施してもよい。合成演算をSrcとDestだけでなく、3つ以上の塗りノードに対して行う処理方法でもよい。解像度変更若しくは色情報量子化の処理において、重要度の計算方法を色相毎に定義したり、重要度を用いずに透明度が閾値以上か否かを条件にしたりしてもよい。また、前記処理をSrcとDest別々に行う形態ではなく、両方に関する条件を判定してSrcとDestのいずれか若しくは両方に対して行う形態にしてもよい。さらに、実施例1、2、3を組み合わせて用いる構成にしてもよい。
【符号の説明】
【0087】
901 描画オブジェクト生成部
902 画像記憶部
903 ジョブデータ生成部
904 画像読込部
905 レンダリング部
906 画像領域分離部
907 圧縮方法選択部
908 画総圧縮部
909 画像記憶領域
910 エッジ検出部
911 ジョブデータ構築部
912 ジョブデータマージ部
913 塗り情報変換部
914 画像解凍部
915 塗り描画部
916 ジョブデータ評価部
1217 解像度変更判定部
1218 解像度変更部
1517 色情報量子化判定部
1518 色情報量子化部

【特許請求の範囲】
【請求項1】
各画素位置に対し色データが定義されているラスタ画像から、同色の色データが閾値以上連続していない領域の各画素位置に対して色データが定義されているビットマップオブジェクトと、同色の色データが閾値以上連続している領域に対して色データが定義されているフラットフィルオブジェクトとを生成する生成手段と、
前記生成手段により生成されたビットマップオブジェクトと、オブジェクトに対して色データが定義されている単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトが重なる領域の前記ビットマップオブジェクトの色データと前記単色のオブジェクトの色データとの合成演算を画素位置毎に行い、合成演算された夫々の色データを該2つのオブジェクトが重なる領域における各画素位置に書き込み、
前記生成手段により生成されたフラットフィルオブジェクトと前記単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトの色データの合成演算を一度行い、合成演算された色データを該2つのオブジェクトが重なる領域における各画素位置に書き込む描画手段とを有する装置
【請求項2】
前記生成手段により生成されたビットマップオブジェクトが描画される領域に係る透明度が所定値よりも大きい場合に、該ビットマップオブジェクトの解像度を下げる解像度変更手段と、
前記描画手段は、前記生成手段により生成されたビットマップオブジェクトと単色のオブジェクトの2つのオブジェクトを合成する場合は、前記解像度変更手段により解像度を変更された前記ビットマップオブジェクト、および前記単色のオブジェクトの2つのオブジェクトが重なる領域の前記ビットマップオブジェクトの色データと前記単色のオブジェクトの色データとの合成演算を画素位置毎に行い、合成演算された画素値を各画素位置に書き込み、
前記解像度変更手段は、前記解像度変更手段により変更された前記ビットマップオブジェクト、および前記単色のオブジェクトの合成結果のオブジェクトの解像度を上げることを特徴とする請求項1に記載の装置。
【請求項3】
前記生成手段により生成されたビットマップオブジェクトが描画される領域に係る透明度が所定値よりも大きい場合に、該ビットマップオブジェクトの色データを量子化する量子化手段と、
前記描画手段は、前記生成手段により生成されたビットマップオブジェクトと単色のオブジェクトの2つのオブジェクトとを合成する場合は、前記量子化手段により色データを量子化された前記ビットマップオブジェクト、および前記単色のオブジェクトの2つのオブジェクトが重なる領域の前記ビットマップオブジェクトの色データと前記単色のオブジェクトの色データとの合成演算を行い、合成演算された画素値を記憶し、
前記合成演算された画素値と同じ画素値になる画素に対しては、合成演算を行わず前記記憶した画素値を書き込むことを特徴とする請求項1または2に記載の装置。
【請求項4】
各画素位置に対し色データが定義されているラスタ画像から、同色の色データが閾値以上連続していない領域の各画素位置に対して色データが定義されているビットマップオブジェクトと、同色の色データが閾値以上連続している領域に対して色データが定義されているフラットフィルオブジェクトとを生成する生成手段と、
前記生成手段により生成されたビットマップオブジェクトと、オブジェクトに対して色データが定義されている単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトが重なる領域の前記ビットマップオブジェクトの色データと前記単色のオブジェクトの色データとの合成演算を画素位置毎に行い、合成演算された夫々の色データを該2つのオブジェクトが重なる領域における各画素位置に書き込み
前記生成手段により生成されたフラットフィルオブジェクトと前記単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトの色データの合成演算を一度行い、合成演算された色データを該2つのオブジェクトが重なる領域における各画素位置に書き込む描画手段と、
前記描画手段により各画素位置に書き込まれた結果を印刷する印刷手段とを有する印刷装置。
【請求項5】
生成手段は、各画素位置に対し色データが定義されているラスタ画像から、同色の色データが閾値以上連続していない領域の各画素位置に対して色データが定義されているビットマップオブジェクトと、同色の色データが閾値以上連続している領域に対して色データが定義されているフラットフィルオブジェクトとを生成し、
描画手段は、前記生成手段により生成されたビットマップオブジェクトと、オブジェクトに対して色データが定義されている単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトが重なる領域の前記ビットマップオブジェクトの色データと前記単色のオブジェクトの色データとの合成演算を画素位置毎に行い、合成演算された夫々の色データを該2つのオブジェクトが重なる領域における各画素位置に書き込み、
前記生成手段により生成されたフラットフィルオブジェクトと前記単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトの色データの合成演算を一度行い、合成演算された色データを該2つのオブジェクトが重なる領域における各画素位置に書き込む描画方法。
【請求項6】
各画素位置に対し色データが定義されているラスタ画像から、同色の色データが閾値以上連続していない領域の各画素位置に対して色データが定義されているビットマップオブジェクトと、同色の色データが閾値以上連続している領域に対して色データが定義されているフラットフィルオブジェクトとを生成する生成ステップと、
前記生成手段により生成されたビットマップオブジェクトと、オブジェクトに対して色データが定義されている単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトが重なる領域の前記ビットマップオブジェクトの色データと前記単色のオブジェクトの色データとの合成演算を画素位置毎に行い、合成演算された夫々の色データを該2つのオブジェクトが重なる領域における各画素位置に書き込み、
前記生成手段により生成されたフラットフィルオブジェクトと前記単色のオブジェクトの2つのオブジェクトを合成する場合は、該2つのオブジェクトの色データの合成演算を一度行い、合成演算された色データを該2つのオブジェクトが重なる領域における各画素位置に書き込む描画ステップとを含むプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公開番号】特開2011−180896(P2011−180896A)
【公開日】平成23年9月15日(2011.9.15)
【国際特許分類】
【出願番号】特願2010−45543(P2010−45543)
【出願日】平成22年3月2日(2010.3.2)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】