Android图片处理一:Matrix与手势
Posted Jadyli1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android图片处理一:Matrix与手势相关的知识,希望对你有一定的参考价值。
文章目录
1 矩阵基础
A = [ k 1 k 2 k 3 k 4 k 5 k 6 k 7 k 8 k 9 ] B = [ x 0 x 1 y 0 y 1 1 1 ] C = A B = [ k 1 x 0 + k 2 y 0 + k 3 k 1 x 1 + k 2 y 1 + k 3 k 4 x 0 + k 5 y 0 + k 6 k 4 x 1 + k 5 y 1 + k 6 k 7 x 0 + k 8 y 0 + k 9 k 7 x 1 + k 8 y 1 + k 9 ] \\beginaligned A&=\\beginbmatrix k_1 & k_2 & k_3\\\\ k_4 & k_5 & k_6\\\\ k_7 & k_8 & k_9 \\endbmatrix\\\\ B&=\\beginbmatrix x_0 & x_1\\\\ y_0 & y_1\\\\ 1 & 1 \\endbmatrix\\\\ C=AB&=\\beginbmatrix k_1x_0 + k_2y_0 + k_3 & k_1x_1 + k_2y_1 + k_3\\\\ k_4x_0 + k_5y_0 + k6 & k_4x_1 + k_5y_1 + k6\\\\ k_7x_0 + k_8y_0 + k9 & k_7x_1 + k_8y_1 + k9 \\endbmatrix \\endaligned ABC=AB=⎣⎡k1k4k7k2k5k8k3k6k9⎦⎤=⎣⎡x0y01x1y11⎦⎤=⎣⎡k1x0+k2y0+k3k4x0+k5y0+k6k7x0+k8y0+k9k1x1+k2y1+k3k4x1+k5y1+k6k7x1+k8y1+k9⎦⎤
用 A(3行3列) 的行去乘以 B(3行2列) 的所有列,得出一个3行2列的矩阵。
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
1、2点可总结为:A(m×p)×B(p×n)=C(m×n)
1.1 左乘和右乘
以下解释是为了方便记忆,不保证科学性。
左乘以:C = AB 称为A左乘以B,“以” 表示用,A左乘以B表示用B去乘A,A在左边,跟普通乘法顺序一致,从左到右。
左乘:与左乘以相反,C = AB 称为B左乘A(B左边乘A)
右乘以:C = BA 称为A右乘以B,用B去乘A,A在右边
右乘:与右乘以相反,C = BA 称为B右乘A(B右边乘A)
所以,C = AB可以称为:A左乘以B,B左乘A,B右乘以A,A右乘B。得出结论:左乘以 ==
右乘,右乘以 ==
左乘。
2 Matrix基础
Matrix 是 android 图形库里的一个坐标转换类,它里面保存了一个 3 × 3 的矩阵,矩阵里各元素的对应关系如下所示:
[ 缩 放 _ X 错 切 _ X 平 移 _ X 错 切 _ Y 缩 放 _ Y 平 移 _ Y 透 视 _ 0 透 视 _ 1 透 视 _ 2 ] \\beginbmatrix 缩放\\_X & 错切\\_X & 平移\\_X\\\\ 错切\\_Y & 缩放\\_Y & 平移\\_Y\\\\ 透视\\_0 & 透视\\_1 & 透视\\_2 \\endbmatrix ⎣⎡缩放_X错切_Y透视_0错切_X缩放_Y透视_1平移_X平移_Y透视_2⎦⎤
具体为何这样对应请参考安卓自定义View进阶-Matrix原理。这里引用几个重要的变换。
2.1 平移
x = x 0 + Δ x y = y 0 + Δ y \\beginaligned x = x_0 + \\Delta x \\\\ y = y_0 + \\Delta y \\endaligned x=x0+Δxy=y0+Δy
用矩阵表示:
[
x
y
1
]
=
[
1
0
Δ
x
以上是关于Android图片处理一:Matrix与手势的主要内容,如果未能解决你的问题,请参考以下文章 Android Matrix手势缩放自定义view 不止于Imageview 高仿QQ微信效果的图片浏览器(支持原图和缩略图多种手势CocoaPods) 高仿QQ微信效果的图片浏览器(支持原图和缩略图多种手势CocoaPods)