(57)【要約】【課題】グループの途中でフラット化を行った場合であっても、ユーザーが意図していた色が最終的に出力されるようにグループ要素を合成できる画像処理装置を提供すること。【解決手段】入力された描画命令からラスタ画像を生成する画像処理装置であって、前記描画命令から中間データを生成する中間データ生成手段（２００）と、前記中間データをレンダリングして前記ラスタ画像を生成するレンダリング手段（２０１）と、前記中間データ生成手段及び前記レンダリング手段と協働して、前記中間データを合成する合成手段（２０２）とを備え、前記合成手段がどのオブジェクトまで処理したかを示す実行状況と、前記描画命令におけるグループの合成方法とに基づき、前記合成手段の処理手順を切り替える（Ｓ１９０８，Ｓ１９０９）ことを特徴とする画像処理装置。【選択図】図１９
2018152113.tif 000002
【特許請求の範囲】
【請求項１】
入力された描画命令からラスタ画像を生成する画像処理装置であって、
前記描画命令から中間データを生成する中間データ生成手段と、
前記中間データをレンダリングして前記ラスタ画像を生成するレンダリング手段と、
前記中間データ生成手段及び前記レンダリング手段と協働して、前記中間データを合成する合成手段と
を備え、
前記合成手段がどのオブジェクトまで処理したかを示す実行状況と、前記描画命令におけるグループの合成方法とに基づき、前記合成手段の処理手順を切り替えることを特徴とする画像処理装置。
【請求項２】
前記生成したラスタ画像を出力する出力手段を更に備えることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記実行状況は、前記中間データ生成手段が前記合成手段を実行しているか否か、または、前記中間データ生成手段が前記合成手段を実行したか否かを示すことを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
前記グループの合成方法は、Ｋｎｏｃｋｏｕｔか否かに基づき決定されることを特徴とする請求項１乃至３の何れか一項に記載の画像処理装置。
【請求項５】
前記グループの合成方法は、Ｉｓｏｌａｔｅｄか否かに基づき決定されることを特徴とする請求項１乃至４の何れか一項に記載の画像処理装置。
【請求項６】
前記グループの合成方法は、前記グループの要素が複数か否かに基づき決定されることを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記合成手段は、前記グループの合成方法がＫｎｏｃｋｏｕｔか否かの判断及び前記グループの要素が複数か否かの判断に基づき、前記グループの合成方法がＩｓｏｌａｔｅｄか否かという判断を行うか否かを切り替えることを特徴とする請求項６に記載の画像処理装置。
【請求項８】
前記合成手段によって、一時データとして記憶される前記グループに関する情報は、前記処理手順の切り替えによって、前記グループ１つに対して１つしか増えないことを特徴とする請求項１乃至７の何れか一項に記載の画像処理装置。
【請求項９】
前記描画命令はＰＤＬデータから抽出され、前記ＰＤＬデータは、ＰＤＦで表現されることを特徴とする請求項１乃至８の何れか一項に記載の画像処理装置。
【請求項１０】
前記グループの合成方法がＩｓｏｌａｔｅｄのときに、合成処理を行う色空間が指定されることを特徴とする請求項５に記載の画像処理装置。
【請求項１１】
入力された描画命令からラスタ画像を生成する画像処理方法であって、
前記描画命令から中間データを生成する中間データ生成ステップと、
前記中間データをレンダリングして前記ラスタ画像を生成するレンダリングステップと、
前記中間データ生成ステップ及び前記レンダリングステップにおいて、前記中間データを合成する合成ステップと
を備え、
前記合成ステップにおいてどのオブジェクトまで処理したかを示す実行状況と、前記データにおけるグループの合成方法とに基づき、前記合成ステップにおける処理手順を切り替えることを特徴とする画像処理方法。
【請求項１２】
コンピュータを、請求項１乃至１０の何れか一項に記載の画像処理装置として機能させるための、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ラスタ画像を生成する画像処理装置、画像処理方法、及びプログラムに関する。特に、本発明は、合成を伴う画像処理に関するものであり、ラスタ画像のレンダリングに好適である。
【背景技術】
【０００２】
レンダリングにおける合成処理とは、前面画像と、背面画像とを合成して該合成結果の画像を形成する処理である。一例として、非特許文献１に記載されたＰｏｒｔｅｒ−Ｄｕｆｆルールでは、１２個の合成演算子を体系化し、透過合成に対応している。別の例として、非特許文献２では、ＰＤＦ（Ｐｏｒｔａｂｌｅ  Ｄｏｃｕｍｅｎｔ  Ｆｏｒｍａｔ）のＴｒａｎｓｐａｒｅｎｃｙ  Ｇｒｏｕｐｓという、連続したオブジェクトの集合をまとめて透過合成する方法を規定している。前記連続したオブジェクトの集合（本明細書では、「グループ」と記載する。）は、別のグループを要素に持つことができる。グループが別のグループを要素に持つとは、グループがネスト構造であることを意味する。本明細書では、グループの要素を「グループ要素」と記載する。
【０００３】
また、レンダリングに関連する技術として、中間データを格納するメモリ領域がオーバーフローしてしまった場合に、該オーバーフロー時点の中間データを一旦レンダリングすることでデータサイズの削減を図る技術が知られている（特許文献１を参照）。この技術のうち特に合成処理によってデータサイズの削減を図ることを、本明細書では、「フラット化」と記載する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−６１５５５号公報
【非特許文献】
【０００５】
【非特許文献１】Ｔ．Ｐｏｒｔｅｒ  ａｎｄ  Ｔ．Ｄｕｆｆ：  ”Ｃｏｍｐｏｓｉｔｉｎｇ  Ｄｉｇｉｔａｌ  Ｉｍａｇｅｓ”，  Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ，  Ｖｏｌ．１８，  Ｎｏ．３，  ＡＣＭ  １９８４．
【非特許文献２】Ａｄｏｂｅ  Ｓｙｓｔｅｍｓ：  ”Ｄｏｃｕｍｅｎｔ  ｍａｎａｇｅｍｅｎｔ  −  Ｐｏｒｔａｂｌｅ  ｄｏｃｕｍｅｎｔ  ｆｏｒｍａｔ  −  Ｐａｒｔ  １：  ＰＤＦ  １．７”，  ＩＳＯ  ３２０００−１，  ２００８．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述の如く、中間データを格納するメモリ領域がオーバーフローしてしまった場合に、該オーバーフロー時点の中間データを一旦レンダリングすることでデータサイズの削減を図る技術が知られている。しかしながら、グループを有する画像をフラット化する際、本来まとめて合成するべきグループの合成処理においても、段階的に合成処理が行われる場合があり、ユーザーが意図していた色とは異なる色が出力される場合があった。
【０００７】
本発明は、上述の課題を解決するための装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、入力された描画命令からラスタ画像を生成する画像処理装置であって、前記描画命令から中間データを生成する中間データ生成手段と、前記中間データをレンダリングして前記ラスタ画像を生成するレンダリング手段と、前記中間データ生成手段及び前記レンダリング手段と協働して、前記中間データを合成する合成手段とを備え、前記合成手段がどのオブジェクトまで処理したかを示す実行状況と、前記描画命令におけるグループの合成方法とに基づき、前記合成手段の処理手順を切り替えることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、グループの途中でフラット化を行った場合であっても、ユーザーが意図していた色が最終的に出力されるようにグループ要素を合成できる。
【図面の簡単な説明】
【００１０】
【図１】実施例１における画像処理装置１００の構成を示すブロック図である。
【図２】実施例１における画像処理装置１００におけるデータフローを示す図である。
【図３】実施例１における中間データ生成部２００により実行される処理のフローチャートである。
【図４】実施例１における入力データ２０３の例を示す図である。
【図５】実施例１においてオブジェクト及びＢａｃｋＧｒｏｕｎｄの重なる範囲毎に領域分割した様子を示す図である。
【図６】実施例１における領域リスト６００のデータ構造を示す図である。
【図７】実施例１における合成スタックのデータ構造を示す図である。
【図８】実施例１におけるＦｉｌｌテーブル８００の構造を示す図である。
【図９】実施例１における合成演算子７０９の構造を示す図である。
【図１０】実施例１におけるレンダリング部２０１によって実行されるラスタ画像生成処理のフローチャートである。
【図１１】実施例１におけるフラット化を行わない場合の合成部２０２によって実行される合成ノード合成処理のフローチャートである。
【図１２】実施例１における参照カウント８０３の更新処理のフローチャートである。
【図１３】実施例１におけるグループの例を示す図である。
【図１４】実施例１においてグループがある場合の中間データ２０５（特に合成スタック）の例を示す図である。
【図１５】実施例１におけるフラット化を行わない場合のグループ処理のフローチャートである。
【図１６】実施例１においてグループノードがグループスタートであるときの合成スタック等の様子を表した図である。
【図１７】実施例１においてグループノードがグループエンドであるときの合成スタック等の様子を表した図である。
【図１８】実施例１においてグループの途中でフラット化を行う場合の中間データ２０５（特に合成スタック）の例を示す図である。
【図１９】実施例１においてフラット化を行う場合のグループ処理のフローチャートである。
【図２０】実施例１においてフラット化を行う場合の合成部２０２によって実行される合成ノード合成処理のフローチャートである。
【図２１】実施例１においてフラット化を行っているときの合成スタック等の様子を表した図である。
【図２２】実施例１においてフラット化を行った後の合成スタック等の様子を表した図である。
【発明を実施するための形態】
【００１１】
以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。
【００１２】
［実施例１］
（画像処理装置１００の構成）
図１は、実施例１における画像処理装置１００の構成を示すブロック図である。画像処理装置は、入力部１０１と、解釈部１０２と、ラスタ画像処理部１０３と、出力部１０４とから成る。入力部１０１は、画像処理装置１００に接続されている外部装置から入力データを受け取る。解釈部１０２は、入力部１０１で受け取った入力データを解釈して描画命令を抽出し、背面から前面への描画順に描画命令をソートする。実施例１における入力データはＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）で記述されたＰＤＬデータである。入力データの好適なフォーマットは非特許文献２に記載のＰＤＦであり、好適な描画命令は該ＰＤＦのオブジェクトである。ラスタ画像処理部１０３は、解釈部１０２により抽出された描画命令に基づきラスタ画像を生成する。出力部１０４は、ラスタ画像処理部１０３により生成されたラスタ画像に対して、ハーフトーン処理等の画像処理を施して出力データを生成し、該生成した出力データを出力する。
【００１３】
なお、実施例１における画像処理装置１００は、ＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｒｉｎｔｅｒ）であり、出力部１０４は、記録紙に印刷を行うことで出力データを出力する。入力部１０１と、解釈部１０２と、ラスタ画像処理部１０３と、出力部１０４とは、各種プログラムをＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）にロードし、ロードしたプログラムをＣＰＵが実行することで実現される。また、ラスタ画像処理部１０３は、ＣＰＵではなくラスタ画像を生成するためのＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）で実現されてもよい。
【００１４】
（画像処理装置１００におけるデータフロー）
図２は、画像処理装置１００におけるデータフローを示す図である。ラスタ画像処理部１０３は、中間データ生成部２００と、レンダリング部２０１と、合成部２０２とから成る。中間データ生成部２００は、描画命令２０４から中間データ２０５を生成する。レンダリング部２０１は、中間データ２０５をレンダリングしてラスタ画像２０６を生成する。中間データ生成部２００及びレンダリング部２０１は、夫々の処理において、合成部２０２を用いて中間データの合成処理を行う。
【００１５】
（中間データ生成部２００における処理）
図３は、中間データ生成部２００により実行される処理のフローチャートである。ステップＳ３００（以降、「ステップＳ３００」を「Ｓ３００」と略記し、他のステップも同様に略記する。）で、中間データ２０５のデータサイズが予め定めた閾値以上であるか否かを判断する。中間データ２０５のデータサイズが閾値以上であると判断した場合、Ｓ３０１で、合成部２０２を用いて中間データ２０５を合成し、フラット化したラスタ画像を新たな描画命令にする。中間データ２０５のデータサイズが閾値以上ではないと判断した場合、又は、Ｓ３０１で中間データ２０５を合成すると、次にＳ３０２で、描画命令２０４のうち１つを取り出す。次いで、Ｓ３０３で該取り出した描画命令からオブジェクトの描画座標を計算し、Ｓ３０４でオブジェクトのＦｉｌｌ情報を生成する。このオブジェクトの描画座標の計算では、ページ座標系から出力座標系への変換を行う。また、オブジェクトがベクタ形式であれば、オブジェクトの輪郭の座標を出力座標系で求める。次いで、Ｓ３０５で、オブジェクトの座標情報及びＦｉｌｌ情報に基づき中間データを更新する。ここで未だ中間データを生成していなかった場合には、中間データを新規生成する。次いで、Ｓ３０６で、描画命令２０４を全て取り出したか否かを判断する。描画命令２０４を全て取り出していないと判断した場合、Ｓ３００に戻る。描画命令２０４を全て取り出していると判断した場合、処理を終了する。
【００１６】
（中間データ）
以下、中間データ２０５を詳細に説明する。
【００１７】
図４は、入力データ２０３の例を示す図であり、図４（ａ）が立体関係を表す斜視図であり、図４（ｂ）が断面図であり、図４（ｃ）が上面図である。この例では、オブジェクト４００〜４０２と、ＢａｃｋＧｒｏｕｎｄ４０３とが重なっている。中間データ２０５では、オブジェクト及びＢａｃｋＧｒｏｕｎｄの重なる範囲毎に、領域に分割する。
【００１８】
図５は、中間データ２０５において領域に分割した様子を示す図である。上面図５（ａ）を参照すると、領域５００〜５０４の５つの領域に分割していることが分かる。例えば、領域５００は、オブジェクト４００と、オブジェクト４０１と、ＢａｃｋＧｒｏｕｎｄ４０３との重なりから成る領域である。図５（ｂ）は、領域５００〜５０４の夫々が、どのオブジェクト及びＢａｃｋＧｒｏｕｎｄの重なりから成るかを表している。
【００１９】
以下、中間データ２０５のデータ構造を説明する。
【００２０】
図６は、領域リスト６００のデータ構造を示す図である。領域リスト６００は、前記分割した領域に関する情報を管理するデータであり、夫々の領域に対応する該情報をリスト構造で繋げている。好適な実施形態では、入力データ２０３の１ページにつき、１つの領域リスト６００が存在する。図６の領域リスト６００では、領域５００〜５０４に対応する前記情報をリスト構造で繋げている。前記情報は、描画座標６０１と、合成スタックポインタ６０２とから構成される。描画座標６０１は、出力座標系のＸＹ座標（左上を原点とする）で示され、好適な実施形態では、領域における、Ｙ座標の最大値と最小値、及び、各Ｙ座標でのＸ座標の最大値と最小値によって表現される。合成スタックポインタ６０２は、合成スタックを参照するために用いられるデータである。好適な実施形態では、領域リスト６００に含まれる情報は、描画座標６０１のＹ座標の最小値に従って昇順ソートされる。
【００２１】
図７は、合成スタックのデータ構造を示す図である。合成スタックは、重なりに関する情報を管理するデータであり、分割後の１つの領域につき、１つの合成スタックが存在する。例えば、合成スタック７００は領域５００に対応する合成スタックであり、領域５００に対応する合成スタックポインタ６０２から参照される。
【００２２】
さらに、合成スタックは、合成ノードをスタック要素として持つ、スタック構造になっている。合成ノードは夫々、重なっているオブジェクト又はＢａｃｋＧｒｏｕｎｄに対応する情報を持つデータである。例えば、合成スタック７００は、３つの合成ノード７０５〜７０７を持つ。合成ノード７０５はオブジェクト４００、合成ノード７０６はオブジェクト４０１、合成ノード７０７はＢａｃｋＧｒｏｕｎｄ４０３に夫々対応している。なお、合成ノードはオブジェクト及びＢａｃｋＧｒｏｕｎｄの重なる順序でスタックに積まれ、背面側がスタックのトップになる（即ち、最も背面側にある合成ノードが最後に積まれる）。また、夫々の合成スタックには、必ず１つ以上の合成ノードが存在する。
【００２３】
合成ノードは、Ｆｉｌｌ識別子７０８と、合成演算子７０９とから構成される。Ｆｉｌｌ識別子７０８は、Ｆｉｌｌテーブル８００内のＦｉｌｌ識別子８０１と結び付いている。図８は、Ｆｉｌｌテーブル８００の構造を示す図である。Ｆｉｌｌテーブル８００は、Ｆｉｌｌ識別子８０１と、Ｆｉｌｌ情報８０２と、参照カウント８０３との３つの列項目から成る。Ｆｉｌｌ情報８０２は、オブジェクト及びＢａｃｋＧｒｏｕｎｄの色のデータであり、例えば単色のＲＧＢ値、グラデーション、画像データ等である。参照カウント８０３は、いくつの合成ノードから参照されているかをカウントした値である。
【００２４】
合成演算子７０９は、夫々の重なりにおいてどのような合成を行うかを指定する演算子である。図７では合成演算子７０９を「ＯＰ」と表記しているが、合成演算子７０９の具体的な内部構造については図９に示している。図９（ａ）で示すように、合成演算子７０９は、色演算子９０１と、透過演算子９０２と、透明度９０３とから成る。色演算子９０１は、合成結果の色をどのように計算するかを指定する。透過演算子９０２は、合成結果の透明度をどのように計算するかを指定する。透明度９０３は、オブジェクト又はＢａｃｋＧｒｏｕｎｄの透過の程度を表す。好適な実施形態では、色演算子９０１及び透過演算子９０２は、非特許文献１のＣｏｍｐｏｓｉｔｉｎｇ  Ｏｐｅｒａｔｏｒｓ又は非特許文献２のＰＤＦのブレンドモードで指定される。透明度９０３は、０〜１の範囲の何れかの値を取り、０は完全な透明、１は不透明（透過無し）を意味する。図９（ｂ）において、合成ノード７０５〜７０７の合成演算子７０９の例を、合成演算子９０４〜９０６として夫々示している。なお、合成演算子９０６のように、最背面の合成ノードに対しては、色演算子９０１及び透過演算子９０２を指定しなくてよい。
【００２５】
（ラスタ画像生成処理）
以下、レンダリング部２０１が中間データ２０５をレンダリングしてラスタ画像２０６を生成する処理を説明する。
【００２６】
図１０は、レンダリング部２０１によって実行されるラスタ画像生成処理のフローチャートである。まずＳ１０００で、スキャンラインを１つ選択する。好適な実施形態では、ページ原点を通るスキャンラインから主走査方向の順序で選択していく。次いで、Ｓ１００１に進む。Ｓ１００１で、スキャンライン上にある領域の情報を、領域リスト６００から取得する。次いで、Ｓ１００２に進む。Ｓ１００２で、取得した情報に含まれる合成スタックポインタ６０２が参照する、合成スタックを取得する。次いで、Ｓ１００３に進む。Ｓ１００３で、取得した合成スタックに含まれる合成ノードを、合成部２０２を用いて合成する。Ｓ１００３での合成が終了すると、合成スタックには合成ノードが１つだけ残っている。次いで、Ｓ１００４に進む。Ｓ１００４で、前記１つだけ残っている合成ノードに対応するＦｉｌｌ情報８０２に従い、出力先のメモリアドレスに書き込むことでラスタ画像を生成する。ここで、合成ノードに対応するＦｉｌｌ情報８０２は、Ｆｉｌｌ識別子７０８と一致するものをＦｉｌｌ識別子８０１の項目の中からサーチすることでＦｉｌｌテーブル８００から取得できる。合成ノードに対応するＦｉｌｌ情報８０２に従って書き込むとき、例えばＦｉｌｌ情報８０２が単色の色値であれば、該色値をそのまま書き込む。また、例えばＦｉｌｌ情報８０２が画像データであれば、該画像データに対する出力解像度への拡縮処理を行い、当該拡縮処理後にクリッピング処理を施してから書き込む。次いで、Ｓ１００５に進む。Ｓ１００５で、スキャンライン上にある全ての領域の情報を、取得したか否かを判断する。判断の結果、取得していない場合、Ｓ１００１に戻り、取得した場合、Ｓ１００６に進む。Ｓ１００６で、全てのスキャンラインを選択したか否かを判断する。判断の結果、全てのスキャンラインを選択していない場合、Ｓ１０００に戻り、全てのスキャンラインを選択した場合、処理を終了する。
【００２７】
（ラスタ画像生成処理−合成ノード合成処理）
図１１は、Ｓ１００３で合成部２０２を使って合成スタックに含まれる合成ノードを合成する処理のフローチャートである。なお、スタックにおけるｐｕｓｈとｐｏｐの操作は、当該スタックのトップに存在するノードに対して行われるものとする。また、一時データへのデータ格納は上書きで行われるものとする。まずＳ１１００で、合成スタックに合成ノードが２つ以上あるか否かを判断する。判断の結果、合成スタックに合成ノードが２つ以上ある場合、Ｓ１１０１に進み、合成スタックに合成ノードが２つ以上ない場合、処理を終了する。Ｓ１１０１で、合成スタックから合成ノードをｐｏｐして、一時データＤｅｓｔとして格納する。次いで、Ｓ１１０２に進む。Ｓ１１０２で、さらに合成スタックから合成ノードをｐｏｐして、一時データＳｒｃとして格納する。次いで、Ｓ１１０３に進む。Ｓ１１０３で、一時データＳｒｃがグループノードか否かを判断する（グループノードについては後で詳しく説明する）。判断の結果、Ｓｒｃがグループノードである場合、Ｓ１１０４に進み、そうでない場合、Ｓ１１０５に進む。ここではグループノードが存在しないものとして説明する（Ｓ１１０３→Ｓ１１０５）。Ｓｒｃがグループノードでない場合、Ｓ１１０５で、ＳｒｃとＤｅｓｔとの合成演算子７０９に従って、ＳｒｃとＤｅｓｔとの合成結果を計算して、該計算結果を一時データＲｅｓとして格納する。次いで、Ｓ１１０６に進む。Ｓ１１０６で、Ｓｒｃとして格納された合成ノードに対する参照カウント８０３を更新する。次いで、Ｓ１１０７に進む。Ｓ１１０７で、Ｄｅｓｔとして格納された合成ノードに対する参照カウント８０３を更新する。次いで、Ｓ１１０８に進む。Ｓ１１０８で、Ｒｅｓとして格納されたノードのＦｉｌｌ情報がＦｉｌｌテーブル８００にあるか否かを判断する。判断の結果、Ｒｅｓして格納されたノードのＦｉｌｌ情報がＦｉｌｌテーブル８００にある場合、Ｓ１１１０に進み、Ｒｅｓして格納されたノードのＦｉｌｌ情報がＦｉｌｌテーブル８００にない場合、Ｓ１１０９に進む。Ｓ１１０９で、Ｒｅｓとして格納されたノードに対応するＦｉｌｌ識別子と、Ｆｉｌｌ情報と、参照カウントとを、Ｆｉｌｌテーブル８００に追加する。次いで、Ｓ１１１０に進む。Ｓ１１１０で、Ｒｅｓとして格納された合成ノードを合成スタックにｐｕｓｈする。次いで、Ｓ１１００に戻る。Ｓ１１００で、合成スタックに合成ノードが２つ以上ないと判断された場合、即ち、合成スタックに合成ノードが１つだけ残っている場合に、処理を終了する。処理を終了する際に、Ｓｒｃ、Ｄｅｓｔ、Ｒｅｓとして格納されていた一時データは破棄される。
【００２８】
（ラスタ画像生成処理−合成ノード合成処理−参照カウント更新処理）
図１２は、Ｓ１１０６及びＳ１１０７における、参照カウント８０３の更新処理のフローチャートである。まずＳ１２００で、対応する参照カウント８０３を１つ減らす。次いで、Ｓ１２０１に進む。Ｓ１２０１で、参照カウントが０になったか否かを判断する。判断の結果、参照カウントが０になった場合、Ｓ１２０２に進み、参照カウントが０になっていない場合、処理を終了する。Ｓ１２０２で、対応するＦｉｌｌ識別子８０１と、Ｆｉｌｌ情報８０２と、参照カウント８０３との項目を、Ｆｉｌｌテーブル８００から行ごと削除し、処理を終了する。
【００２９】
（グループの説明）
以下、グループについて説明する。
【００３０】
図１３は、グループの例を示す図であり、図１３（ａ）は斜視図であり、図１３（ｂ）は断面図である。この例では、ＢａｃｋＧｒｏｕｎｄ１３０３の上の３つのオブジェクト１３００〜１３０２がグループ１３０４を構成するグループ要素になっている。
【００３１】
図１４は、図１３の例における、合成スタックの構造を示す図である。グループ要素は、グループスタート（Ｇｒｐ  Ｓｔａｒｔ）及びグループエンド（Ｇｒｐ  Ｅｎｄ）という特殊な合成ノード（本明細書では「グループノード」と呼ぶ）に挟まれる。このとき、グループスタートが背面（合成スタックのトップ）側、グループエンドが前面（合成スタックのボトム）側になる。グループスタートは、グループ演算子Ｇｒｐ  ＯＰとセットになっており、グループ演算子はグループの合成方法を指定している。実施例１におけるグループの合成方法は、ＩｓｏｌａｔｅｄかＮｏｎ−Ｉｓｏｌａｔｅｄか、及び、ＫｎｏｃｋｏｕｔかＮｏｎ−Ｋｎｏｃｋｏｕｔかによる計４（＝２×２）通りの方法を想定している。夫々の合成方法については、非特許文献２のＰＤＦのＴｒａｎｓｐａｒｅｎｃｙ  Ｇｒｏｕｐｓで既定されている。
【００３２】
（ラスタ画像生成処理−合成ノード合成処理−グループノード処理）
図１１のＳ１１０３でＳｒｃがグループノードであると判断した場合、Ｓ１１０４でグループノードを処理して、Ｓ１１００に戻る。図１５は、Ｓ１１０４の詳細なフローチャートである。まずＳ１５００で、グループノードがグループスタートであるか否かを判断する。判断の結果、グループノードがグループスタートである場合、Ｓ１５０１に進み、グループノードがグループスタートではない（即ち、グループノードがグループエンドである）場合、Ｓ１５０７に進む。Ｓ１５０１で、グループ演算子を参照して合成方法がＫｎｏｃｋｏｕｔであるか否かを判断する。判断の結果、合成方法がＫｎｏｃｋｏｕｔである場合、Ｓ１５０２に進み、合成方法がＫｎｏｃｋｏｕｔではない場合、Ｓ１５０３に進む。Ｓ１５０２で、グループの最前面以外のグループ要素を削除する。次いで、Ｓ１５０３に進む。Ｓ１５０３で、グループ演算子を参照して合成方法がＩｓｏｌａｔｅｄであるか否かを判断する。判断の結果、合成方法がＩｓｏｌａｔｅｄである場合、Ｓ１５０４に進み、合成方法がＩｓｏｌａｔｅｄではない場合、Ｓ１５０５に進む。Ｓ１５０４で、完全に透明な合成ノードを作成し、合成スタックにｐｕｓｈする。次いで、Ｓ１５０６に進む。一方、Ｓ１５０３の判断の結果、合成方法がＩｓｏｌａｔｅｄではない場合、Ｓ１５０５で、Ｄｅｓｔのコピーの合成ノードを作成し、合成スタックにｐｕｓｈする。次いで、Ｓ１５０６に進む。Ｓ１５０４又はＳ１５０５で、合成スタックに合成ノードをｐｕｓｈすると、続いてＳ１５０６で、Ｄｅｓｔをグループスタックという一時スタックにｐｕｓｈして、処理を終了する。なお、グループスタックは初期状態で空である。Ｓ１５００で、グループノードがグループスタートではない（即ち、グループノードがグループエンドである）と判断した場合、Ｓ１５０７で、Ｄｅｓｔを合成スタックにｐｕｓｈする。次いで、Ｓ１５０８に進む。Ｓ１５０８で、グループスタックから合成ノードをｐｏｐして、該ｐｏｐした合成ノードを合成スタックにｐｕｓｈして、処理を終了する。
【００３３】
図１６は、図１５のフローチャートにおいて、グループノードがグループスタートであるときの合成スタック等の様子を表した図である。図１６では、図の左から右へ処理が流れる様子を示している。図１６の例ではグループの合成方法がＫｎｏｃｋｏｕｔかつＩｓｏｌａｔｅｄの場合を想定している。グループの合成方法がＫｎｏｃｋｏｕｔであるため、グループの最前面以外のグループ要素である、合成ノード１６０１と合成ノード１６０２とは削除される。また、グループの合成方法がＩｓｏｌａｔｅｄであるため、完全に透明な合成ノードである、合成ノード１６０３が合成スタックにｐｕｓｈされる。さらに、Ｄｅｓｔとして格納された合成ノード１６０４はグループスタックにｐｕｓｈされる（Ｓ１５００→Ｓ１５０１→Ｓ１５０２→Ｓ１５０３→Ｓ１５０４→Ｓ１５０６）。
【００３４】
図１７は、図１６の続きでグループノードがグループスタートでない（即ち、グループノードがグループエンドである）ときの合成スタック等の様子を表した図である。図１７も、図１６と同様に図の左から右へ処理が流れる様子を示している。合成ノード１６００と、合成ノード１６０３とは、図１１で示したフローチャートに沿って合成されており、図１７を参照すると、該合成結果である合成ノード１７００が合成スタックに積まれている。なお、その合成の際に、Ｓｒｃとして格納されていたグループスタートは上書きされて消えている。合成ノード１７００はＤｅｓｔにｐｏｐされた後、Ｓｒｃがグループエンドであるため、再度合成スタックにｐｕｓｈされる。そして、グループスタックに積まれていた合成ノード１６０４が、グループスタックからｐｏｐされて、合成スタックにｐｕｓｈされる（Ｓ１１０１→Ｓ１１０２→Ｓ１１０３→Ｓ１１０４，Ｓ１５００→Ｓ１５０７→Ｓ１５０８）。
【００３５】
後の合成処理は、図１１で示した通りである。これまでに説明した処理フローによって、フラット化を行う場合を除いて、一連の合成処理が実現される。
【００３６】
（フラット化）
以下、フラット化について説明する。
【００３７】
上（「中間データ生成部２００の処理」の章）で説明した通り、図３のＳ３００で、中間データ２０５のデータサイズが閾値以上と判断した場合、合成部２０２を用いてフラット化を行う。フラット化とはＳ３００の判断時点の中間データ２０５である合成ノードを合成する処理であり、実施例１においては参照されなくなったＦｉｌｌ情報８０２の項目等をＦｉｌｌテーブル８００から行ごと削除することで、データサイズの削減を実現する。
【００３８】
フラット化は、グループの途中までしか中間データ２０５を生成していないときでも、行われる可能性がある。図１８は、グループの途中でフラット化を行う場合の中間データ２０５（特に合成スタック）の例を示す図である。図１８（ａ）の例では、グループ１８００のグループ要素に、３つのオブジェクト１８０１〜１８０３がある。ここで、オブジェクト１８０２まで中間データ２０５を生成した直後にフラット化が行われる場合、オブジェクト１８０１がどのようなオブジェクトであり、どのように重なるかは該生成した直後の時点では不明である。図１８（ｂ）は、前記時点での中間データ２０５の合成スタックを示す図である。グループの途中までしか中間データ２０５を生成していないときにフラット化が行われた状況であっても最終的に意図していた色が出力されるように合成する方法について、以下説明する。
【００３９】
図１９は、フラット化を行う場合のグループ処理のフローチャートである。図１９に示すフローに応じてグループ処理の方法が決定される。Ｓ１９００〜Ｓ１９０６は、フラット化を行わない場合（図１５）と同様である。しかし、Ｓ１９０７で、Ｓｒｃ（即ちグループスタート）もグループスタックにｐｕｓｈする点で、図１５と異なる。
【００４０】
ここで図２０に、フラット化を行う場合の合成部２０２によって実行される合成ノード合成処理のフローチャートを示す。Ｓ２０００〜Ｓ２０１０は、フラット化を行わない場合（図１１）と同様である。ただし、Ｓ２０００で、合成ノードが２つ以上ないと判断した場合、Ｓ２０１１でグループスタックが空か否かを判断する点で図１１と異なる。Ｓ２０１１における判断の結果、グループスタックが空である場合、処理を終了し、グループスタックが空ではない場合、Ｓ２０１２に進む。グループスタックが空ではない場合とは、グループの途中までしか中間データ２０５を生成していない状態で、フラット化を行っていることを意味する。このとき、Ｓ２０１２で、グループスタックから合成ノードをｐｏｐして、Ｄｅｓｔとして格納する。次いで、Ｓ２０１３に進む。Ｓ２０１３で、Ｄｅｓｔがグループスタートであるか否かを判断する。判断の結果、Ｄｅｓｔがグループスタートである場合、Ｓ２０１４に進み、Ｄｅｓｔがグループスタートではない場合、Ｓ２０１５に進む。Ｓ２０１４で、Ｄｅｓｔをグループリスタートという特殊な合成ノードに変更する。なお、グループリスタートもグループノードの１つである。グループリスタートもグループ演算子とセットになっており、該セットになっているグループ演算子はグループスタートのときと同じグループ演算子にしておく。次いで、Ｓ２０１５に進む。Ｓ２０１５で、Ｄｅｓｔを合成スタックにｐｕｓｈする。次いで、Ｓ２０１１に戻る。
【００４１】
図１９の説明に戻る。Ｓ１９００で、グループノードがグループスタートではないと判断した場合、Ｓ１９０８に進む。Ｓ１９０８で、グループノードがグループリスタートであるか否かを判断する。判断の結果、グループノードがグループリスタートである場合、Ｓ１９０９に進む。Ｓ１９０９で、グループ要素が２つ以上であり、かつ、合成方法がＫｎｏｃｋｏｕｔであるか否かを判断する。判断の結果、グループ要素が２つ以上であり、かつ、合成方法がＫｎｏｃｋｏｕｔである場合、Ｓ１９０２に進む。そうでない場合、Ｓ１９０６に進む。Ｓ１９０８及びＳ１９０９の処理分岐により、必要な場合にのみ、ＩｓｏｌａｔｅｄかＮｏｎ−Ｉｓｏｌａｔｅｄかに応じて分けられる合成ノード（完全に透明もしくはＤｅｓｔのコピー）を、合成スタックにｐｕｓｈしている。Ｓ１９０８でグループノードがグループリスタートではない（即ち、グループノードがグループエンドである）と判断した場合、Ｓ１９１０に進む。ここで、Ｓ１９１０及びＳ１９１２は、フラット化を行わない場合の処理（図１５のＳ１５０７及びＳ１５０８）と同様である。但し、Ｓ１９１１において、グループスタックのトップに積まれている、グループスタートをｐｏｐして破棄している点で、図１５と異なる。
【００４２】
図２１は、図１９及び図２０のフローチャートにおいて、フラット化を行っているときの合成スタック等の様子を表した図である。この例では、グループの合成方法がＫｎｏｃｋｏｕｔかつＩｓｏｌａｔｅｄの場合を想定している。グループの合成方法がＫｎｏｃｋｏｕｔであるため、グループの最前面以外のグループ要素である、合成ノード２１０１は削除される（Ｓ１９０１→Ｓ１９０２）。また、グループの合成方法がＩｓｏｌａｔｅｄであるため、完全に透明な合成ノードである、合成ノード２１０２が合成スタックにｐｕｓｈされる（Ｓ１９０３→Ｓ１９０４）。さらに、Ｄｅｓｔとして格納された合成ノード２１０３と、Ｓｒｃとして格納されたグループスタート２１０４とがグループスタックにｐｕｓｈされる（Ｓ１９０６→Ｓ１９０７）。その後、合成ノード２１００と、合成ノード２１０２とが合成されて、該合成結果の合成ノード２１０５が合成スタックにｐｕｓｈされる（Ｓ２０００→・・・→Ｓ２０１０）。これにより、合成スタックに合成ノードが１つだけになるため、グループスタック内の全ての要素が合成スタックにｐｕｓｈされる。このとき、グループスタート２１０４はグループリスタート２１０６に変更される（Ｓ２０００→Ｓ２０１１→Ｓ２０１２→Ｓ２０１３→Ｓ２０１４→Ｓ２０１５）。
【００４３】
図２２は、図２１の続きで中間データ２０５の生成が完了し、レンダリング部２０１で合成処理を行うときの合成スタック等の様子を表した図である。中間データ２０５の生成が完了しているため、合成スタックにグループエンド２２００と、合成ノード２２０１とが積まれている。グループ要素が２つ以上かつグループの合成方法がＫｎｏｃｋｏｕｔであるため、グループの最前面以外のグループ要素である、合成ノード２１０５は削除される（Ｓ１９０８→Ｓ１９０９→Ｓ１９０２）。さらに、グループの合成方法がＩｓｏｌａｔｅｄであるため、完全に透明な合成ノードである、合成ノード２１０２が再び合成スタックにｐｕｓｈされる（Ｓ１９０３→Ｓ１９０４）。そして、Ｄｅｓｔとして格納された合成ノード２１０３と、Ｓｒｃとして格納されたグループリスタート２１０６とがグループスタックにｐｕｓｈされる（Ｓ１９０６→Ｓ１９０７）。その後、合成ノード２２０１と、合成ノード２１０２とが合成されて、該合成結果の合成ノード２２０３が合成スタックにｐｕｓｈされる（Ｓ２０００→・・・→Ｓ２０１０）。グループエンド２２００に到達すると、Ｄｅｓｔとして格納された合成ノード２２０３と、グループスタック内の合成ノード２１０３とが合成スタックにｐｕｓｈされる（Ｓ１９１０，Ｓ１９１２）。このとき、グループスタック内のグループリスタート２１０６は、グループスタックからｐｏｐされて破棄される（Ｓ１９１１）。
【００４４】
以上説明したようにフラット化の実行状況と、グループの合成方法とに応じて合成処理手順を切り替えることで、グループの途中でフラット化を行った場合であっても、最終的に意図していた色が出力されるように合成できる。
【００４５】
［実施例２］
グループの合成方法がＩｓｏｌａｔｅｄのときに、合成処理を行う色空間をグループ演算子で指定するようにしてもよい。
【００４６】
なお、図１９及び図２０で説明したフローチャートは、フラット化を行わない場合であっても意図していた色が出力されるように合成できるため、フラット化を行わない場合にも共通して、これらのフローチャートの合成処理を用いてよい。
【００４７】
［その他の実施例］
本発明の目的は、前述した実施例の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体を、システム又は装置に供給し、システム又は装置（具体的にはＣＰＵやＭＰＵ）がプログラムコードを読み出し実行することによっても、達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００４８】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ等を用いることが出来る。
【００４９】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳが実際の処理の一部又は全部を行っても良い。ＯＳの処理によって前述した実施例の機能が実現される場合も、本発明の範囲に含まれる。
【００５０】
更に、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、処理が実行されても良い。また、機能拡張ボードや機能拡張ユニットに備わるＣＰＵが実際の処理の一部又は全部を実行しても良く、機能拡張ボードや機能拡張ユニットに備わるＣＰＵの実行処理によって前述した実施例の機能が実現される場合も、本発明の範囲に含まれる。
【００５１】
また、前述の実施例の機能を実現するためのプログラムコードを、１つのコンピュータ（ＣＰＵ、ＭＰＵ）で実行しても良いし、複数のコンピュータが協働することによって実行しても良い。更に、プログラムコードをコンピュータが実行しても良いし、プログラムコードの機能を実現するための回路等のハードウェアを設けても良い。または、プログラムコードの一部をハードウェアで実現し、残りの部分をコンピュータが実行しても良い。
【図１】
2018152113.tif 000003
【図２】
2018152113.tif 000004
【図３】
2018152113.tif 000005
【図４】
2018152113.tif 000006
【図５】
2018152113.tif 000007
【図６】
2018152113.tif 000008
【図７】
2018152113.tif 000009
【図８】
2018152113.tif 000010
【図９】
2018152113.tif 000011
【図１０】
2018152113.tif 000012
【図１１】
2018152113.tif 000013
【図１２】
2018152113.tif 000014
【図１３】
2018152113.tif 000015
【図１４】
2018152113.tif 000016
【図１５】
2018152113.tif 000017
【図１６】
2018152113.tif 000018
【図１７】
2018152113.tif 000019
【図１８】
2018152113.tif 000020
【図１９】
2018152113.tif 000021
【図２０】
2018152113.tif 000022
【図２１】
2018152113.tif 000023
【図２２】
2018152113.tif 000024