android-图像处理--ColorMatrix

设置饱和度效果
在Android中,对Bitmap进行颜色方面的处理可以通过ColorMatrix类来实现。位图bitmap是由一个个像素点组成,每一个像素点都会有其对应的颜色值——RGBA,分别对应红、绿、蓝、透明度这四个分量。它们共同决定了每个像素点显示的颜色,而ColorMatrix可以很好的支持RGBA的操作。
1、ColorMatrix介绍
源码上是这样解释的:
ColorMatrix
意思是说:“这是一个4*5的矩阵,可以对位图的颜色和透明度进行转换。”
颜色的计算:通过矩阵相乘可以得到,计算如下:A矩阵就是ColorMatrix,C矩阵是色彩矩阵,R为结果。
这里写图片描述
矩阵乘法结果:
这里写图片描述

2、如何使用
如果我们想整体的改变一张图像的颜色,不可能对这张图像的每一个像素点分别与色彩矩阵相乘。官方已有封装好的API—-Paint类的setColorFilter(ColorFilter filter)方法,即:设置颜色过滤。
ColorFilter类有3个子类:ColorMatrixColorFilter, LightingColorFilter, PorterDuffColorFilter。其中ColorMatrixColorFilter就是我们需要使用的。具体代码如下:

ColorMatrix colorMatrix = new ColorMatrix();
//这里可以设置需要的功能
//colorMatrix.setSaturation(sat);
//colorMatrix.setScale( rScale, gScale, bScale, aScale);
//colorMatrix.setRotate(axis,degrees);
ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
Paint paint = new Paint();
paint.setColorFilter(colorFilter);

完整的工具类代码:

package com.lc.dealpic.util;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;

public class ColorMatrixUtils {

public static Bitmap setConcat(Bitmap bitmap,ColorMatrix matA,ColorMatrix matB){
    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.reset();
    colorMatrix.setConcat(matA,matB);
    colorMatrix.setConcat(matA,matB);
    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    return createNewBitmap(bitmap,colorFilter);
}

public static Bitmap setRotate(Bitmap bitmap,int axis, float degrees){
    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.reset();
    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    return createNewBitmap(bitmap,colorFilter);
}

public static Bitmap setScale(Bitmap bitmap,float rScale, float gScale, float bScale,float aScale){
    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.reset();
    colorMatrix.setScale( rScale,  gScale,  bScale, aScale);
    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    return createNewBitmap(bitmap,colorFilter);
}




public static Bitmap setSaturation(Bitmap bitmap, float sat) {

    /*
    ColorMatrix :4 x5矩阵,用于改变位图的颜色和透明度

    */
    ColorMatrix colorMatrix = new ColorMatrix();
    //设置颜色矩阵的饱和度,0是灰色的,1是原图
    //设置图像的饱和度,范围: 0<=sat<=1,0是灰色的,1是原图
    colorMatrix.setSaturation(sat);
    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    return createNewBitmap(bitmap,colorFilter);
}

private static Bitmap createNewBitmap(Bitmap bitmap, ColorMatrixColorFilter colorFilter) {
    // 得到图片的长和宽
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    Bitmap newBit = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    Canvas canvas = new Canvas(newBit);
    Paint paint = new Paint();
    paint.setColorFilter(colorFilter);
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return newBit;
}
}

最后附上demo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值