ラスタ図形演算子

ラスタ図形のモデル

ラスタ図形とは,ピクチャ要素又は画素と呼ばれるく(矩)形の要素から構成 されるく(矩)形配列に関する情報を使用して,図形情報を表現したものをいう。 raster graphics|ラスタ図形|n|S 28.1|t この情報は,次の二通りの方法で利用される。

最初の種類のラスタ図形は,ビットマップラスタ図形と呼ばれている。 bitmap raster graphics|ビットマップラスタ図形|n|S 28.1|t SPDLでは,ビットマップラスタ図形はMaskBitMap演算子によって作られる。 第二の種類のラスタ図形は,サンプルラスタ図形と呼ばれている。 sampled raster graphics|サンプルラスタ図形|n|S 28.1|t サンプルラスタ図形は,ImageRasterElement演算子によって作られる。

これら二つの種類のラスタ図形は,それぞれ,ラスタ図形画像データを 取得し処理するための,互いに類似した機構を必要とする。 raster graphics image data|ラスタ図形画像データ|n|S 28.1|t これらの機構の大きな違いは,ビットマップラスタ図形に使用 されるラスタ図形画像データは,各画素が図形形状の内部に存在するか否かを示す 論理値から構成されるのに対し,サンプルラスタ図形に使用されるラスタ図形画像 データは,各画素の値及び/又は色を指定するためにより複雑な値を扱う, という点である。

ラスタ図形のための演算子及びデータ型によって, ラスタ図形画像の要素が要するラスタ図形画像データを, 作画する前にすべて格納できないプリンタでさえも, 大きなラスタ図形を提示できるようになる。 raster graphics image|ラスタ図形画像|n|S 28.1|t さらに,ラスタ図形画像データのフォーマットに柔軟性を与えているから, 様々なタイプのスキャナの出力,又は様々なデータ圧縮アルゴリズムによって 圧縮された出力を使用することができる。 ここで特に注意しておきたいのは,SPDLは,ラスタ図形要素の作画 によって得られる結果を規定するのであり,その結果を作り出す技法を 規定するのではない。現実の実装においては,ラスタ作画演算子の定義の中で 記述する中間ステップをすべて実行することはありえない。 ここの記述の目的は,ラスタ作画処理の主要な構成要素を,特定の 作画処理の実装に依存しないようにすることと,要求される最終結果を 正確に記述することとする。

サンプルラスタ図形

画像のサンプルラスタ図形の表現は,その画像の大量のサンプル点に おける色及び/又は明暗度に関する情報から構成され,これらのサンプル点から その画像を再構成できるようになっている。 intensity|強さ|n|S 28.1.1|t この情報の個々の単位は,サンプル値と呼ばれ,特定の画像に対するサンプル値の 集まりは,その画像のサンプルデータと呼ばれる。 sample value|サンプル値|n|S 28.1.1|t sample data|サンプルデータ|n|S 28.1.1|t このようなラスタ図形画像データは,スキャナを使用して実在する絵の上の サンプル格子の各点における値を計測して作り出したり, グラフィックスシステムによって自動生成させることもできる。

サンプル画像を作り出すためのピクチャの走査処理は,次の二つの大きな ステップから構成される。

サンプルデータから図形画像を再構築するには,これらのステップを逆順にする 必要がある。 ラスタ図形画像の再構築及び作画のためのモデルには, 次の四つのステップが含まれる。 below. ]]> 次の記述は,概念的な概要を記したもので,再構築を完全に記述するこ とを意図したものではない。再構築の完全な記述はに記す。

サンプル値ベクタの例としては,グレーレベルから構成される一要素ベクタ, 又はRGB色成分の集合から構成される三要素ベクタがある。 gray level|グレーレベル|n|S 28.1.1|t ページ像を媒体上に可視化するとき, 表示装置の中には,基本色の点のパターンを空間的に分散させることによって 直接再現できない色を近似して,見た目の表色範囲を広げているものがよくある。 この技法の通例の使用法は,黒白の二色を出力する装置上に画像の 中間調を可視化して,見た目の白黒多階調色を作り出すものである。 ラスタ画像生成装置の中には,カラーの表色範囲拡張に対して同じ手法を 施して画像データを生成するものもある。 そのような装置の例としては,黒白多階調の写真画像を表現するときに, 二値のラスタデータを生成するものがある。 SPDLのラスタ図形作画演算子は,これらの技法を使って ラスタ図形画像の表現を行ってもよい。

