2011.10.12(2)——— android Matrix学习01
参考:
http://chroya.iteye.com/blog/712078
Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法 。下面是一个乘法的公式:
在 Android 里面, Matrix 由 9 个 float 值构成,是一个 3*3 的矩阵。如下图。
解释一下,上面的 sinX 和 cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。 translateX 和 translateY 表示 x 和 y 的平移量。 scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2 ,这样子。
下面看一个例子
package com.lp.matrix;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.view.View;
/**
* 一个简单的Matrix例子
*
* @author lp
* lipeng88213@126.com
* http://lipeng88213.iteye.com/
* 2011-10-12
* 上午11:29:19
*/
public class MatrixView extends View {
private Context _context;
private Bitmap _bitmap;
private Matrix _matrix = new Matrix();
public MatrixView(Context context) {
super(context);
this._context = context;
init();
}
private void init(){
//得到图片
_bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.a)).getBitmap();
//得到30°的sin和cos值
//顺时针是正数,我们这个是逆时针转动30°
float sinValue = (float)Math.sin(-Math.PI/6);
float cosValue = (float)Math.cos(-Math.PI/6);
//给Matrix赋值 按照固定的顺序
//
//cosX -sinX translateX
//sinX cosX translateY
//0 0 scale
//
//解释
//上面的 sinX 和 cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。
//translateX 和 translateY 表示 x 和 y 的平移量。
//scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2
_matrix.setValues(new float[]{
cosValue,-sinValue,100,
sinValue,cosValue,100,
0,0,2
});
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//canvas.drawBitmap(_bitmap, _matrix, null);
canvas.drawBitmap(_bitmap, 0, 0, null);
}
}
正常情况如下:
使用Matrix后 如下:
以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,
代码 里面写的是100,为什么是平移50呢,因为缩放了一半。
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0056/8699/e46fe68d-7b88-3495-9049-b2ad6313ce58-thumb.png)
- 大小: 3.2 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0056/8701/e2fb6846-86e7-3d2b-8ffa-c5adf00a41a2-thumb.png)
- 大小: 1.7 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0056/8711/db888a04-1d62-3f47-8578-7c59dfc8640c-thumb.jpg)
- 大小: 12.7 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0056/8713/7799e2bb-2408-36e8-b180-e1cff690d43d-thumb.jpg)
- 大小: 8.3 KB
分享到:
相关推荐
这篇博客“2011.10.13(2)——— android Matrix学习03”可能深入探讨了Matrix类的一些高级用法和实践技巧。虽然描述中没有提供具体信息,但从标题可以推断,这可能是系列教程的第三部分,继续深化对Matrix的理解。...
基于因子分析的我国A股上市...争力评价——以医药企业为例_张澳.caj
Android图像操作一例,使用Matrix.postRotate方法旋转图片,这些的图片格式是BMP,其它格式可能也能用吧,没测试,旋转BMP图片的效果如截图所示,用户单击向左或向右按钮后,图片旋转90度,旋转角度根据自己需要...
2,jdk-170.tar.gz ——————————JDK1.7deb包 3,switch_java.sh -------------------------java其它版本切换 4,check_java.sh———————————版本核对 注意:使用命令接口切换时,需要将自己配置的...
python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目...
C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——...
微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+...
python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ...
微信小程序——万年历(截图+源码).zip 微信小程序——万年历(截图+源码).zip 微信小程序——万年历(截图+源码).zip 微信小程序——万年历(截图+源码).zip 微信小程序——万年历(截图+源码).zip 微信小程序...
这篇小学语文一年级下册的反义词及量词练习主要涵盖了语言学习的基础概念,旨在帮助学生掌握汉语中的基本词汇关系和量词的正确使用。 反义词是汉语词汇中非常重要的一部分,它指的是意思相反或相对的词语。在给出的...
《.NET Framework游戏编程入门——模拟魔兽学院永远的羁绊》 在计算机编程的世界中,游戏开发是一项富有挑战性和创新性的任务。对于初学者来说,理解游戏编程的基本原理和实践技巧是迈向专业游戏开发的第一步。本文...
大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链...
,最近一直和医疗打交道,做些蓝牙有关的...2.深入了解Android蓝牙Bluetooth——《进级篇》 2.深入了解Android蓝牙Bluetooth——《总结篇》 欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部。加入我们一起学习
Android support.v7包
———————————————— 版权声明:本文为CSDN博主「MechMaster」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...
微信小程序——卡卡汽车 获取用户 设备信息(截图+源码).zip 微信小程序——卡卡汽车 获取用户 设备信息(截图+源码).zip 微信小程序——卡卡汽车 获取用户 设备信息(截图+源码).zip 微信小程序——卡卡汽车 ...
Android中文翻译组——Android中文API合集(4).chm
Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...
【标题】与【描述】提及的是关于小学语文学习中的一个重要组成部分——歇后语。歇后语是中国传统文化中的一种独特语言现象,它结合了形象生动的比喻和巧妙的谐音,通常用于表达幽默、讽刺或者寓意深刻的观点。这些歇...
应用层包过滤防火墙 一个简单的应用层包过滤防火墙实现 Qt/SQLite/NetFilter 编译过程可使用QtCreator编译,也可使用命令行 sudo qmake && make 来编译。 运行则执行 sudo ./firewall 即可。