Android 12 高斯模糊-RenderEffect

public static RenderEffect createBlurEffect(

float radiusX,

float radiusY,

@NonNull RenderEffect inputEffect,

@NonNull TileMode edgeTreatment

) {

long nativeInputEffect = inputEffect != null ? inputEffect.mNativeRenderEffect : 0;

return new RenderEffect(

nativeCreateBlurEffect(

radiusX,

radiusY,

nativeInputEffect,

edgeTreatment.nativeInt

)

);

}

两个 createBlurEffect() 方法,分别为三参(模糊一次)和四参(模糊两次)。inputEffect 先进行了一次模糊。

看效果图:

模糊程度一样,但是实现方式不同:

private void setBlur() {

RenderEffect radiusXRenderEffect = RenderEffect.createBlurEffect(10, 0, Shader.TileMode.MIRROR);

RenderEffect radiusYRenderEffect = RenderEffect.createBlurEffect(0, 10, Shader.TileMode.MIRROR);

agb.iv1.setRenderEffect(RenderEffect.createBlurEffect(10, 10, Shader.TileMode.CLAMP));

agb.iv2.setRenderEffect(RenderEffect.createBlurEffect(10, 10, Shader.TileMode.REPEAT));

//自身radiusY 为 0 ,传入的radiusYRenderEffect设置的radiusY为10;

agb.iv3.setRenderEffect(RenderEffect.createBlurEffect(10, 0, radiusYRenderEffect, Shader.TileMode.MIRROR));

//自身radiusX 为 0 ,传入的radiusXRenderEffect设置的radiusX为10;

agb.iv4.setRenderEffect(RenderEffect.createBlurEffect(0, 10, radiusXRenderEffect, Shader.TileMode.DECAL));

}

这个方法返回一个 new RenderEffect(nativeCreateBlurEffect(…)。

那咱们去看看 nativeCreateBlurEffect()

🌀 nativeCreateBlurEffect()

frameworks/base/libs/hwui/jni/RenderEffect.cpp

static const JNINativeMethod gRenderEffectMethods[] = {

{“nativeCreateBlurEffect”, “(FFJI)J”, (void*)creat

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值