Android--Matrix(一)

Matrix

Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。

在Android中,scale(缩放),rotation(旋转)和 translation(平移)都是以矩阵(Matrix)的形式定义的,实际上在图形学中,这些平面图形的变换都是以矩阵的形式存在的。

左边一行,会用到右面的两列。

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

解释一下,上面的 sinX 和 cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。

translateX 和 translateY 表示 x 和 y 的平移量。

scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2,这样子。

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-05 05:32:34

Android--Matrix(一)的相关文章

Android Matrix(转)

Matrix的数学原理 平移变换 旋转变换 缩放变换 错切变换 对称变换 代码验证 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换: Translate           平移变换 Rotate                旋转变换 Scale                  缩放变换 Skew          

Android Matrix图像变换处理

Canvas类中drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)方法中有个参数类型是Matrix,从字面上理解是矩阵的意思,而实际上它也确实是个3x3的矩阵.Matrix在Android中的主要作用是图像变换,如平移.旋转.缩放.扭曲等. 关于图像如何通过矩阵进行变化可参考这篇文章图像处理-关于像素坐标矩阵变换(平移,旋转,缩放,错切) Matrix内部通过维护一个float[9]的数组来构成3x3矩阵的形式,而实际上所有的变换方法说到底

Android Matrix类以及ColorMatri

引自:http://www.chinabaike.com/t/37396/2014/0624/2556217.html Android Matrix类以及ColorMatrix类详解 最近在系统学习了android的图像处理(在网上搜集了一些资料并自己编写了测试程序,做了整理),现在这里做一总结: 一.ColorMatrix类 ColorMatrix是一个5x4阶的矩阵 在下面表示为A,第一行表示R红色分量,第二行表示G绿色分量,第三行表示B蓝色分量,第四行表示透明度: 用一维数组的存储方式如下

Android Matrix

转自 :http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#code Matrix的数学原理 平移变换 旋转变换 缩放变换 错切变换 对称变换 代码验证 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换: Translate           平移变

Android Matrix矩阵详解

Android中有两个比较重要的矩阵,ColorMatrix和Matrix.ColorMatrix用来改变bitmap的颜色和透明度,Matrix用来对bitmap平移.缩放.错切. ColorMatrix(色彩矩阵) Android中Bitmap色彩用了一个[R, G, B, A],4*1的矩阵来保存. 如果想改变一个Bitmap的色彩该怎么办?现在来了解下ColorMatrix的相关知识.ColorMatrix 是一个4*5的矩阵. 我们用[R', G', B', A']来保存新的bitma

Android Matrix源码详解

尊重原创,转载请标明出处   http://blog.csdn.net/abcdef314159 Matrix是一个3*3的矩阵,通过矩阵执行对图像的平移,旋转,缩放,斜切等操作.先看一段代码 public static final int MSCALE_X = 0; //!< use with getValues/setValues public static final int MSKEW_X = 1; //!< use with getValues/setValues public st

Android Matrix手势缩放自定义view 不止于Imageview

转载请注明出处:http://blog.csdn.net/coderyue/article/details/51397409 之前写过一篇文章Android TextView 横竖排切换(字方向不变) 是自定义了一个LinearLayout, 实现了当然还不够, 还要对它进行操作, 平移,旋转 and 缩放, 相信很多小伙伴都知道对图片的平移等等操作最好用的就是矩阵了,因为有个方法叫做imageview.setImageMatrix(matrix), 直接构造一个矩阵对象然后设置到图片上就进行相

android matrix 详解与进阶(一)

1 概述 这里我们会详细讲解matrix的各个方法,以及它的用法.matrix叫做矩阵,在前面讲解 ColorFilter 的文章中,我们讲解了ColorMatrix,他是一个4*5的矩阵.而这里,我们讲解的Matrix不是用于处理颜色的,而是处理图形的.他是一个3*3的矩阵. 2 原理 先看看matrix的矩阵是什么样子的: 这里可以查看Matrix的代码得到.那么这个矩阵分别代表了什么呢,这里通过他们的名字可以看出,scale是缩放,skew是错切(canvas变换中有讲过),trans是平

Android动画浅析

前言 在应用的开发中,动画是必不可少的一部分,否则很多视觉效果会显得特别突兀.今天我们就来了解一下Android中的动画库. 动画的分类 Android平台为我们提供了两类动画,Tween(补间动画)动画和Frame(帧)动画.Tween动画是通过对场景中的对象不断进行图像变换(平移.缩放.旋转等)来产生动画效果的:Frame动画则是顺序播放事先做好的每帧图像,类似于快速的幻灯片一样. 补间动画 Tween动画是通过预先定义一个动画,这个动画指定了图形变换的类型(旋转.平移.缩放等).启动时间.

android图片处理方法(不断收集中)

//压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while ( baos.toByteArra