ビットマップラスタ図形

ビットマップラスタ図形画像データは,各画素について,それが形状の内部に 存在するか否かを示す論理値から構成されている。 ビットマップラスタ図形画像データの集まりが形状を定義し,それが 作画演算子のためのマスクとして使用される。 ビットマップラスタ図形画像データの各サンプルについて, 論理値がとりうる二つの値のうちの一つは,そのサンプルがマスクの不透明部分に あることを示し,もう一つの論理値は,そのサンプルがマスクを通して インクが付けられる部分にあることを示す。 どちらの値がマスクの不透明部分に対応し,どちらの値がマスクを 通してインクが付けられる部分に対応するのかは,MaskBitMap演算子 (28.2.1.5参照)のオペランドである画像辞書Decodeキーによって 指定される。 image dictionary|画像辞書|n|S 28.1.2|t 参照する節を28.2.1.2から28.2.1.5に修正。恐らく原文の誤り。

ビットマップラスタ図形画像データは,論理的には二値をとる。しかし, ラスタ図形画像データを操作して,マスクを定義するのに使用する最終の値を 得るには,サンプルラスタ図形画像データについて求められるものと同じ種類の 操作がしばしば必要となる。 この理由によって,SPDLでは,ビットマップラスタ図形画像データ及び サンプルラスタ図形画像データの操作のために同一の機構を使用する。

ラスタ画像画像データ

ラスタ図形技術には,次の三つの重要な特徴がある。

最初の特徴は,サンプル画像にだけ該当するが,残りの二つは, ビットマップラスタデータにも等しく当てはまる。

これらの特徴からの帰結として,ラスタ図形データを扱うシステムのすべてが, SPDLの構文及び意味を利用できるようにするために,すべてのラスタデータを 一つの標準の表現形式に変換するよう求めるのは妥当ではない。 SPDLは,標準の色表現方法及びデータ圧縮方法と同様に, 非標準のものも使用できるようにラスタ図形画像処理のための構文を定義する。 SPDLは,いかなる実装においてもサポートされるであろう手法に対しては, その手法を指定するための標準的な方法を定義する。しかし,この構文は, 私的な情報交換のための非標準の手法の使用もサポートできるようになっている。

画像辞書

ImageRasterElement及びMaskBitMap演算子は,共に, 1個のオペランドとして,画像辞書への参照をとる。 画像辞書は,サンプルラスタ図形画像又はビットマップラスタ図形画像を作画する のに必要なパラメタをすべて集めた,自己完結なパラメタの集まりとする。 画像辞書の内容は,次の事柄を指定する。

画像辞書の内容及び意味

画像辞書のキーと値との対[必す(須)及び任意選択]は,次のとおりとする。

DataSources

references a Vector of data sources. A detailed description of the required contents of DataSources in both single and multiple data source cases is given in . ]]> 必す(須)のキーと値との対 <DataSources: ベクタ> は,データソースのベクタを 参照する。 DataSourcesに求められる内容に関する詳細は, 単一及び複数のデータソースのそれぞれの場合について,に規定する。

Width

specifies the width of the image or mask bitmap in samples. ]]> 必す(須)のキーと値との対 <Width: 非負整数> は,画像又は マスクビットマップのサンプルにおける幅を指定する。

Height

specifies the height of the image or mask bitmap in samples. ]]> 必す(須)のキーと値との対 <Height: 非負整数> は,画像又は マスクビットマップのサンプルにおける高さを指定する。

BitsPerComponent

