Android图像处理(一) 颜色变换

本文介绍了如何在Android中使用ColorMatrix矩阵进行图像颜色处理,包括改变图像的色调、饱和度和亮度。通过设置ColorMatrix的不同方法,如setRotate、setSaturation和setScale,可以实现对图片的色彩调整。同时,文章提供了具体的代码示例,展示了如何通过矩阵运算改变图像的RGB分量,从而达到预期的视觉效果。
摘要由CSDN通过智能技术生成

图像的变化通常是使用矩阵运算去实现,在Android中也不例外。本文将通过使用Android中的ColorMatrix矩阵对图片的颜色进行操作,实现对图片进行颜色上的调整。

改变图像属性

基本概念

色调:物体传递的颜色
饱和度:颜色的纯度
亮度:颜色的明暗程度

在PS软件中常通过调整这三个图像属性调整图片,在Android中可以通过ColorMatrix实现
实现方法

	mSrc = BitmapFactory.decodeResource(getResources(), R.drawable.demo);
        Bitmap dstBp = Bitmap.createBitmap(mSrc.getWidth(), mSrc.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(dstBp);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));
        canvas.drawBitmap(mSrc,0, 0, paint);

实现步骤

1.创建一张和原图同样大的bitmap,并和画布canvas绑定,自此对canvas的操作就将体现在Bitmap上
2.创建画笔Paint,并设置ColorFilter对颜色操作,ColorFilter使用ColorMatrixColorFilter将一个ColorMatrix转化为ColorFilter对象
3.使用该画笔在画布上绘制原图

其中mSrc是源Bitmap,dstBp就是通过mColorMatrix对mSrc进行变换后生成的Bitmap

ColorMatrix

改变色调:
public void setRotate(int axis, float degrees)
改变饱和度
public void setSaturation(float sat)
改变亮度
public void setScale(float rScale, float gScale, float bScale, float aScale)
拼接效果
public void postConcat(ColorMatrix postmatrix)

举例:

	private void changeColor(float hue, float sat, float lum) {
		//最终的变换矩阵
        mColorMatrix.reset();
        //色调变换矩阵
        mHueMatrix.reset();
        mHueMatrix.setRotate(0, hue);
        mHueMatrix.setRotate(1, hue);
        mHueMatrix.setRotate(2, hue);
        //饱和度变换矩阵
        mSatMatrix.reset();
        mSatMatrix.setSaturation(sat);
        //亮度变换矩阵
        mLumMatrix.reset();
        mLumMatrix.setScale(lum, lum, lum, 1);
        //拼接效果
        mColorMatrix.postConcat(mHueMatrix);
        mColorMatrix.postConcat(mSatMatrix);
        mColorMatrix.postConcat(mLumMatrix);
        //创建变换后的Bitmap
        Bitmap dstBp = Bitmap.createBitmap(mSrc.getWidth(), mSrc.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(dstBp);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));
        canvas.drawBitmap(mSrc,0, 0, paint);
        //bitmap设置到ImageView
        mPicView.setImageBitmap(dstBp);
    }

完整代码:
activity_hai.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值