zoukankan      html  css  js  c++  java
  • matrix小结

     
    通过Matrix原bitmap经过计算后,会重新生成一张bitmap
    Bitmap类
    public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) 
     
    matrix里有一个3x3的矩阵,用于图像处理:
     
    MSCALE_X MSKEW_X  MTRANS_X
    MSKEW_Y  MSCALE_Y MTRANS_Y
    MPERSP_0 MPERSP_1 MPERSP_2
     
    根据变量名能猜出具体的用途:
    缩放X 偏移X 平移X
    偏移Y 缩放Y 平移Y
    透视0 透视1 透视2
     
    matrix的操作有set,pre和post;set能够直接设置矩阵中的数值;pre类似于矩阵左乘;post类似与矩阵中的右乘
     
    新建一个Matrix对象, 其中矩阵的形式是3阶单位矩阵。
    Matrix matrix = new Matrix();
    形式是:
     

    Matrix基本原理   复制  安卓自定义View进阶-Matrix原理

    Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见变换的原理:

    我们所用到的变换均属于仿射变换,仿射变换是 线性变换(缩放,旋转,错切) 和 平移变换(平移) 的复合,由于这些概念对于我们作用并不大,此处不过多介绍,有兴趣可自行了解。

    基本变换有4种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。

    看一下四种变换都是由哪些参数控制的。

    从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇讨论范围内,暂不过多叙述,会在之后对文章中详述其作用。

     

    Matrix复合原理

    其实Matrix的多种复合操作都是使用矩阵乘法实现的,从原理上理解很简单,但是,使用矩阵乘法也有其弱点,后面的操作可能会影响到前面到操作,所以在构造Matrix时顺序很重要。

    我们常用的四大变换操作,每一种操作在Matrix均有三类,前乘(pre),后乘(post)和设置(set),可以参见文末对Matrix方法表,由于矩阵乘法不满足交换律,所以前乘(pre),后乘(post)和设置(set)的区别还是很大的。

    如何理解和使用 pre 和 post ?

    不要去管什么先后论,顺序论,就按照最基本的矩阵乘法理解。

    那么如何使用?

    正确使用方式就是先构造正常的 Matrix 乘法顺序,之后根据情况使用 pre 和 post 来把这个顺序实现。

    还是用一个最简单的例子理解,假设需要围绕某一点旋转。

    可以用这个方法 xxxRotate(angle, pivotX, pivotY) ,由于我们这里需要组合构造一个 Matrix,所以不直接使用这个方法。

    首先,有两条基本定理:

    • 所有的操作(旋转、平移、缩放、错切)默认都是以坐标原点为基准点的。

    • 之前操作的坐标系状态会保留,并且影响到后续状态。

    基于这两条基本定理,我们可以推算出要基于某一个点进行旋转需要如下步骤:

    1. 先将坐标系原点移动到指定位置,使用平移 T
    2. 对坐标系进行旋转,使用旋转 S (围绕原点旋转)
    3. 再将坐标系平移回原来位置,使用平移 -T
  • 相关阅读:
    天轰穿C#教程之C#基础的学习路线
    天轰穿C#教程之大话C#
    天轰穿C#教程之#pragma介绍[原创]
    天轰穿.NET教程之第一个控制台应用程序
    .NET笔试题整理(转)
    天轰穿.NET教程之基类库
    天轰穿C#教程之C#有哪些特点?
    程序猿!?应该有哪些目标?
    浅谈编程程序员应该具备的职业素养 [转载]
    .NET访问MySQL数据库方法(转)
  • 原文地址:https://www.cnblogs.com/huyang011/p/7656048.html
Copyright © 2011-2022 走看看