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

首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法。下面是一个乘法的公式:


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


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

IaiaiActivity.java类:
package com.iaiai.activity;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.View;public class IaiaiActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(new MyView(this));}public class MyView extends View {private Bitmap bmp;private Matrix matrix = new Matrix();public MyView(Context context) {super(context);initialize();}private void initialize() {bmp = ((BitmapDrawable) getResources().getDrawable(R.drawable.icon)).getBitmap();float cosValue = (float) Math.cos(-Math.PI / 6);float sinValue = (float) Math.sin(-Math.PI / 6);matrix.setValues(new float[] { cosValue, -sinValue, 100, sinValue,cosValue, 100, 0, 0, 2 });}@Overrideprotected void onDraw(Canvas canvas) {// super.onDraw(canvas); //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。canvas.drawBitmap(bmp, matrix, null);}}}


运行结果:


以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,代码里面写的是100,为什么是平移50呢,因为缩放了一半。
大家可以自己设置一下Matrix的值,或者尝试一下两个Matrix相乘,得到的值设置进去,这样才能对Matrix更加熟练。

这里讲的直接赋值的方式也许有点不好理解,不过还好,andrid提供了对矩阵的更方便的方法,下一篇介绍。

更多相关文章

  1. Android:修图技术之滤镜效果实现及原理分析——ColorMatrix
  2. Android多点触控技术实战 针对图片自由缩放和移动
  3. Android(安卓)Matrix矩阵原理详解
  4. 如何优雅地在Android上实现iOS的图片预览
  5. Android异步加载全解析之大图处理
  6. 关于Android(安卓)Matrix pre post 的理解
  7. Android处理大图,如一张30M的大图,如何预防OOM
  8. Android通过多点触控的方式对图片进行缩放的实例代码
  9. Android图片裁剪实现(EnjoyCrop)

随机推荐

  1. 【iOS】网页中调用JS与JS注入
  2. 使用iTunes把电脑中的视频传到iPhone的方
  3. .9图片的制作(draw9patch.bat工具的使用)
  4. 【第二版】高仿Android网易云音乐企业级
  5. FAQ_17 android string.xml 里面的 %
  6. 转..android 开发的心酸历史
  7. Android(安卓)IMSI和IMEI
  8. Android多渠道打包之Python打包
  9. [置顶] 为学Android,我看了这些书
  10. android视频录制与滤镜(二)——google官方