美文网首页Android技术总结安卓 完美收藏
Android进行高斯模糊的简单实现

Android进行高斯模糊的简单实现

作者: hedge_hog | 来源:发表于2016-03-01 21:21 被阅读2131次

因为项目上有需求,将客人态的背景设置成用户头像的毛玻璃的效果(这句话怎么这么绕口,还是直接看图片吧)背景就是用户的头像

以前没做过这种功能,所以上网查了一下,大牛们调研了很多种实现方法,因为需求比较简单,对性能的要求没有那么苛刻,所以下面我将用最简单的发来实现。思路是利用现有 Android 提供的方法,通过 RenderScript 调用底层接口实现高斯模糊计算.这种方法直接利用 Android 系统提供的机制,从代码实现上是最简单也相对高效的。

第一步

在项目的 build.gradle 下引入 RenderScript 如下

 defaultConfig {
        applicationId "com.xxxx.xxxx"
        minSdkVersion 17  
        targetSdkVersion 22
//      以下是高斯模糊相关的API
        renderscriptTargetApi 22
        renderscriptSupportModeEnabled true
    }

经测试如果想以这种方式实现高斯模糊的效果,那么 minSdkVersion 最低为 17 ,不然运行的时候会报错。

第二步

给需要进行高斯模糊的背景Imageview设置图片资源,不明白?其实模糊的那一坨东西就是个Imageview,从接口拉取到的用户的头像,再将头像设置给Imageview 设置好之后就可以用下面的方法添加模糊效果了。

    /**
     * 添加模糊效果
     */
    private void applyBlur() {
        imgBackgroung.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                imgBackgroung.getViewTreeObserver().removeOnPreDrawListener(this);
                imgBackgroung.buildDrawingCache();
                Bitmap bmp = imgBackgroung.getDrawingCache();
                blur(bmp, textBlur);
                return true;
            }
        });
    }

imgBackgroung 是 布局的背景Imageview 可以在进入 Activity 的时候拉去用户头像,然后将背景的Imageview设置成用户的头像,之后执行 applyBlur() 方法进行高斯模糊的计算,怎么样是不是很简单。

下面是核心的模糊算法

  /**
     * 一个高斯模糊的算法
     *
     * @param bkg
     * @param view
     */
    private void blur(Bitmap bkg, View view) {
        float radius = 20;
        Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasuredWidth()),
                (int) (view.getMeasuredHeight()), Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(overlay);
        canvas.translate(-view.getLeft(), -view.getTop());
        canvas.drawBitmap(bkg, 0, 0, null);

        RenderScript rs = RenderScript.create(UserInfoActivity.this);

        Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);
        ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());
        blur.setInput(overlayAlloc);
        blur.setRadius(radius);
        blur.forEach(overlayAlloc);
        overlayAlloc.copyTo(overlay);
        view.setBackground(new BitmapDrawable(getResources(), overlay));
        rs.destroy();

    }

模糊的程度可以通过改变 radius 的大小来进行设置。

好了到这里,一个高斯模糊的背景就诞生了,demo我就不贴了,因为这个还是比较简单的,有什么问题,可以联系我。

原文地址:http://hedgehog.love/2016/02/27/Android-Gaussian-blur-simple-implementation/ 转载请注明出处!

相关文章

  • Android进行高斯模糊的简单实现

    因为项目上有需求,将客人态的背景设置成用户头像的毛玻璃的效果(这句话怎么这么绕口,还是直接看图片吧)背景就是用户的...

  • 高斯模糊

    高斯模糊 【iOS 开发】实现毛玻璃(高斯模糊)效果 - CocoaChina_让移动开发更简单

  • Android实现高斯模糊

    高斯模糊类 引用 使用代码

  • Cocos Creator Shader Effect 系列 -

    本章为大家带来高斯模糊的实现 首先,来点简单的,比如:高斯模糊的英文名叫 Gaussian Blur。 关于高斯模...

  • Android 网易云音乐图片高斯模糊

    Android 背景图流行使用高斯模糊效果,界面效果会比较好看。分析各种实现方式,实现网易云音乐图片加载高斯模糊背...

  • Android图片高斯模糊动画

    前言 这里只讲高斯模糊动画的处理,不讨论高斯模糊的处理方式。想看高斯模糊处理的可以参考这个Android 图片高斯...

  • Android高斯模糊实现方案

    1、使用Glide 适用场景:动态配置的背景图片 2、对图片高斯模糊,需要先将图片转成bitmap对象 不推荐:使...

  • BackdropFilter

    实现高斯模糊的组件

  • android 高斯模糊

    BaseRender Blur RSRender ScriptIntrinsicBlurRender 调用方式

  • Android 高斯模糊

    最近项目中经常用到图片的高斯模糊,今天记录下我所用到的2种方式 1.Java层解析 优点兼容性强,高斯迷糊效果好 ...

网友评论

  • 389fdbecd112:哥们,问下你这个背景模糊的时候不能宽度不能弄成全屏的,有遇到过没?有的可以,有的就一般模糊这样
  • 44a4180ea99d:textBlur是什么
    hedge_hog:@选你妹 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0831/3389.html
    可以看这个,我是参考这个来做的

本文标题: Android进行高斯模糊的简单实现

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