ColorMatrix的颜色矩阵介绍
- 颜色矩阵M是一个5*4的矩阵,在Android中,颜色矩阵M是以一维数组
m=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]
的方式进行存储的。如下图1:
图1 颜色矩阵M
他通过RGBA四个通道来直接操作对应颜色,达到修改图像的效果。
- 第一行决定红色 R
- 第二行决定绿色 G
- 第三行决定蓝色 B
- 第四行决定了透明度 A
- 第五列是颜色的偏移量
原图的RGBA的ColorMatrix颜色矩阵数组为:
[ 1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0]
在一张图片中,图像的RGBA(红色、绿色、蓝色、透明度)值决定了该图片所呈现出来的颜色效果。而图像的RGBA值则存储在一个5*1的颜色分量矩阵C中,由颜色分量矩阵C可以控制图像的颜色效果。颜色分量矩阵C 如图2所示:
图2 颜色分量矩阵C要想改变一张图片的颜色效果,只需要改变图像的颜色分量矩阵即可。通过颜色矩阵可以很方便的修改图像的颜色分量矩阵。假设修改后的图像颜色分量矩阵为C1,则有如图3所示的颜色分量矩阵计算公式:
图3 颜色分量矩阵计算公式
通常,改变颜色分量时可以通过修改第5列的颜色偏移量来实现,如图4所示的颜色矩阵M1,通过计算后可以得知该颜色矩阵的作用是使图像的红色分量和绿色分量均增加100,这样的效果就是图片泛黄(因为红色与绿色混合后得到黄色)。
图4 颜色矩阵M1
除此之外,也可以通过直接对颜色值乘以某一系数而达到改变颜色分量的目的。如图5所示的颜色矩阵M2,将绿色分量放大了2倍,这样的效果就是图片泛绿色。
图5 颜色矩阵M2
————以上内容收集于网络:http://www.android100.org/html/201406/05/19490.html———-
使用ColorMatrix改变图片颜色的步骤
- 通过Bitmap.createBitmap()方法获得一个空白的Bitmap对象。
- 使用Bitmap对象创建画布Canvas, 然后创建画笔Paint。
- 定义ColorMatrix,并指定RGBA矩阵。
- 使用ColorMatrix创建一个ColorMatrixColorFilter对象, 作为画笔的滤镜 paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix))。
- 使用Canvas.drawBitmap()方法把原图使用定义的Paint画到空白的Bitmap对象上即可获得改变RGBA值后的图像。
图像颜色处理实例
首先准备一张用来修改颜色的黑色原始图片 btn_pause.png 如下: