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


  • 相关阅读:
    svn hooks post-commit钩子自动部署
    curl post数据
    php 操作提示框
    php分页类 可直接调用
    微信web端生成支付二维码
    php 数据库类
    虚拟机中的CentOS 7设置固定IP连接最理想的配置
    多并发时支付如何保持账户余额的一致性?
    Spring核心机制:依赖注入
    .net 系列:并发编程之一【并发编程的初步理论】
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6721779.html
Copyright © 2011-2022 走看看