专栏首页程序员大飞Android实现Bitmap高斯模糊效果

Android实现Bitmap高斯模糊效果

Android实现Bitmap高斯模糊效果

自定义高斯模糊工具类

import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;

/**
 * Created by xpf on 2017/6/24 :)
 * Function:实现高斯模糊工具类
 */

public class BlurBitmapUtil {

    // 图片缩放比例(即模糊度)
    private static final float BITMAP_SCALE = 0.4f;

    /**
     * @param context 上下文对象
     * @param image   需要模糊的图片
     * @return 模糊处理后的Bitmap
     */
    public static Bitmap blurBitmap(Context context, Bitmap image, float blurRadius) {
        // 计算图片缩小后的长宽
        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内核对象
        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(blurRadius);
        // 设置blurScript对象的输入内存
        blurScript.setInput(tmpIn);
        // 将输出数据保存到输出内存中
        blurScript.forEach(tmpOut);

        // 将数据填充到Allocation中
        tmpOut.copyTo(outputBitmap);

        return outputBitmap;
    }
}

使用示例

    if (image != null) {
        Bitmap blurBitmap = BlurBitmapUtil.blurBitmap(mContext, image, 20);
        blurView.setImageBitmap(blurBitmap);
        } else {
            // 如果image为null就设置一张本地默认的模糊照片
            blurView.setImageResource(R.drawable.img_mohu);
        }

Thanks all.

Good night~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android Picasso不缓存图片

    问题描述:大多APP都有更换个人头像的功能,楼主在开发中遇到了当更换头像时,头像没有更换过来的问题,我用的是Picasso图片请求框架,而这些加载图片的框架一般...

    IT大飞说
  • Android开发之引导页的简单实现

    当欢迎页面加载完成的时候(一般为动画),即欢迎页面动画加载完成的时候,从本地存储中取出记录是否是第一次进入,然后进入引导页或者主页,如果是第一次就进入引导页,否...

    IT大飞说
  • Android TextView 属性大全

    Android 中我们知道有一个使用频率非常高的控件,它就是 TextView,但是它的属性特别多,今天我们就来探究下,它都有哪些属性。

    IT大飞说
  • P01_Spark开发测试运行环境安装Spark开发测试运行环境安装

    Spark开发测试运行环境安装 VirtualBox下载地址 https://www.virtualbox.org/wiki/Downloads ? imag...

    Albert陈凯
  • 有这好事?神经网络模型Word2vec竟能根据个人喜好推荐音乐

    ? 每一个点代表一首歌。分数越接近,歌曲就越相似 流媒体服务已经改变了我们体验内容的方式。虽然推荐系统以前专注于向用户展示你可能想要购买的内容,但现在的流媒体...

    AiTechYun
  • tensorflow gpu 运行出现OOM错误

    莫斯
  • springboot整合kaptcha验证码前言:开发工具及技术:正式开始:总结:

    贪挽懒月
  • selenium设置chrome和phantomjs的请求头信息

    可以复制下列代码运行,会访问https://httpbin.org/get?show_env=1  该网站能呈现你请求的头信息

    十四君
  • json & jsonp

    对于JSON和JSONP,应该都不陌生,咳咳,不过最初对JSONP有点误解,以为是JSON的另外一个别名,其实二者风马牛不相及。

    仇诺伊
  • 前端开发规范CSS

    由于定位(positioning)可以从正常的文档流中移除元素,并且还能覆盖盒模型(box model)相关的样式,因此排在首位。盒模型决定了组件的尺寸和位置,...

    公众号php_pachong

扫码关注云+社区

领取腾讯云代金券