specifies the number of bits used to represent each color component. ]]> 必す(須)のキーと値との対 <BitsPerComponent: 非負整数> は,各色成分を 表現するのに用いるビット数を指定する。 キーと値との対BitsPerComponentは,ラスタ図形画像データを, 0から2BitsPerComponent - 1までの非負整数のサンプル値に 分解する方法を指定する。 数式として正しいと思われる形に変更(高橋) データを分解する時,ImageRasterElement及びMaskBitMap演算子が データソースから得られる順にデータのオクテットを読み込む。 オクテットからビットを読み出すときは,各オクテットの上位ビットから 始める。 各サンプル値について,最初に読み込まれるビットは,サンプル値の 上位ビットとする。次のビットは,隣にある一つ低位のビットとする。 BitsPerComponentのとりうる値は,1,2,4,8及び12とする。 画像辞書がMaskBitMap演算子のオペランドであるとき, BitsPerComponentキーに結合されている値は,1とする。 サンプル値の各行は,オクテット境界で始まる。 サンプル値の行の長さがオクテット長の整数倍でないとき, そのデータは,最後のオクテットを埋めるのに十分なビットでパッドされる。

Decode

references a Vector called the Decode Vector. ]]> 必す(須)のキーと値との対<Decode: ベクタ参照> は, 復号ベクタと呼ばれるベクタを参照する。 画像辞書がImageRasterElement演算子のオペランドに指定された場合, Decodeベクタは,サンプル値から,対応する色空間成分に相応しい 値の範囲への対応付けを指定する。 画像辞書がMaskBitMap演算子のオペランドに指定されたときは, Decodeベクタは,マスクの極性を指定する。 . ]]> Decodeベクタに求められる内容についての詳細は,に規定する。

Interpolate

specifies whether image interpolation is to be perfomed (if the implementation is capable of doing so). See . ]]> 任意選択のキーと値との対 <Interpolate: 論理値> は, (画像補間が実装されていれば)画像補間が実行されるかどうかを指定する。 参照。 値が真の場合,画像補間が実行されることを指定する。 値が偽の場合,画像補間が実行されないことを指定する。 このキーが画像辞書の中に存在しないとき,無指定時値は偽とする。

ImageMatrix

specifies a transformation of the image. ]]> 必す(須)のキーと値との対<ImageMatrix: 座標変換>は, 画像の変換を指定する。 ラスタ図形画像は,左下隅が(0, 0)で右上隅が(Width, Height)である ような,それ自身のく(矩)形の画像座標空間の中に存在すると見なされる。 ラスタ画像図形のは,座標値の最初の値が同一であるサンプルの 集合とする。 ラスタ画像図形のは,座標値の二番目の値が同一であるサンプル の集合とする。 ImageMatrixは,ユーザ座標空間からこの画像座標空間への対応 付けを指定する。

データソース

画像辞書は,ラスタ図形画像データのサンプルにおける幅Width及び高さHeightを 指定するキーと値との対を含んでいる。 サンプル値又はビットマップマスクの値は,分解処理の過程で ラスタ図形演算子によって抽出されるが,これはく(矩)形の配列として解 釈され,ある決まった順に抽出されると仮定されている。すなわち, (0, 0)から (Width-1, 0),次に(0, 1)から(Width-1, 1)という順に抽出され, (0, Height-1)から(Width-1, Height-1)となるまで繰り返される。 分解処理によって正しいサンプル値がこの順に得られるようにオクテットデータを 提供することは,画像辞書中のキーと値との対DataSourcesによっ て指定されたデータソースの分担とする。 画像辞書がMaskBitMap演算子のオペランドとして使用されたとき, 画像辞書の中のDataSourcesキーの値は,単一要素のDataSources ベクタへの参照とする。

単一要素の DataSources ベクタ

画像辞書の中のDataSourcesキーの値が,単一要素のベクタへの参照のとき, それは単一のデータソースとみなされる。 現色空間が2個以上の色成分をもつとき,すべての色成分のデータが データソースからビット方向順に取得されるように, データソースは,サンプルごとにすべての色成分の並んでいるとみなされる。 データソースの型として許されるものには,次のものがある。

データソースの型がストリームオブジェクトならば,求められている 個数のサンプルを分解処理で生成できるだけの,十分なデータが利用できなければならない。 ) or the FindResource operator (see ). ]]> ストリームオブジェクトは,Filter演算子(参照)又は FindResource演算子(参照)によって内容中に生成することもできる。 FindResource演算子によって生成されるストリームオブジェクトは, FindResource演算子へのオペランドである内部資源識別子で 定まるデータソース資源によって,次のとおりフィルタされる。

