Android色彩矩阵——ColorMatrix

本文介绍了Android中色彩矩阵的概念和使用,包括如何通过色彩矩阵改变颜色值,详细讲解了改变偏移量、颜色系数以及使用封装好的API进行图像处理。还展示了如何在自定义View中应用色彩矩阵,实现灰度、图像反转、怀旧、去色和高饱和度等效果。
摘要由CSDN通过智能技术生成

在Android的开发中,我们少不了对图片进行处理,其中最常使用的数据结构就是位图Bitmap,它包含了一张图片的所有数据。

既然是位图那它就是由一个个像素点组成的。每一个像素点都会有其对应的颜色值——ARGB,分别对应透明度、红、绿、蓝这四个分量。它们共同决定了每个像素点显示的颜色。

色彩矩阵概念

在Android中图片是以RGBA像素点的形式加载到内存中的,修改这些像素信息需要一个叫做ColorMatrix类的支持。ColorMatrix就是Android系统使用的色彩矩阵。

Android中的颜色矩阵是一个4×5的数字矩阵:

这里写图片描述

在Android中他会以一维数组的形式来存储:(float[]类型)

[ a, b, c, d, e,f, g, h, i, j,k, l, m, n, o,p, q, r, s, t ]

一般我们为了可读性,我们会写得好看些:

new float[]{
    a, b, c, d, e,
    f, g, h, i, j,
    k, l, m, n, o,
    p, q, r, s, t 
    };

那这个矩阵该怎么使用呢?其实就是使用矩阵乘法运算。

这里有一个色彩矩阵分量C,代表着我们要进行色彩变化的原色彩。

矩阵R则代表通过矩阵乘法运算AC而得到的新的颜色。

这里写图片描述

通过矩阵乘法可知:

这里写图片描述

通过这个公式我们就可以得出我们的色彩矩阵A的意义:

这里写图片描述

  • 第一行的abcde值用来决定新的颜色值中的R
  • 第二行的fghij值用来决定新的颜色值中的G
  • 第三行的klmno值用来决定新的颜色值中的B
  • 第四行的pqrdt值用来决定新的颜色值中的A
  • 其中第五列ejot值分别用来决定每个分量重的offset,即偏移量

Android中我们可以通过如下语句来创建我们的色彩矩阵:

ColorMatrix colorMatrix = new ColorMatrix();

这个语句会创建一个初始矩阵A,即:

这里写图片描述

跟这个矩阵相乘的颜色分量是不会改变的,即

这里写图片描述

之前说了矩阵是通过一维数组的形式来存储的,所以我们也可以通过如下语句创建我们想要的色彩矩阵:

ColorMatrix colorMatrix = new ColorMatrix(new float[]{  
        0.5F, 0, 0, 0, 0,  
        0, 0.5F, 0, 0, 0,  
        0, 0, 0.5F, 0, 0,  
        0, 0, 0, 1, 0,  
});  

我们也可以使用如下语句将我们的矩阵变成数组形式:

float colorMatrixArray[] = colorMatrix.getArray();

色彩矩阵的基础就讲到这,下面我们来看怎么使用色彩矩阵改变颜色值吧。

用色彩矩阵改变颜色值

使用色彩矩阵改变颜色值一般有三种方法:
1. 直接改变色彩矩阵的offset偏移量
2. 直接改变对应RGBA值的系数
3. 使用封装好的API来改变参数

改变偏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值