`
chroya
  • 浏览: 656162 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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 提供了对矩阵的更方便的方法,下一篇介绍

 

分享到:
评论
14 楼 ZHOU452840622 2016-06-30  
少了一个构造函数  晕
13 楼 ZHOU452840622 2016-06-30  
06-30 17:39:19.193: E/AndroidRuntime(3724): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.z.customview.CusMatrixView
我就是这样写的  为什么报错呀
12 楼 ZHOU452840622 2016-06-30  
为什么报错哦
11 楼 yufengzungzhe 2013-12-23  
是先平移,还是先缩放呢?
10 楼 chroya 2012-09-24  
debugman 写道
“ 在 Android 里面, Matrix 由 9 个 float 值构成,是一个 3*3 的矩阵。如下图。”
请问这里 你怎么知道 里面的值是这些?

看Matrix的源码可以知道,看文档也可以知道
9 楼 debugman 2012-09-19  
“ 在 Android 里面, Matrix 由 9 个 float 值构成,是一个 3*3 的矩阵。如下图。”
请问这里 你怎么知道 里面的值是这些?
8 楼 790748937 2011-12-07  
    float cosValue = (float) Math.cos(-Math.PI/6); 
 
        float sinValue = (float) Math.sin(-Math.PI/6);
如果这两个值为一个不断变化的时候为什么会出现图片每次显示都在那里转一下?
7 楼 Coding.Ghost 2011-03-07  
后悔大学的高等数学没有学好啊..悲剧了.有空了还是要好好的补补才行了.
6 楼 chroya 2010-10-26  
wxw404 写道
旋转 产生的锯齿 怎么解决?

http://chroya.iteye.com/blog/794505
5 楼 wxw404 2010-10-26  
旋转 产生的锯齿 怎么解决?
4 楼 qiaoweishu 2010-10-22  
<div class="quote_title">讲解很清晰,受用了!</div>
<div class="quote_div">
<p> </p>
</div>
<p> </p>
3 楼 heji 2010-07-23  
谢谢哦!!!明白咯!
2 楼 chroya 2010-07-16  
文中已经解释过了。在那个矩阵的下面。
1 楼 elena_java 2010-07-16  
嘿嘿,能不能具体说一下每个参数的意思,我想矩阵的加减乘除很多人都应该知道的吧...至于参数比如那个setValues中,各个参数分别代表什么呢?谢谢

相关推荐

    Android画图之Matrix剖析

    Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析Android画图之Matrix剖析

    Android画图之Matrix

    android绘图中Matrix的使用

    android界面效果全汇总

    (一)Activity页面切换的效果 (二)android菜单动画 android 布局属性 android 翻页 Android画图之Matrix(一) Android中的样式和主题 Android中的样式和主题

    android 画板,白板,画图

    import module 即可使用,可涂鸦、绘图、添加文字、图像(可旋转缩放)、背景的Fragment,其中主要由SketchView利用matrix完成所有图形绘制操作。

    Android编程画图之抗锯齿解决方法

    本文实例分析了Android编程画图之抗锯齿解决方法。分享给大家供大家参考,具体如下: 在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。 方法一:给Paint加上抗锯齿...

    Android绘图机制与处理技巧(三)——Android图像处理之图形特效处理

    Android绘图机制与处理技巧(三)——Android图像处理之图形特效处理

    Android画图之抗锯齿paint和Canvas两种方式实例

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

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google Android SDK开发范例大全的目录

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的...

    Google Android SDK 开发范例大全01

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google Android SDK 开发范例大全02

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google+Android+SDK开发范例大全

    创意Android程序设计 10.1 手机手电筒——PowerManager控制WakeLock并改变手机亮度 10.2 GPS轨迹记录器——利用LocationListener在地图上画图并换算距离 10.3 女性贴身看护——AlarmManager.DatePicker.TimePicker ...

    Google Android sdk 开发范例大全 部分章节代码

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

    Google Android SDK开发范例大全(完整版)

    2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 ...

Global site tag (gtag.js) - Google Analytics