前言
安卓开发中,对图像的处理一般就是Bitmap(位图),它包含了图像的全部数据,即点阵和颜色值,点阵就是包含像素点的矩阵,而颜色值就是ARGB,分别代表透明、红色、绿色、蓝色通道,它们共同决定了像素点的颜色。
今天要说的滤镜是针对图片的颜色进行修改。一张图片所存储的信息有图像信息加上数据和标志。每一张图片都有图像通道和颜色模式。图像通道在RGB色彩模式下就是指在下就是指那单独的红色R、绿色G、蓝色B部分。也就是说,一幅完整的图像,是由红色绿色蓝色三个通道组成的。图像中默认的图像通道取决于颜色模式(用来记录颜色方式),常用的图像模式有:位图模式、灰度模式、双色调模式、RGB模式、CMTK模式、HSB模式、LAB模式等等。
在安卓中的颜色模式为RGBA,最后的A为透明度。
颜色矩阵
对于图像来说,每一个像素点都有一个颜色矩阵分量来保存颜色,即下图的RGBA1(矩阵C,1表示颜色的偏移量),而在Android系统中,颜色矩阵是用一个4*5的数字矩阵来表示的(矩阵A,由一维数组构成)。它们的乘积(矩阵R)即为屏幕上显示的图像颜色,这里的RGBA取值应在0~255之间。
![](https://img.haomeiwen.com/i18721079/c2de8e42cf3ae41a.jpg)
布局
先看一下布局吧
![](https://img.haomeiwen.com/i18721079/e5dc52ecd783c9ac.jpg)
接下来看几种比较典型的效果:
黑白照片
/**
* 黑白照片
*
* @param view /
*/
public void btnCreateGray(View view) {
colorMatrix.set(new float[]{0.213f, 0.715f, 0.072f, 0, 0,
0.213f, 0.715f, 0.072f, 0, 0,
0.213f, 0.715f, 0.072f, 0, 0,
0, 0, 0, 1, 0});
newImageView.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
}
![](https://img.haomeiwen.com/i18721079/5e3058e82211d523.jpg)
底片效果
/**
* 底片效果
*
* @param view /
*/
public void btnCreateFilm(View view) {
colorMatrix.set(new float[]{-1, 0, 0, 0, 255,
0, -1, 0, 0, 255,
0, 0, -1, 0, 255,
0, 0, 0, 1, 0});
newImageView.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
}
![](https://img.haomeiwen.com/i18721079/7056ad24dfbf6e22.jpg)
结尾
滤镜感觉没多少写的东西,可以自己多玩玩,改变RGBA的值进行组合尝试,会得到特别的效果。
![](https://img.haomeiwen.com/i18721079/75e4c1e28bdc84cf.png)
![](https://img.haomeiwen.com/i18721079/5967b035370a863f.jpg)
![](https://img.haomeiwen.com/i18721079/ff997ebde2556242.jpg)
想要学习领取Android相关的资料视频可以简信信我【666】进行免费领取或者直接扣扣扫码领取
![](https://img.haomeiwen.com/i18721079/0c823056d55a70a3.jpg)
网友评论