Matrix, ColorMatrix(动画效果、图片大小、图片滤镜)

 1.为什么 Matrix 是个 3 X 3 的矩阵?
 2.Matrix 这个 3 X 3 的矩阵每个元素的作用?
 3.Matrix 的 setXXX、preXXX、postXXX API 方法的工作原理?

> Matrix,Matrix.rotateM(),ColorMatrix
作为Android源码中的一个常用类,它的作用是持有一个3*3的矩阵数组,用于坐标的转换。
 Matrix用来制作动画效果、改变图片大小、给图片加各类滤镜等。
 Matrix 的应用 - 压缩图像;Matrix 的应用 - 实现多点触控,控制图像缩放。
 Animation 就是通过不断改变 applyTransformation 函数传入的 Matrix 来实现各种各样的动画效果的。

  仿射变换其实就是二维坐标到二维坐标的线性变换,保持二维图形的“平直性”(即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(指保持二维图形间的相对位置关系不变,平行线还是平行线,而直线上点的位置顺序不变),可以通过一系列的原子变换的复合来实现,原子变换就包括:平移、缩放、翻转、旋转和错切
  Matrix在Android中的主要作用是图像变换,如平移、旋转、缩放、扭曲等,旋转和缩放可以用乘法表示,而平移就只能用加法表示。平移是矩阵相加,旋转和缩放则是矩阵相乘。scale是缩放,skew是错切(canvas变换中有讲过),trans是平移,persp代表透视

-- 《计算机图形学(OpenGL版)》的作者F.S. Hill Jr. 写到:
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”
  对于一个 2 维点 p=(x,y)p=(x,y),仿射变换(TT)是线性变换(ApAp)和平移变换(+t+t)的叠加:T(p)=Ap+t
  仿射变换(Affine Transformation)和齐次坐标系(Homogeneous Coordinate)是计算机图形学中经常碰到的基本概念。
  仿射变换其实是另外两种简单变换的叠加:一个是线性变换,一个是平移变换。仿射变换是线性变换后进行平移变换(其实也是齐次空间的线性变换),使用齐次坐标使得仿射变换可以以统一的矩阵形式进行表示。

-- Matrix的对图像的处理可分为四类基本变换:Translate,平移变换;Rotate,旋转变换;Scale,缩放变换;Skew,错切变换;针对每种变换,Android提供了pre、set和post三种操作方式。其中:
 1.set用于设置Matrix中的值。
 2.pre是先乘,因为矩阵的乘法不满足交换律,因此先乘、后乘必须要严格区分。先乘相当于矩阵运算中的右乘。
 3.post是后乘,因为矩阵的乘法不满足交换律,因此先乘、后乘必须要严格区分。后乘相当于矩阵运算中的左乘。
  Canvas里scale, translate, rotate, concat方法都是pre方法,如果要进行更多的变换可以先从canvas获得matrix, 变换后再设置回canvas.

  Android Matrix提供了三种操作方式,分别是pre,set,post。例如位移变换,Matrix为我们提供了几个不同的API方法,分别是setTranslate,preTranslate,postTranslate,setTranslate代表直接设置三阶矩阵数值(直接覆盖原先已有的三阶矩阵),preTranslate代表让原来的三阶矩阵前乘另一个三阶矩阵,postTranslate代表让原来的三阶矩阵后乘另一个三阶矩阵。

深入理解 Android 中的 Matrix- https://www.jianshu.com/p/6aa6080373ab
仿射变换与齐次坐标- https://guangchun.wordpress.com/2011/10/12/affineandhomogeneous/
齐次坐标系入门级思考- https://oncemore.wang/blog/homogeneous/

更加酷的效果,类似魅族手机的相册功能,相册图像能够根据手势进行旋转- https://github.com/82367825/MatrixMaster
更加高级的功能实现,折叠菜单效果- http://blog.csdn.net/lmj623565791/article/details/44283093

类似Matrix这样的数学矩阵在Android中不止用于操作图像大小和变换,更有ColorMatrix用于操作图像色彩,实现各种滤镜效果: http://www.it165.net/pro/html/201505/40131.html
Matrix及兼添加夜间模式的实现分析- https://github.com/D-clock/AndroidStudyCode
Android Matrix详解- https://blog.csdn.net/flash129/article/details/8234599
Android FoldingLayout 折叠布局 原理及实现(一)- https://blog.csdn.net/lmj623565791/article/details/44278417
android matrix 最全方法详解与进阶(完整篇)- https://blog.csdn.net/cquwentao/article/details/51445269
Android Matrix- https://www.jianshu.com/p/a08e589ce5d4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值