在Android中,Matrix类的mapRect api执行什么样的转换?

San*_*San 4 android matrix

我想知道Android中Matrix类下可用的mapRect api的功能.如果我有一个样本矩阵A和矩形R,那么

RectF R = new RectF(t1,t2,t3,t4);

A.mapRect(R);

R会发生什么样的转换.如果有人能用一些合适的例子说明mapRect()api会更有帮助.

kri*_*son 14

这是一个非常简单的例子:

我们来一个矩阵:

Matrix matrix = new Matrix();
Run Code Online (Sandbox Code Playgroud)

设置该矩阵以将所有内容缩放两倍:

matrix.setScale(2.0F, 2.0F);
Run Code Online (Sandbox Code Playgroud)

在左上角创建一个10x10的矩形,其原点为:

RectF rect = new RectF(0F, 0F, 10F, 10F);
Run Code Online (Sandbox Code Playgroud)

所以当我们打电话时

matrix.mapRect(rect);
Run Code Online (Sandbox Code Playgroud)

我们创建的输入矩形被输出矩形替换,输出矩形是转换输入的结果:

rect.left = 0F;
rect.top = 0F;
rect.right = 20F;
rect.bottom = 20F;
Run Code Online (Sandbox Code Playgroud)

该方法的另一个版本

matrix.mapRect(RectF dst, RectF src);
Run Code Online (Sandbox Code Playgroud)

影响输入矩形的情况下执行相同的转换.


什么是矩阵?

考虑一面镜子.镜子会拍摄您的图像并创建图像的水平翻转版本.

考虑麦克风和放大器.他们采取你的声音,并创造一个更响亮的声音版本.

这就是矩阵.这是一个变压器.它接受输入并创建基于输入的输出.所以矩阵可以变换点,矩形,圆形,多边形......

有关详细信息,请参阅我的答案Matrix.postScale(sx,sy,px,py)如何工作?

另请查看仿射变换| 维基百科.有一个很棒的图形,显示了不同的仿射变换及其影响.