美文网首页
Android 系统自带的图片模糊效果 RenderScript

Android 系统自带的图片模糊效果 RenderScript

作者: Anenn | 来源:发表于2016-10-30 18:51 被阅读422次

    前言

    与目前市场上的其他移动平台相比,基于 Java 语言的 Android 系统在执行计算密集型(Computationally intensive)任务时是很慢的。为此,Android 系统提供了 RenderScript 这个框架,该框架可以充分利用设备的多核性能来高效的执行计算算法。然而,早期的 RenderScript 仅支持 Android 4.3 及以上版本。不过幸运的是,后面 Google 又推出了 RenderScript 的兼容包,使其可以在 Android 2.2 及以上的系统中正常执行。

    集成 RenderSript Support Library

    如果你还在使用 Eclipse + ADT 作为你的开发环境,那么要想集成 RenderScriprt Support Library 到你的工程还是比较麻烦的。所以在这里我先假定你的开发环境是 Android Studio,Eclipse 使用者则请另行查阅。

    提到 Android Studio,那么自然而然的就会想到与它相绑定的一个自动化构建工具 Gradle。没错,我们只需要在 module(如 app) 目录下的 build.gradle 文件中添加如下两行代码即可,同时也不需要再申明其他任何的依赖。不过配置信息还是要根据你当前使用的 Gradle 版本进行相应修改:

    Gradle version 0.14+

    android {
        defaultConfig {
            renderscriptTargetApi 19
            renderscriptSupportModeEnabled true
        }
    }
    

    Gradle version 0.13-

    android {
        defaultConfig {
            renderscriptTargetApi 19
            renderscriptSuppoertMode true
        }
    }
    

    接下来只需同步一下工程我们就可以使用 RenderScript Support Library。这里需要注意的是,为了能使我们的工程运行在 Android 2.2及以上的设备,请正确选择 android.support.v8.renderscript.* 包下的类。如果你不考虑兼容低版本,那直接使用 android.renderscript.* 就可以了。

    使用 RenderScript Support Library 对我们的图片进行模糊处理

    完成上述的配置后,我们就可以使用 RenderSrcipt 来处理我们的图片了。Talk is cheap,show me the code:

    public class BlurBuilder {  
       private static final float BLUR_RADIUS = 7.5F;
    
        public static Bitmap blur(Context context, Bitmap inputBitmap) {
    
        Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
    
        RenderScript renderScript = RenderScript.create(context);
        ScriptIntrinsicBlur scriptIntrinsicBlur =
            ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
        Allocation tmpIn = Allocation.createFromBitmap(renderScript, inputBitmap);
        Allocation tmpOut = Allocation.createFromBitmap(renderScript, outputBitmap);
        scriptIntrinsicBlur.setRadius(BLUR_RADIUS);
        scriptIntrinsicBlur.setInput(tmpIn);
        scriptIntrinsicBlur.forEach(tmpOut);
        tmpOut.copyTo(outputBitmap);
    
        return outputBitmap;
      }
    }
    

    上面代码就简单实现了将一个 Bitmap 资源进行模糊处理,然后我们就可以调用了:

    ImageView ivPhoto = (ImageView) findViewById(R.id.iv_photo);
        BitmapDrawable bitmapDrawable =
            (BitmapDrawable) ContextCompat.getDrawable(getApplicationContext(), R.mipmap.ic_launcher);
        ivPhoto.setImageDrawable(new BitmapDrawable(getResources(),
            BlurBuilder.blur(getApplicationContext(), bitmapDrawable.getBitmap())));
    

    最终效果如下:


    参考文献

    1. How to Use the Renderscript Support Library with Gradle-Based Android Projects
    2. How to Blur Images Efficiently with Android's RenderScript

    相关文章

      网友评论

          本文标题:Android 系统自带的图片模糊效果 RenderScript

          本文链接:https://www.haomeiwen.com/subject/sijuuttx.html