基本的图像缩放和旋转(1)

Android API有一个Matrix(矩阵)类,当在现有位图对象上进行绘制或从另一个位图对象创建某个位图对象时,可以使用该类。这个类使得我们能够在一幅图像上应用空间转换。这种类型的转换可以是旋转、裁剪、缩放或者更改图像的坐标空间。

Matrix类以9个数字的数组表示转换。在许多情况下,这些数字可以由一个公式生成,该公式在数学上表示应该发生的转换。例如,对于旋转公式,通过使用正弦和余弦生成矩阵中的数字。

Matrix类中的数字也可以手动输入。为了了解Matrix类如何工作,我们将以一些手动转换作为开始。

Matrix类中的每个数字都将应用于图像上每个点的3个坐标(x、y或z)之一。

例如,下面是一个包含9个浮点数的矩阵:

1 0 0

0 1 0

0 0 1

顶行(1 , 0 , 0)指定源图像的x坐标将根据以下公式转换:x = 1x + 0y + 0z。正如您所看到的,值在矩阵中的放置位置决定对应数字将会如何影响结果。顶行总是会影响到x坐标,但可以操作源图像的x、y和z坐标。

第二行(0 , 1 , 0)意味着y坐标将被确定为y = 0x + 1y + 0z,第三行(0 , 0 , 1)意味着z坐标将确定为z = 0x + 0y + 1z。

换句话说,这个矩阵不会做任何转换;所有内容都会按照它在源图像中的情况放置。

为了在代码中实现这一点,我们将创建Matrix对象,然后通过其setValues方法显式地设置值。

Matrix matrix = new Matrix();

matrix.setValues(new float[] {

     1, 0, 0,

     0, 1, 0,

     0, 0, 1 

});

读书导航