`
CrackRen
  • 浏览: 170817 次
  • 性别: 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
分享到:
评论

相关推荐

    关于android Matrix的使用

    `onDraw()`方法中,我们使用`canvas.drawBitmap()`方法,传入Bitmap和Matrix对象,使得图像按照设定的Matrix进行变换。 Matrix的乘法操作在图像变换中非常关键,因为多个变换可以通过矩阵乘法组合成一个单一的变换...

    Android-使用Matrix对Bitmap进行处理

    当我们需要对Bitmap应用Matrix变换时,可以使用Bitmap.createBitmap方法,它接受原始Bitmap、新的宽度和高度以及Matrix作为参数。Matrix会根据给定的变换规则对图像进行处理,生成一个新的Bitmap。例如,以下代码...

    Matrix的使用

    完成变换设置后,我们可以使用Bitmap的createBitmap()静态方法,传入原始Bitmap、宽度、高度、配置和Matrix来创建一个新的变形后的Bitmap。例如: ```java Bitmap transformedBitmap = Bitmap.createBitmap( ...

    Matrix 详解

    Matrix类还提供了一系列基本操作方法,例如equals(), hashCode(), toString(), toShortString()等。这些方法用来比较两个矩阵的数值是否相同、获取矩阵的哈希值、将矩阵转换为字符串等。 对于数值操作,Matrix提供...

    C# DataMatrix.net 源码

    本文将深入探讨C# DataMatrix.net的使用方法,以及如何通过源码学习其工作原理。 首先,让我们了解DataMatrix的基本概念。DataMatrix是由国际自动识别制造商协会(AIM)制定的一种二维矩阵码,它采用了错误纠正编码...

    PHP生成DataMatrix格式的二维条码

    1. **创建条码对象**:使用`JPGraph\Barcode\BarcodeFactory`类的静态方法`create()`创建DataMatrix条码对象。例如,`$barcode = BarcodeFactory::Create('datamatrix', '1234567890');`,其中第一个参数是条码类型...

    DataMatrix二维码解码不同种方式.zip

    开发者可以通过这个项目了解如何使用这些库来实现DataMatrix二维码的读取,并可以根据实际需求选择最适合的解码方式。 在实际应用中,选择解码库时需要考虑的因素包括解码速度、容错能力、内存占用、是否支持特定的...

    步入Matrix函数 步入Matrix函数 步入Matrix函数

    Matrix对象需要与Transform对象配合使用才能在舞台上产生实际效果。Transform对象是针对DisplayObject的,它可以访问和修改对象的矩阵属性。以下是一个简单的示例,展示了如何创建Matrix并应用到MovieClip上: ```...

    zxing源码分析——DataMatrix码部分

    DataMatrix 码是一种二维码,zxing 是一个 Java 库,用于解析和生成各种二维码。 在 zxing 源码中,DataMatrix 码部分的代码结构与 QR 码基本相同。Detector 的功能是从原始图像中找出符号码的部分,并进行透视转换...

    通过matrix缩放图片

    在Android开发中,图片处理是一项常见的任务,而利用Matrix进行图片缩放则是一种灵活且高效的方法。Matrix是Android图形库中的一个关键类,它允许我们对图像进行旋转、平移、缩放等变换操作。本篇文章将深入探讨如何...

    Android下使用Matrix进行图形变换处理的Demo

    Canvas是Android提供的绘制图形的接口,我们可以通过调用Canvas的`drawBitmap`或`drawRect`等方法绘制图形,然后调用`Canvas.save()`保存当前状态,对Matrix进行一系列变换,最后使用`Canvas.restore()`恢复到保存的...

    类运算符重载设计定义一个二维方阵类 matrix。

    综上所述,这段代码展示了如何使用C++的运算符重载功能来实现一个功能齐全的二维方阵类,包括基本的矩阵操作如加法、减法、乘法和转置等。这不仅提高了代码的可读性和可维护性,也使得矩阵的操作更加直观和方便。

    delphi调用label matrix

    下面我们将深入探讨这个主题,包括Label控件的基本使用、矩阵布局的实现以及可能遇到的问题与解决方案。 首先,Label是Delphi中常用的一种可视化组件,它用于显示静态文本信息。在Delphi集成开发环境(IDE)中,你...

    Android使用Matrix实现图片缩放,移动

    当用户拖动图片时,我们需要捕获ACTION_MOVE事件,获取当前手指位置,并与上一次的位置进行比较,计算出平移量,然后使用Matrix.setTranslate()方法更新图片的位置。 4. **避免OOM错误** Android系统为每个应用...

    矩阵运算Matrix,java实现

    4. **乘法**:矩阵乘法需要更复杂的算法,如Strassen算法或高斯-约旦消元法,这里通常使用传统的行乘列方法,先将矩阵分解为行,然后对每行的元素与另一矩阵的列进行乘法并累加。 5. **矩阵求逆**:逆矩阵是矩阵的一...

    Matrix Transpose_matrixtransposition_

    在数学和计算机科学中,矩阵转置是一个基本概念,它涉及到将矩阵的行转换为列或列转换为行。这个过程对于线性代数的理解至关重要,因为它涉及到许多重要的运算和性质。标题“Matrix Transpose_matrixtransposition_...

    matlab基本使用方法

    通过学习以上内容,并结合"Introduction to MATLAB"中的实例和练习,初学者将能够逐步掌握MATLAB的基本使用方法,为后续深入研究打下坚实基础。不断实践和探索,将使你在MATLAB的世界中游刃有余。

    matrix 图片旋转 居中

    在实际开发中,我们可能需要加载图片到Bitmap对象,然后创建一个Matrix实例,对Bitmap进行操作,最后使用ImageView的setImageMatrix()方法设置Matrix,以展示变换后的效果。 总结一下,"matrix 图片旋转 居中"的...

    datalogic MATRIX 210N说明书

    ### Datalogic MATRIX 210N 调试手册知识点总结 #### 一、产品概述 Datalogic Matrix 210N ...通过以上知识点总结,我们对Datalogic Matrix 210N 的功能特性和使用方法有了全面了解,有助于更好地应用于实际工作中。

Global site tag (gtag.js) - Google Analytics