Android MaskFilter: BlurMaskFilter、EmbossMaskFilter
来源:互联网 发布:网络营销策划方案书 编辑:程序博客网 时间:2024/05/22 04:35
MaskFilter
MaskFilter是一个基类对象,为Paint分配alpha通道的mask效果。
它的子类实现有:BlurMaskFilter、EmbossMaskFilter
主要被使用在Paint中:paint.setMaskFilter(maskFilter)
BlurMaskFilter
主要用于掩饰(mask)和模糊(blur) Paint所作用的对象上,并根据radius值和BlurMaskFilter.Blur 值来调整。
源码:
public class BlurMaskFilter extends MaskFilter { public enum Blur { NORMAL(0), SOLID(1), OUTER(2), INNER(3); Blur(int value) { native_int = value; } final int native_int; } public BlurMaskFilter(float radius, Blur style) { native_instance = nativeConstructor(radius, style.native_int); } private static native long nativeConstructor(float radius, int style);}
构造函数:public BlurMaskFilter(float radius, Blur style)
radius : 指定要模糊的范围,必须大于0
Blur是个枚举类型,其各元素函义:
- Normal
对应物体边界的内部和外部都将进行模糊
paint.setColor(Color.RED);paint.setMaskFilter(new BlurMaskFilter(10, Blur.NORMAL));canvas.drawRect(100, 100, 500, 500, paint);
原图:
radius=10:
radius=100:
再来看看对Bitmap的绘制影响:
paint.setColor(Color.RED);paint.setMaskFilter(new BlurMaskFilter(20, Blur.NORMAL));canvas.drawBitmap(bitmap, bitmapSrcRect, new Rect(100, 100, 500, 500), paint);
radius=20:
radius=100:
SOLID
图像边界外产生一层与Paint颜色一致阴影效果,不影响图像的本身OUTER
图像边界外产生一层阴影,图像内部镂空- INNER
在图像边界内部产生模糊效果,外部不绘制
EmbossMaskFilter
指定了光源的方向和环境光强度来添加浮雕效果
源码:
public class EmbossMaskFilter extends MaskFilter { /** * Create an emboss maskfilter * * @param direction array of 3 scalars [x, y, z] specifying the direction of the light source * @param ambient 0...1 amount of ambient light * @param specular coefficient for specular highlights (e.g. 8) * @param blurRadius amount to blur before applying lighting (e.g. 3) * @return the emboss maskfilter */ public EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius) { if (direction.length < 3) { throw new ArrayIndexOutOfBoundsException(); } native_instance = nativeConstructor(direction, ambient, specular, blurRadius); } private static native long nativeConstructor(float[] direction, float ambient, float specular, float blurRadius);}
构造参数:
direction 是一个含有三个float元素的数组,对应x、y、z
三个方向上的值;用于指定光源方向
ambient 环境光的因子 (0~1),0~1表示从暗到亮
specular 镜面反射系数,越接近0,反射光越强
blurRadius 模糊半径,值越大,模糊效果越明显
例:
paint.setColor(Color.RED);paint.setMaskFilter(new EmbossMaskFilter(new float[]{50, 50, 50},0.0f, 0,30));paint.setTextSize(80);canvas.drawText("中华人民共和国", 20, 200, paint);
若paint.setMaskFilter(new EmbossMaskFilter(new float[]{20, 20, 20},0.5f, 1,10));
EmbossMaskFilter 的使用,参数的设定只能靠一次次的尝试
- Android MaskFilter: BlurMaskFilter、EmbossMaskFilter
- EmbossMaskFilter BlurMaskFilter
- MaskFilter(滤镜)BlurMaskFilter(高斯滤镜)和EmbossMaskFilter(浮雕滤镜)的简单介绍和使用
- Android中的自绘View的那些事儿(五)之 遮罩滤镜:BlurMaskFilter 和 EmbossMaskFilter 的简介
- Android:Paint的setMaskFilter(MaskFilter maskfilter)
- android EmbossMaskFilter 浮雕效果实现
- android.graphics.MaskFilter
- MaskFilter
- Android Paint之MaskFilter详解
- Android 浮雕遮罩滤镜(EmbossMaskFilter)
- android自定义view Paint的setMaskFilter(MaskFilter maskfilter)
- Android 4.0以上BlurMaskFilter效果无效
- Android 模糊遮罩滤镜(BlurMaskFilter)
- android MaskFilter ColorFilter Xfermode PorterDuffXfermode PorterDuff.Mode
- Android 使用MaskFilter为Paint设置效果
- android 使用MaskFilter面具工具介绍
- EmbossMaskFilter介绍
- BlurMaskFilter介绍
- Vue监听当数据发生改变v-for渲染完成
- 漂亮的git log显示
- $.inArray("js", arr)JQuery判断数组中是否包含某个元素
- VS2015代码自动对齐快捷键
- 如何生成自己的库依赖
- Android MaskFilter: BlurMaskFilter、EmbossMaskFilter
- JedisConnectionException异常原因追踪
- thrift应用举例(c/c++作为服务端、java作为客户端)
- C系列总结2 & 剖析整型、浮点型数据在内存中的存储
- 1069. The Black Hole of Numbers (20)
- XCODE DEBUG 技巧
- Windows 下 Python + MySQL 的安装及操作方法
- java操作postgreSql遇到的问题
- JAVA设计模式之原型模式