Matrix:
简单用法就是直接使用它的setXX()方法
而高级一点来理解他就是去理解一个线性矩形
首先我们来认识线性矩形:(用画图粗略地画不要见怪)

分析:

那还有一组 MRERSP_0 MRERSP_1是干什么的呢?

等下告诉你

如:选择90度  那九十度就放进去a角里

Float [] x={1.0f,0.0f,0.0f,0.0f,-1.0f,0.0f,0.0f,0.0f,0.0f};

Matrix matrix=new Matrix();

matrix.setValues(f);

也有简单一点的:

matrix.setRotate(90);

 

如果想围绕哪个点:

matrix.setRotate(90,x,y);

matrix.setRotate(90,0,0);

或者:Float [] x={1.0f,0.0f,0.0f,0.0f,-1.0f,0.0f,0.0f,0.0f,0.0f};

而围绕100,100可以这样:如下:

Float [] x={

1.0f,0.0f,100.0f,

0.0f,-1.0f,100.0f,

0.0f,0.0f,0.0f};

现在清楚MRERSP_0 MRERSP_1是干什么的吧?

归根结底是这个图,重点在 a b d e 记好他们的位置  然后套用公式:

X=aX1+bY1;

Y=dX1+eY1;

如:y=-x;

那需要什么条件? 问自己a b d e 怎么设置吧  其他同理

对称效果图:

实例:

//锐化效果
  public static Bitmap toSharp(Bitmap bit)
     { 
         long start =System.currentTimeMillis(); 
         // 拉普拉斯矩阵  
         int[] laplacian = new int[] { -1, -1, -1, -1, 9, -1, -1, -1, -1 }; 
          
         int width = bit.getWidth(); 
         int height = bit.getHeight(); 
         Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); 
          
         int pixR = 0; 
         int pixG = 0; 
         int pixB = 0; 
          
         int pixColor = 0; 
          
         int newR = 0; 
         int newG = 0; 
         int newB = 0; 
          
         int idx = 0; 
         float alpha = 0.3F; 
         int[] pixels = new int[width * height]; 
         bit.getPixels(pixels, 0, width, 0, 0, width, height); 
         for (int i = 1, length = height - 1; i < length; i++) 
         { 
             for (int k = 1, len = width - 1; k < len; k++) 
             { 
                 idx = 0; 
                 for (int m = -1; m <= 1; m++) 
                 { 
                     for (int n = -1; n <= 1; n++) 
                     { 
                         pixColor = pixels[(i + n) * width + k + m]; 
                         pixR = Color.red(pixColor); 
                         pixG = Color.green(pixColor); 
                         pixB = Color.blue(pixColor); 
                          
                         newR = newR + (int) (pixR * laplacian[idx] * alpha); 
                         newG = newG + (int) (pixG * laplacian[idx] * alpha); 
                         newB = newB + (int) (pixB * laplacian[idx] * alpha); 
                         idx++; 
                     } 
                 } 
                  
                 newR = Math.min(255, Math.max(0, newR)); 
                 newG = Math.min(255, Math.max(0, newG)); 
                 newB = Math.min(255, Math.max(0, newB)); 
                  
                 pixels[i * width + k] = Color.argb(255, newR, newG, newB); 
                 newR = 0; 
                 newG = 0; 
                 newB = 0; 
             } 
         } 
          
         bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 
         long end = System.currentTimeMillis(); 
         //Log.d("may", "used time="+(end - start)); 
         return bitmap; 
     }
 
  //旋轉90度
  public static Bitmap ToNinety(Bitmap bitmap){
   int w=bitmap.getWidth();
   int h=bitmap.getHeight();
   float fw=((float)100/w);
   float fh=((float)100/h);
   Canvas canvas=new Canvas(bitmap);
   Matrix matrix=new Matrix();
   Paint paint=new Paint();
   paint.setColor(Color.RED);

方便大家看 我把 数组这样写:

final float jingxiang[]={
     0.0f,1.0f,0.0f,
     -1.0f,0.0f,0.0f,
     0.0f,0.0f,1.0f};
  
  matrix.setValues(jingxiang);
  //matrix.setRotate(90);
  matrix.postScale(fw, fh);
  
  canvas.drawBitmap(bitmap, matrix, paint);
  Bitmap newbitmap = Bitmap.createBitmap(bitmap, 0, 0, w,h, matrix, true);
  return newbitmap;
  }

这里有个要点:并不是每个createBitmap()方法都可以达到你想要的,不同参数效果不一样,我觉得归根结底是哪个true 影响了一切

但有些效果又不用带true参数的createBitmap()方法

如黑白照片效果:

//把图片变成黑白
 public static Bitmap toGrayscale(Bitmap bmpOriginal) {
  int width, height;
  height = bmpOriginal.getHeight();
  width = bmpOriginal.getWidth();
  Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
    Bitmap.Config.RGB_565);
  Canvas c = new Canvas(bmpGrayscale);
  Paint paint = new Paint();
  ColorMatrix cm = new ColorMatrix();
  cm.setSaturation(0);
  ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
  paint.setColorFilter(f);
  c.drawBitmap(bmpOriginal, 0, 0, paint);
  return bmpGrayscale;
 }

还有图片的变化等效果  想怎样就怎么去计算吧 哈

接下来介绍

ColorMatrix

大家可以把那个有颜色坐标看成一个六面体 每个面都是混合颜色的渐变效果

这个ColorMatrix我犯错就搞了一日了。。虽然很浪费时间 但是却是知道了更多

原理与Matrix 差不多

只是数组变成RGBA

所谓的Red Green Blue Alpha

通常:

1 ,0 ,0, 0, 0,

0 ,1 ,0 ,0 ,0,

0 ,0, 1, 0, 0,

