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

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. ECNUOJ 2573 Hub Connection plan

    Hub Connection plan Time Limit:1000MS Memory Limit:65536KB Total Submit:743 Accepted:180 Description ...

  2. codevs——T2806 红与黑

    http://codevs.cn/problem/2806/  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 白银 Silver 题解       题目描述 Descriptio ...

  3. 【转载】GitHub详细教程

    1 Git详细教程   1.1 Git简介   1.1.1 Git是何方神圣?   Git是用C语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历 ...

  4. vue21 slot占位

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. BZOJ 2553 AC自动机+矩阵快速幂 (神题)

    思路: 我们先对所有读进来的T建一个AC自动机 因为走到一个禁忌串就需要回到根 所以呢 搞出来所有的结束点 或一下 fail指针指向的那个点 然后我们就想转移 a[i][j]表示从i节点转移到j节点的 ...

  6. POJ 3626 BFS

    思路:easy BFS //By SiriusRen #include <queue> #include <cstdio> #include <algorithm> ...

  7. 解决The requested resource is not available的办法

    1.问题描述: eclipse中使用tomcat来运行HelloWorld时出现The requested resource is not available. 在报错中有一行Setting prop ...

  8. How Blink works

    How Blink works Author: haraken@ Last update: 2018 Aug 14 Status: PUBLIC Working on Blink is not eas ...

  9. printf---格式化并输出结果到标准输出。

    printf命令格式化并输出结果到标准输出. 语法 printf(选项)(参数) --help:在线帮助: --version:显示版本信息. 参数 输出格式:指定数据输出时的格式: 输出字符串:指定 ...

  10. Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

    可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  war ...