美文网首页
Paint 应用

Paint 应用

作者: 佼佼者Mr | 来源:发表于2019-08-29 16:42 被阅读0次

概念

画笔、保存了绘制几何图形,文本、位图的样式和颜色信息。

常用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()方法

通过源码可知,通过循环将传入的参数修改矩阵数组的索引值,达到修改显示效果的目的。

Paint相关知识就整理完了,常用的滤镜算法请面向百度。

相关文章

  • Paint 应用

    概念 画笔、保存了绘制几何图形,文本、位图的样式和颜色信息。 常用api——颜色相关 setColor(int c...

  • 图像处理相关收集(一)

    1、Paint及Canvas的简单应用 2、详解Paint的setPathEffect(PathEffect ef...

  • Paint高级应用

    Paint高级应用 1.概念 画笔,保存了绘制几何图形,文本和维度的样式和颜色信息 2.常用API 以上这些是常用...

  • Paint画笔高级应用

    Paint译为画笔,顾名思义,可以使用paint在canvas上画东西。本篇文章主要讲解Paint的一些常用API...

  • paint高级应用渲染

    paint常用API 获取字体度量对象mPaint.getFontMetrics()方法,返回一个FontMetr...

  • 贝塞尔曲线

    一阶Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.se...

  • 2D学习之Canvas

    Paint paint =new Paint(); paint.setColor(Color.WHITE); //...

  • 2019-11-29-(Paint)使用

    Paint 你应该知道的属性 Paint方法作用如何创建Paint paint = new Paint();set...

  • Flutter Transform使用介绍

    Transform介绍 窗口小部件(Widget)可以在Paint之前应用Transform进行转换,通过Tran...

  • 如何使用 SwiftUI 创建绘图应用程序

    如何使用 SwiftUI 创建绘图应用程序 我们都听说过 Procreate 和 Microsoft Paint ...

网友评论

      本文标题:Paint 应用

      本文链接:https://www.haomeiwen.com/subject/yahlectx.html