0 ,0 ,0 ,1 ,0

这样就是普通效果

现在可以根据参数来设置自己的效果了

简单例子:

public static Bitmap What(Bitmap bitmap) {
    int w=bitmap.getWidth();
    int h=bitmap.getHeight();
    Bitmap result = Bitmap.createBitmap(w, h,
      Bitmap.Config.RGB_565);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.set(new float[]{
      1 ,0 ,0, 0, 0,

0 ,1 ,0 ,0 ,0,

0 ,0, 1, 0, 0,

0 ,0 ,0 ,1 ,0

});
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bitmap, 0, 0, paint);
    return result;   
  }

有一个也挺好玩的就是黑白效果介绍那里

 public static Bitmap toGrayscale(Bitmap bmpOriginal) {
  int width, height;
  height = bmpOriginal.getHeight();
  width = bmpOriginal.getWidth();
  Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
    Bitmap.Config.RGB_565);
  Canvas c = new Canvas(bmpGrayscale);
  Paint paint = new Paint();
  ColorMatrix cm = new ColorMatrix();
  cm.setSaturation(0);
  ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
  paint.setColorFilter(f);
  c.drawBitmap(bmpOriginal, 0, 0, paint);
  return bmpGrayscale;
 }
 
原理:把某东西画到某东西上
 
cm.setSaturation(0); 根据不同参数也有不同效果
更多学习请看androidAPI
其实学习了这个android ==学习了Java==学习了C#

都有这样的东西吧 哈

【Android 界面效果41】Matrix 与 ColorMatrix的更多相关文章

  1. 【Android 界面效果21】Android ViewPager使用详解

    这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...

  2. 【Android 界面效果31】Android--侧滑菜单应用的实现

    侧滑菜单应用现在非常多,而且实现方式也多种多样.通过在网上的多方查找,我找到郭霖少侠的这篇文章:http://blog.csdn.net/guolin_blog/article/details/874 ...

  3. 【Android 界面效果25】android中include标签的使用

    在一个项目中我们可能会需要用到相同的布局设计,如果都写在一个xml文件中,代码显得很冗余,并且可读性也很差,所以我们可以把相同布局的代码单独写成一个模块,然后用到的时候可以通过<include ...

  4. 【Android 界面效果18】Android软件开发之常用系统控件界面整理

    [java] view plaincopyprint?   <span style="font-size:18px">1.文本框TextView TextView的作用 ...

  5. 【Android 界面效果17】Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

    记得我之前参与开发过一个华为的项目,要求程序可以支持好几种终端设备,其中就包括Android手机和Android Pad.然后为了节省人力,公司无节操地让Android手机和Android Pad都由 ...

  6. 【Android 界面效果45】ViewPager源码分析

    ViewPager概述: Layout manager that allows the user to flip left and right through pages of data. You s ...

  7. 【Android 界面效果42】如何自定义字体

    项目里要统一用设计师的字体,android:typeface只支持系统三种字体.有什么比较好的做法? 你需要为整个应用替换自定义字体. 解决方案 1)Android默认方法 #1 你可以通过ID查找到 ...

  8. 【Android 界面效果40】Android4.0-Fragment框架实现方式剖析(一)

    经过反复的学习对比,个人觉得带着问题学习新知是最有效的学习方式,因此文本就以提问的方式来讲述Fragment框架实现方式. 1.什么是Fragment? Fragment包含在Activity中,Fr ...

  9. 【Android 界面效果39】android:inputType问题

    1.  在XML代码中实现比较简单, 直接设置android:inputType="textMultiLine": [mw_shl_code=java,true]<EditT ...

随机推荐

  1. ADT-bundle

    eclipse 弹出 Version 1.4.2_03 of the JVM not suitable for this product.Version1.6or geeater is requir ...

  2. 配置cisco路由器特定时间重启

    方法一: Router1#reload in 20 Reload scheduled for 11:33:53 EST Sat Feb 1 2003 (in 20 minutes) Proceed w ...

  3. Spring Boot 所提供的配置优先级顺序

    按照优先级从高到低的顺序,具体的列表如下所示. 命令行参数. 通过 System.getProperties() 获取的 Java 系统参数. 操作系统环境变量. 从 java:comp/env 得到 ...

  4. C++拓扑排序

    安利一篇比较写的比较好的的博客... 拓扑排序的原理及其实现 我本来以为我看懂了原理就会打了,没想到因为没有手动实践过...原理实际上也没记清楚.... 一题HDU的拓扑裸题HDU 3342 我的拓扑 ...

  5. POJ 1947 Rebuilding Roads (树dp + 背包思想)

    题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点.问你去掉的最少边数. dp[u][j]表示u为子树根,且得到j个节点最少减去 ...

  6. [Java线程] Java线程池ExecutorService

    示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...

  7. ELF--动态链接

    对前面add.c稍作修改, #include <stdio.h>int add_count = 0; extern int sum_count;extern void print_log( ...

  8. WebService《JavaEE6权威指南 基础篇第4版》

    [Web服务] 为运行在不同平台和框架之上的软件提供了互操作的标准方式.良好的互操作性和可扩展性.消息采用自包含文档的形式. ——解决异构系统之间交互.解决异构系统通信问题:  1.通过XML,JSO ...

  9. Js 基本数据类型、引用数据类型

    数据类型 1.   ECMAScript变量包含两种不同类型的值:基本类型值.引用类型值: 2.   基本类型值:指的是保存在栈内存中的简单数据段: 3.   引用类型值:指的是那些保存在堆内存中的对 ...

  10. 使用U盘安装Ubuntu系统的实践小结

    参考教程:http://diybbs.zol.com.cn/1/33925_1942.html   遇到的问题:安装ubuntu 12.04 64位,提示缺少“/casper/vmlinuz.efi ...