Layer.affineCopy

機能/意味

アフィン変換コピー

タイプ
Layerクラスのメソッド
構文
affineCopy(src, sleft, stop, swidth, sheight, affine, A, B, C, D, E, F, type=stNearest, clear=false)
引数
src

コピー元のレイヤオブジェクトを指定します。
Bitmap クラスのオブジェクトも指定可能です。

sleft

コピーする矩形の左端位置を ( コピー元レイヤの画像位置における ) ピクセル単位で指定します。

stop

コピーする矩形の上端位置を ( コピー元レイヤの画像位置における ) ピクセル単位で指定します。

swidth

コピーする矩形の横幅を ( コピー元レイヤの画像位置における ) ピクセル単位で指定します。

sheight

コピーする矩形の縦幅を ( コピー元レイヤの画像位置における ) ピクセル単位で指定します。

affine

続く6つの引数 (A ~ F パラメータ)をどのように扱うかを指定します。
真を指定すると、6つのパラメータはそれぞれ以下のように解釈されます。

  • A : 2Dアフィン変換行列の a
  • B : 2Dアフィン変換行列の b
  • C : 2Dアフィン変換行列の c
  • D : 2Dアフィン変換行列の d
  • E : 2Dアフィン変換行列の tx
  • F : 2Dアフィン変換行列の ty

アフィン変換により、コピー元の画像位置 (x, y) ( ただし、コピー元矩形の左上隅を (0, 0) とする ) は以下の式により、コピー先の画像位置 (x', y')に変換されます。
x' = ax + cy + tx
y' = bx + dy + ty
偽を指定すると、6つのパラメータはそれぞれ以下のように解釈されます。
これらのパラメータは実数での指定も受け付けます。

  • A : コピー元矩形の左上隅の点の、コピー先での画像位置における X 座標位置(x0)
  • B : コピー元矩形の左上隅の点の、コピー先での画像位置における Y 座標位置(y0)
  • C : コピー元矩形の右上隅の点の、コピー先での画像位置における X 座標位置(x1)
  • D : コピー元矩形の右上隅の点の、コピー先での画像位置における Y 座標位置(y1)
  • E : コピー元矩形の左下隅の点の、コピー先での画像位置における X 座標位置(x2)
  • F : コピー元矩形の左下隅の点の、コピー先での画像位置における Y 座標位置(y2)

偽を指定した場合、コピー元の右下隅に対応する、コピー先位置(x3, y3)は自動的に以下の式によって計算されます。
x3 = x1 - x0 + x2
y3 = y1 - y0 + y2

A

Aパラメータです。
affine 引数によって解釈が変わります。

B

Bパラメータです。
affine 引数によって解釈が変わります。

C

Cパラメータです。
affine 引数によって解釈が変わります。

D

Dパラメータです。
affine 引数によって解釈が変わります。

E

Eパラメータです。
affine 引数によって解釈が変わります。

F

Fパラメータです。
affine 引数によって解釈が変わります。

type

アフィン変換のタイプを指定します。

  • stNearest : 最近傍点法が用いられます
  • stFastLinear : 低精度の線形補間が用いられます(一部実装)
  • stLinear : 線形補間が用いられます(未実装)
  • stCubic : 3次元補間が用いられます(未実装)

stFastLinear や stLinear, stCubic に対しては、stRefNoClip をビット論理和で追加指定することができ、この場合は、コピーするビットマップの領域外を参照して色を合成することを許可します。
これを指定しない場合は、転送元ビットマップの周囲に余裕があったとしても、転送元ビットマップの範囲外を参照することはありません(範囲外の色はもっとも近い位置にある範囲内のピクセルの色と見なされます)。

clear

転送先レイヤの、アフィン変換された画像の周囲をLayer.neutralColor プロパティで示された色・透明度でクリアするかどうかを指定します。
真を指定するとクリアされ、この引数を省略するか偽を渡すとクリアされません。
クリアされる領域は Layer.setClip メソッドで制限することもできます。
このクリアの機能を使うと、いったん転送先レイヤをクリアしてからアフィン変換で画像を上書き転送する際の、上書きされる領域(クリアされた場所にアフィン変換で上書きされる部分)のクリアの無駄を省くことができます。

戻り値
なし (void)
説明

指定されたコピー元レイヤの矩形を、コピー先 ( メソッドを実行するレイヤ ) に変換を行いながらコピーします。
affine 引数によって、変形パラメータとして二次元アフィン変換行列を指定するか、あるいは変換後の点を直接指定するかを選ぶことができます。
現バージョンでは stFastLinear の指定で線形補間が効くのは、重ね合わせ先の ( メソッドを実行する ) レイヤの Layer.face プロパティが dfAlpha (または dfBoth) または dfAddAlpha の場合です。
また、Layer.face プロパティが dfOpaque で、Layer.holdAlpha プロパティが偽の時も線形補間が可能です。
重ね合わせ先の ( メソッドを実行する ) レイヤの Layer.face プロパティがdfAlpha (または dfBoth) または dfAddAlpha の場合は、メイン画像とマスク画像の両方がコピーされます。
重ね合わせ先の ( メソッドを実行する ) レイヤの Layer.face プロパティがdfOpaque (または dfMain) の場合は、Layer.holdAlpha プロパティが真の時はメイン画像のみがコピーされ、偽の時はメイン画像とマスク画像の両方がコピーされます。
二次元アフィン変換行列による変換は、コピー元矩形の左上を原点 (0, 0) とし、以下のように定義されます。
二次元アフィン変換を行うことにより、拡大縮小、回転、せん断(傾け)、平行移動、反転、あるいはこれらの組み合わせすべての変形を行うことができます。
二次元アフィン変換を行うメソッドでは、二次元アフィン行列ではなく、変換後の各頂点を直接指定することでも変形を指定できますが、この場合でも二次元アフィン変換で定義できないような変形は行うことはできません。
アフィン変換においては、ピクセルは 1.0 × 1.0 のサイズを持っていると見なされます。
つまり、(0, 0) の位置にあるピクセルは (-0.5, -0.5) - (0.5, 0.5) の範囲にあると見なされます。