颜色值时32位的int值,ARGB :A---Alpha值,RGB---颜色值
1、Alpha滤镜处理
MaskFilter类进行处理
BlurMaskFilter--用来绘制模糊阴影
EmbossMaskFilter -- 用来实现浮雕效果
2、颜色RGB的滤镜处理
1、色彩的平移运算---加法运算
在最后一列加上某个值,这样就可以增加特定色彩的饱和度
色彩的反转/反相;增加饱和度
2、色彩的缩放运算--乘法运算
高亮图片
颜色通道过滤(单独红色、绿色、蓝色)
3、色彩的投射运算
黑白照片
色彩反色(两个颜色交换)
复古照片
4、色彩的旋转运算
3、两者混合叠加---Matrix,PortDuffColorFilter
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.EmbossMaskFilter; import android.graphics.LightingColorFilter; import android.graphics.MaskFilter; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.RectF; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; /** * Created by linyaokui on 17/5/17. */ public class FilterView extends View{ private Paint paint; private Bitmap bitmap; public FilterView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); paint = new Paint(Paint.ANTI_ALIAS_FLAG); bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.xyjy2); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); setLayerType(LAYER_TYPE_SOFTWARE,null);//去掉硬件加速 //BlurMaskFilter用法 阴影效果 /** * Create a blur maskfilter. * * @param radius 阴影的半径 * @param style NORMOL -- 整个图像都被模糊掉 * SOLID -- 图像边界外产生一层与Paint颜色一致阴影效果,不影响图像的本身 * OUTER -- 图像边界外产生一层阴影,并且将图像变成透明效果 * INNER -- 在图像内部边沿产生模糊效果 * @return */ MaskFilter maskFilter = new BlurMaskFilter(50, BlurMaskFilter.Blur.NORMAL); paint.setMaskFilter(maskFilter); canvas.drawBitmap(bitmap,100,100,paint); //EmbossMaskFilter 浮雕效果 /** * Create an emboss maskfilter * * @param direction 指定光源的位置,长度为xxx的数组标量[x,y,z] * @param ambient 环境光的因子 (0~1),越接近0,环境光越暗 * @param specular 镜面反射系数 越接近0,镜面反射越强 * @param blurRadius 模糊半径 值越大,模糊效果越明显 */ Rect rect = new Rect(100,100,600,600); paint.setColor(Color.RED); MaskFilter embossMaskFilter = new EmbossMaskFilter(new float[]{1,1,1},0.1f,0.1f,50); paint.setMaskFilter(embossMaskFilter); canvas.drawRect(rect,paint); //颜色RGB的滤镜处理 ColorMatrixColorFilter用法 // 平移运算---加法 ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 1,0,0,0,0, 0,1,0,0,100, 0,0,1,0,0, 0,0,0,1,0, }); // 反相效果 -- 底片效果 ColorMatrix colorMatrix = new ColorMatrix(new float[]{ -1,0,0,0,255, 0,-1,0,0,255, 0,0,-1,0,255, 0,0,0,1,0 }); // 反相效果 -- 底片效果 ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 1.2f,0,0,0,0, 0,1.2f,0,0,0, 0,0,1.2f,0,0, 0,0,0,1.2f,0 }); // 黑白照片 // 去色原理:只要把R G B 三通道的色彩信息设置成一样,那么图像就会变成灰色, // 同时为了保证图像亮度不变,同一个通道里的R+G+B =1 // ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 0.213f, 0.715f,0.072f,0,0, 0.213f, 0.715f,0.072f,0,0, 0.213f, 0.715f,0.072f,0,0, 0,0,0,1,0, }); // 发色效果---(比如红色和绿色交换) ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 0,1,0,0,0, 1, 0,0,0,0, 0,0,1,0,0, 0,0,0,1,0, }); // 复古效果 ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 1/2f,1/2f,1/2f,0,0, 1/3f, 1/3f,1/3f,0,0, 1/4f,1/4f,1/4f,0,0, 0,0,0,1,0, }); // 颜色通道过滤 ColorMatrix colorMatrix = new ColorMatrix(new float[]{ 1, 0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, }); //另一种写法 ColorMatrix colorMatrix = new ColorMatrix(); ColorMatrix colorMatrix1 = new ColorMatrix(); colorMatrix.setScale(1.2f,1.2f,1.2f,1); colorMatrix.setSaturation(0.5f); //设置饱和度 sat A value of 0 maps the color to gray-scale. 1 is identity //aixs-- 0 红色轴,1,绿色,2,蓝色 // degrees -- 旋转的角度 colorMatrix1.setRotate(0,60); colorMatrix.setConcat(colorMatrix,colorMatrix1);//两个ColorMatrix合并 paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix)); canvas.drawBitmap(bitmap,100,100,paint); // LightingColorFilter只是修改RGB值 LightingColorFilter lightingColorFilter = new LightingColorFilter(0x00ff00,0xff0000); paint.setColorFilter(lightingColorFilter); canvas.drawBitmap(bitmap,100,100,paint); //PorterDuffColorFilter PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(Color.argb(255,140,90,200), PorterDuff.Mode.MULTIPLY); paint.setColorFilter(porterDuffColorFilter); canvas.drawBitmap(bitmap,100,100,paint); } }