前言
安卓开发中,对图像的处理一般就是Bitmap(位图),它包含了图像的全部数据,即点阵和颜色值,点阵就是包含像素点的矩阵,而颜色值就是ARGB,分别代表透明、红色、绿色、蓝色通道,它们共同决定了像素点的颜色。
今天要说的滤镜是针对图片的颜色进行修改。一张图片所存储的信息有图像信息加上数据和标志。每一张图片都有图像通道和颜色模式。图像通道在RGB色彩模式下就是指在下就是指那单独的红色R、绿色G、蓝色B部分。也就是说,一幅完整的图像,是由红色绿色蓝色三个通道组成的。图像中默认的图像通道取决于颜色模式(用来记录颜色方式),常用的图像模式有:位图模式、灰度模式、双色调模式、RGB模式、CMTK模式、HSB模式、LAB模式等等。
在安卓中的颜色模式为RGBA,最后的A为透明度。
颜色矩阵
对于图像来说,每一个像素点都有一个颜色矩阵分量来保存颜色,即下图的RGBA1(矩阵C,1表示颜色的偏移量),而在Android系统中,颜色矩阵是用一个4*5的数字矩阵来表示的(矩阵A,由一维数组构成)。它们的乘积(矩阵R)即为屏幕上显示的图像颜色,这里的RGBA取值应在0~255之间。
布局
先看一下布局吧
接下来看几种比较典型的效果:
黑白照片
/** * 黑白照片 * * @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)); }
底片效果
/** * 底片效果 * * @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)); }
结尾
滤镜感觉没多少写的东西,可以自己多玩玩,改变RGBA的值进行组合尝试,会得到特别的效果。