データソースの型がオクテット列であれば,オクテット列を構成する オクテットは,画像又はビットマップマスクのデータのオクテットとして, 並び順に取られる。オクテット列の長さが,求められているサンプル数に 足りない場合は,求められているサンプル数が抽出されるまで繰り返しオクテット列の データが再利用される。

データソースの型が手続きであれば,それが実行された時に, サンプルラスタ画像データ又はビットマップマスクデータの オクテットを含むオクテット列を(オペランドスタック上に)返す。 求められている個数のサンプルが抽出される前にオクテット列のデータが 使い果たされた場合は,求められている個数のサンプルが抽出されるまで手続きが繰 り返し呼ばれて,手続きが新たなデータのオクテット列を返す。 この手続きは,ImageRasterElement又はMaskBitMap演算子を 実行してはならない。 手続きは,画像辞書の内容又は作図状態を変えてはならな い。これらを実行した時の結果は,この規格の中では定義されてお らず,予測できなく好ましくない結果を引き起こす場合がある。

複数要素の DataSources ベクタ

画像辞書の中のDataSourcesキーの値が,複数要素のベクタへの参照のとき, 複数のデータソース(現色空間における色成分ごとに一つのデータソース)を 指定しているものとみなされる。 現色空間の各色成分のデータは,異なるデータソースから取り出される。 DataSourcesベクタのすべての要素は,同一の型とする。 さらに,ベクタの中のデータソースの順序は,現色空間で求められている 色成分の順序と一致する。

複数のデータソースの場合,各々のデータソースは,単一のデータソースについて 上で示した要求を満たす。それに加え,次の制約が適用される。

埋込みデータ

SPDLは,文書の中にラスタ図形画像データを取り込む手段を提供する。このデ ータは,DataBlockという内容トークン型を通じて得られ,埋込みデータ と呼ばれる。 and . ]]> このトークン型は,オクテットの列を表現し, 及びの中で 2進又は平文の内容表現交換様式の両方の文書に対して定義されている。 and ). ]]> 2進内容表現交換様式の文書では,これらのオクテット列が2進の ラスタ図形画像データを表現する。平文内容表現交換様式の文書では, オクテット列がASCII85で符号化されたラスタ図形画像データを表現する (及び参照)。

埋込みラスタ図形画像データの使い方は,次のとおりとする。

埋込みデータは,ラスタ図形作画演算子が実際に解釈される時に,その 演算子によってアクセスできるように,内容の中に置かれている。 したがって,ラスタ図形作画演算子がループ演算子 (例えば,For演算子)によって解釈される手続きの中で起こるならば, そのループの中のラスタ図形作画演算子をすべて解釈するための 埋込みデータが,ループ演算子の直後に続く一個以上のDataBlockトークンの 形で続く。 これらの並びの順序は,ループの中におけるラスタ図形作画演算子の解釈の 並び順に対応するものとし,ラスタ図形作画演算子の解釈のそれぞれについて 必要なデータが,一つの新たなDataBlockトークンで始まる。

作画演算子のためのデータソースとして必要なもの以外の, DataBlockトークンが内容に現れた場合, SyntaxErrorをオペランドとしてRaiseErrorを実行 する。

復号ベクタ

