美文网首页
Paint效果相关

Paint效果相关

作者: jadefly | 来源:发表于2018-11-16 17:36 被阅读0次

    效果相关:锯齿、绘制风格、线条风格、色彩优化、轮廓风格、阴影、浮雕等


    抗锯齿

    锯齿现象:图形分辨率过低,肉眼能察觉像素颗粒(实际图片已经是完美的)

    抗锯齿:通过精细算法修改图形边缘处的像素颜色,使肉眼看起来更加平滑(其实使图片失真了)

    效果

    设置抗锯齿:setAntiAlias (true) ;或 new Paint(Paint.ANTI_ALIAS_FLAG);


    绘制风格

    setStyle(Paint.Style style)

                  FILL:填充模式(默认)

                  STROKE:画线模式(即勾边模式)

                  FILL_AND_STROKE:两种模式一并使用,既画线又填充


    线条风格

    setStrokeWidth(float width)

    简介:设置线条宽度,默认值是 0像素(依旧能画出像素为1的线)

    区别:线条宽度为1,几何变换放大两倍,线条绘制宽度为2

               线条宽度为0,几何变换放大两倍,线条绘制宽度总是为1(hairline mode发际线模式)

    setStrokeCap(Paint.Cap cap)

    简介:设置线头的形状,三种:BUTT 平头(默认)、ROUND 圆头、SQUARE 方头

    注:虚线左边为线的实际长度。

    效果

    setStrokeJoin(Paint.Join join)

    简介:设置拐角的形状,三种:MITER 尖角(默认)、 BEVEL 平角和 ROUND 圆角

    效果

    setStrokeMiter(float miter)

    简介:建立在使用setStrokeJoin()上,用于设置MITER尖角型拐角的延长线的最大值

    尖角补偿

    注:如果尖角过长,自动改用BEVEL平角来渲染连接点

           所以miter参数是对于转角长度的限制,默认值4,大约29度的锐角


    色彩优化

    setDither(boolean dither)

    简介:设置抖动来优化色彩深度降低时的绘制效果

    抖动:在图像降低色彩深度绘制时,插入噪点有规律扰乱图形来,避免出现大片的色带与色块,使图像对于肉眼更真实。

    使用场景:适合于自建bitmap选择低色彩深度ARGB_4444 或者 RGB_565的时候

                      (由于现在色彩深度使用ARGB_8888,抖动没以前那么实用了)

    效果

    setFilterBitmap(boolean filter)

    简介:设置双线性过滤来优化 Bitmap 放大绘制的效果

    双线性过滤:图像放大绘制时,默认使用最近邻插值过滤,会出现马赛克现象,开启双线性过滤让图像显得更加平滑

    效果

    图形的轮廓风格

    setPathEffect(PathEffect effect)

    PathEffect 分为两类:单一效果的 CornerPathEffect,DiscretePathEffect,DashPathEffect,PathDashPathEffect 

                                        组合效果的 SumPathEffect,ComposePathEffect

    CornerPathEffect

    简介:把拐角变成圆角,radius圆角半径

    使用:mPaint.setPathEffect(new CornerPathEffect(50));

    效果

    DiscretePathEffect

    简介:离散效果,把线条进行随机的偏离,"杂点"密集时可模拟生锈铁丝的效果

    使用:mPaint.setPathEffect(new DiscretePathEffect(3.0F, 5.0F));

    参数:segmentLength:用来拼接的每个线段的长度

               deviation:与原始路径的偏离度

    效果

    DashPathEffect

    简介:使用虚线来绘制线条

    使用:paint.setPathEffect(new DashPathEffect(new float[]{50,10}, 0));

    参数:intervals:float[]参数必须成对且>=2,参数1表示实线的长度,参数2表示空白线的长度;

                                new float[]{20,10}:第一条实线20,第二条空白线10,循环。(即20,10,20,10)

                                newfloat[] {20, 10, 50, 5, 100, 30, 10, 5}:对每个实线和空白线进行设置

               phase:绘制时的偏移量;(如果实线长10,偏移3,则实线从3~10部分开始绘制长度为7的实线)

    拓展:利用DashPathEffect实现路径跟踪绘制的动画效果(比如心电图动画,实际时一直改变phase值)

    效果

    PathDashPathEffect

    简介:使用一个Path来绘制虚线(自定义虚线样式)

    使用:new PathDashPathEffect(path, advance, phase,PathDashPathEffect.Style.ROTATE);

    参数:shape:用来绘制的 Path

               advance:是两个相邻的 shape 段 [ 起点 ] 之间的间隔(非前一个终点和后一个起点)

               style:三种:TRANSLATE 位移、ROTATE 旋转、MORPH 变体

    效果

    SumPathEffect

    简介:按照两种PathEffect分别对目标进行绘制(两效果互不干扰)    

    效果

    ComposePathEffect

    简介:先对一个目标Path使用innerpePathEffect,再对改变的目标path使用outerpePathEffect

    效果

    关闭硬件加速的场景

    1.使用Canvas.drawLine() 和 Canvas.drawLines() 方法画直线时

    2.使用PathDashPathEffect 时


    绘制后添加额外效果

    setShadowLayer(float radius, float dx, float dy, int shadowColor)

    简介:在之后的绘制内容下面加一层阴影

    参数:radius:阴影的模糊范围

               dx,dy:阴影的偏移量

               shadowColor:阴影的颜色

    注:1.文字之外的绘制必须关闭硬件加速才能正常绘制阴影

            2.如果shadowColor阴影颜色本身是半透明的,阴影的透明度就使用本身

               如果本身不透明,阴影的透明度就使用paint 的透明度

    效果

    setMaskFilter(MaskFilter maskfilter)

    简介:为之后的绘制设置 MaskFilter,基于整个画面来进行过滤(API14以上需关闭硬件加速)

    1.BlurMaskFilter:模糊效果

       构造:BlurMaskFilter(float radius, BlurMaskFilter.Blur style)

       参数:radius:模糊的范围

                  style:模糊的类型NORMAL、SOLOD、INNER、OUTER

    效果

    2.EmbossMaskFilter:浮雕效果

        构造:EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius)

        参数:direction:浮点型数组,控制x,y,z轴的光源方向

                   ambient:环境光的强度,数值范围是 0 到 1

                   specular:炫光/镜面反射的系数

                   blurRadius:应用光线的范围

    效果

    获取绘制的 Path

    getFillPath(Path src, Path dst)

    简介:获取实际path,src 是原 Path,dst 就是实际 Path 的保存位置

    实际path:drawPath() 的绘制内容的轮廓,要算上线条宽度和设置的 PathEffect

    效果

    getTextPath(String text, int start, int end, float x, float y, Path path) 

    getTextPath(char[] text, int index, int count, float x, float y, Path path)

    简介:获取文字的path

    文字的path:文字信息全是被转化成图形,对图形进行绘制的

    效果

    初始化类相关

    reset():重置 Paint 的所有属性为默认值(相当于重新new,但性能更高)

    set(Paint src):把 src 的所有属性全部复制过来

    setFlags(int flags):可批量设置 flags

                                    paint.setFlags(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG);

                                =  paint.setAntiAlias(true);    +      paint.setDither(true);

    相关文章

      网友评论

          本文标题:Paint效果相关

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