如何将java的AffineTransform映射到android的Matrix?

ab1*_*b11 16 java android

假设我初始化AffineTransform如下:

AffineTransform af = new AffineTransform(2,3,4,5,6,7);

如何使用android的sdk创建等效的Matrix?

I82*_*uch 12

来自AffineTransform的javadoc:

[ x']   [  m00  m01  m02  ] [ x ]   [ m00x + m01y + m02 ]
[ y'] = [  m10  m11  m12  ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ]   [   0    0    1   ] [ 1 ]   [         1         ]
Run Code Online (Sandbox Code Playgroud)

不确定,但也许

Matrix m = new Matrix();
m.setValues(new float[]{2,3,4,5,6,7,0,0,1});
Run Code Online (Sandbox Code Playgroud)

编辑:评论者指出订单应该是

m.setValues(new float[]{2,4,6,3,5,7,0,0,1});
Run Code Online (Sandbox Code Playgroud)


Pau*_*sma 5

AffineTransform 中提供的顺序如下:

java.awt.geom.AffineTransform.AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12)

从表示 3x3 变换矩阵的 6 个可指定条目的 6 个浮点值构造一个新的 AffineTransform。

参数:
m00 3x3矩阵的X坐标缩放元素
m10 3x3矩阵的Y坐标剪切元素
m01 3x3矩阵的X坐标剪切元素
m11 3x3矩阵的Y坐标缩放元素
m02矩阵的X坐标平移元素3x3 矩阵
m12 3x3 矩阵的 Y 坐标平移元素

一个示例实现:

new AffineTransform(
    q0, q1, q2,
    q3, q4, q5);
Run Code Online (Sandbox Code Playgroud)

反直觉地产生:

[  m00  m01  m02  ]   [ q0  q2  q4 ]
[  m10  m11  m12  ] = [ q1  q3  q5 ]
[   0    0    1   ]   [  0   0   1 ]
Run Code Online (Sandbox Code Playgroud)

要完成相同的结果android.graphics.Matrix

Matrix m = new Matrix();
m.setValues(new float[] {
    q0, q2, q4,
    q1, q3, q5,
     0,  0,  1
}
Run Code Online (Sandbox Code Playgroud)

我认为 Matrix 的setValues()方法文档可以改进;它应该反映其参数的顺序是:

void android.graphics.Matrix.setValues(float[] values)

将数组中的 9 个值复制到矩阵中。根据 Matrix 的实现,这些可能被转换为 Matrix 中的 16.16 个整数,这样对 getValues() 的后续调用将不会产生完全相同的值。

这些值按以下顺序提供到 3x3 矩阵中:

float[] {  
    m00, m01, m02,
    m10, m11, m12,
    m20, m21, m22
}
Run Code Online (Sandbox Code Playgroud)

在哪里:

M00的X坐标的3×3矩阵的缩放元素(Matrix.MSCALE_X
M01的X坐标的剪切的3×3矩阵的元素(Matrix.MSKEW_X
M02的X坐标的3×3矩阵(平移元素Matrix.MTRANS_X
M10的Y坐标的剪切的3×3矩阵(的元素Matrix.MSKEW_Y
M11的3x3 矩阵的 Y 坐标缩放元素 ( Matrix.MSCALE_Y)
m12 3x3 矩阵的 Y 坐标平移元素 ( Matrix.MTRANS_Y)
m20 3x3 矩阵的第一个透视元素 ( Matrix.MPERSP_0)
m21 3x3 矩阵的第二个透视元素 ( Matrix.MPERSP_1)
m22第三个透视元素3x3 矩阵 (Matrix.MPERSP_2)