如何在Android中模糊背景图像

hel*_*sim 40 java android

模糊背景图像的最佳方法是什么,如下图所示?我看到了一些代码和库,但它们已经有几年的历史了,或者像BlurBehind库一样,但它没有给出相同的效果.提前致谢!

在此输入图像描述

San*_*ado 38

最简单的方法是使用库.看一下这个:https://github.com/wasabeef/Blurry

使用库您只需要这样做:

Blurry.with(context)
  .radius(10)
  .sampling(8)
  .color(Color.argb(66, 255, 255, 0))
  .async()
  .onto(rootView);
Run Code Online (Sandbox Code Playgroud)

  • 对不起,但我对你的样本没有任何影响,我甚至搞砸了价值观,但什么都没发生 (3认同)

Jor*_*ego 19

这是使用我在本文中找到的Android的RenderScript有效模糊图像的简单方法

  1. 创建一个名为BlurBuilder的类

    public class BlurBuilder {
      private static final float BITMAP_SCALE = 0.4f;
      private static final float BLUR_RADIUS = 7.5f;
    
      public static Bitmap blur(Context context, Bitmap image) {
        int width = Math.round(image.getWidth() * BITMAP_SCALE);
        int height = Math.round(image.getHeight() * BITMAP_SCALE);
    
        Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
        Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
    
        RenderScript rs = RenderScript.create(context);
        ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
        Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
        theIntrinsic.setRadius(BLUR_RADIUS);
        theIntrinsic.setInput(tmpIn);
        theIntrinsic.forEach(tmpOut);
        tmpOut.copyTo(outputBitmap);
    
        return outputBitmap;
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将任何图像复制到可绘制文件夹

  3. 在您的活动中使用BlurBuilder,如下所示:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_login);
    
        mContainerView = (LinearLayout) findViewById(R.id.container);
        Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background);
        Bitmap blurredBitmap = BlurBuilder.blur( this, originalBitmap );
        mContainerView.setBackground(new BitmapDrawable(getResources(), blurredBitmap));
    
    Run Code Online (Sandbox Code Playgroud)
  4. Renderscript包含在支持v8中,可以将此答案缩小到api 8.要使用gradle启用它,请将这些行包含在gradle文件中(来自此答案)

    defaultConfig {
        ...
        renderscriptTargetApi *your target api*
        renderscriptSupportModeEnabled true
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 结果

在此输入图像描述


lut*_*oid 12

您可以使用

    Glide.with(getContext()).load(R.mipmap.bg)
            .apply(bitmapTransform(new BlurTransformation(22)))
            .into((ImageView) view.findViewById(R.id.imBg));
Run Code Online (Sandbox Code Playgroud)

  • 对于那些遇到 `BlurTransformation` 未解决的参考错误的人,您需要将此 `implementation 'jp.wasabeef:glide-transformations:4.0.0` 添加到您的 gradle (6认同)

Ram*_*shi 10

Android 12,预览版 1 带有内置模糊功能。我们现在不需要依赖外部库。这是代码

imageView.setRenderEffect(
        RenderEffect.createBlurEffect(
            20.0f, 20.0f, SHADER_TITLE_MODE
        )
)
Run Code Online (Sandbox Code Playgroud)


Sac*_*rma 6

下面给出了实现此目的的最简单方法,

一世)

Glide.with(context.getApplicationContext())
                        .load(Your Path)   
                        .override(15, 15) // (change according to your wish)
                        .error(R.drawable.placeholder)
                        .into(image.score);
Run Code Online (Sandbox Code Playgroud)

否则你可以按照下面的代码..

二)

1.创建一个类。(代码如下)

public class BlurTransformation extends BitmapTransformation {

    private RenderScript rs;

    public BlurTransformation(Context context) {
        super( context );

        rs = RenderScript.create( context );
    }

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        Bitmap blurredBitmap = toTransform.copy( Bitmap.Config.ARGB_8888, true );

        // Allocate memory for Renderscript to work with
        Allocation input = Allocation.createFromBitmap(
            rs, 
            blurredBitmap, 
            Allocation.MipmapControl.MIPMAP_FULL, 
            Allocation.USAGE_SHARED
        );
        Allocation output = Allocation.createTyped(rs, input.getType());

        // Load up an instance of the specific script that we want to use.
        ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        script.setInput(input);

        // Set the blur radius
        script.setRadius(10);

        // Start the ScriptIntrinisicBlur
        script.forEach(output);

        // Copy the output to the blurred bitmap
        output.copyTo(blurredBitmap);

        toTransform.recycle();

        return blurredBitmap;
    }

    @Override
    public String getId() {
        return "blur";
    }
}
Run Code Online (Sandbox Code Playgroud)

2.使用 Glide 将图像设置为 ImageView。

例如:

Glide.with(this)
     .load(expertViewDetailsModel.expert.image)
     .asBitmap()
     .transform(new BlurTransformation(this))
     .into(ivBackground);
Run Code Online (Sandbox Code Playgroud)