图像的变化通常是使用矩阵运算去实现,在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=