JP3618838B2 - 画像出力方法 - Google Patents
画像出力方法 Download PDFInfo
- Publication number
- JP3618838B2 JP3618838B2 JP18919895A JP18919895A JP3618838B2 JP 3618838 B2 JP3618838 B2 JP 3618838B2 JP 18919895 A JP18919895 A JP 18919895A JP 18919895 A JP18919895 A JP 18919895A JP 3618838 B2 JP3618838 B2 JP 3618838B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- expression tree
- bounding box
- instruction
- operand
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/60—Editing figures and text; Combining figures or text
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/206—Drawing of charts or graphs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Processing Or Creating Images (AREA)
Description
【発明の属する技術分野】
本発明は、静止画像とビデオ画像の両方の形態をしたコンピュータ生成画像の作成に関し、更に詳しくは、多数のサブコンポーネントから作られた画像の作成における合成方法に関する。
【0002】
【従来の技術】
コンピュータ生成画像は、典型的には多数の異なる構成要素、つまり、「合成」、即ち最終画像を作成するために寄せ集めて描画されたグラフィック要素により構成されている。画像は、構成要素が独立して描画されるように、構成要素に分けられているため、小さい画像部分を使用することによって潜在的にかなりの時間が節約されている。それぞれの成分やオブジェクトは、特有のマット(matte)情報、つまり、一般的には成分の形状や透明性を示すカバレージ情報を含む「アルファチャンネル」情報に関係してきた。マット情報、つまりアルファチャンネル情報は、通常、それぞれの画素について別々に記憶されている。更に、それぞれの画素は、それぞれの画素の色成分(たとえば、赤、緑、青(RGB))を記憶する。従って、成分のそれぞれの画素は(R, G, B, α)の4成分によって表すことができる。ここで、αは成分の透明度を表しており、一般に「アルファ」、つまり不透明チャンネルとして知られている。例えば、黒が、RGB色成分(0,0,0)により表現されるとすると、黒色は(0,0,0,1)の4成分によって表現することができ、また、透明、つまり完全に透けてみえる色は(0,0,0,0)の4成分で表現することができる。
【0003】
また、色成分をその不透明度で「前もって掛けておく」ことも、場合によっては効果がある。この場合、色(R,G,B)は(R,G,B)によって表現される。
【0004】
図1から図3に画像合成の簡単な例を示す。図1は、円の端として定義される輪郭を持つ円形のグラフィック要素1の例を示す。円の内側は特定の色又はバリエーションで定義される。円の境界線の外側部分3は無限に続いているものとし、0アルファ値を取る(つまり、見えない)ものと定義する。図2は、図1の円1の色と異なる色5をした第2の円4を示す。図3は、図1及び図2の円1及び円4をそれぞれ1ページ上にコピーして合成して作られた、より複雑な画像6の例を示す。円が重なる部分7は、2つの円1と円4が組合わさった部分と定義し、より複雑な画像6を作成するために2つの円を組合わせる合成演算子によって決まる色値を取る。
【0005】
トーマス・ポーターとトム・ダフは、1984年7月刊行のComputer graphicsのVol.18、 No.3の253〜259ページに掲載された「デジタル画像の合成(Compositing Digital Images)」と題する記事において、「超要素(super−elements)」を形成するための要素を取りまとめて合成する方法を発表している。ポーターとダフは、「α」チャンネルを持つ2つの画像を合成する方法についての検討もしている。単一画像の2つの部分を組合わせるには、主に13の合成演算がある。これらの合成演算は下記の表1に示されている。この表において、Dcは予め掛けられた目的色、つまり結果として生じる色であり、Doは目的値、つまり結果として生じるαチャンネル値であり、Acは第1のソースAの第1部分の予め掛けられた画素色であり、Aoは色がAcである画素に対応するα値であり、Bcは第2のソースBの部分画像の予め掛けられた画素色値であり、そして、BoはソースBの、Bcに対応する画素のαチャンネル値である。
【0006】
【表1】
【0007】
異なる演算子を利用して2つの異なる画像を組合わせる多種類の方法が表1に示されている。上記以外の演算子を利用することも可能である。上記以外の演算子は主に特殊効果を実行するために使用することもできる。
【0008】
「pulsW」演算子の「包み込む」性質とは、例えばAc + Bcの和が色成分の最大値より大きい場合に、その色空間で最小値を参照しながら始めからやり直すように値が「包み込まれる」ものである。また、「plusC」演算子に使用される「クランピング」処理は、例えばAc + Bcの和が色成分最大値より大きい場合に、その和を色成分最大値にクランプする動作を含む。
【0009】
図4は、2つの完全に不透明な円Aと円Bを表1に示す様々な演算子を用いて合成して得られた、様々な最終画像の例を示している。なお、演算子「rover」と、「rin」と、「rout」と、「ratop」とはオペランドを交換して「r」(逆(reverse))演算子にしたもので、それぞれ対応する「over」と、「in」と、「out」と、「atop」演算子に対して行われたものである。
【0010】
近年、POSTSCRIPT(商標)等のページ記述言語の形式によるグラフィックス言語が開発されている。これらの言語は比較的複雑なプログラミング言語に完全な機能性を提供するものであるため、反復概念や、制御の流れや、画像成分の一連の処理の定義を用いることによって、複雑な画像をコンパクトに表現することを可能にした。これらのページ記述言語は、アプリケーションの作者がプリンターの機種に付随するどのような詳細な制約にも束縛されないようにするために開発されたもので、プログラムの移植性向上に役立っている。また、これらの言語により、テキストや、スプラインを基本としたグラフィカルオブジェクトや、サンプルされた画像の拡張補助を行なうことができる。従って、この言語のインタープリタを製造し、例えば印刷機器に備えることもでき、そうすることによって簡潔に複雑な画像を表示することができる。言語の解釈は機器に従属するために、このようにページ記述言語は1つの出力機器から他の出力機器への移植性を助長する。POSTSCRIPTなどの言語は元来、ビットマップページまたはスクリーンの見え方を表し、ビットマップ画像上に不透明な画材で作画する概念に基づくグラフィックの原点を利用するために創られたものであった。
【0011】
ほとんどのプログラミング言語に見られるように、ページ記述言語はしばしばオペランドと、新しい結果や効果を産み出すためにオペランドに作用する演算子とによって構成されている。オペランドは、線や、弧や、曲線や、線やスプラインの集合や、テキスト列や、サンプルされた画像などの基本的でグラフィカルなものを含むこともあり、演算子によって操作されるように設計されている。演算子は下記を含む数多くの異なるカテゴリーに分類されている。
【0012】
1. 多種のオペランドやグローバルステータス(gloval status)の変数の現在の属性を決定する演算子、
2. 基本的存在物が定義される様々な座標系を変更する演算子、
3. 多種の経路を定義するためにある基本的存在物を更新することによって、複雑なオブジェクトの構成を可能にする経路演算子、
4. 出力されたページに現れる個々のドットの色を最終的に決定する画像データを生成する、多種の「描画」演算子、
5. 特殊クラスの演算子は、通常、テキストやフォントを特定したり、更新したり、選択したりするために使用される。これは、準備されて定常的に使用される文字フォントの特殊な性質によるものである、
6. プリンタやスクリーンなどの表示装置への画像の出力を制御する為に使用される、様々な機器セットアップ及び出力演算子。
【0013】
【発明が解決しようとする課題】
残念ながら、POSTSCRIPT等の言語は、フレームバッファ等の上に不透明な画材で描画を行う「機器のモデル」に左右される。フレームバッファの利用は膨大な記憶量を必要とし、また、現代における画像技術は高画質の出力を要求するため、画像を作成するためには膨大な記憶量と計算量とを必要とすることになる。更に、作画技術を利用するに当たっての不効率性は、出力解像度の向上に伴い一層悪化している。
【0014】
本発明は上記従来例に鑑みてなされたもので、グラフィカルプログラミング言語で定義されたプログラムの解釈を通して、画像生成のより進歩した形態を提供することを目的とする。
【0015】
【課題を解決するための手段】
上記目的を達成するために本発明の画像出力方法は、以下の様な構成からなる。即ち、
グラフィカルプログラミング言語で定義されるプログラムを解釈して画像表示を行う制御装置の画像出力方法であって、
グラフィック要素の組合わせ又は描画を含む記述列を分析し、当該グラフィック要素の組合わせを、ノードが演算を表わし、該ノードの子孫が演算のオペランドを表わすエクスプレッションツリーのノードへ変換する工程と、
ノードのグラフィック要素の境界を示すバウンディングボックスを決定し、最小化する工程と、
前記最小化されたバウンディングボックスに基づいてエクスプレッションツリーを修正する工程と、
前記修正されたエクスプレッションツリーを対応する命令の集合に変換して命令記憶器に記憶する工程と、
前記命令記憶器から命令を読み出して実行することで出力機器に描画する描画工程とを備える。
【0016】
【発明の実施の形態】
以下添付図面を参照して本発明の実施の形態を詳細に説明する。
【0017】
発明の実施の形態において、基本となるグラフィック要素は下記の「基本的なタイプ」から構成される。即ち、
1. 様々なサイズで詳細に記された、様々なフォントを含むテキスト、
2. 経路としても知られるスプラインデータにより定義される輪郭を持つオブジェクト、
3. 走査された画像、またはグラフィック要素を形成する過去に作られた画像などの画素データ、
4. ページの背景として使用され、少なくとも生成される画像と同じ大きさである「オール(all)」として知られるグラフィック要素、
である。
【0018】
また、色及びテキストグラフィック要素は下記項目を含む属性を持つ。即ち、
(a) 色、濃淡のない色であるか、2色の混合色であるか、または画素単位を繰り返したタイルであるか、
(b) 色データと同じくバリエーションの選択が可能である透明度、つまり、αチャンネルデータ、
(c) 経路又はテキストグラフィック要素の描画を制御する塗りつぶし及び/又はストロークデータ。「グラフィカルコンテキスト」はそれぞれのグラフィック要素に関係する属性値を与える。新しい要素が作成されたとき、作成時のグラフィカルコンテキストにおける属性値は、新しいグラフィック要素に適用される。
【0019】
従って、プログラミング言語自身は、下記のデータ形式を含む。即ち、
1. フォントと、大きさと、位置と、他の望ましい特徴を定義するテキストオブジェクトで、テキストの色や、透明度や、塗りつぶし又はストロークパラメーターは定義しない、
2. 特定のオブジェクト形状の輪郭を定義する経路オブジェクトであって、その色や、透明度や、塗りつぶし又はストロークパラメーターは定義しない、
3. 画素データや、「オール」グラフィック要素や、グラフィック要素や、グラフィック要素を生産する為にいくつかの合成演算子による多数の他のグラフィック要素を集めた合成処理を表現するグラフィック要素、又はテキストオブジェクト、又は対応する画素形式で描画される経路オブジェクト。
【0020】
画像合成は、画像をオペランドとして取り、画像を結果として生成する二項演算子1組を提供する。グラフィック要素の色情報は時折使用されない場合もあるが、画像は、それぞれすべての画素毎に色及びα、つまり透明度チャンネル情報を持つように定義される。全てのタイプのグラフィック要素を組合わせ又は合成できるようにするために、テキストと、経路と、「オール」のグラフィック要素とを含む全てのグラフィック要素が、それらが合成される前に画素画像へと走査変換されたように扱われる。加えて、グラフィック要素は、オペランドを形成するときに通常概念的に無限に広がるものとして取り扱われる。グラフィック要素の境界の外側の画素は完全に透明であるものとして扱われる。それぞれのグラフィック要素の拡張は、一画素が一オペランドの通常の拡張範囲内にあって、他のオペランドの範囲にない場合に、結果を定義することができるように実行される。更に、いくつかの特殊な演算子は色がいつも定義されていることを要件とするため、完全に透明な画素は描画色空間において0成分として表現される色を取る。
【0021】
発明の実施の形態における描画言語は、通常のコンピューター言語と同様に多数の異なる方法で「実行」される。コンピュータ言語は通常、対応するコンピュータによって「解釈」又は「コンパイル」手段を介して「実行」され、これらの手段はコンピュータ言語コンパイラライティングの技術の当業者にとって公知である。
【0022】
インタープリタ及びコンパイラは通常言語を定義し、コンテクストの無い、文法から構成されている言語記述の為の分析木、つまりエクスプレッションツリーを構成する。インタープリタ及びコンパイラの更なる説明については、標準的テキストである1986年にAddison−Wesley Publishing Company, Reading, massachusettsから出版されているアホ、セシ、及びウルマンの共著の「Compilers Principles, Techniques, and Tools」を参照するとよい。
【0023】
本実施の形態においては、プログラミング言語で書かれたプログラムの実行は、実行速度、大きさ、実行し易さのためにインタープリタにより行われる。
【0024】
プログラミング言語のそれぞれの文については、インタープリタは文を分析し、実行可能な形式の文に変換する。そして、この実行可能な形式のものが実行される。この実行可能な形式の文が実行されている間に、グラフィック要素に対して演算が実行される。これらを行うために、即時実行や遅延実行等を含む多数の異なる技術を利用することが可能である。
【0025】
[即時実行]
グラフィック要素に応用されるそれぞれの演算については、結果として得られる画素画像を保存するのに充分なラスター記憶が作られ、その演算は、オペランドを合成して出力ラスター画像領域の画素データを生成するために使用される。このラスター画像領域は演算の結果であるグラフィック要素となる。描画演算が実行されると、望ましいグラフィック要素のラスター画素が出力装置に送信される。
【0026】
この技術は、多くの中間グラフィック要素がプログラムの実行中に使用された場合に、大容量の記憶装置を必要とするという欠点がある。また、グラフィック要素の次の使用に関する情報がその計算時又は生成時に提供されないため、以降の最適化が殆どできないという欠点がある。
【0027】
図4から図6を参照しながら、即時実行モデルに関わるインタープリタの演算例を示す。下記の様な命令列の例を仮定する。即ち、
【0028】
【表2】
【0029】
発明の実施の形態にかかるプログラミング言語において、上記の「A = B」の表現はAの値にBの値を割り当てることを示す。また、「A: = B」の表現は「A = A rover B」の表現を短縮したもので、「A rover B」は「B over A」と同じ結果を導く。
【0030】
「text」関数は、発明の実施の形態において上記に示すように、色情報や透明度情報を持たず、文字情報と、フォント情報と、サイズ情報と、位置情報のみを持つテキストオブジェクトを生成する。しかし、A: = text (”a”) の文は「A = A rover text (”a”)」と同じである。演算子「rover」をテキストオペランドに対して実施するときは、テキストオペランドは先ずグラフィック要素に変換される。この変換は、属性を決定するようにテキストを観念的に描画することによって行われる。「text」を呼び出す関数を実行するに当たり、現在点は、描画されたグラフィック要素のテキスト列の結果として得られる幅だけ動かされる。図5は第1命令完了後の対応するエクスプレッションツリーである。
【0031】
表2の第1命令(1)は、文字「a」に対応するグラフィック要素をAの値として割り当てることである。この割り当て結果は図10に示されている。
【0032】
インタープリタによって実行される第2命令は文字「a」の隣の文字「b」に対応するグラフィック要素の描画を意味する。この命令の実行後の結果のエクスプレッションツリーは図6に示すとおりであり、Aの値の状態は図11に示すとおりである。
【0033】
命令3は既に描画された文字のとなりの文字「c」に対応するグラフィック要素の描画を意味する。一連の命令(1)から(3)に対応するエクスプレッションツリーを図7に示し、Aの値の状態は図12に示す。
【0034】
命令4は円を含むグラフィック要素を作成し、値Bによって定義されるグラフィック要素に生成したグラフィック要素を割り当てる。この命令に対応するエクスプレッションツリーを図8に示し、値Bの状態を図13に示す。
【0035】
命令5はグラフィック要素Bをグラフィック要素Aで定義されるグラフィック要素の上に合成する動作を含む。図9は、命令5を実行した後のグラフィック要素Aの結果として得られるエクスプレッションツリーを表している。部分10はAの過去のエクスプレッションツリーである図7のエクスプレッションツリーを表し、命令5の右辺に現われている。図14は、即時実行方法が使用されたときの値Aに対応する状態を示す図である。
【0036】
[遅延実行]
コンパイラの実行に対する第2のアプローチは、遅延実行モデルである。このモデルにおいて、プログラム文形態であるグラフィック要素に対して行うそれぞれの演算について、その演算を表すエクスプレッションツリーのノードが作成される。作成されたエクスプレッションツリーのノードは演算、または演算子を記録し、そのエクスプレッションツリーのノードの子は演算のオペランドである。そして、エクスプレッションツリーのノードは演算の結果であるグラフィック要素となる。1つ以上の命令が実行されると、前の演算によって作られたエクスプレッションツリーは、時折、図5から図9に示されるような方法で更に複雑なエクスプレッションツリーを創る演算と更に組み合わされる。
【0037】
続いて描画演算が実行されると、希望するエクスプレッションツリーは、繰返して横断(traverse)され、希望する画像を作るために希望する演算が実行され、得られた画像は出力機器に送られる。
【0038】
この技術は、グラフィック要素の後の使用についての情報が分かるまで、描画演算が延期され、生成されるという点において有効である。従って、プログラムの実行が終了するまでグラフィック要素のラスタ画素を記憶するメモリを割り当てる必要がなく、グラフィック要素の後の使用を考慮した最適化を行なうことができる。
【0039】
次の2つのアプローチが、インタープリタの実施で使用することができる。
【0040】
1.「ポストフィックス(postfix)」、つまり「スタックベース」のアプローチであって、グラフィック要素はスタック上の成分に対して実行されるオペランド及び演算子として、合成スタック上にプッシュされる。従って、二項演算子は先頭から2つのスタック登録項目を合成して、得られた結果を元のスタックへ戻すことによって、それらを削除することができる。入力されたページ記述の全ての命令が終了すると、スタックの先頭が出力機器で描画される。
【0041】
2.「挿入辞(infix)」、つまり「表現ベース」のアプローチであって、元来のグラフィック要素は直接演算されるか、変数中に記憶される。演算子はこの元来のグラフィック要素、既に変数中に記憶されているグラフィック要素、あるいは準表現(subexpressions)を組合わせることによって、変数中に記憶されるか、更に他の演算子によって組合わせることのできる新しいグラフィック要素が作成される。「ページ」等のあらかじめ決められた変数を割り当てられたグラフィック要素は、出力機器にて描画され得る。
【0042】
上記2つのアプローチの違いはプッシュダウンオートマトンとチューリングマシンのそれぞれのパワーの違いに類似している。
【0043】
インタープリタの好適な実行として、第2の遅延実行モデルが利用される。そして、
1. グラフィカル演算が延期されて、エクスプレッションツリーが作られる、
2. 「挿入辞」アプローチがエクスプレッションツリーの実行のために使用される、
3. 経路輪郭をもつ全てのオブジェクトと、文字と、画像とが、無限に続く画素画像によって構成される基礎グラフィック要素へと先ず概念的に変換される。そして、二項及び単項演算子の両方を含む表1で定義される演算子を利用して、合成が行われる。
【0044】
一旦画像のためのエクスプレッションツリーが生成されると、画像は適切な出力機器で「描画」される準備が整う。出力機器のグラフィック要素を表す「ページ」などの予め定められた変数を利用し、この変数に対応するエクスプレッションツリーを描画することによって、出力画像が描画される。出力機器が1走査線毎に出力画像を受け付けるとすると、以下のような多数の異なる描画技術が可能である。
【0045】
1. それぞれの走査線毎に、出力された変数の為のエクスプレッションツリーは横断され、それぞれのグラフィック要素の描画と演算子の合成はその走査線について適切であるように行われる。
【0046】
2. 走査線毎の二分木横断はコンピュータ時間の観点からすると時間のかかる工程であることを認知することによって、線形描画リストがエクスプレッションツリーから先ず生成される。続いて、それぞれの走査線について、それぞれのグラフィック要素は要求通りに描画され、それぞれの合成演算子はその走査線について適切であるように実行される。この実行形態は、エクスプレッションツリーの評価された準部分に相当する中間結果をスタックが保持することを必要とする。
【0047】
3. 走査線毎の線形描画リストを全て走査することは非効率であることを認知することで、ある特定のグラフィック要素の走査線から線形描画リストのソートが始められる。それぞれの走査線を描画する時に、現在描画されるべき走査線に影響を与える線形描画リストのグラフィック要素全てを含むように、アクティブリストがメインテナンスされる。それぞれの走査線の始めでは、その走査線を開始する命令はアクティブリスト中に併合され、既に適切でない命令はアクティブリストから除かれる。これは当業者にとって公知の表示リスト命令のアクティブリストのメインテナンス技術と類似している。
【0048】
上記第3のアプローチの概念が一度理解されると、この概念の解釈を助けるために、ページ記述プログラミング言語文の解釈はコンパイラによって行われる演算に擬せられる。元々のエクスプレッションツリーはコンパイラの分類木に擬することができ、描画リストの生成はコンパイラのコード生成フェーズに擬することができ、分類木から作成される線形描画リストは組立命令又はいくつかのコンパイラで利用される中間コードに擬することができ、そして線形描画リスト描画はコンピュータによる組立言語命令の実行に擬することができる。
【0049】
ページ記述言語命令のある特定の集合に対するエクスプレッションツリーは、ページ記述中に含まれる文を実行することによりインタープリタによって構築される。このページ記述中に含まれる文は、C、Pascal、Algol等の現代のプログラミング言語に於て提供される、「while」ループや、条件文や、他の通常の構造を含み、これらはプログラミング言語の一部を形成すると見做される。ある特定の変数に記憶されたどのエクスプレッションツリーも、ページ記述内又はページ記述言語プログラム中の後続のページのページ記述内で再利用することができ、どのエクスプレッションツリーも外部又はユーザーの視点から更新されていない状態で残しておくのが非常に望ましい。しかし、一度インタープリタがエクスプレッションツリーの構成を終了すると、エクスプレッションツリーの構成を並べ変える可能性のあるコンパイラ形態の最適化が可能である。従って、表現処理の一端としてこれらの最適化を可能にするためにツリー中で2組のポインタが使用される。これらのポインタは、ユーザーポインタと、ワーキングポインタと呼ばれる。インタープリタが初めにページレイアウトプログラム記述からエクスプレッションツリーを構成するとき、ユーザーポインタが利用される。ページレイアウトを表現するエクスプレッションツリーが描画の為に後で処理されるとき、ワーキングポインタが使用され、ユーザーセットポインタはそのまま残される。
【0050】
エクスプレッションツリーの構成が完成すると、描画リスト生成処理が開始される。この描画処理は、エクスプレッションツリーに対して多数の最適化工程を実施することによって開始される。これらの工程は、描画リスト生成処理を説明した後に説明する。
【0051】
描画リスト生成処理は、通常のコンパイラによって実行される組立コード又は中間コード生成に類似している。描画リストの項目は、グラフィック要素を合成する命令や、又はその他の行動を実行させる命令と考えることができる。
【0052】
描画リスト生成へのアプローチは2通りある。1つはハードウエア補助の描画装置に、より適するものであり、他方は「ソフトウエアのみ」による実施に適している。これらのアプローチは共に、将来実施する合成のために最新の合成演算結果を保存するための描画スタックを使用しなければならない。このソフトウエア指向のアプローチは、グラフィック要素をスタックへプッシュする命令か、またはスタック上のオペランドに対して演算を行う命令のどちらかに従って、描画スタックを用いるとうまく作動する。ハードウエア補助のアプローチは「アキュムレータ」の利用を前提とする。命令は、アキュムレータへグラフィック要素をロードするか、またはグラフィック要素を合成し、アキュムレータの内容を描画スタックへプッシュするか、スタックからポップした成分をアキュムレータへ合成する。
【0053】
勿論、もし指示された非周期的なグラフが許可されるとすると、描画スタック自身では不十分であり、共通の準表現を記憶するために一時記憶空間を追加することが必要となる。
【0054】
ハードウエア補助の「アキュムレータ」アプローチについては、「命令集合」が表3に示すとおりに実施される。
【0055】
【表3】
【0056】
表3において、「acc」はアキュムレータ(accumulator)を指し、「M」は希望する色変換関数を指す。
【0057】
変数Aはあらかじめ定義されたどのグラフィック要素または、スタックの先頭にあるグラフィック要素をポップさせるオペランド「pop」でもよく、それを命令のオペランドとして使用してもよい。
【0058】
上記全ての命令は、バウンディングボックスを与えられ、その内部で演算が行われる。
【0059】
ハードウエアのために設計された累算ベースのアプローチとソフトウエアのために設計されたスタックベースのアプローチの対応は、下記のとおりである。
1. 「clear」及び「load」命令は、「clear」命令が最適化されたとき以外は、片方が他方の後に実施される。それらは不透明度0の領域に囲まれたスタック上にオペランドをプッシュすることに対応する。従って、「clear」命令は続けてロードするものがないときはそれだけを送る。
2. 「push」命令は飛ばしてもよい。
3. 「over」命令などの命令に対して行われるオペランド「pop」は、スタックの先頭から2つの成分を合成し、結果の合成成分をスタックに残すことを意味する。
4. グラフィック要素であるオペランド「A」は、グラフィック要素Aをスタックへプッシュし、スタックの先頭から2つの成分を合成し、結果の合成成分をスタックの先頭に残すことを意味する。
【0060】
エクスプレッションシンタックスツリーが描画リストへ変換されるとき、エクスプレッションシンタックスツリーを介していくつかのパス(passes)が作られる。これらのパスは以下の仕事を行う。
1. 描画ハードウエア(又はソフトウエア)によって補佐されない基本事項を表現に拡張する。
2. 単項最適化を行う。
3. エクスプレッションツリーのリーフノードと内部ノードのバウンディングボックスを決定する。
4. バウンディングボックスの最小化を行う。
5. クリッピング経路を検出し、クリップノードにラベルをつける。
6. 最適化を行う。
7. エクスプレッションツリーを対応する描画命令集合リストへ変換する。
8. ソートされた表現命令リストを作成する。
【0061】
上記のパスは分割された見出し毎に、詳しく説明される。
【0062】
<1.描画ハードウエア(又はソフトウエア)によって補佐されない基本事項の拡張>
多種類の基本関数はハードウエア又はソフトウエアの実行によって補佐されないことが多い。一例として、2つの独立画素列が1つのオペランドを形成するために組合わせられなければいけない、というようなことがある。例えば、もし色及び不透明さが共に画像の一部を形成し、しかしながらそれらが2つの異なる変数からきている場合、ハードウエアは色を表す1つの画素列を、不透明さを表す第2の画素列として同時に組合わせることができないこともある。こういう場合、この状況を表現する基本事項は、
「色=A、不透明さ=B」
である。
【0063】
この基本事項は、この時点で、
「(色=A、不透明さ=完全に不透明)in(色=0、不透明さ=B)」
によって置き換えらることができる。
【0064】
<7.エクスプレッションツリーの、対応する描画命令集合リストへの変換>エクスプレッションツリーを、対応する描画リスト(パート7)へ変換する処理は、下記の疑似コードによって記述することができる。即ち、
となる。
【0065】
上記の翻訳処理において、 関数「reverse(n.operation)pop」はパラメータ「n.operation」の逆の演算を作る。例えば、「rover」は「over」の代わりに創られ、「over」は「rover」の代わりに作られる。更に正式には、演算子「op」が与えられているとすると、「revop」で定義される逆の演算子はA op B = B revop Aのような演算子である。
【0066】
上記の翻訳処理はルートノードを飛ばして、命令「clear root.bounding−box」を先ず発行する動作へと移ることによって開始され、そして、ルートノードを主題とするdo_node(root)を呼び出す動作を行う。
【0067】
更なる最適化の実行として、クリップされる形状の「クリッピングスタック」を利用することもできる。描画スタック上の中間結果ではないグラフィック要素の組合わせ動作は、クリッピングスタックの全てのクリッピング形状の共通部分にクリップされる。これは描画演算の効率を向上させる。従って、例えば「load n.operand」 又は「n.operation n.left−operand」等のグラフィック要素にかかる命令が生成されたときはいつでも、オペランドがクリップされるべき状態に対応する状態にクリッピングスタックを置く必要のある「push clip」又は「pop clip」命令によって行うのがよい。
【0068】
<3&4.バウンディングボックスの決定と、バウンディングボックスの最小化>
上記に於ては、それぞれのグラフィック要素が観念的に無限に広がるものと仮定した。明らかに、2つの無限のグラフィック要素を合成するためには、無限の時間でないとしても、膨大な時間がかかる。バウンディングボックスを使用する技術は、それぞれの合成処理の対象となる画素数を大幅に減らす為に利用される。バウンディングボックス最小化処理は、最終画像を作るために必要なそれぞれのグラフィック要素の最小領域部分を探すために設計されたものである。バウンディングボックス最小化は、合成する画素数を更に最小化するために、エクスプレッションシンタックスツリーのそれぞれの内部ノードの最小領域を探す役割をも果たす。更に、バウンディングボックス最小化は、最終画像に対して寄与しないエクスプレッションシンタックスツリーのリーフ、または、全ての部分木を検知する。エクスプレッションツリーによって表現される、完全にクリップアウトされたピクチャー表現成分を削除する処理は、「カリング(culling)」と呼ばれる。バウンディングボックス最小化処理の結果は、それぞれのノードに、そのノードに対応する画像を作成しているときに作画者が必ず塗潰さなければならないバウンディングボックスを与える為のものである。反対に、バウンディングボックスは描画スタックへ記憶したり読み出したりできる唯一の領域であるため、作画者は画像を作成しているときに、決してバウンディングボックスの外側を塗ってはならない。
【0069】
つぎに、図15から図18を参照にして、ボックス最小化処理の簡単な例を説明する。図15は、例えば下記の文から形成される画像を示す図である。
【0070】
【表4】
【0071】
この文の集合のエクスプレッションツリーを図16に示す。
【0072】
バウンディングボックス最小化は、2つのパス上で行われる。第1のパスはエクスプレッションツリーの深さ優先ポスト順横断である。この第1のパスにおいて、それぞれのノードの「自然な」バウンディングボックスが決定される。リーフでは、これがグラフィック要素のバウンディングボックスとなる。内部ノードでは、左右の部分木のバウンディングボックスは現ノードの合成演算に対応する方法で組合わせられる。この組合わせを表5に示す。
【0073】
【表5】
【0074】
つぎに図17を参照にして、上記の文と図16のエクスプレッションツリーに関連させながらこの処理の例を示す。上記の文で描画される画像の第1の部分は文字T20に対応するグラフィック要素である。この描画はページ21で起こり、あらかじめ定義された空間、つまりページ21に置かれる走査変換された部分Tの唯一の部分である「バウンディングボックス」22の内部でしか起こらない。つぎの文(7)は、現在のページ画像を文字E24に対応するグラフィック要素と組合わせる。この場合も、この文字はあらかじめ決められたバウンディングボックス25を持つ。この2つの文字EとTはover演算子26を使用して組合わせられる。従って、over演算子26のノードと共に記憶されるバウンディングボックス27は、2つのバウンディングボックス22と25の組合わせである。バウンディングボックス最小化ルーチンが深度優先ポスト順のエクスプレッションツリー横断をするので、与えられたノードの子孫ノードは、現在のノードがビジットされるまえにビジットされ、全てのリーフノードを先にビジットする。それぞれのリーフノード28から32にとって、描画されるべきグラフィック要素のバウンディングボックスは図示のとおりに、先ず計算される。リーフノードのバウンディングボックスの計算に続いて、内部ノードのバウンディングボックスが計算される。
【0075】
内部ノード26のバウンディングボックス27を計算した後、バウンディングボックス27と28がover演算子を再度用いて組合わせられて34となる。同様に、バウンディングボックス35は、バウンディングボックス29と34をover演算子37を用いて組合わせて作られたものである。
【0076】
図4に示されるように、2つのグラフィカルオブジェクトAとBがover演算子を用いて組合わせられた場合、結果として得られる画像はAがBの上位にあるAとBの組合わせである。従って、バウンディングボックスはAとBの組合わせ領域上にまで広がることが要求される。「in」演算子を用いたAとBの組合わせは、画像のAとBがオーバーラップする部分に対してのみ定義される。よって、その組み合わせ領域のバウンディングボックスは、AとBの2つのバウンディングボックスの共通部分である。
【0077】
ノード39で2つのバウンディングボックス30と35はin演算子を用いて組合わせられ、その結果、バウンディングボックス40は2つの領域30と35の共通部分となる。
【0078】
ノード41では、2つのバウンディングボックス31と32がout演算子を使用して組合わせられる。図17に示すとおり、ノード41におけるバウンディングボックス42はバウンディングボックス32と同じものとなる。最後にノード43において、バウンディングボックス40と42がover演算子を用いて組合わせられる。ノード43におけるバウンディングボックス44は、2つのバウンディングボックス40と42を一体にしたものである。こうして、バウンディングボックス判定の第1段階を完了する。図17から分かるように、バウンディングボックス処理は、演算子を利用して複合した結果の領域によって決定される合成されたバウンディングボックスの大きさを持つ、組合わされた2つのグラフィック要素のバウンディングボックスを決定する処理を含む。
【0079】
バウンディングボックス最小化の第2段階つまりパスは、深さ優先プリオーダーのシンタックスエクスプレッションツリーの横断を含む。第2のパスでは、それぞれの内部ノードの子孫のバウンディングボックスが親のバウンディングボックスによって重ねられる。新しい子のバウンディングボックスがその子孫のバウンディングボックスへ重ねたり、最小化に使用することができるように、この処理は繰り返し行われる。つぎに図18を参照して、この処理の例を説明する。図18において、図16と図17と同じエクスプレッションシンタックスツリーを示す。プレオーダーな横断は、先ず現在のノード、そしてその左右の子へのビジットを行う。従って、ノード43から始めると、バウンディングボックス44はバウンディングボックス40はノード39で重なり、変化は起こらない。バウンディングボックス44はまた、バウンディングボックス42と重なるが、変化は起こらない。そして、バウンディングボックス40はリーフノード45に記憶されているバウンディングボックス30と重なる。この重なりの結果がバウンディングボックス47である。
【0080】
従って、最終画像で必要とされる画像又はグラフィック要素の唯一の部分は、古いバウンディングボックス30ではなく、バウンディングボックス47によって定義される部分である。これは、画像47の部分が合成処理で必ず使用されなければならない全てのものあるであるために、合成時間を実質的に削減することになる。同様に、ノード37では、バウンディングボックス40はバウンディングボックス35(図17)と組合わせられ、削減された大きさのバウンディングボックス48となり、結果として実質的な削減となる。そしてバウンディングボックス48は、ノード50でバウンディングボックス29(図17)と重なる。バウンディングボックス領域48と29の共通部分は空となり、ノード50が最終画像を形成しないことを示す。従って、このノード(及び、もしあれば子ノード)はすべてのエクスプレッションシンタックスツリーから削除することができ、結果的に、ツリーを簡素な形態にすることができる。
【0081】
そしてバウンディングボックス34(図17)はノード36でバウンディングボックス48で区切られ、削減された大きさのバウンディングボックス51を創る。
【0082】
バウンディングボックス42はノード52でバウンディングボックス32(図17)と組合わせられ、削減は行われない。そして、このバウンディングボックス42はノード53でバウンディングボックス31(図17)と重ねられ、以前のバウンディングボックス31と比べて削減された大きさのバウンディングボックス54を創る。
【0083】
この処理は最終画像の部分を形成するために描画されるべき領域において、できれば実質的な削減が行われるように、エクスプレッションシンタックスツリーのそれぞれのノードについて行われる。更に、バウンディングボックスが空領域に削減された場所は、エクスプレッションシンタックスツリーのこれらの部分は最終画像部分を形成しないので、全ての部分木を削除することができる。
【0084】
バウンディングボックスの大きさを更に縮小するために利用される更なる最適化は、オペランドの1つが不透明なオブジェクトの下にある時を検知することである。例えば、そのオペランドが「over」オペランドで、右側のオペランドのバウンディングボックスが完全又は部分的に左側の不透明なオペランドのバウンディングボックスに覆い隠されているならば、右側オペランドのバウンディングボックスを削減又は削除することができる。例として、図30にバウンディングボックス102を持つオブジェクトA100とバウンディングボックス103を持つオブジェクトB101の2つオブジェクトを示す。また、図31にオブジェクトBが部分的にオブジェクトAの不透明部分に覆われていることを示すAoverBの演算を示す。オブジェクトBの相当の部分はオブジェクトAの不透明部分の影に隠されているので、これに対応するバウンディングボックスのオブジェクトAによって完全に覆われる部分を削減することができる。このことを図32に視覚的に示す。図32において、オブジェクトBの為のバウンディングボックスの一辺105は106となり、バウンディングボックスが削減される。
【0085】
この処理の実行の簡易な1つの形態は、不透明で、バウンディングボックス内が完全に塗りつぶされたグラフィック要素Aの為のエクスプレッションツリーのそれぞれのリーフノードを確認することである。この場合、バウンディングボックスBはバウンディングボックスAによって完全に覆い隠されるかどうかによって削減もしくは削除することができる。
【0086】
<5.クリップ経路の検出、及びクリップノードのラベリング>
図4から分かるとおり、もし「in」又は「out」演算が完全に不透明な右オペランドによって行われたとすると、その効果は左のオペランドが右オペランドの境界線にクリップされた物と同じ効果である。「in」演算では、効果は右オペランドの内側にある左オペランドの部分を示すことだけであり、「out」オペランドでは、その効果は右オペランドの外側にある左オペランドの経路を示すことだけである。右オペランドの境界線が分かっているとすると、これら「in」及び「out」演算は組合わせではなく、クリッピングによって行われる。
【0087】
この処理の簡単な例を図19から図22に示す。先ず図19において、実行したい演算は「円中の四角形」である。ここで、「四角形」とはグラフィック要素60を指し、「円」はグラフィック要素61を指す。
【0088】
この処理を実行するための通常の組合わせ方法を図20に示す。図20において、円61に対応するグラフィック要素はロードされ画像平面62上に表される。続いて、図21に示すように、画像62(図20)は、グラフィック要素60からの色データ情報を持つ円63を創るための、四角形グラフィック要素に対する台紙として使用される。
【0089】
図22に、図19の動作を行う更に効果的な方法を示す。この場合、グラフィック要素60は、最終出力64を作成するために、グラフィック要素61の境界線に対してすぐにクリップされる。
【0090】
合成とクリッピングのどちらがコンピュータ時間と必要メモリ空間の面でより効果的な方法であるかということは、いつも明らかなわけではない。しかしながら、下記の観察は注目するに値するものである。
1. 不透明のグラフィック要素が右オペランドであるときに、グラフィック要素が「in」演算の左オペランドとして使用されるならば、クリッピングは左側のオペランドの可視部分の選択と、それらを合成することのみを含む。反対に合成は、現在の絵を保存したり、右側オペランドのグラフィック要素全体を描画したり、左側オペランド全体を合成したり、記憶された絵を最終的に合成し直す動作を含む。
2. 画像をクリッピングすることにより、合成されるべき画素データの量を大幅に削減すると共に、合成処理以前に生成される画素データの量を減らすことができるので、多大な節約がなされる。
3. クリッピングオブジェクトが非常に複雑であるため、クリップされるべきオブジェクトをクリッピングオブジェクトに重ねるための総計算が、削減した合成処理の利益に値しないときがある。クリッピングオブジェクトが、小サイズのテキストや、非常に複雑な経路で構成されているときに、このようなことが起こる。
【0091】
なお、上記の任意のエクスプレッションツリーにおけるクリッピングによる最適化の実施において、クリッピング、つまり、完全に不透明な右オペランドの「in」又は「out」、又は、完全に不透明な左オペランドの「rin」又は「rout」は全ての二項合成演算子に分配される(つまり、これらの演算子が2つの題目を持っている。)従って、完全に不透明なグラフィック要素Cが与えられているとすると、全ての二項合成演算子opについて、下記の関係が成り立つ。
(a op b) in c = (a in c) op (b in c) 式1
このクリッピング処理は、全ての単成分演算子にも分配されており、不可視領域を、可視領域にマッピングする。この後者の場合が考慮されることはまれで、特殊ケースとして扱われる。
【0092】
クリッピングの例を、図23と図24を参照にして説明する。図23はエクスプレッションツリー65の部分の合成処理の例を示す図である。このエクスプレッションツリー65の部分は、対応する機械命令リスト66にコンパイルされる。このリスト66は現在の画像をスタック上へプッシュする動作(push)と、不透明な右側オペランドをアキュムレータへ描画する動作(load P)と、左側のオペランドを「in」演算子を使用して合成する動作(in B)と、保存された絵を合成しなおす動作(rover pop)とを含む。
【0093】
図24は、右側のオペランドが不透明なオブジェクトである場合に、合成ではなくクリッピングをする処理を説明する図である。この場合、図23のエクスプレッションツリー65は、例えば68のような(図23)「in」又は「out」演算子を用いて、グラフィック要素を不透明なグラフィック要素にクリップする場合を全てロケートするために先ず実施される。それぞれの場合、これは特殊ノードインディケーター69によって置き換えられ、クリッピングオブジェクトの境界線はばらばらのクリップリスト70に置かれる。新しいエクスプレッションツリー67が完成すると、コード列72が結果としてできる。このコード列に於て、クリップリスト70に要素1として記憶された境界Pに対応するクリップオブジェクトは、Pへのクリッピングを含むその他の命令の前に、描画リストにおける「クリップ」命令として配置される(clip P, 1)。その他の命令のすぐ前に、境界Pに対応するクリップリストの要素1はクリッピングスタックへとプッシュされる(pushclip 1)。そして、Bはクリッピングスタック中の全ての境界の共通部分を通してで描画され(over B)、クリッピングスタックの先頭のオブジェクトはポップされ、命令列は図23に示されているように続けられる。
【0094】
従って、下記の実施構想が考えられる。
【0095】
1. エクスプレッションツリーのポインタのワーキングセットは、上記の方法で変換することのできる経路のために検索される。経路又はオブジェクトが見つかると、それはワーキングツリーポインタの集合から除かれ、クリップリストと呼ばれる配列に入れられる。この配列へのインデックス(クリップID)は、最適化がinまたはout演算の結果であるかどうかの記録に加えて、現在のノードへ記録される。
【0096】
2. エクスプレッションツリーを繰り返すとき、クリップIDによるクリップを必要とするエクスプレッションツリーの後続する部分のリーフノードを付加することができるように、クリップリスト上でクリップオブジェクトに変換された全てのグラフィック要素のクリップIDの動きを追うことが必要である。始めにクリップされた部分木はどれでもクリッピングの輪郭へ変換するのに適する部分を含むため、クリップIDのスタックを保存する必要がある。クリッピングの輪郭に変換すべきグラフィック要素を見つける時はいつでもそのクリップIDをスタックへプッシュすることができ、そしてクリップされた部分木は横断され、これに応じて、スタックの先頭のクリップIDをポップすることができる。横断中にリーフノードに当たったときは、その時にスタックに存在する全てのクリップIDをそれに付加する。
【0097】
3. 描画リストが生成されたときは、クリップへ変換されてクリップリストに記憶されたそれぞれのグラフィック要素が使用される前に(例えばプログラムの始めなど)、そのグラフィック要素の生成の為に必要な「clip」命令が生成される。
【0098】
4. 描画時間「clip stack」は、様々な合成命令を取り囲む「push clip」と「pop clip」命令によって操作される。グラフィカルオブジェクトが合成されるときは、同時にクリップスタック中の全てのクリップオブジェクトへクリップする。従って、命令の描画リストの生成に当たっては、グラフィック要素が合成されるときのクリップスタックの状態を追わなければならない。もし、このクリップスタック状態がグラフィカルオブジェクトによって要求される状態になければ、クリップスタックを要求される状態にするために、命令を生成しなければならない。不可視画素を可視画素へ変換する単項演算子については、それらが利用されるときに追加のクリッピングが必要となる。つまり、演算子をグラフィック要素の可視部のみに応用し、不可視のクリップされた領域の状態をそのまま残すことが必要である。
【0099】
上記のクリッピング処理に加えて、グラフィック要素はそれらのバウンディングボックスが最小化されたことに起因する、更なるクリッピングを要求することができることは言うまでもない。
【0100】
<2.単項最適化の実施>
命令集合は、Mによって定義されるマッピングに対応して、特定のグラフィック要素の色を変化させるための命令(cmap M)を供給する。
【0101】
時々、ページ記述言語において利用できる色マップ演算は、描画中ではなく、エクスプレッションツリー段階で実施することができる。例えば、色マップを用いてグラフィック要素の色を変えることを要求されたとすると、描画処理が行われる前に要素の色を変えることが可能になり、従って、色マップ演算をエクスプレッションツリーから除くことを可能にする。しかし、時折、色マップ演算中にグラフィック要素の色がその透明度、つまりαチャンネル値と反応することがある。色マップ演算をエクスプレッションツリー段階で適用することができる否かを決定するために、この色マップ演算を慎重に分析しなければならない。
【0102】
また、グラフィック要素の色を考慮すると、どのグラフィック要素も簡略化することができる。例えば、図33を参照にすると、普通は108で示されるグラフィカルオブジェクトは、色が混ざり合った複雑な形態を持つ領域109と、一定の色混合である第2領域110とを含んでもよい。上記で概略説明したバウンディングボックス最適化処理は、領域109を囲むことのない境界を持つ最適化されたバウンディングボックス111を作るかも知れない。従って、対応するエクスプレッションツリーを評価するときに、オブジェクト108の色を領域110の一定色に相当する色へ変えることができる。
【0103】
<6.最適化>
エクスプレッションツリーにおいて、異なる形態の最適化が可能である。まず、上述したとおり、空ボックスに最小化されたバウンディングボックスを持つエクスプレッションツリー部分は、エクスプレッションツリーから削除することができる。
【0104】
演算子合成の数学的性質は、可能であればいつでもより無駄の多い演算をより効果的な演算に置き換えるように、エクスプレッションツリーを配置し直すために利用することができる。これらの代数学的性質は、結合性、可換性、及び様々な演算子の逆化を含む本質である。最適化処理はあらかじめ決められた順序どおりにツリーを横断し、それぞれのノードにおいて、最適化装置は数学的特徴から導きだされた規則のそれぞれの集合が現在のノードに適合するか否かをテストする。どの規則を応用すべきかを決定するに当たって、数学的特徴に応じてエクスプレッションツリーを更新することにより、エクスプレッションツリーの描画のコストのおおまかな進歩が評価される。与えられたノードのコストは、左部分木のバウンディングボックスの高さ(h)と領域(h × w)の線形の組合わせとして評価される。更に詳しくは、結合性の性質は、描画処理中に要求されるスタック深度を大幅に削減するために、エクスプレッションツリーを右へ傾けることに使用することもできる。可換又は逆演算子を応用してのノードの部分木の取り替えは、合成されるべき領域に関するコストが減少する場合に限り、応用するとよい。これはスタック深度を上昇させることになるが、これに対応して実行時間が減少する。
【0105】
エクスプレッションシンタックスツリーのそれぞれのノードは、バウンディングボックスの走査線数hと領域hwとを記憶する。これらは画素を単位とし表される。従って、「A over B」などの共通の演算子のコストを決定するためには、下記の要素を評価する必要がある。
・ C1overは、単純なグラフィック要素に対して「over」を実行するための、一走査線当たりのコストである、
・ C2overは、単純なグラフィック要素に対して「over」を実行するための、一画素当たりのコストである、
・ C3overは、単純なグラフィック要素の組合わせによって構成される複雑なグラフィック要素に対して「over」を実行するための、一画素当たりのコストである、
・ C4overは、複雑なグラフィック要素に対して「over」を実行するための、一走査線当たりのコストである、
・ hは、境界A内の走査線数である、
・ hwは、境界A内の画素数である。
【0106】
従って、総コストは下記のとおりである。即ち、
となる。
【0107】
結合性質は、エクスプレッションツリーを傾けるために利用することができる。傾いたエクスプレッションツリーは、しばしば実行のための時間とメモリを削減する描画命令の対応する集合となる。図25に、対応する右に傾いた部分76を形成するためにエクスプレッションツリーの部分75を右に傾ける例を示す。図25に示される演算を実行するか否かを計算する式は下記のとおりである。
【0108】
となる。ここで、fover(Z)は、グラフィック要素Zの「over」合成を行うコストである。
【0109】
Bのバウンディングボックスがいつも部分75においてY以下であり、ほとんどの場合、複雑なグラフィック要素を合成することは単純なグラフィック要素を合成することよりも難しいため、この結合性の演算はほとんどの場合は、今までよりも速いか、同じ速さで描画するシンタックスエクスプレッションツリーを提供する。ツリーはポインタを75から76へ変えるだけで変更することができる。
【0110】
可換性のこれらの演算子に関して、可換性演算子のオペランドのいくつかを互換させることも有利である。例えば、図26に示すように、「xor」演算子のオペランドは図では互換されている。互換するかどうかは左ツリーのコストと、右ツリーのコストによって決まる。従って、もし、
fxor(A) > fxor (B) 式3
ならば、オペランドは交換される。これは大抵は2つの領域AとBを描画するのに要求される記憶装置の大きさに関係し、ポインタを図26に示すように変更するだけで簡単に実施することができる。
【0111】
時々、いくつかの演算子をその逆演算子に交換しても便利である。例えば、図27は「in」演算子を、対応するポインタの交換動作によりその逆演算子「rin」に変換する処理を示す。2つの方法の提案されたコストの計算は、交換が行われるべきかどうかを決定する。下記の変換について、多数の他の最適化が可能である。
【0112】
【表6】
【0113】
また、特に、含まれる部分木が「in」又は「out」演算子の右オペランド(又は同等の「rin」又は「rout」演算子の左オペランド)である場合は、応用可能な様々な他の変換がある。
【0114】
エクスプレッションツリーに対する上記全ての最適化及び変更は、ユーザーのポインタセットが代わることがないように使用中のポインタのセットに対して行われるため、エクスプレッションツリーを変更する必要のないときには、変化は検知されない。
【0115】
一度エクスプレッションツリーが最適化されると、既に説明したように、描画リスト命令を生成するためにそれを利用することができる。
【0116】
つぎに、図28と図29を参照して、エクスプレッションツリーの操作の更に複雑な例を開示する。エクスプレッションツリー80の元の部分は、一連の中間コード命令に変換される。変換の第1の方法は、エクスプレッションツリー81の対応する最適化された部分を形成するために図28のエクスプレッションツリー80の部分を最適化することだけである。ツリーに対して行われた最適化は、「in」であるオペランド83を「rin」84へ変更する動作を含む。この演算子の変更はそのオペランドの結果的な順列を持ち、オペランドPがルートが「over」演算子86である部分木オペランドより実質的に小さい場合の結果として起こるものである。そして、最適化されたエクスプレッションシンタックスツリー81は、中間コード命令87へと変換される。この最適化の論理的根拠は、ツリー80は2つのプッシュと、ポップを必要とするのに対して、ツリー81は1つづつしか必要としないことである。従って、ツリー81に起因するより単純な命令集合は、実行速度が速く、また必要なメモリを少なくするようである。
【0117】
図29は、クリッピングが利用されたときのエクスプレッションツリー80の部分変形形式を示す。これは、図28のグラフィック要素P85が不透明なオブジェクトであって、その結果として、「over」演算子86によって生成されたグラフィック要素が不透明なグラフィック要素85と「in」演算子83を使って組合わせられることとする。図19から図22を参照して説明したとおり、不透明なオブジェクトP85に対するクリッピングを「in」演算子の代わりに使用することができる。従って、Pの輪郭はクリップリストに89として、オペランド85に関連して使用される図28の演算子83と共に記憶される。
【0118】
クリッピング処理は、全てのほかの二項合成演算子(式1参照)に分配されるため、P85へのクリッピングは図28の演算子86と91へ分配することができる。その結果、リーフノード92から94のそれぞれが、クリップリストに記憶された輪郭89に対してクリップする為にマークされることになる。
【0119】
結果として得られるエクスプレッションツリー96は、最適化されたエクスプレッションツリー97を形成するために最適化される。最適化されたエクスプレッションツリー97は、(A over B) over C = A over (B over C)の形態を持つ「over」演算子(表4に示す)のための結合規則の繰り返し実施によって、エクスプレッションツリー96から形成される。
【0120】
そして、最適化されたエクスプレッションツリー97は、中間命令98を生成するために利用される。命令リスト87(図28)を命令リスト98(図29)と比べると、リスト87は、Pをオペランドとする「rin」命令を対象とする前に、B1,B2,B3の全てのロードや合成に加えて、アキュムレータの現在の内容をスタックへプッシュするプッシュ命令を含んでいることが分かる。そして、この演算結果はスタックの先頭と(「rover pop」命令により)合成される。第2の命令集98において、クリップリストは最初に輪郭Pと共にロードされ、そして、Aは現在のアキュムレータの内容と合成され、輪郭Pをクリップスタックへプッシュし、続いて、クリップスタックの先頭にある輪郭Pを通してB1,B2,B3の合成を行う。そして、クリップスタックの先頭は、Cがアキュムレータの残りの内容に合成される前にポップされる(「popclip」命令)。命令列98は命令列87よりも実際的にはより効果的なようであり、結合性演算子の使用を合成する代わりにクリッピングすることによって実行速度が早められる。
【0121】
上述の通り、エクスプレッションシンタックスツリーから作られる命令列は、ソフトウエア又はハードウエアベースの機器での実行に用いられる。例として、ハードウエアベースのアプローチを、図34を参照にして説明する。図34に、例えば表3にあるような命令列を実行することのできる、一例であるハードウエア構造物120を示す。ハードウエア構造物120は、例えば、Morgan Kaufmann Publishers Inc.から1990年に出版されているJohn Hennessy とDavid Patterson共著の「Computer Architecture − A Quantitative Approach」の第3章から第8章のような、標準的テキストに示されている標準的なコンピュータ構造技術を用いることにより実現することができる。
【0122】
ハードウエア構造物120は、標準タイプの入力/出力インターフェイス123を使ってハードウエア構造物120とインターフェイスする、標準的な外部コンピュータシステム125の制御下において作動するように設計されている。
【0123】
上記のとおり、命令列は通常、走査線順にソートされ、アクティブリストは現走査線について外部コンピュータシステム125によって維持される。ハードウエア構造物120において、ある特定の現在アクティブな走査線の為の命令列は入力/出力インターフェイス123を介して外部コンピュータシステム125から命令記憶器121へロードされ、命令列に要求されるグラフィック要素はメモリ記憶器122へクリップリストに加えてロードされる。制御部126は活発化され、命令記憶器121から命令を読み始め、そして、再び標準技術を使用して、制御部126内に記憶されたマイクロプログラムされたメモリによって、命令列の実行を開始する。
【0124】
アキュムレータ128は一走査線分の色情報及び透明度情報を記憶するのに充分な記憶空間を持つ。スタック記憶空間130は、ある一行でスタックが成長できる最高深度を表わす、あらかじめ決められた最高数の走査線を記憶するだけの充分な空間を持つ。
【0125】
命令列中の「pushclip」命令に制御部126が当たる度に、メモリ記憶器122中のクリッピングリスト内に記憶された適切なクリッピングオブジェクトがその時のクリッピングスタック132の先頭の内容に重ねられ、その結果が新しいクリッピングスタック132の先頭の構成要素として記憶される。「popclip」命令に当たると、クリッピングスタック132のその時の先頭がポップされる。
【0126】
それぞれの合成命令については、制御部126は、2つの画素色及び不透明さ情報列に対して表1の合成演算を実施する合成部127の演算を制御する。2つの情報列のうち、第1の列はアキュムレータ128からのもので、第2の列はスタック記憶空間130からのものである(必要時)。制御部126は、クリッピングスタック132のその時の先頭要素からの画素列を合成する境界線を決定する。合成部127の結果の色と透明度の出力は131を介してアキュムレータ128へフィードバックされる。
【0127】
一旦命令列が完了すると、制御部126は、現在の走査線のためにアキュムレータ128から結果を読みだすコンピュータシステム125に通知し、その結果を望むとおりに出力又は記憶する。
【0128】
上記の発明の実施の形態は、コンピュータグラフィックスや、アルゴリズムや、データ構成や、コンピュータ構成や、コンパイラ記述の技術者にとって最大限に明確に理解しやすいような形態で表現されたものである。また、種々の最適化が可能であることは言うまでもない。例えば、ツリー横断の繰り返しの使用は、テール繰り返し、又は維持バックポインタなどの公知の方法を用いることにより削除することができる。
【0129】
更に、ページ記述言語などの標準プログラミング言語において、多様な設備を手に入れることが可能である。これらの設備は通常、言語によって異なるため、特定の言語の実際的な詳細については仮定していない。当業者はページ記述言語による上記の実施の形態を実施することが可能であることは言うまでもない。
【0130】
上記の説明は好適な実施例の動作の説明を含んでなされたがこれは発明の範囲を限定するものではない。発明の範囲は以下の請求項によってのみ限定される。関係分野の当業者には、発明の精神と範囲を越えない程度で、上記の説明から多数の変形例が可能であることが明らかとなるであろう。
【0131】
以上述べた様に上記実施の形態によれば、以下に示すような効果が得られる。即ち、
1. グラフィック要素とそれらの組合わせは言語のデータタイプであり、グラフィック要素の任意の組合わせが可能である、
2. グラフィック演算子はグラフィック要素をそのオペランドとして取り、2つの新しいグラフィック要素またはそれらの組合わせを評価する、
3. グラフィカルオブジェクトが関わる演算子のタイプ制限を条件として、グラフィカルオブジェクトは、他の標準的言語データタイプと同じ方法で使用される(例えば、除算演算子は数学的なオペランドのみを演算するが、課題演算子はどの種類のオペランドにも使用することができる)、
4. 全てのグラフィック要素と、グラフィック演算子を利用したグラフィック要素の組合わせ結果は、更なるグラフィック演算に適したオペランドである、
5. ページ記述言語の実行によって生成されたある特定のグラフィック要素の描画による出力のために、画像を生成することができる。
【0132】
なお、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明はシステム或は装置にプログラムを供給することによって達成される場合にも適用できることは言うまでもない。この場合、本発明に係るプログラムを格納した記憶媒体が、本発明を構成することになる。そして、該記憶媒体からそのプログラムをシステム或は装置に読み出すことによって、そのシステム或は装置が、予め定められた仕方で動作する。
【0133】
【発明の効果】
以上説明したように本発明によれば、グラフィカルプログラミング言語で定義されたプログラムの解釈において、画像生成のより進歩した形態を提供することができる。この結果、必要とするメモリの減少、処理速度の向上が達成される。
【0134】
【図面の簡単な説明】
【図1】2つの単純なグラフィック要素を表す図である。
【図2】2つの単純なグラフィック要素を表す図である。
【図3】グラフィック要素の合成を表す図である。
【図4】様々な合成演算子と、最終的に得られる出力を表す、発明の実施の形態にかかる図である。
【図5】第1の記述のエクスプレッションツリー(expression tree)の構成を示す図である。
【図6】第1の記述のエクスプレッションツリー(expression tree)の構成を示す図である。
【図7】第1の記述のエクスプレッションツリー(expression tree)の構成を示す図である。
【図8】第1の記述のエクスプレッションツリー(expression tree)の構成を示す図である。
【図9】第1の記述のエクスプレッションツリー(expression tree)の構成を示す図である。
【図10】第1の記述の合成処理を示す図である。
【図11】第1の記述の合成処理を示す図である。
【図12】第1の記述の合成処理を示す図である。
【図13】第1の記述の合成処理を示す図である。
【図14】第1の記述の合成処理を示す図である。
【図15】第2の記述の結果として得られる最終画像を示す図である。
【図16】第2の記述のエクスプレッションツリーを示す図である。
【図17】エクスプレッションツリー上で行われるバウンディングボックス(bounding box)処理を示す図である。
【図18】更なるバウンディングボックス最小値化を表現する、発明の実施の形態にかかる図である。
【図19】「in」演算子を使用して組合わされる2つのグラフィック要素を示す図である。
【図20】図19のグラフィック要素の第1の組合わせ方法を示す図である。
【図21】図19のグラフィック要素の第1の組合わせ方法を示す図である。
【図22】図19のグラフィック要素の第2の組合わせ方法を示す図である
【図23】エクスプレッションツリーを対応する「中間レベル」命令に変換する第1の方法を示す図である。
【図24】エクスプレッションツリーを対応する命令に変換する第2の方法を示す図である。
【図25】エクスプレッションツリー上において実施される第1の最適化を示す図である。
【図26】エクスプレッションツリー上において実施される第2の最適化を示す図である。
【図27】エクスプレッションツリー上において実施可能な第3の最適化を示す図である。
【図28】エクスプレッションツリーの部分の最適化の第1の方法を示す図である。
【図29】エクスプレッションツリーの部分の最適化の第2の方法を示す図である。
【図30】2つのグラフィック要素と、それらに対応するバウンディングボックスを示す図である。
【図31】図30の2つのグラフィック要素を合成する図である。
【図32】図30のグラフィック要素の一方の削減されたバウンディングボックスを示す図である。
【図33】発明の実施の形態で行われる色最適化を表す図である。
【図34】発明の実施の形態にかかる、命令を実施するコンピュータ構造を示す図である。
Claims (8)
- グラフィカルプログラミング言語で定義されるプログラムを解釈して画像表示を行う制御装置の画像出力方法であって、
グラフィック要素の組合わせ又は描画を含む記述列を分析し、当該グラフィック要素の組合わせを、ノードが演算を表わし、該ノードの子孫が演算のオペランドを表わすエクスプレッションツリーのノードへ変換する工程と、
ノードのグラフィック要素の境界を示すバウンディングボックスを決定し、最小化する工程と、
前記最小化されたバウンディングボックスに基づいてエクスプレッションツリーを修正する工程と、
前記修正されたエクスプレッションツリーを対応する命令の集合に変換して命令記憶器に記憶する工程と、
前記命令記憶器から命令を読み出して実行することで出力機器に描画する描画工程とを備えることを特徴とする画像出力方法。 - 前記エクスプレッションツリーのリーフノードはグラフィック要素を備えることを特徴とする請求項1に記載の画像出力方法。
- 前記エクスプレッションツリーの内部ノードは、前記エクスプレッションツリーの対応する子孫ノードを組合わせるための演算子を備えることを特徴とする請求項1または2に記載の画像出力方法。
- 前記エクスプレッションツリーのそれぞれの内部ノードは、該内部ノードの子のグラフィック要素の境界を示すバウンディングボックス情報を記憶することを特徴とする請求項1に記載の画像出力方法。
- 前記エクスプレッションツリーのそれぞれのリーフノードは、前記プログラムの前記解釈によって作成される最終画像に現われるリーフノードのグラフィック要素の部分を示すバウンディングボックス情報を記憶することを特徴とする請求項1に記載の画像出力方法。
- 前記エクスプレッションツリーは二分木であることを特徴とする請求項1に記載の画像出力方法。
- 前記エクスプレッションツリーを対応する命令列へ変換する工程はエクスプレッションツリーのルートノードを現ノードと指定する工程を含み、
(a) もし前記現ノードがリーフノードならば、現ノードのオペランドをロードする命令を生成する工程と、そうでなければ
(b) もし前記現ノードが単項演算子だけならば、現ノードのオペランドを現ノードとして、工程(a)から工程(c)を繰り返し呼び出し、前記単項演算子を実行するように命令を生成する工程と、そうでなければ
(c)(I)現ノードの第1子を現ノードとして工程(a)から工程(c)を繰り返し呼び出す工程と、
(II)もし現ノードの第2子がリーフノードならば、第2子のオペランドと、現ノードのオペランドを使用する命令を生成する工程と、そうでなければ
(III) (1)第2子のオペランドに対応するグラフィック要素のバウンディングボックスをクリッピングスタックへプッシュする命令を生成し、
(2)第2子のオペランドを現ノードとして工程(a)から工程(c)を繰り返し呼び出し、
(3)第2子のオペランドのバウンディングボックスを空にする命令を生成し、
(4)現ノードの現演算子の逆をスタックの先頭に対して実行する命令を生成する工程と、
を実行する工程とを完了することを特徴とする請求項1に記載の画像出力方法。 - 前記命令は一つの演算子又は演算コードと、多くとも一つのオペランドにより構成されていることを特徴とする請求項1に記載の画像出力方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
AU7041 | 1980-12-19 | ||
AUPM7041A AUPM704194A0 (en) | 1994-07-25 | 1994-07-25 | Efficient methods for the evaluation of a graphical programming language |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08115413A JPH08115413A (ja) | 1996-05-07 |
JP3618838B2 true JP3618838B2 (ja) | 2005-02-09 |
Family
ID=3781564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP18919895A Expired - Fee Related JP3618838B2 (ja) | 1994-07-25 | 1995-07-25 | 画像出力方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6236410B1 (ja) |
EP (1) | EP0694879B1 (ja) |
JP (1) | JP3618838B2 (ja) |
AU (1) | AUPM704194A0 (ja) |
DE (1) | DE69534558T2 (ja) |
HK (1) | HK1013706A1 (ja) |
Families Citing this family (85)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AUPO002196A0 (en) | 1996-05-22 | 1996-06-13 | Canon Information Systems Research Australia Pty Ltd | A method of optimising an expression tree for the production of images |
US6289364B1 (en) * | 1997-12-22 | 2001-09-11 | Adobe Systems, Inc. | Transparency processing in a page description language |
US6466210B1 (en) * | 1997-12-22 | 2002-10-15 | Adobe Systems Incorporated | Blending image data using layers |
AU730559B2 (en) * | 1998-05-20 | 2001-03-08 | Canon Kabushiki Kaisha | Optimisation in image composition |
AUPP568698A0 (en) | 1998-09-03 | 1998-10-01 | Canon Kabushiki Kaisha | Region-based image compositing |
US6720977B1 (en) * | 1999-11-22 | 2004-04-13 | Adobe Systems Incorporated | Processing illustration artwork |
US6909438B1 (en) * | 2000-02-04 | 2005-06-21 | Sportvision, Inc. | Video compositor |
US6950209B1 (en) * | 2000-02-07 | 2005-09-27 | Adobe Systems Incorporated | Generating knockout marks for objects |
AUPQ593100A0 (en) * | 2000-02-29 | 2000-03-23 | Canon Kabushiki Kaisha | Alpha-channel compositing system |
AUPQ697100A0 (en) * | 2000-04-18 | 2000-05-11 | Canon Kabushiki Kaisha | Rendering graphic object based images |
US7126578B1 (en) * | 2001-05-17 | 2006-10-24 | Adobe Systems Incorporated | Combining raster and vector data in the presence of transparency |
US20030160985A1 (en) * | 2002-02-25 | 2003-08-28 | Martin Bailey | Evaluating the overprint characteristics of a prepress workflow |
US20030174141A1 (en) * | 2002-03-14 | 2003-09-18 | Letellier Nolan Wayne | Sorting image primitives in generation of image page descriptions |
US7681112B1 (en) | 2003-05-30 | 2010-03-16 | Adobe Systems Incorporated | Embedded reuse meta information |
US20050035327A1 (en) * | 2003-08-14 | 2005-02-17 | Canada T. Andrew | Topical silver-based antimicrobial composition for wound care devices |
US8037102B2 (en) | 2004-02-09 | 2011-10-11 | Robert T. and Virginia T. Jenkins | Manipulating sets of hierarchical data |
US7231632B2 (en) | 2004-04-16 | 2007-06-12 | Apple Computer, Inc. | System for reducing the number of programs necessary to render an image |
US7636489B2 (en) | 2004-04-16 | 2009-12-22 | Apple Inc. | Blur computation algorithm |
US8704837B2 (en) * | 2004-04-16 | 2014-04-22 | Apple Inc. | High-level program interface for graphics operations |
US7847800B2 (en) | 2004-04-16 | 2010-12-07 | Apple Inc. | System for emulating graphics operations |
US7248265B2 (en) | 2004-04-16 | 2007-07-24 | Apple Inc. | System and method for processing graphics operations with graphics processing unit |
US8134561B2 (en) | 2004-04-16 | 2012-03-13 | Apple Inc. | System for optimizing graphics operations |
US9646107B2 (en) | 2004-05-28 | 2017-05-09 | Robert T. and Virginia T. Jenkins as Trustee of the Jenkins Family Trust | Method and/or system for simplifying tree expressions such as for query reduction |
US8130237B2 (en) | 2004-06-24 | 2012-03-06 | Apple Inc. | Resolution independent user interface design |
US8068103B2 (en) | 2004-06-24 | 2011-11-29 | Apple Inc. | User-interface design |
US7397964B2 (en) | 2004-06-24 | 2008-07-08 | Apple Inc. | Gaussian blur approximation suitable for GPU |
US7761800B2 (en) | 2004-06-25 | 2010-07-20 | Apple Inc. | Unified interest layer for user interface |
US8453065B2 (en) | 2004-06-25 | 2013-05-28 | Apple Inc. | Preview and installation of user interface elements in a display environment |
US8566732B2 (en) | 2004-06-25 | 2013-10-22 | Apple Inc. | Synchronization of widgets and dashboards |
US8302020B2 (en) | 2004-06-25 | 2012-10-30 | Apple Inc. | Widget authoring and editing environment |
US7652678B2 (en) | 2004-06-25 | 2010-01-26 | Apple Inc. | Partial display updates in a windowing system using a programmable graphics processing unit |
US8239749B2 (en) | 2004-06-25 | 2012-08-07 | Apple Inc. | Procedurally expressing graphic objects for web pages |
US7490295B2 (en) | 2004-06-25 | 2009-02-10 | Apple Inc. | Layer for accessing user interface elements |
US7620632B2 (en) | 2004-06-30 | 2009-11-17 | Skyler Technology, Inc. | Method and/or system for performing tree matching |
US7882147B2 (en) * | 2004-06-30 | 2011-02-01 | Robert T. and Virginia T. Jenkins | File location naming hierarchy |
US7730026B2 (en) | 2004-07-01 | 2010-06-01 | Apple Inc. | Method and system using reusable state information for synchronization and maintenance of data |
US7627591B2 (en) * | 2004-10-29 | 2009-12-01 | Skyler Technology, Inc. | Method and/or system for manipulating tree expressions |
US7801923B2 (en) * | 2004-10-29 | 2010-09-21 | Robert T. and Virginia T. Jenkins as Trustees of the Jenkins Family Trust | Method and/or system for tagging trees |
US7636727B2 (en) | 2004-12-06 | 2009-12-22 | Skyler Technology, Inc. | Enumeration of trees from finite number of nodes |
US7630995B2 (en) | 2004-11-30 | 2009-12-08 | Skyler Technology, Inc. | Method and/or system for transmitting and/or receiving data |
US7227551B2 (en) | 2004-12-23 | 2007-06-05 | Apple Inc. | Manipulating text and graphic appearance |
US8316059B1 (en) | 2004-12-30 | 2012-11-20 | Robert T. and Virginia T. Jenkins | Enumeration of rooted partial subtrees |
US8140975B2 (en) | 2005-01-07 | 2012-03-20 | Apple Inc. | Slide show navigation |
US8615530B1 (en) | 2005-01-31 | 2013-12-24 | Robert T. and Virginia T. Jenkins as Trustees for the Jenkins Family Trust | Method and/or system for tree transformation |
US7681177B2 (en) * | 2005-02-28 | 2010-03-16 | Skyler Technology, Inc. | Method and/or system for transforming between trees and strings |
JP4419876B2 (ja) * | 2005-03-14 | 2010-02-24 | 富士ゼロックス株式会社 | 画像処理装置 |
US8356040B2 (en) | 2005-03-31 | 2013-01-15 | Robert T. and Virginia T. Jenkins | Method and/or system for transforming between trees and arrays |
US7852353B1 (en) | 2005-03-31 | 2010-12-14 | Apple Inc. | Encoding a transparency (alpha) channel in a video bitstream |
US8452090B1 (en) | 2005-04-25 | 2013-05-28 | Apple Inc. | Bayer reconstruction of images using a GPU |
US7289127B1 (en) | 2005-04-25 | 2007-10-30 | Apple, Inc. | Multi-conic gradient generation |
US7899821B1 (en) | 2005-04-29 | 2011-03-01 | Karl Schiffmann | Manipulation and/or analysis of hierarchical data |
US8543931B2 (en) | 2005-06-07 | 2013-09-24 | Apple Inc. | Preview including theme based installation of user interface elements in a display environment |
US7844943B2 (en) | 2005-06-20 | 2010-11-30 | The Mathworks, Inc. | System and method for providing indicators of textual items having intrinsic executable computational meaning within a graphical language environment |
US8495015B2 (en) | 2005-06-21 | 2013-07-23 | Apple Inc. | Peer-to-peer syncing in a decentralized environment |
US7523146B2 (en) | 2005-06-21 | 2009-04-21 | Apple Inc. | Apparatus and method for peer-to-peer N-way synchronization in a decentralized environment |
US8793576B2 (en) | 2005-10-14 | 2014-07-29 | Apple Inc. | System and method for computing a desktop picture |
JP4935047B2 (ja) * | 2005-10-25 | 2012-05-23 | ソニー株式会社 | 情報処理装置、情報処理方法、およびプログラム |
US7752556B2 (en) | 2005-10-27 | 2010-07-06 | Apple Inc. | Workflow widgets |
US7483037B2 (en) | 2005-10-27 | 2009-01-27 | Apple, Inc. | Resampling chroma video using a programmable graphics processing unit to provide improved color rendering |
US9104294B2 (en) | 2005-10-27 | 2015-08-11 | Apple Inc. | Linked widgets |
US7743336B2 (en) | 2005-10-27 | 2010-06-22 | Apple Inc. | Widget security |
US8543824B2 (en) | 2005-10-27 | 2013-09-24 | Apple Inc. | Safe distribution and use of content |
US7954064B2 (en) | 2005-10-27 | 2011-05-31 | Apple Inc. | Multiple dashboards |
US7707514B2 (en) | 2005-11-18 | 2010-04-27 | Apple Inc. | Management of user interface elements in a display environment |
US20070216696A1 (en) * | 2006-03-16 | 2007-09-20 | Toshiba (Australia) Pty. Limited | System and method for document rendering employing bit-band instructions |
US7860826B2 (en) | 2006-08-04 | 2010-12-28 | Apple Inc. | Method and system for using global equivalency sets to identify data during peer-to-peer synchronization |
US8869027B2 (en) | 2006-08-04 | 2014-10-21 | Apple Inc. | Management and generation of dashboards |
US7760767B2 (en) | 2007-01-05 | 2010-07-20 | Apple Inc. | Wide area peer-to-peer synching in a decentralized environment |
US7657769B2 (en) | 2007-01-08 | 2010-02-02 | Marcy M Scott | N-way synchronization of data |
US8954871B2 (en) | 2007-07-18 | 2015-02-10 | Apple Inc. | User-centric widgets and dashboards |
US8667415B2 (en) | 2007-08-06 | 2014-03-04 | Apple Inc. | Web widgets |
US8156467B2 (en) | 2007-08-27 | 2012-04-10 | Adobe Systems Incorporated | Reusing components in a running application |
US8176466B2 (en) | 2007-10-01 | 2012-05-08 | Adobe Systems Incorporated | System and method for generating an application fragment |
US9619304B2 (en) | 2008-02-05 | 2017-04-11 | Adobe Systems Incorporated | Automatic connections between application components |
US8656293B1 (en) | 2008-07-29 | 2014-02-18 | Adobe Systems Incorporated | Configuring mobile devices |
US20140359585A1 (en) * | 2012-01-12 | 2014-12-04 | Thomson Licensing | Method and device for compiling a source program |
US9384711B2 (en) | 2012-02-15 | 2016-07-05 | Microsoft Technology Licensing, Llc | Speculative render ahead and caching in multiple passes |
US9235925B2 (en) * | 2012-05-31 | 2016-01-12 | Microsoft Technology Licensing, Llc | Virtual surface rendering |
US9230517B2 (en) | 2012-05-31 | 2016-01-05 | Microsoft Technology Licensing, Llc | Virtual surface gutters |
US9177533B2 (en) | 2012-05-31 | 2015-11-03 | Microsoft Technology Licensing, Llc | Virtual surface compaction |
US9286122B2 (en) | 2012-05-31 | 2016-03-15 | Microsoft Technology Licensing, Llc | Display techniques using virtual surface allocation |
US9307007B2 (en) | 2013-06-14 | 2016-04-05 | Microsoft Technology Licensing, Llc | Content pre-render and pre-fetch techniques |
US10333696B2 (en) | 2015-01-12 | 2019-06-25 | X-Prime, Inc. | Systems and methods for implementing an efficient, scalable homomorphic transformation of encrypted data with minimal data expansion and improved processing efficiency |
GB2576375A (en) * | 2018-08-17 | 2020-02-19 | Uvue Ltd | Transaction system and method of operation thereof |
CN116521153A (zh) * | 2022-01-20 | 2023-08-01 | 北京字跳网络技术有限公司 | 图形生成方法、装置、设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5307452A (en) * | 1990-09-21 | 1994-04-26 | Pixar | Method and apparatus for creating, manipulating and displaying images |
DE69225544T2 (de) * | 1991-08-13 | 1998-12-03 | Xerox Corp | Elektronische Bilderzeugung |
US5485568A (en) * | 1993-10-08 | 1996-01-16 | Xerox Corporation | Structured image (Sl) format for describing complex color raster images |
US5442738A (en) | 1993-12-03 | 1995-08-15 | Motorola, Inc. | Computer display representing structure |
US5877775A (en) * | 1996-08-08 | 1999-03-02 | Theisen; Karen E. | Method of generating a 3-D representation of a hierarchical data structure |
-
1994
- 1994-07-25 AU AUPM7041A patent/AUPM704194A0/en not_active Abandoned
-
1995
- 1995-07-24 DE DE69534558T patent/DE69534558T2/de not_active Expired - Lifetime
- 1995-07-24 EP EP95305141A patent/EP0694879B1/en not_active Expired - Lifetime
- 1995-07-25 JP JP18919895A patent/JP3618838B2/ja not_active Expired - Fee Related
-
1998
- 1998-12-22 HK HK98114910A patent/HK1013706A1/xx unknown
-
1999
- 1999-03-15 US US09/267,341 patent/US6236410B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
AUPM704194A0 (en) | 1994-08-18 |
DE69534558T2 (de) | 2006-07-13 |
US6236410B1 (en) | 2001-05-22 |
DE69534558D1 (de) | 2005-12-08 |
HK1013706A1 (en) | 1999-09-03 |
JPH08115413A (ja) | 1996-05-07 |
EP0694879A3 (en) | 1996-07-17 |
EP0694879A2 (en) | 1996-01-31 |
EP0694879B1 (en) | 2005-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3618838B2 (ja) | 画像出力方法 | |
JP3618839B2 (ja) | 画像出力方法 | |
US5745121A (en) | Methods and apparatus for optimizing the composition of graphical elements | |
US6014147A (en) | Computer machine architecture for creating images from graphical elements and a method of operating the architecture | |
US5724494A (en) | Optimization method for the efficient production of images | |
US10387549B2 (en) | Procedurally expressing graphic objects for web pages | |
US5307451A (en) | Method and apparatus for generating and manipulating graphical data for display on a computer output device | |
US5485568A (en) | Structured image (Sl) format for describing complex color raster images | |
US5596690A (en) | Method and apparatus for operating on an object-based model data structure to produce a second image in the spatial context of a first image | |
US5652851A (en) | User interface technique for producing a second image in the spatial context of a first image using a model-based operation | |
US7154503B2 (en) | Methods and systems for brush composition | |
JP3797666B2 (ja) | グラフィックオブジェクトの塗りつぶしをアクティブ化する方法および装置 | |
JP4630482B2 (ja) | 表現ツリーを生成する装置及びラスタ画素イメージを描画する装置 | |
JP3359634B2 (ja) | 境界内更新を備えたグラフィックス出力システム | |
Finne et al. | Pictures: A simple structured graphics model | |
JP4646436B2 (ja) | デジタル画像の画像処理装置 | |
EP0607131A1 (en) | Graphic segment organisation in a graphics system | |
AU695334B2 (en) | Efficient methods for the compositing of graphical elements | |
AU695554B2 (en) | Efficient methods for the evaluation of a graphical programming language | |
AU694512B2 (en) | Efficient methods for the interpretation of a graphical programming language | |
AU681963B2 (en) | Optimization method for the efficient production of images | |
AU733038B2 (en) | Efficient methods for the evaluation of a graphical programming language | |
AU695002B2 (en) | Method and apparatus for the creation of images | |
Gieseking | dvisvgm: Generating scalable vector graphics from DVI and EPS files | |
JPH08161516A (ja) | アウトラインフォント作成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040716 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040914 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041025 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041111 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071119 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081119 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081119 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091119 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101119 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101119 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111119 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121119 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131119 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |