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

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

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

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

下面在 Android 上试试 Matrix 的效果。

Java代码 

1.      public class MyView extends View {

2.

3.          private Bitmap mBitmap;

4.

5.          private Matrix mMatrix = new Matrix();

6.

7.          public MyView(Context context) {

8.

9.              super(context);

10.

11.          initialize();

12.

13.      }

14.

15.      private void initialize() {

16.

17.          mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();

18.

19.          float cosValue = (float) Math.cos(-Math.PI/6);

20.

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

22.

23.          mMatrix.setValues(

24.

25.                  new float[]{

26.

27.                          cosValue, -sinValue, 100,

28.

29.                          sinValue, cosValue, 100,

30.

31.                          0, 0, 2});

32.

33.      }

34.

35.      @Override protected void onDraw(Canvas canvas) {

36.

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

38.

39.          canvas.drawBitmap(mBitmap, mMatrix, null);

40.

41.      }

42.

43.  }

运行结果如下:

以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,代码 里面写的是100,为什么是平移50呢,因为缩放了一半。

大家可以自己设置一下Matrix的值,或者尝试一下两个Matrix相乘,得到的值设置进去,这样才能对Matrix更加熟练。

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

转载于:https://www.cnblogs.com/deve/archive/2012/02/27/2569026.html

Android画图之Matrix(一)相关推荐

  1. Android画图学习总结(四)——Animation(中)

    在Android画图学习总结(四)--Animation(上)中详细介绍了Tween Animation的定义.使用,由于篇幅有限,很多中重要的方面没有说明,这篇文章一方面做个完整的总结说明,另外一方 ...

  2. Android画图方式

    本文转载编辑自http://blog.chinaunix.net/u3/99423/showart_2203599.html Android画图方式 Android里面的画图分为2D和3D两种: 2D ...

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

    Android画图最基本的三个对象(Color,Paint,Canvas) 三个类都存放在 android.graphics包下 1) Color :颜色对象,相当于现实生活中的 '调料' 2) Pa ...

  4. Android中图像变换Matrix的原理应用

    第一部分 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matri ...

  5. android scalex中心,androidmatrix android怎么算matrix中心点

    Android中的Matrix,以及set,pre和post的区别小编们以为的永远不是现在不是未来,不是以后,是拥有的回忆. Matrix主要用于对平面进行平移(Translate),缩放(Scale ...

  6. android 画图一

    学习Android 有一段时间了,看完了Android SDK中的大部分文档,但是始终感觉自己还缺少很多,后来发现,Android SDK中只是介绍了Google自己开发的那一部分如何使用,Andro ...

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

    第一部分 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matri ...

  8. Android 图形处理特效 Matrix 的set 、 pre、post方法的区别和使用

    Android 图形处理特效 Matrix 的set . pre.post方法的区别和使用 Matrix包含一个3 X 3的矩阵,专门用于图像变换匹配. Matrix提供了四种操作: translat ...

  9. 【摘录】Android画图之抗锯齿

    在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.     方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. ...

最新文章

  1. 端到端半监督目标检测框架
  2. 脑机接口和卷积神经网络的初学指南(一)
  3. 华为鸿蒙系统发布完整视频,华为发布鸿蒙系统 华为鸿蒙系统发布会完整视频 华为鸿蒙系统发布会回放...
  4. 《大话数据结构》第9章 排序 9.6 希尔排序(上)
  5. Cloud for Customer custom BO创建时间随着行项目数量增加而增加的关系
  6. redis java根据value排序_Redis高级特性——排序
  7. Java多线程的4种实现方式
  8. java赋值父类_java新手求助super和set给父类赋值!
  9. github flow
  10. AcWing 789. 数的范围 (整数二分)
  11. Node-require的加载机制
  12. 图解TCPIP---第二章
  13. Deecamp 面试翻车记录
  14. Keil下无法跳转查看函数定义
  15. android list嵌套list,Android开发日常-listVIiew嵌套webView回显阅读位置
  16. 50行实现C语言FM收音机-Taskbus Stdio封装器在SDR课程中的应用
  17. py实战绘制人口金字塔图
  18. 【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.1 效果演示、技术点
  19. 如何提高代码质量,或者说高质量代码的特征是什么
  20. 编程初学者如何缓解迷茫和焦虑?墙裂推荐此文,助你赢在起跑线

热门文章

  1. Flex前端与Java服务端交互,反射机制挑大旗
  2. python版本升级及pip部署方法
  3. python之异常处理
  4. ab url 带参数 测试
  5. Nodejs的express使用教程
  6. 我的spark学习之路(三):利用spark做回归分析
  7. poj2987最大权闭包(输出最少建塔个数)
  8. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
  9. 【开发环境】010 Editor 工具 ( 工具下载 | 二进制文件分析模板模板安装 | 快捷键查看与设置 )
  10. 【开发环境】Java 文件生成 Windows 系统 .bat 批处理文件并自动执行 ( 输出 GB2312 格式处理中文乱码 | \r\n换行 | Runtime 执行 Cmd 命令 )