,,Android中Matrix用法实例分析

,,Android中Matrix用法实例分析

本文主要介绍了矩阵在Android中的用法,并以实例的形式分析了矩阵矩阵运算的常用技巧,具有一定的参考价值,有需要的朋友可以参考一下。

本文举例说明了Matrix在Android中的用法。分享给你,供你参考,如下:

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

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

在Android中,Matrix由9个浮点值组成,是一个3*3的矩阵。如下图:

说明上面的sinX和cosX表示旋转角度的cos和sin值。请注意,旋转角度是顺时针计算的。TranslateX和translateY表示x和y的平移量。Scale是缩放比例,1是常数,2是1/2缩放。

矩阵操作分为四种:平移(translate)、旋转(rotate)、缩放(zoom)和倾斜(tilt)。每个转换都提供了Android API中的set、post、pre三种操作模式。除了平移,其他三个操作都可以指定中心点。

Set是直接设置矩阵的值。每设置一次,整个矩阵的数组都会发生变化。

是后乘法,当前矩阵乘以参数给定的矩阵。您可以连续多次使用post来完成所需的整个转换。比如把一张图片旋转30度,然后平移到(100,100)的地方,可以这样做:Matrix m=new Matrix();m . post rotate(30);m.postTranslate(100,100);这达到了预期的效果。

Pre是预乘,参数给定的矩阵乘以当前矩阵。所以操作发生在当前矩阵的前面。比如上面的例子,如果用pre,会是这样的:Matrix m=new Matrix();m.setTranslate(100,100);m . pre rotate(30);

旋转、缩放和倾斜都可以围绕一个中心点进行。如果没有指定,默认情况下,它是围绕(0,0)点完成的。

特别注意:

矩阵操作分为四种:平移(translate)、旋转(rotate)、缩放(zoom)和倾斜(tilt)。每个转换都提供了Android API中的set、post、pre三种操作模式。除了平移,其他三个操作都可以指定中心点。

Set是直接设置矩阵的值。每设置一次,整个矩阵的数组都会发生变化。

是后乘法,当前矩阵乘以参数给定的矩阵。您可以连续多次使用post来完成所需的整个转换。

镜像效果:

反射效果:

图片组成(水印):

不多说,直接去码。

MainActivity.java的主要法规如下:

包net . loonggg . test matrix;

导入Android . app . activity;

导入Android . graphics . bitmap;

导入Android . graphics . bitmapfactory;

导入Android . graphics . canvas;

导入Android . graphics . color;

导入Android . graphics . matrix;

导入Android . graphics . paint;

导入Android . graphics . porter duff . mode;

导入Android . graphics . porterduffxfermode;

导入Android . OS . bundle;

导入Android . view . window;

导入Android . widget . imageview;

公共类MainActivity扩展Activity {

私有ImageView iv1、iv2

私人帆布画布;

私漆油漆;

@覆盖

受保护的void onCreate(Bundle saved instancestate){

super . oncreate(savedInstanceState);

requestWindowFeature(窗口。特征_编号_标题);

setContentView(r . layout . activity _ main);

iv1=(ImageView)findViewById(r . id . iv1);

iv2=(ImageView)findViewById(r . id . iv2);

bitmap bitmap 1=bitmap factory . decode resource(get resources(),

r . draw able . Weibo);

bitmap update bitmap=bitmap . create bitmap(bitmap 1 . getwidth()* 2,

bitmap1.getHeight() * 2,bitmap 1 . getconfig());

Canvas=new Canvas(update bitmap);

Paint=new Paint();

paint.setColor(颜色。黑色);

Matrix Matrix=new Matrix();

//setMirrorOne(bitmap1,matrix);

//setInvertedImage(bitmap1,matrix);

//setbase change(矩阵);

canvas.drawBitmap(bitmap1,matrix,paint);

setImageSynthesis(矩阵);

iv1.setImageBitmap(位图1);

iv2。setimagebitmap(更新位图);

}

/**

* 还有一些基本变化

*/

私有无效集合基础更改(矩阵矩阵){

//矩阵。设置旋转(60);//这是旋转多少度

//matrix.setRotate(degrees,px,py);//这个方法是以哪个点为中心进行旋转多少度

//matrix.setSkew(kx,ky);//设置倾斜,以x轴倾斜,还是y轴

//倾斜x和y轴,以(100,100)为中心。

//matrix.postSkew(0 .2f,0 .2f,100,100);

//matrix.setScale(0.5f,1);//缩放宽度变为原来的一半,高度不变

}

/**

* 设置倒影效果

*

* @param位图一

* @param矩阵

*/

私有void setInvertedImage(位图位图1,矩阵矩阵){

matrix.setScale(1,-1);

matrix.postTranslate(0,位图1。getheight());

}

/**

* 设置镜面效果方法一

*

* @param位图一

* @param矩阵

*/

私有void setMirrorOne(位图位图1,矩阵矩阵){

矩阵。设置平移(位图1。getwidth(),0);//这个是移动

matrix.preScale(-1,1);

}

//-

/**

* 解释:镜面效果方法一和二的区别:

* 不知道大家看没看出来,其实这两种方法的效果是一样的,只不过是设置步骤不一样,发布是后乘,当前的矩阵乘以参数给出的矩阵

* 。可以连续多次使用帖子,来完成所需的整个变换2007年前是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。

* 可以连续多次使用邮政

* ,来完成所需的整个变换,但是不可以连续使用设置来完成矩阵的整个变换,为什么呢?设置是直接设置[数]矩阵的值,每次设置一次

* ,整个[数]矩阵的数组都会变掉,第一次可以使用设置,之后的变换必须换成邮政或者pre,也可以一直用邮政也行

*/

//-

/**

* 设置镜面效果方法二

*

* @param位图一

* @param矩阵

*/

私有void setMirrorTwo(位图位图1,矩阵矩阵){

matrix.setScale(-1,1);

矩阵。翻译后(位图1。getwidth(),0);

}

/**

* 设置图片的合成

*

* @param矩阵

*/

私有空集图像合成(Matrix Matrix){

位图位图2=位图工厂。解码资源(获取资源(),

r。可画的。IC _ launcher);

//设置图片合成时的各种模式

paint.setXfermode(新PorterDuffXfermode(模式。变暗));

//图片的合成很简单,就是再以位图2为基图往目标图片上画一次

canvas.drawBitmap(bitmap2,matrix,paint);

}

}

布局文件的代码如下:

线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '

xmlns:tools=' http://模式。安卓。' com/tools '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

安卓:方向='垂直'

工具:上下文='。'主要活动'

图像视图

android:id='@ id/iv1 '

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '/

图像视图

android:id='@ id/iv2 '

Android:layout _ width=' wrap _ content '

Android:layout _ height=' wrap _ content '/

/线性布局

希望本文所述对大家机器人程序设计有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: