Android图像处理之颜色矩阵ColorMatrix--(4)

我们知道调整颜色矩阵可以改变一幅图像的色彩效果,图像处理很大程度上就是在寻找图像的颜色矩阵。我们不仅可以通过ColorMatrix处理图片,也可以精确地修改矩阵的值来实现颜色效果的处理。
下面模拟4X5的颜色矩阵,通过改变矩阵中的值,来改变一幅图的色彩效果。 通过GridLayout进行布局(不止这一种方式),弄4行5列,模拟4*5的效果。代码如下:

/**
 * 利用颜色矩阵的矩阵值来改变图片
 * 主要是利用矩阵的公式,改变其偏移量或者改变其基值 R红 G绿 B蓝 A透明度
 * 将对应的颜色矩阵值作用到原图像上,从而形成新的额色彩风格的图像。
 * @author fanshenxia
 *
 */
public class ColorMatrixActivity extends Activity implements OnClickListener {
   
    private ImageView mImg;
    private GridLayout mGrid;
    private Button mBtnUse, mBtnReset;
    private Bitmap mBitmap;
    private int mEtWidth, mEtHeight;
    private EditText[] mEts = new EditText[20];
    private float[] mColorMatrix = new float[20];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_matrix_color);
        init();
    }

    private void init() {
        mImg = findViewById(R.id.iv_color);
        mGrid = findViewById(R.id.grid_color);
        mBtnUse = findViewById(R.id.use_color);
        mBtnReset = findViewById(R.id.reset_color);

        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.boyimg);
        mBtnUse.setOnClickListener(this);
        mBtnReset.setOnClickListener(this);

        mGrid.post(new Runnable() {
            @Override
            public void run() {
                // 获取宽高信息
                mEtWidth = mGrid.getWidth() / 5;
                mEtHeight = mGrid.getHeight() / 4;
                addEts();
                initMatrix();
            }
        });
    }

    // 添加EditText
    private void addEts() {
        for (int i = 0; i < 20; i++) {
            EditText editText = new EditText(ColorMatrixActivity.this);
            mEts[i] = editText;
            mGrid.addView(editText, mEtWidth, mEtHeight);
        }
    }

    // 初始化颜色矩阵为初始状态
    private void initMatrix() {
        for (int i = 0; i < 20; i++) {
            if (i % 6 == 0) {
                mEts[i].setText(String.valueOf(1));
            } else {
                mEts[i].setText(String.valueOf(0));
            }
        }
    }

    // 获取矩阵值
    private void getMatrix() {
        for (int i = 0; i < 20; i++) {
            mColorMatrix[i] = Float.valueOf(mEts[i].getText().toString());
        }
    }

    //将矩阵值设置到图像
    private void setImgMatrix() {
        Bitmap curBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Config.ARGB_8888);
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.set(mColorMatrix);

        Canvas canvas  = new Canvas(curBitmap);
        Paint paint = new Paint();
        paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
        canvas.drawBitmap(mBitmap, 0, 0, paint);

        mImg.setImageBitmap(curBitmap);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.use_color:
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值