图片色彩的变换 android 提供了 ColorMatrix. 现在图像变换android 同样提出了Matrix,这个矩阵是一个3×3的矩阵,其初始值为

 

的一个矩阵。

图像的变形处理通常包含以下四类基本变换: 
● Translate——平移变换 
● Rotate ——旋转变换 
● Scale——缩放变换 
● Skew——错切变换

Translate : 平移改变如下矩阵中的值

Android 的变形矩阵 -Matrix_第1张图片


只需要改变 △x  和 △y 的值就可以实现平移  

Rotate : 旋转变换

Android 的变形矩阵 -Matrix_第2张图片

通过这个图的p0(x0,y0),我们可以列出一个公式来求出p(x,y)的坐标



写成矩阵的样子如下:


Scale: 缩放变换

一个点不存在缩放,但是一个图形矩阵,对每一个点进行等比例缩放,就出现了缩放变换。



其中k1 是x0 点的缩放比例系数

同理K2

矩阵形式如下:


Skew : 错切变换

错切变换(skew)在数学上又称为Shear mapping(剪切变换)或者Transvection(缩并),它是一种比较特殊的线性变换。错切变换的效果就是让所有点的X坐标(或者Y坐标)保持不变,而对应的Y坐标(或者X坐标)则按比例发生平移,且平移的大小和该点到X轴(或Y轴)的垂直距离成正比。

Android 的变形矩阵 -Matrix_第3张图片

计算公式如下

x = x0 + K1 * y0;y = K2 * x0 + y0;

对应矩阵如下:


可以发现,矩阵中的a,b,c,d,e,f这六个矩阵元素分别对应以下变换:


● a和e控制Scale——缩放变换● b和d控制Skew——错切变换● c和f控制Trans——平移变换● a,b,d,e共同控制Rotate——旋转变换

将矩阵的9个值保存在一个数组

mMatri

设置给矩阵 matrix 

matrix.setValues(mMatrix);


效果图

Android 的变形矩阵 -Matrix_第4张图片


布局文件:

<?xml version="1.0" encoding="utf-8"?>                        

MainActivity:

package com.huawei.matrix.matrix;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.GridLayout;import android.widget.ImageView;public class MainActivity extends AppCompatActivity {    private GridLayout mGroup;    private ImageView mImg;    private Bitmap mbitmap;    private int mEditWidth,mEditHeight;    private EditText [] mEdits = new EditText[9]; // 构建9个输入框    private float[] mMatrix = new float[9]; // 矩阵数组    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mImg = (ImageView) findViewById(R.id.image);        mbitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);        mImg.setImageBitmap(mbitmap);        mGroup = (GridLayout)findViewById(R.id.grade);        mGroup.post(new Runnable() {            @Override            public void run() {                mEditWidth = mGroup.getWidth()/3;                mEditHeight = mGroup.getHeight()/3;                addEdits();                initMatrix();            }        });    }    private void addEdits(){        for (int i=0;i<9;i++){            EditText ed = new EditText(this);            mEdits[i] = ed;            mGroup.addView(ed,mEditWidth,mEditHeight);        }    }    private void initMatrix(){        for (int i=0;i<9;i++){            if (i%4==0){                mEdits[i].setText("1");            }else{                mEdits[i].setText("0");            }        }    }    private void getMatrix(){        for (int i =0 ; i< 9 ;i++){            mMatrix[i] = Float.valueOf(mEdits[i].getText().toString());        }    }    private void setmImgMatrix(){        Bitmap bitmap = Bitmap.createBitmap(                mbitmap.getWidth(),                mbitmap.getHeight(),                Bitmap.Config.ARGB_8888        );        Matrix matrix = new Matrix();        matrix.setValues(mMatrix);//        matrix.setRotate(30);  //旋转//        matrix.setTranslate(20,20); //平移//        matrix.setSkew(1.3f,1); //错切        Canvas canvas = new Canvas(bitmap);        canvas.drawBitmap(mbitmap,matrix,null);        mImg.setImageBitmap(bitmap);    }    public void btnChanged(View v){        getMatrix();        setmImgMatrix();    }    public void btnReset(View v){        initMatrix();        getMatrix();        setmImgMatrix();    }}











更多相关文章

  1. android实现图片平铺效果&WebView多点触控实现缩放
  2. imageView的使用(进行原样的保持和按照比例的缩放:)
  3. android 大图片拖拽并缩放实现原理
  4. android:编写属性动画程序(旋转,缩放,淡出淡入)
  5. Android 图片缩放与旋转
  6. Android中位图缩放
  7. Android 图片缩放
  8. 让Android自带的Gallery实现多点缩放,拖动和边界回弹效果,效果流畅
  9. Android中图片Bitmap的缩放

随机推荐

  1. Android(安卓)TextView实现滚动跑马灯效
  2. Android(安卓)Animation学习笔记
  3. Android(安卓)toolbar与actionbar区别
  4. Android层次化安全架构及核心组件概览
  5. 使用Android(安卓)adb命令来启动Android
  6. Android热修复技术链接收集
  7. Android(安卓)渗透测试学习手册 第二章
  8. 新书内容连载(3):Android(安卓)SDK中常用命
  9. 基于ANDROID的网上订餐系统
  10. android 笔记2