Android 中的 ColorMatrix

ColorMatrix 是 Android SDK 中一个处理 Bitmap 颜色通道的工具类,之前工作中有用到过。

官方文档:https://developer.android.com/reference/android/graphics/ColorMatrix (需要科学上网)

ColorMatrix 可以用来处理图片的 RGB 通道相关值,以及图片的透明度 Aphla 的值,它的参数是一个 4x5 的数组,当然我们在使用的时候可以通过数组传值。

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

当转换成具体的颜色计算公式时如下所示:

R’ = a*R + b*G + c*B + d*A + e;
G’ = f*R + g*G + h*B + i*A + j;
B’ = k*R + l*G + m*B + n*A + o;
A’ = p*R + q*G + r*B + s*A + t;

每个颜色通道的取值范围是 0~255。

在实际使用的时候,我们可以使用如下的实例代码控制不同的颜色通道来绘制你想要的效果:

private static void changeBitmapColorConfig(Bitmap source){
    Canvas canvas = new Canvas(source);
    Paint paint = new Paint();
    ColorMatrix mCm = new ColorMatrix();
    float aphla = 25;
    float red_slope = 44/256f;
    float green_slope = 62/256f;
    float blue_slope = 89/256f;
    mCm.set(new float[] { red_slope, 0, 0, 0, aphla,   //red vector
                          0, green_slope, 0, 0, aphla, //green vector
                          0, 0, blue_slope, 0, aphla,  //blue vector
                          0, 0, 0, 1, 0 });             //alpha vector
    paint.setColorFilter(new ColorMatrixColorFilter(mCm));
    canvas.drawBitmap(source,0,0,paint);
}

测试 demo:https://github.com/mingway426/colormatrixTest

相关资料:https://www.jianshu.com/p/9a44d04f39fc