Android图片处理类ColorMatrix

因为想给图片加滤镜特效, 在网上查了下, 可以使用ColorMatrix类. 所以写了一个工具类专门转换

 

先简单介绍下ColorMatrix, 其实就是通过一个5 * 4矩阵对图像颜色(包括Alpha)进行的几何变换, 从而实现各种各样的效果.

源图片颜色本身存储一个一维矩阵当中:

而要修改的颜色矩阵,  则在一个5x4矩阵中(实际在程序中式以一个一位数组的方式存储的 c= [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]:):

 

最终的图片颜色是两个矩阵的乘积:

 

T = C * R =

举个例子, 比方说我们经常会直接在xml中设置View背景: android:background="#99333333" ,  设置完后,  实际上android自动会将图片前景色和背景色矩阵相与.

如果用ColorMatrix矩阵的话, 先计算

A 的分量 = 0x99/0xFF = 0.6f,

RGB的分量 R=G=B=0x33/0xFF=0.2f, 那我们的矩阵会是这个样子的:

 

下面接着讲怎么重画图片加滤镜:

 

public static Bitmap translateToTeaColor(Bitmap bitmap) {
		Bitmap teaColorbitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
		Canvas canvas = new Canvas(teaColorbitmap);
		Paint paint = new Paint();
		
		ColorMatrix cmColorMatrix = new ColorMatrix();
		cmColorMatrix.set(colorArray);
		ColorMatrixColorFilter cmColorFilter = new ColorMatrixColorFilter(cmColorMatrix);
		paint.setColorFilter(cmColorFilter);
		
		canvas.drawBitmap(bitmap, 0, 0, paint);
		return teaColorbitmap;
	}


1. 先按照传入要更改的Bitmap, 创建要返回的Bitmap对象

2. 使用Bitmap对象创建画布Canvas, 然后创建画笔Paint

3.  创建ColorMatrix对象cmColorMatrix, 并且使用一维数组colorArray填充它(就是上面提到的矩阵C

4. 使用ColorMatrix创建一个ColorMatrixColorFilter对象, 作为画笔的滤镜 paint.setColorFilter(cmColorFilter);

5. canvas.drawBitmap(bitmap, 0, 0, paint), 将传入的原图, 通过画笔+滤镜绘制到新bitmap对象

 

colorArray的值不断调整, 就能产生各种各样的效果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值