图片模糊效果实现(RenderScript)

本文介绍如何使用RenderScript实现图片模糊效果,包括配置方法、注意事项及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RenderScript主要在android中的对图形进行处理,RenderScript采用C99语法进行编写,主要优势在于性能较高,本次记录主要是利用RenderScript对图片进行模糊化。

  • 需要注意的地方:

    如果只需要支持19以上的设备,只需要使用android.renderscript包下的相关类即可,而如果需要向下兼容,则需要使用android.support.v8.renderscript包下的相关类,两个包的类的操作都是一样的。

  • 使用RenderScript的时候需要在build.gradle中添加如下代码:
    defaultConfig {   
    ..................
      renderscriptTargetApi 19    
      renderscriptSupportModeEnabled true
    }复制代码
  • 使用android.support.v8.renderscript包时的坑:

    当使用此包时,需要注意,经测试,当buildToolsVersion为23.0.3时,在4.4以上的部分设备会崩溃,原因是因为没有导入libRSSupport.so包。当buildToolsVersion为23.0.1时,在4.4以上的部分设备会崩溃,原因是没有renderscript-v8.jar包,这两个地方暂时没有解决的办法,所以在使用android.support.v8.renderscript包的时候,不要用23.0.3或者23.0.1进行构建,以免出错。

  • 下面是一个小例子工具类:

    package com.chenh.RenderScript;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.support.v8.renderscript.Allocation;
    import android.support.v8.renderscript.Element;
    import android.support.v8.renderscript.RenderScript;
    import android.support.v8.renderscript.ScriptIntrinsicBlur;
    public class BlurBitmap {
    
      //图片缩放比例
      private static final float BITMAP_SCAL = 0.4f;
      //最大模糊度(在0.0到25.0之间)
      private static final float BLUR_RADIUS = 25f;
    
      /**
       * 模糊图片的具体操作方法
       *
       * @param context 上下文对象
       * @param image   需要模糊的图片
       * @return 模糊处理后的图片
       */
      public static Bitmap blur(Context context, Bitmap image) {
          //计算图片缩小后的长宽
          int width = Math.round(image.getWidth() * BITMAP_SCAL);
          int height = Math.round(image.getHeight() * BITMAP_SCAL);
    
          //将缩小后的图片做为预渲染的图片
          Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
          //创建一张渲染后的输出图片
          Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
    
          //创建RenderScript内核对象
          RenderScript rs = RenderScript.create(context);
          //创建一个模糊效果的RenderScript的工具对象
          ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    
          //由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间
          //创建Allocation对象的时候其实内存是空的,需要使用copyTo()将数据填充进去。
          Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
          Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
    
          //设置渲染的模糊程度,25f是最大模糊程度
          blurScript.setRadius(BLUR_RADIUS);
          //设置blurScript对象的输入内存
          blurScript.setInput(tmpIn);
          //将输出数据保存到输出内存中
          blurScript.forEach(tmpOut);
    
          //将数据填充到Allocation中
          tmpOut.copyTo(outputBitmap);
    
          return outputBitmap;
      }
    }复制代码

效果图如下:

转载于:https://juejin.im/post/59dacd2e5188254f9a6f7806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值