Matrix

本文详细介绍了Matrix在图形处理中的应用,包括translate、rotate、scale及skew等方法如何影响3x3矩阵,以及这些操作是如何作用于图形元素上的。通过一个具体的示例程序,展示了多次postTranslate操作对矩阵的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Matrix的本质是一个3x3的矩阵,初始状态是


调用set()设置矩阵,调用pre()叠加前置矩阵,调用post()叠加后置矩阵。

需要注意的是,对于叠加矩阵,比如说[pre][set][post],并不是对元素进行了3次变换,而是先计算出最终矩阵,然后只进行1次变换。

举例来说:

matrix.setTranslate(100, 100);
matrix.postScale(0.5f, 0.5f);

并不是先将元素移动到(100, 100),然后再对元素缩放(0.5, 0.5,而是缩放0.5再只移动(50 50


 

对一个元素运用Matrix,本质相当于是对这个元素中的每个点进行矩阵变换,其中(x0,y0)是变换前的点,(x,y)是变换后的点。


 

如下程序演示一下,Matrix的四个方法translate()rotate()scale()skew()产生的矩阵分别是怎样的:

package com.itheima28.copybitmap;

import
android.app.Activity;
import
android.graphics.Matrix;
import
android.os.Bundle;
import
android.util.Log;

public class
MainActivity extends Activity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);

       
Matrix matrix=new Matrix();
//       printMatrix(matrix);

//       matrix.setValues(new float[]{
//               0.5f, 0, 0,
//               0, 1, 0,
//               0, 0, 1
//       });


//       matrix.reset();
//       matrix.setTranslate(100, 100);

//       matrix.reset();
//       matrix.setRotate(90, 100, 100);

//       matrix.reset();
//       matrix.setScale(0.5f, 0.5f);

//       matrix.reset();
//       matrix.setSkew(2, 4);

       
matrix.reset();
       
//写两次post会一个接到另一个后面//估计两次pre是一个接到另一个前面
       
matrix.postTranslate(100, 200);
       
matrix.postTranslate(500, 600);

       
printMatrix(matrix);
   
}

   
public void printMatrix(Matrix matrix){
       
float[] values=new float[9];
       
matrix.getValues(values);

       for
(int i=0; i<3; i++){
           StringBuffer buffer=
new StringBuffer();
           for
(int j=0; j<3; j++){
               buffer.append(values[i*
3+j]+"  ");
           
}
           Log.e(
"ShadowfaxGHH", buffer.toString());
       
}
    }
}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值