当前位置: 首页 > news >正文

Filter -> MaskFilter遮罩滤镜详解

MaskFilter

  • 作用对象:MaskFilter 主要用于Paint的外观效果,给用Paint绘制的内容添加模糊或者浮雕效果
  • 应用效果:
    • MaskFilter 处理位图的遮罩效果,影响绘制的边缘或整体形状
    • 主要用于模糊处理、浮雕效果等,通过影响绘制对象的边缘来实现
  • 常用子类:
    BlurMaskFilter:实现模糊效果,可以设置不同的模糊样式(NORMAL、SOLID、OUTER、INNER)
    EmbossMaskFilter:创建浮雕效果,通过设置光源方向、环境光强度等来实现

BlurMaskFilter模糊遮罩滤镜

  • Java源码
public class BlurMaskFilter extends MaskFilter {public enum Blur {/*** Blur inside and outside the original border.*/NORMAL(0),/*** Draw solid inside the border, blur outside.*/SOLID(1),/*** Draw nothing inside the border, blur outside.*/OUTER(2),/*** Blur inside the border, draw nothing outside.*/INNER(3);Blur(int value) {native_int = value;}final int native_int;}/*** Create a blur maskfilter.** @param radius The radius to extend the blur from the original mask. Must be > 0.* @param style  The Blur to use* @return       The new blur maskfilter*/public BlurMaskFilter(float radius, Blur style) {native_instance = nativeConstructor(radius, style.native_int);}private static native long nativeConstructor(float radius, int style);
}
  • 构造函数详解
    • radius(模糊半径)
      • 类型:float
      • 作用:指定模糊的强度。值越大,模糊效果越明显。
      • 描述:模糊半径决定了模糊的范围,单位通常是像素。较小的值会产生轻微的模糊,而较大的值会导致显著的模糊效果。
    • style(模糊样式):
      • 类型:BlurMaskFilter.Blur
      • 作用:决定模糊的应用方式,即模糊效果的样式。
      • 可用值:
        • Blur.NORMAL
        • 描述:模糊内外边框+绘制内容。适用于需要整体柔和模糊效果的场景
        • Blur.SOLID
        • 描述:模糊内外边框+不模糊绘制内容。适用于增强物体的边缘
        • Blur.OUTER
        • 描述:只模糊外边框+不模糊内边框+内边框内的绘制内容透明显示。适用于突出物体本身
        • Blur.INNER
        • 描述:只模糊内边框+不模糊外边框+外边框外的绘制内容透明显示。适用于创建内嵌阴影或凹陷效果
  • XML文件
<?xml version="1.0" encoding="utf-8"?>
<com.example.myapplication.MyViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" />
  • 自定义View代码
class MyView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {private val mDrawPaint: Paint = Paint().apply {isDither = trueisAntiAlias = trueisFilterBitmap = truecolor = Color.BLUE}private val radius = 100fprivate val spacing = 500foverride fun onDraw(canvas: Canvas) {super.onDraw(canvas)// Draw circle with NORMAL blurmDrawPaint.maskFilter = BlurMaskFilter(20f, BlurMaskFilter.Blur.NORMAL)canvas.drawCircle(spacing, spacing, radius, mDrawPaint)// Draw circle with SOLID blurmDrawPaint.maskFilter = BlurMaskFilter(20f, BlurMaskFilter.Blur.SOLID)canvas.drawCircle(spacing , spacing * 2, radius, mDrawPaint)// Draw circle with OUTER blurmDrawPaint.maskFilter = BlurMaskFilter(20f, BlurMaskFilter.Blur.OUTER)canvas.drawCircle(spacing , spacing * 3, radius, mDrawPaint)// Draw circle with INNER blurmDrawPaint.maskFilter = BlurMaskFilter(20f, BlurMaskFilter.Blur.INNER)canvas.drawCircle(spacing , spacing * 4, radius, mDrawPaint)}
}
  • 效果图
    在这里插入图片描述

EmbossMaskFilter浮雕遮罩滤镜

  • Java源码
public class EmbossMaskFilter extends MaskFilter {/*** Create an emboss maskfilter** @deprecated This subclass is not supported and should not be instantiated.** @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*/@Deprecatedpublic 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[]
      • 作用:指定光源的方向。
      • 描述:这是一个长度为 3 的数组,分别表示光源在 x、y、z 轴上的方向分量。正常情况下,这些值不需要是单位向量,但它们定义了光源的相对方向。根据光源的方向,浮雕的阴影和高光效果会有所不同
    • ambient(环境光):
      • 类型:float
      • 作用:定义环境光的强度
      • 范围:通常在 01 之间
      • 描述:环境光影响整个浮雕效果的亮度。值越大,整体效果越亮,越小则越暗
    • specular(高光反射系数):
      • 类型:float
      • 作用:定义高光的反射强度
      • 描述:高光反射系数影响浮雕效果中高光部分的亮度。较高的值会使高光更明显,较低的值则使高光不明显
    • blurRadius(模糊半径):
      • 类型:float
      • 作用:定义浮雕效果的模糊半径
      • 描述:模糊半径决定了浮雕边缘的模糊程度。较小的值会使浮雕边缘更锐利,而较大的值会使边缘更加柔和
  • XML文件
<?xml version="1.0" encoding="utf-8"?>
<com.example.myapplication.MyViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" />
  • 自定义View代码
class MyView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {private var mPaint: Paint = Paint().apply {isAntiAlias = truecolor = Color.RED  // 用红色以更好地展示浮雕效果}private var embossFilter: EmbossMaskFilter? = nullinit {// 设置浮雕效果的参数val direction = floatArrayOf(1f, 0f, 0f) // 从上方垂直照射光源val ambient = 0.6f                       // 较低的环境光val specular = 5f                        // 较高的高光反射val blurRadius = 50f                      // 适中的模糊半径embossFilter = EmbossMaskFilter(direction, ambient, specular, blurRadius)mPaint.maskFilter = embossFiltersetLayerType(LAYER_TYPE_SOFTWARE, mPaint)}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)canvas.drawColor(Color.DKGRAY) // 设置深灰色背景以增加对比度// 设置椭圆的矩形边界val left = 100fval top = 100fval right = width - 100fval bottom = height - 100f// 绘制椭圆canvas.drawOval(left, top, right, bottom, mPaint)}
}
  • 效果图
    -在这里插入图片描述
http://www.lryc.cn/news/532811.html

相关文章:

  • RK3568使用QT操作LED灯
  • python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理
  • 为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?
  • Android 约束布局ConstraintLayout整体链式打包居中显示
  • 在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别
  • 微服务知识——微服务架构的演进过程
  • Chrome 浏览器:互联网时代的浏览利器
  • 深入浅出 NRM:加速你的 npm 包管理之旅
  • Linux——基础命令1
  • nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装
  • Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?
  • C中静态库和动态库的使用
  • Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
  • 【FPGA】 MIPS 12条整数指令 【3】
  • Mac 部署Ollama + OpenWebUI完全指南
  • 蓝桥杯小白打卡第二天
  • Docker Compose:容器编排的利器
  • springboot项目的单元测试
  • JVM图文入门
  • cursor 开发java项目教程简单上手
  • 优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案
  • aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API
  • 物联网的三层架构:感知层、网络层与应用层
  • 常用抓包工具tcpdump、Fiddler、Charles、Wireshark 和 Sniffmaster 下载地址
  • π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当
  • js-对象-JSON
  • Houdini subuv制作输出阵列图
  • 虚幻基础17:动画蓝图
  • 路由器及工作原理与常用路由配置命令详解
  • Windows编程:下载与安装 Visual Studio 2010