持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情,希望大家多多支持,帮忙点个赞,谢谢!
前言
我们前面介绍了一些图片的信息获取方式,现在我们看看对图片是如何进行变化处理的,这其中有很多方法,我们先说明一下Matrix类的处理方式,也就是对图片坐标的变化以达到最终期望效果。
正篇
溯源
首先,我们找到该类的源代码:
通过这个简短的注释说明我们了解到,Matrix是一个3 x 3用于转换坐标的矩阵。
使用方法
它对图片的处理可以分为以下四个基本类型:
Translate——平移变换
@Override
public boolean postTranslate(float dx, float dy) {
oops();
return false;
}
该方法在x轴和y轴上简单地移动图像,采用两个浮点数作为参数,表示在每个轴上移动的数量。第一个参数是图像将在x轴上移动的数量,而第二个参数是图像将在y轴上移动的数量。在x轴上使用正数进行平移将向右移动图像,而使用负数将向左移动图像。在y轴上使用正数进行平移将向下移动图像,而使用负数将向上移动图像。
Scale——缩放变换
@Override
public boolean postScale(float sx, float sy) {
oops();
return false;
}
该方法采用两个浮点数作为参数,分别表示在每个轴上所产生的缩放量。第一个参数是x轴的缩放比例,而第二个参数是y轴的缩放比例。
Rotate——旋转变换
@Override
public boolean postRotate(float degrees, float px, float py) {
oops();
return false;
}
@Override
public boolean postRotate(float degrees) {
oops();
return false;
}
该方法采用一个浮点数表示旋转的角度。围绕默认点(0,0),正数将顺时针旋转图像,而负数将逆时针旋转图像,其中默认点是图像的左上角。
Skew——错切变换
@Override
public boolean postSkew(float kx, float ky, float px, float py) {
oops();
return false;
}
@Override
public boolean postSkew(float kx, float ky) {
oops();
return false;
}
错切变换,在数学上又称为Shear mapping(可叫做“剪切变换”)或是Transvection(缩并),它是一种比较特殊的线性变换。错切变换的效果就是让所有点的x坐标(或者y坐标)保持不变,而对应的y坐标(或者x坐标)则按比例发生平移,且平移的大小和该点到x轴(或y轴)的垂直距离成正比。它是属于等面积变换,即一个形状在错切变换的前后,其面积是相等的。
具体说明
该API对于每一种变换都提供了三种操作方式:
set(用于设置Matrix中的值)
post(后乘,根据矩阵的原理,相当于左乘)
pre(先乘,相当于矩阵中的右乘)
注:默认时,这四种变换都是围绕(0,0)点变换的,也可以自定义围绕的中心点,通常围绕中心点。
小结
希望可以早日完成app!