Android 画图之 Matrix(一)

Matrix  ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
  首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法  。下面是一个乘法的公式:

在  Android  里面,  Matrix  由  9  个  float  值构成,是一个  3*3  的矩阵。如下图。

没专业工具,画的挺难看。解释一下,上面的  sinX  和  cosX  ,表示旋转角度的  cos  值和  sin  值,注意,旋转角度是按顺时针方向计算的。   translateX  和  translateY  表示  x  和  y  的平移量。   scale  是缩放的比例,  1  是不变,  2  是表示缩放  1/2  ,这样子。
     下面在  Android  上试试  Matrix  的效果。

public class MyView extends View {   

        private Bitmap mBitmap;   

        private Matrix mMatrix = new Matrix();   

        public MyView(Context context) {   

            super(context);   

            initialize();   

        }   

        private void initialize() {        

            mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
            float cosValue = (float) Math.cos(-Math.PI/6);   

            float sinValue = (float) Math.sin(-Math.PI/6);   

            mMatrix.setValues(   

                    new float[]{   

                            cosValue, -sinValue, 100,   

                            sinValue, cosValue, 100,   

                            0, 0, 2});   

        }        

        @Override
        protected void onDraw(Canvas canvas) {

            // super.onDraw(canvas); //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
            canvas.drawBitmap(mBitmap, mMatrix, null);

        }

    }  

运行结果如下:

以左上角为顶点,缩放一半,逆时针旋转 30 度,然后沿x 轴和 y 轴分别平移50 个像素,代码 里面写的是 100,为什么是平移 50 呢,因为缩放了一半。
         大家可以自己设置一下 Matrix 的值,或者尝试一下两个 Matrix 相乘,得到的值设置进去,这样才能对 Matrix 更加熟练。 这里讲的直接赋值的方式也许有点不好理解,不过还好,  andrid  提供了对矩阵的更方便的方法,下一篇介绍  。

时间: 2024-10-08 15:40:52

Android 画图之 Matrix(一)的相关文章

Android 画图之Matrix(二)

上一篇Android画图之 Matrix(一) 讲了一下 Matrix的原理和运算方法,涉及到高等数学,有点难以理解.还好 Android 里面提供了对Matrix操作的一系 列方便的接口. Matrix的操作,总共分为 translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在 Android的API里都提供了 set, post和pre 三种操作方式,除了translate,其他三种操作都可以指定中心点.          set是直接设置 Ma

Android画图系列(二)——自己定义View绘制基本图形

这个系列主要是介绍下Android自己定义View和Android画图机制.自己能力有限.假设在介绍过程中有什么错误.欢迎指正 前言 在上一篇Android画图系列(一)--自己定义View基础中我们了解自己定义View相关的基本知识.只是,这些东西依然还是理论,接下来我们就实际绘制一些东西 在本篇文章中,我们先了解下面Canvas,而且画一些主要的图形 Canvas简单介绍 Canvas我们能够称之为画布.能够在上面绘制各种东西.是安卓平台2D图形绘制的基础.非常强大. 一般来说,比較基础的东

Android中的Matrix类介绍

Matrix顾名思义就是大学的线性代数中的矩阵,关于矩阵的基本知识和加减乘除运算这里不再赘述. Android中的Matrix类是一个比较简单的3x3的3阶矩阵,结构如下: float matrix = {MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y, MPERSP_0, MPERSP_1, MPERSP_2 }; 结构如上:其中 MSCALE_X和MSCALE_Y分别是控制X轴和Y轴方向的缩放,MSKEW_X和MSKEW_Y是

Android中图像变换Matrix的原理、代码验证和应用

转自 http://biandroid.iteye.com/blog/1399462 第一部分 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换: Translate           平移变换 Rotate                旋转变换 Scale                  缩放变换 Skew    

Android进阶之Matrix完全解析

官方文档镇楼 https://developer.android.com/reference/android/graphics/Matrix.html The Matrix class holds a 3x3 matrix for transforming coordinates. Matrix是一个用于坐标变换的3*3矩阵 矩阵乘法变换基础 矩阵乘法公式 若一矩阵的列数与另一矩阵的行数相等,则可定义这两个矩阵的乘积.如 A 是 m×n 矩阵和 B 是 n×p矩阵,它们是乘积 AB 是一个 m×

Android画图之抗锯齿

在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.    方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. Java代码   paint.setAntiAlias(true); 方法二:给Canvas加上抗锯齿标志.有些地方不能用paint的,就直接给canvas加抗锯齿,更方便. Java代码   canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Pain

Android中图像变换Matrix的原理、代码验证和应用(二)

注:本篇文章为转载文章,因为原文格式排版较乱,但是内容非常棒,所以整理一下,方便以后查看. 查看原文请戳:http://blog.csdn.net/pathuang68/article/details/6991988 Matrix介绍文章请戳:http://blog.csdn.net/pathuang68/article/details/6991867 package com.pat.testtransformmatrix; import android.app.Activity; import

Android画图最基本的三个对象(Color,Paint,Canvas)

三个类都存放在 android.graphics包下 1) Color :颜色对象,相当于现实生活中的 ‘调料’ 2) Paint : 画笔对象,相当于现实生活中画图用的 ‘笔’————主要的还是对‘画笔’进行设置 3) Canvas : 画布对象,相当于现实生活中画图用的 ‘纸 或 布’ 三者相结合,就能画出基本的图形 常用方法: 1)Color :颜色对象 1.可以通过 Color.颜色名,来获取颜色,应为是静态的,返回一个整数值 2.调用静态的 argb方法,可以调出个性的颜色 alpha

Android 中的 Matrix

Matrix 是 Android SDK 提供的一个矩阵类,它代表一个 3 X 3 的矩阵 Matrix主要可以对图像做4种基本变换 Translate 平移变换 Rotate 旋转变换 Scale 缩放变换 Skew 错切变换 Matrix类中的方法,主要也是和这四个变换相关,只是对计算过程做了封装,作用对象是Bitmap而不是Canvas 利用 Matrix 来进行 Translate(平移).Scale(缩放).Rotate(旋转)的操作,就是在操作着这个矩阵中元素的数值来达到我们想要的效