网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可。

Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等。

1 关于Y轴对称

  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={-1f,0.0f,0.0f,0.0f,1f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, bmp.getWidth(), 0, null);

屏幕上包括两幅图片,一张原图,一张对称图,来形成对比效应。

2 关于X轴对称

  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={1f,0.0f,0.0f,0.0f,-1f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, 0, bmp.getHeight(), null);

3 关于原点对称

  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={-1f,0.0f,0.0f,0.0f,-1f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, bmp.getWidth(), bmp.getHeight(), null);

4 关于y = x 对称

  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, 0, 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={0f,1f,0.0f,1f,0f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, bmp.getWidth(), bmp.getHeight(), null);

5 关于y = -x对称

  1. // 获取资源文件的引用res
  2. Resources res = getResources();
  3. // 获取图形资源文件
  4. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.v);
  5. // 设置canvas画布背景为白色
  6. canvas.drawColor(Color.BLACK);
  7. // 在画布上绘制缩放之前的位图,以做对比
  8. //屏幕上的位置坐标是0,0
  9. canvas.drawBitmap(bmp, bmp.getHeight(), 0, null);
  10. // 定义矩阵对象
  11. Matrix matrix = new Matrix();
  12. float[] values ={0f,-1f,0.0f,-1f,0f,0.0f,0.0f,0.0f,1.0f};
  13. matrix.setValues(values);
  14. System.out.println("matrix:" + matrix.toString());
  15. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
  16. matrix, true);
  17. canvas.drawBitmap(dstbmp, 0, bmp.getHeight(), null);

Android学习笔记进阶九之Matrix对称变换的更多相关文章

  1. Android学习笔记进阶八之Matrix矩阵

    Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵.最好记住.如下图: ...

  2. Android学习笔记进阶十之Matrix错切变换

    刚开始我也不懂啥叫错切变换,一看效果图你就恍然大悟. 对图像的错切变换做个总结: x = x0 + b*y0; y = d*x0 + y0; 与之对应的方法是: Matrix matrix = new ...

  3. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  4. Android学习笔记进阶17之LinearGradient

    具体的看一下博文:Android学习笔记进阶15之Shader渲染 package xiaosi.BitmapShader; import android.app.Activity; import a ...

  5. Android学习笔记进阶16之BitmapShader

    <1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public   BitmapShader(Bitmap bitmap,Shader.TileMode ti ...

  6. Android学习笔记进阶18 之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  7. Android学习笔记进阶18之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  8. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

  9. 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

随机推荐

  1. IDEA使用GIT 上传到GitHub

    1.下载Git https://www.git-scm.com/download/ 2.安装 3.IDEA配置Git(设置Git路径,点击Test),如下代表成功 4.创建仓库 5.add 6.pus ...

  2. CodeForces 550E Brackets in Implications(构造)

    [题目链接]:click here~~ [题目大意]给定一个逻辑运算符号a->b:当前仅当a为1b为0值为0,其余为1,构造括号.改变运算优先级使得最后结果为0 [解题思路]: todo~~ / ...

  3. oracle_序列、索引、同义词

     ①序列 1.序列: 可供多个用户用来产生唯一数值的数据库对象     自己主动提供唯一的数值     共享对象     主要用于提供主键值     将序列值装入内存能够提高訪问效率 2.CREA ...

  4. scikit-learn 为机器学习

    如何使用 scikit-learn 为机器学习准备文本数据   欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被 ...

  5. 深入理解Android(5)——从MediaScanner分析Android中的JNI

    前面几篇介绍了Android中的JNI和基本用法,这一篇我们通过分析Android源代码中的JNI实例,来对JNI部分做一个总结. 一.通向两个不同世界的桥梁 在前面我们说过,JNI就像一个桥梁,将J ...

  6. 在使用FireFox浏览器时,经常打开新标签,页面总是不断自动刷新,解决办法

    可以用如下方法尝试(逐个尝试,看看哪个管用): 1.地址栏输入 about:support,右上角有个翻新Firefox,点击,等待浏览器重启,即可. 2.点击:工具-附加组件,把“火狐主页和标签管理 ...

  7. 在Navicat中如何新建数据库和表并做查询

    上一篇文章,小编给大家分享了在Navicat中如何远程连接数据库,没有来得及上车的小伙伴可以戳这篇文章:在Ubuntu14.04中配置mysql远程连接教程.今天小编给大家分享一下如何在Navicat ...

  8. 手动脱FSG壳实战

    作者:Fly2015 对于FSG壳.之前没有接触过是第一次接触.这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序.对于这个壳折腾了一会儿,后来还是被搞定了. 1.查壳 首先对该程序(吾爱破解 ...

  9. UML类图中的几种关系总结

           UML类图,描写叙述对象和类之间相互关系的方式包含:依赖(Dependency).关联(Association).聚合(Aggregation).组合(Composition).泛化(G ...

  10. Python标准库:内置函数all(iterable)

    假设可迭代的对象的所有元素所有非空(或者空迭代对象),就返回True.这个函数主要用来推断列表.元组.字典等对象是否有空元素.比方有10000个元素的列表,假设没有提供此函数,须要使用循环来实现.那么 ...