ImageRasterElement演算子のオペランドとして使用される画像辞書の中で, 画像辞書の中のBitsPerComponentキーに結合された値は, ラスター図形画像データをサンプル値に分解する方法を指定する。 Decodeベクタは,サンプル値から,現色空間の各色成分に相応しい 値の範囲への,線形対応付けを指定する。 各色成分について,対応付けの最小値及び最大値が指定され,線形対 応付けは,

  • OutputValue = MIN + InputValue ×(MAX - MIN) / N となる。ここで,各変数の意味は,次のとおりとする。

    Decodeベクタの中の数値は対で解釈され,各対は現色空間の一つの色 成分に適用される。 したがって,Decodeベクタの長さは,現色空間に おける色成分の個数の二倍でなければならない。Decodeベクタの中における MIN/MAXの対の順序は,現色空間で求められている色成分の順序と一致して いる。 : ]]> MaskBitMap演算子のオペランドとして使用される画像辞書の中では, 復号ベクタは,二要素のベクタとしマスクの極性を指定する。 この場合の複合化ベクタの二つの可能な値及びその意味は,に示すとおりとする。 表の構造を示す DTD がわかりません。 Valuemeaning ]]> 意味 [0 1] Sample values of 0 are painted with the current color; sample values of 1 correspond to the opaque part of the mask ]]> [0 1] 0のサンプル値は,現カラーで描かれる。1のサンプル値は, マスクの不透明部分に対応する。 [1 0] Sample values of 1 are painted with the current color; sample values of 0 correspond to the opaque part of the mask ]]> [1 0] 1のサンプル値は,現カラーで描かれる。0のサンプル値は, マスクの不透明部分に対応する。

    補間

    ソース画像の解像度が表示装置のものと比べて遥かに低いとき, 各ソースサンプルは,装置の多くのピクセルを覆うことになる。これは,貧弱な 出力結果を出す原因となる。 この見た目の不自然さは,隣接するサンプル値の間を補間することによって, 減少させることができる。 画像辞書の中のInterpolateキーに結合された値が真をとれば, 実装に対して補間を要求することを示す。 しかしながら,この規格では,補間アルゴリズムについては何も定義しない。 補間アルゴリズムの特性及び実装は,処理結果が実際に出力される デバイスに依存する。 したがって,補間アルゴリズムの選択は,実装に委ねられている。

    演算子

    . In addition to these operator-specific exceptions, there are generic exceptions which may be raised during the interpretation of almost any operator. These generic exceptions and their semantics are described in . ]]> これらの演算子及びその意味に関する規定は,演算子を解釈した結果 として内容例外を発生させうる条件についての規定を含む。 内容例外及び例外処理は36.で規定する。 これら演算子固有の例外に加えて,ほとんどどの演算子の解釈時にも 発生しうる共通的な例外がある。 これらの共通例外及びその意味は,で規定する。

    ImageRasterElement

    ImageRasterElement作画演算子は,次の1個のオペランドをとり, 何も結果を返さない。 <imagedictionary: 辞書参照> ImageRasterElement演算子は,imagedictionaryの中の情報を使用して サンプル値を得,それらを解釈し,ラスタ図形画像データを作画する。

    必す(須)のキーと値との対の集合がチェックされる。 必す(須)のキーのいずれかが存在しない場合, UndefinedKeyをオペランドとして RaiseErrorを実行する。 キーは存在するが,その値が不正な型の値に結合されている場合, TypeCheckをオペランドとして RaiseErrorを実行する。 キーが存在し、その型も正しいが, それに結合されている値が有効範囲を越えている場合, RangeCheckをオペランドとして RaiseErrorを実行する。

    データソースのいずれかが手続きで,それがImageRasterElement又は MaskBitMap演算子を実行した場合, UndefinedKeyをオペランドとして RaiseErrorを実行する。 複数のデータソースが存在し,いずれか一つが他のものよりも 先に終了した場合(ストリームオブジェクトのデータの終わりによるか,又は 手続きが空のオクテット列を返すかによる),RangeCheckをオペランド としてRaiseErrorを実行する。 データソース中に要素が1個だけ存在し, それがく(矩)形配列を作画し終わる前に 終了した場合,RaiseErrorは実行されずに, その時点で埋められていない行を除いた部分のページ像が得られる。 データソース中の要素であるどのストリームオブジェク トについても, そのストリームオブジェクトの中で何らかの問題が発生した場合, IOError又はDataErrorのいずれか適切なものをオペランドとして RaiseErrorを実行する。

    作画処理は,く(矩)形配列として作画されるサンプル値の列を入力とする。 各サンプル値は,imagedictionaryの中のキーと値との対ImageMatrix によって記述された画像座標空間における,単位く(矩)形に対応する。 . ]]> サンプル値の順序は,で規定する。

    ImageMatrix座標変換の逆行列は,画像座標空間をユーザ座標空間に座標変換する。 サンプルラスタ図形画像をページ上に位置決めするとき, 位置決めを三つの単純な座標変換に分割すればより明快になる。 まず,ImageMatrix座標変換は,ユーザ座標空間における単位正方形を 画像座標空間へ写像し,画像データを走査線順に処理するために, 定義されている。 Widthで高さHeightの画像で,走査線内を左から右へ,走査線間を 上から下へ走査される(最初のサンプルは左上隅にある。)場合, ImageMatrixは[Width 0 0 -Height 0 Height]となる。 次に,サンプルラスタ図形画像が作画される前に,ユーザ座標空間は, {LowerLeftX LowerLeftY Translate XSizeinUCS YSizeinUCS Scale}によって 変更される。 最初の演算子は,サンプルラスタ図形画像の左下隅を位置決めし, 2番目の演算子は,直前のユーザ座標空間における画像の大きさを決定する。 以前のユーザ座標空間を保持するために,これらの座標変換及び ImageRasterElement演算子を,SaveGraphicsState演算子及び RestoreGraphicsState演算子で囲んでおく。

    CurrentColorSpaceは,サンプル値当たりの色成分の数を決定する。 . ]]> 各サンプル値は,潜在色成分のベクタから構成される。 このベクタは,imagedictionaryの中のキーと値との対BitsPerComponentを 用いて組み立てられ,キーと値との対BitsPerComponentは,で示した とおりに,生成されたオクテット列を分解するのに使用される。 . ]]> imagedictionaryの中のキーと値との対Decodeは,潜在色成分を実際の色成分 に写像するのに用いられる。 実際の色成分は,で示したとおりに,CurrentColorSpaceにおける色を 指定するのに用いられる。

    色の付いたく(矩)形領域の配列は,その要素ごとにページ像上に作画される。 各要素は,その要素の色がインクとして,その要素が占めるく(矩)形領域が マスクとして,さらに,CurrentClippingRegionがクリップ領域として 使用されて,ページ像上に描かれる。

    MaskBitMap

    MaskBitMap作画演算子は,次の1個のオペランドをとり,何も結果を返さない。 <imagedictionary: 辞書参照> MaskBitMap演算子は,imagedictionaryの中の情報を使用して ビットマップのサンプル値を得,それらを解釈してマスクを形成し,作図状態変数 CurrentColor及びマスクを用いて作画処理を実行する。 . ]]> 画像辞書の内容及び意味の詳細は,に規定する。

    必す(須)のキーと値との対の集合がチェックされる。 必す(須)キーのいずれかが存在しなければ,UndefinedKey をオペランドとして RaiseErrorを実行する。 キーが存在し,その値が不正な型の値に結合されている場合, TypeCheckをオペランドとしてRaiseErrorを実行す る。 キーが存在してその型が正しいが,それに結合されている値が有効範囲を 越えていれば,RangeCheckをオペランドとして RaiseErrorを実行する。 データソースの唯一の要素が手続きで,それがImageRasterElement又は MaskBitMap演算子を実行した場合,UndefinedKeyをオペランドとしてRaiseErrorを実行する。

    データソースの中の要素が手続きで,それがImageRasterElement又は MaskBitMap演算子を実行した場合,UndefinedKeyをオ ペランドとしてRaiseErrorを実行する。 データソースの要素のどのストリームオブジェクトでも, そのストリームオブジェクトの中で何らかの問題が発生すれば, IOError又はDataErrorのいずれか適切なものを オペランドとしてRaiseErrorを実行する。

    マスク作成は,く(矩)形配列の中で位置決めされたサンプル値の列を入力とする。 各サンプル値は,imagedictionaryの中のキーと値との対 ImageMatrixによって記述された画像座標空間における,単位く(矩)形に対応する。 . ]]> サンプル値の順序は,で規定する。

    ImageMatrix座標変換の逆行列は,画像座標空間をユーザ座標空間に座標変換する。

    imagedictionaryの中のキーと値との対Decodeは,サンプル値に対応する 単位く(矩)形が,マスク部分にあるのか,又は不透明部分にあるのかを決定する。

    このようにして作成されたマスクは,作画処理の中で使用される。 作画処理において,インクは,CurrentColorSpaceにおける CurrentColorとし,CurrentClippingRegionがクリップ領域 とする。