概念
画笔、保存了绘制几何图形,文本、位图的样式和颜色信息。
常用api——颜色相关
setColor(int color)参数具体色值
setARGB(int a,int r,int g,int b)参数 透明度、红、绿、蓝。0-255数值
setShader(Shader shader) 参数着色器对象 一般采用着色器的子类
1.LinearGradient 线性渲染
2.RadialGradient 环形渲染
3.SweepGradient 扫描渲染
4.BitmapShader 位图渲染
5.ComposeShader 组合渲染(LinearGradient +BitmapShader )
serColorFilter(ColorFilter filter)参数颜色过滤器 一般使用ColorFilter的子类
1.LightingColorFilter 光照效果
2.PorterDuffColorFilter 指定一个颜色和一种PorterDuff.Mode与绘制对象进行合成
3.ColorMatrixColorFilter 使用一个ColorMatrix来对颜色进行处理
看看效果:
1.线性渲染器
线性渲染器代码 线性渲染器效果position的作用是什么呢?看源码
position的注释可以为空,颜色数组中每个对应颜色的相对位置[0..1],如果为空,颜色渐变线均匀分布。
2.环形渲染器
环形渲染器代码+效果3.扫描渲染器
扫描渲染效果器+代码4.位图渲染器
位图渲染器效果+代码这个渲染效果与TileMode有关,
/**
* replicate the edge color if the shader draws outside of its
* original bounds
*/
CLAMP (0),
/**
* repeat the shader's image horizontally and vertically
*/
REPEAT (1),
/**
* repeat the shader's image horizontally and vertically, alternating
* mirror images so that adjacent images always seam
*/
MIRROR (2);
CLAMP 绘制区域超过渲染区域的部分,会以最后一个像素拉伸排版
REPEAT 绘制区域超过渲染区域的部分,重复排版
MIRROR 绘制区域超过渲染区域的部分,镜像翻转排版
4.混合渲染器
位图渲染器+线性渲染器效果+代码这里要说明的是ComposeShaderg构造方法最后一个参数,PorterDuff.Mode 这里有17种混合模式,每一种都是根据不同的算法计算的。照片当然也可以利用混合渲染器来处理,达到美颜的效果。
PorterDuff.Mode.LIGHTEN效果。
PorterDuff.Mode.LIGHTEN图层混合
混合渲染器也是图层混合模式应用的一种
1.ComposeShader
2.Paint.setXfermode()
3.ColorFilter
使用图层混合模式第一步:禁止硬件加速。原因:图层混合的api有些不支持硬件加速,而Android系统默认是支持硬件加速的。
关闭硬件加速离屏绘制
也叫离屏缓冲,通过使用离屏缓冲,把要绘制的内容单独绘制在缓冲层,保证Xfermode的使用不会出现错误结果。
离屏缓冲的应用图层混合模式作用效果只作用于src的原图像区域,何为源图像?
src源图像 蓝色矩形区域就是src区域蓝色矩形区域就是源图像区域,只作用于蓝色矩形和重合区域。
不同模式分别对应的不同的显示效果前面讲的不同的17中混合模式对应的不同的显示效果。
针对PorterDuff.Mode.SRC_OUT来做一个刮刮卡的效果
关键demo
离屏绘制和事件的代码LightingColorFilter滤镜
构造方法
LightingColorFilter(int mul,int add)
参数mul和add都是和颜色值格式相同的int值,其中mul用来和目标像素相乘,add用来和目标像素相加。
RGB代表颜色的三原色,红,绿,蓝,x后面每两位代表相应的色值
原图效果mul和add都是原色。
new LightingColorFilter(0xffffff,0x000030)效果图add蓝色从00改为30,是不是肤白貌美了许多呢?add值代表更亮,mul代表过滤对应的颜色
new LightingColorFilter(0xffff00,0x000000)效果图mul B色系由ff改为00,过滤掉蓝色是不是暖洋洋了许多。
PorterDuffColorFilter滤镜
PorterDuffColorFilter滤镜和前面setXfermode里面mode一样,设置对应的图层模式
PorterDuffColorFilter的使用通过构造器可知差别之处在于PorterDuffColorFilter是一张位图和和颜色的过滤,而setXfermode是拿两张位图进行图层混合。
ColorMatrixColorFilter滤镜
使用方法通过一个数组,数组的长度是20位,将他分成一个四行五列,代表不同的颜色数据,只要改变代表不同颜色数据的数值就可以改变图片中颜色的比例。
第一列决定了颜色值中的红色,第二列代表了颜色值中的绿色,第三列代表了颜色值中的蓝色,第四列代表了透明度。第五列代表了偏移量offset
矩阵数组对图片的处理将第一列的红色通道的初始值从1改为2之后的显示效果,这样就可以根据不同的需求,对应不同的算法,达到不同的效果。
胶片的算法ColorMatrix
这个类呢也可以对ColorMatrixColorFilter进行操作,其实和上面的矩阵原理是一样的,无非就是谷歌工程师对这个数组进行了一层封装而已。
setScale()方法通过源码可知,通过循环将传入的参数修改矩阵数组的索引值,达到修改显示效果的目的。
网友评论