`
CrackRen
  • 浏览: 168023 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Matrix 基本使用方法(一)

阅读更多

 

java.lang.Object    ↳

 

android.graphics.Matrix

 

 

Public Constructors
Matrix()
Create an identity matrix
Matrix(Matrix src)
Create a matrix that is a (deep) copy of src

 

 

 

 

 

 


 

旋转

 

void setRotate(float degrees)
Set the matrix to rotate about (0,0) by the specified number of degrees.
void setRotate(float degrees, float px, float py)
Set the matrix to rotate by the specified number of degrees, with a pivot point at (px, py).

围绕点px, py 旋转 degrees度, 如果没设置坐标,默认以0,0点旋转.

例子: setRotate(45, 180, 120);


 

 

 

缩放,翻转

 

void setScale(float sx, float sy)
Set the matrix to scale by sx and sy.
void setScale(float sx, float sy, float px, float py)
Set the matrix to scale by sx and sy, with a pivot point at (px, py).

以点px,py为原点缩放 >=0   1为正常大小  

如果是负数,图形就会翻转

如果没设置原点坐标,默认以0,0点缩放(如果发现图片不见了,检查一下是不是翻转出了屏幕)

例子:setScale(-0.5f, 1,180, 120);  //左右翻转并缩放到一半大小


 

 

倾斜

 

void setSkew(float kx, float ky, float px, float py)
Set the matrix to skew by sx and sy, with a pivot point at (px, py).
void setSkew(float kx, float ky)
Set the matrix to skew by sx and sy.

以点px,py为原点倾斜如果没有设置原点,则以0,0点为原点.

例子:setSkew(0, 1, 180, 120); //Y 方向拉伸


 

坐标

void setTranslate(float dx, float dy)
Set the matrix to translate by (dx, dy).

是图片移动到某一个位置

 

 

 

注意

Matrix中带有pre, post的函数需要考虑先后顺序

例如:想要旋转45度,然后平移到100,100的位置需要

 

 

Matrix matrix = new Matrix();
matrix.postRotate(45);
matrix.postTranslate(100, 100);  

 

或者

 

Matrix matrix = new Matrix();
matrix.setTranslate(100, 100);
matrix.preRotate(45);

 

 

这就要考虑到矩阵的前乘和后乘了,不然的话你会发现可能坐标位置不是你想要的,可能图像都不见了.

如果在复杂一些,需要选择,缩放,倾斜同时起作用,并且还要设置坐标到屏幕指定位置你会发现很麻烦,需要自己计算出各个方法的参数,然后考虑调用的先后顺序.

 

但这里有一种更简便的方法,叫系统帮我们计算

 

boolean setConcat(Matrix a, Matrix b)
Set the matrix to the concatenation of the two specified matrices, returning true if the the result can be represented.

这个方法的意思是帮我们把两个 Matrix对象计算并连接起来.

这样的话我们就可以这样使用了

 

 

	Matrix mRotateMatrix = new Matrix();	//控制旋转
	Matrix mScaleMatrix = new Matrix();	//控制缩放
	Matrix mSkewMatrix = new Matrix();	//控制倾斜
	Matrix mPosMatrix = new Matrix();		//控制坐标
	Matrix mMatrix = new Matrix();		//合并
		
	mMatrix.setConcat(mRotateMatrix, mScaleMatrix);
	mMatrix.setConcat(mMatrix, mSkewMatrix);
	mMatrix.setConcat(mMatrix, mPosMatrix);
		
	canvas.drawBitmap(mBitmap, mMatrix, mPaint);
 

注意:合并的第一步不能直接用mMatrix自身去连接其他的Matrix,我试过几次结果图像又飞了,大家再试试

 

例子:

同时设置

setRotate(45, 180, 120);

setScale(-0.5f, 1,180, 120);  //左右翻转并缩放到一半大小

setSkew(0, 1, 180, 120);      //Y 方向拉伸


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 37 KB
  • 大小: 38.6 KB
  • 大小: 23.9 KB
  • 大小: 33.8 KB
  • 大小: 24.4 KB
2
0
分享到:
评论

相关推荐

    matlab图像矩阵拼接代码-homography-and-fundamental-matrix-estimation-cvip:单应性和基本

    在项目的第二部分中,我们使用第一部分中生成的地面真点和内在点生成一对图像的基本矩阵。 我们使用归一化和非归一化方法来生成矩阵。 我们还比较了两种方法的结果。 稍后,我们还使用Triangulation方法对图像对中...

    高斯顺序消去法matlab代码-java-matrix:JAMA:一个Java矩阵包。原始项目的分支

    Jampack使用一种更加开放的方法,使用户可以扩展自己。 事实证明,对于临时用户而言,程序包的主要区别在于矩阵运算的语法。 我们希望您能花时间与JAMA一起了解Jampack。 从这两个软件包中可以学到很多东西。 能力 ...

    adjacency-matrix-network

    图ADT和社交网络 背景 在此分配中,您将使用两个不同的图形表示形式实现Graph接口。 然后,您将开发几种使用可能在社交网络中使用的Graph接口的算法。... 您的算法必须仅使用界面中提供的方法,并且不能使用

    matrix-computation-package:Java的线性代数包

    ###### Matrix(double [] [] array)从double [] []数组构建Matrix对象###### Matrix(double [] array)从一维(一行)数组###### Matrix(int m,int n)建立一个mxn空矩阵###### Matrix(int m,int n,double...

    SparkCore-LEDMatrix-MAX7219-MAX7221:使用 MAX7219 MAX7221 控制 8x8 LED 矩阵的 Spark 核心库

    特征使用提供基本图形方法的 Adafruit_GFX 库(绘制/填充圆形、三角形、字符等) 允许为每个显示器设置转换(旋转、镜像)和位置提供对整个位图的直接访问,独立于显示转换一次转换缓冲区和刷新整个位图避免闪烁可以...

    immunedeconv:免疫解卷积方法的统一接口(CIBERSORT,EPIC,quanTIseq,TIMER,xCell,MCPcounter)

    一个R包,用于统一访问从大量RNA测序数据估算免疫细胞组分的计算方法。 基本用法 immunedeconv :: deconvolute( gene_expression_matrix , " quantiseq " ) 其中gene_expression_matrix是一个矩阵,其中的基因排...

    Matrix:常用.NET Apis的快速备忘单

    矩阵Matrix是Visual Studio扩展,可帮助开发人员进一步了解.NET API。... 它基本上是使用由示例驱动的每个API元素(方法,属性等)的方案列表。Visual Studio整合VS扩展(正在进行中)将在您需要的位置显

    MatrixMaths:一个旨在实现高斯-牛顿方法、寻找幂方法的收敛性并制作基本 2D 动画的项目; 用矩阵!

    或### Matrix Stardust 的兴衰和来自火星的向量 #####A 项目旨在实现高斯-牛顿法,找到幂法的收敛性,并生成基本的 2D 动画(完整说明如下)。 这是一个小组项目,成员为(按字母顺序排列) 、 和 。 所以,这里是对...

    origin 8 教程

    5.2.1将Worksheet转换为Matrix(Direct方法) 5.2.2扩展MatriX(Expand方法) 5.2.3XYZGridding(网格化) 5.3三维作图 5.3.1从矩阵窗口建立三维图形 5.3.2通过数据转换建立三维图形 5.3.3三维图形设置 5.3.4三维...

    摄影实习报告.docx

    了解像控点测量的方法掌握航空像片调绘的基本原理和方法;掌握航空像片判读中判读标志的建立方法;掌握航空像片调绘的步骤。基于Map Matrix数字摄影测量系统生产数字测绘产品实习的目的是深入掌握摄影测量学的基础...

    PHP使用数组实现矩阵数学运算的方法示例

    本文实例讲述了PHP使用数组实现矩阵数学运算的方法。分享给大家供大家参考,具体如下: 矩阵运算就是对两个数据表进行某种数学运算,并得到另一个数据表. 下面的例子中我们创建了一个基本完整的矩阵运算函数库,以便...

    C#GDI+图形程序设计源码

    2.4 一些基本的GDI+ 对象 总结 第3章 Graphics类 3.1 Graphics类的属性 3.2 Graphics类的方法 3.3 GDI+ Painter应用程序 3.4 绘制饼图 总结 第4章 使用画笔和钢笔 4.1 理解和使用画笔 4.2 在GDI+ 中使用...

    DATA2.docx

    SSA就是奇异谱分析。 奇异谱分析是近年来兴起的一种研究非线性时间序列数据的强大的方法。... 那么按照逻辑,重构后的时间序列我们选取最后一个,就是我们要的当天的SSA了,然后就可以像趋势线一样使用。

    使用Spring来创建一个简单的工作流引擎

    在对工作流简单介绍之后,将要介绍在基本工作流场景中基于Spring的工作流API的使用。 许多J2EE应用程序要求在一个和主机分离的上下文中执行处理过程。在许多情况下,这些后台的进程执行多个任务,一些任务依赖于...

    数字信号处理之Matlab

    matlab信号处理pdf• Matlab名字是由...附一个更改Matlab默认保存文件路径的方法,R2015b实测有效: 三、Matlab 编程基础 • 1 变量 变量无需定义即可使用。 变量名的大小写是敏感的。 变量的第一个字符必须为英

    GDI+图像程序设计(PDF & 源码 -电子工业出版社)

    本书是一本为.NET开发人员讲授如何编写Windows和Web图形应用程序的专著,书中全面介绍了GDI+和Windows图形程序设计的基本知识和GDI+图形程序设计的各个方面。 本书适合于开发GDI+图形应用程序的初、中级程序员...

    thundax-ai:Del用Delphi编码的一系列AI算法

    它还包括一个基本的Matrix类,该类使您可以使用简单的机制执行以下操作,以使用链接方法,接口,泛型,绑定等实例化它们,以消除内存泄漏: 添加 [ 1 1 1 ] [ 1 1 1 ] [ 2 2 2 ] [ 1 1 1 ] + [ 1 1 1 ] = [ 2 2 2...

    Foundation Actionscript 3.0 Animation

    14.4使用标准的反向运动方法 14.4.1余弦定律介绍 14.4.2AtionSript余弦定律 14.5本章重点公式 14.6小结 第四部分 3D动画 第15章3D基础 15.1第3维和透视 15.1.1z轴 15.1.2透视 15.2速度和加速度 15.3回弹 15.3.1单个...

Global site tag (gtag.js) - Google Analytics