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

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. 题解 CF1027D 【Mouse Hunt】

    这道题原本写了一个很复杂的DFS,然后陷入绝望的调试. 看了一下题解发现自己完全想复杂了. 这里大概就是补充一些题解没有详细解释的代码吧... (小声BB)现在最优解rank4(话说$O2$负优化什么 ...

  2. MapReduce JOB 的输出与输出笔记。

    提高 MapReduce 价值,自定义输入和输出. 比如跳过存储到 HDFS 中这个耗时的布置. 而只是从原始数据源接受数据,或者直接将数据发送给某些处理程序. 这些处理程序在 MapReduce 作 ...

  3. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

  4. iOS开发 - 数据归档与恢复 NSKeyedArchiver

    归档与恢复归档 归档,英文Archiver['ɑrkɪvə],这里指的是将OC的对象存储为一个文件或者网络上的一个数据块. 恢复归档.英文UnArchiver,指的是将一个来自文件或网络的归档数据块恢 ...

  5. CoAP与物联网系统

    CoAP简单介绍 引自维基百科上的介绍,用的是谷歌翻译... 受约束的应用协议(COAP)是一种软件协议旨在以很easy的电子设备.使他们能够在互联网上进行交互式通信中使用. 它特别针对小型低功率传感 ...

  6. JSP编程技术5-购物车的实现-session会话对象

    首先十分感谢大家对我的文章的支持,我是个刚刚才找到自己方向的在校大学生,当然我的知识和能力有限,眼下正在努力恶补学习中.当我看到自己首次发表到CSDN首页的文章才几个小时阅读量就超过了100时,对我来 ...

  7. 快速定位java系统的线上问题--转

    原文地址:http://m.blog.csdn.net/article/details?id=43376943 前言:我们的场景并没有像BAT等大型互联网公司里的系统那么复杂,但是基本上也有一定的规模 ...

  8. Svn备份与Bandizip压缩批处理程序

    目的:为了定时备份多个svn仓库数据,使用批处理程序进行备份并Bandizip进行压缩保存到指定位置,操作完成后弹出成功提示. 为了完成以上目标,需要了解以下几个方面: 批处理命令 Svn命令 Ban ...

  9. JS中部分 Array 对象方法介绍

    1.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本 <script type="text/javascrip ...

  10. IBM将收购Linux发行商红帽公司,继续发力云计算市场

    10月29日凌晨消息,IBM和Red Hat当地时间星期日联合宣布,IBM将以340亿美元收购红帽公司(Red Hat).根据两家公司发表的一份联合声明,IBM将以每股190美元的价格,以现金方式收购 ...