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


  • 相关阅读:
    nno_setup制作升级包必须面临的几个问题 2
    如何运用inno在安装和卸载时提示用户结束进程?
    inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效
    Inno Setup 插件大全
    INNO安装卸载自动结束进程插件使用
    Inno Setup 在安装程序开始前和卸载程序开始前,检查并关闭运行的进程
    INNO:检测程序是否已经安装,是则弹出卸载提示。
    Inno Setup 安装、卸载前检测进程或服务
    断点续传2
    解决 IDEA 创建 Gradle 项目没有src目录问题
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6721779.html
Copyright © 2011-2022 走看看