Layer.affineCopy

功能/含义
仿射变换复制
类型
Layer类的成员方法
语法
affineCopy(src, sleft, stop, swidth, sheight, affine, A, B, C, D, E, F, type=stNearest, clear=false)
参数
src  指定要复制的层对象。
sleft  指定要复制的矩形的左端位置(在源图层的图像坐标上),以像素为单位。
stop  指定要复制的矩形的上端位置(在源图层的图像坐标上),以像素为单位。
swidth  指定要复制的矩形的宽度(在源图层的图像坐标上),以像素为单位。
sheight  指定要复制的矩形的高度(在源图层的图像坐标上),以像素为单位。
affine  指定如何处理接下来的6个参数(A-F参数)。
 如果指定真值,则六个参数将按如下解释。
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' = a*x + c*y + tx
y' = b*x + d*y + ty

 如果指定为假值,则六个参数分别解释如下。这些参数也接受实数。
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 : 使用三维插值(未实现)
 对于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.0x1.0的大小。也就是说,位于(0,0)位置的像素被认定(-0.5,0.5)-(0.5,0.5)的范围内。