2011.10.12(2)——— android Matrix学习01

本文介绍了Android中Matrix类的应用,包括如何通过3x3矩阵实现图像的缩放、旋转和平移操作。通过具体实例展示了如何设置Matrix的值来完成特定的图像变换效果。
2011.10.12(2)——— android Matrix学习01

参考:[url]http://chroya.iteye.com/blog/712078[/url]

Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法 。下面是一个乘法的公式:

[img]http://dl.iteye.com/upload/attachment/568699/e46fe68d-7b88-3495-9049-b2ad6313ce58.png[/img]

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

[img]http://dl.iteye.com/upload/attachment/568701/e2fb6846-86e7-3d2b-8ffa-c5adf00a41a2.png[/img]

[color=red]解释一下,上面的 sinX 和 cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。 translateX 和 translateY 表示 x 和 y 的平移量。 scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2 ,这样子。[/color]

下面看一个例子

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);
}



}



正常情况如下:

[img]http://dl.iteye.com/upload/attachment/568711/db888a04-1d62-3f47-8578-7c59dfc8640c.jpg[/img]

使用Matrix后 如下:

[img]http://dl.iteye.com/upload/attachment/568713/7799e2bb-2408-36e8-b180-e1cff690d43d.jpg[/img]


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值