zoukankan      html  css  js  c++  java
  • Android学习笔记进阶九之Matrix对称变换

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

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


  • 相关阅读:
    C#导出数据—使用Word模板书签的使用
    C#动态调用泛型类、泛型方法
    C#中运算符的介绍和使用
    C#中自定义类型转换
    Linux删除文件后没有释放空间
    Linux下用dd命令测试硬盘的读写速度
    强制关闭或重启Linux系统的几种方法
    前端使用a标签启动本地.exe程序
    Linux 命令别名,让alias永久生效
    Linux 自动删除N小时或分钟前的文件
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6721779.html
Copyright © 2011-2022 走看看