2019独角兽企业重金招聘Python工程师标准>>>

本人图片加载用了Glide,模糊用了一个git上面的效果,叫Fglass,总体来说还可以,效果图如下:

下面开始我的代码了:(获取到图片路径,用Glide)

Glide.with(mcontext).load(url).asBitmap().error(R.drawable.pic_nologinbg).into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {iv_head.setImageBitmap(resource);Fglass.blur(resource,rt_headbg,4,12);}
});

下面是Fglass的工具类

public class Fglass {//第一次设置的是吧不显示,所以放弃了/*** 设置高斯模糊** ps:* 设置高斯模糊是依靠scaleFactor和radius配合使用的,比如这里默认设置是:scaleFactor = 8;radius = 2; 模糊效果和scaleFactor = 1;radius = 20;是一样的,而且效率高* @param toView 高斯模糊设置到某个View上* @param radius 模糊度* @param scaleFactor 缩放比例*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN)public static void blur(Bitmap bkg, View toView,float radius,float scaleFactor) {//获取View的截图
//        Bitmap b = Bitmap.createBitmap(fromView.getWidth(),fromView.getHeight(),Bitmap.Config.ARGB_8888);
//        Drawable drawable = fromView.getDrawable();
//        Bitmap bkg = ((BitmapDrawable) drawable).getBitmap();
//        fromView.buildDrawingCache();
//        Bitmap bkg = fromView.getDrawingCache();int width = bkg.getWidth();int height = bkg.getHeight();int newWidth = toView.getMeasuredWidth();int newHeight = toView.getMeasuredHeight();float scaleWidth = ((float)newWidth)/width;float scaleHeight = ((float)newHeight)/height;//缩放的matrix参数Matrix matrix = new Matrix();matrix.postScale(scaleWidth,scaleHeight);if (radius<1||radius>26) {scaleFactor = 8;radius = 2;}Bitmap overlay = Bitmap.createBitmap((int) (toView.getMeasuredWidth()/scaleFactor),(int) (toView.getMeasuredHeight()/scaleFactor), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(overlay);canvas.translate(-toView.getLeft()/scaleFactor, -toView.getTop()/scaleFactor);canvas.scale(1 / scaleFactor, 1 / scaleFactor);Paint paint = new Paint();paint.setFlags(Paint.FILTER_BITMAP_FLAG);bkg = Bitmap.createBitmap(bkg,0,0,width,height,matrix,true);canvas.drawBitmap(bkg, 0, 0, paint);overlay = Fglass.doBlur(overlay, (int) radius, true);toView.setBackground(new BitmapDrawable(overlay));}/*** 高斯模糊操作* @param sentBitmap* @param radius* @param canReuseInBitmap* @return*/public static Bitmap doBlur(Bitmap sentBitmap, int radius, boolean canReuseInBitmap) {Bitmap bitmap;if (canReuseInBitmap) {bitmap = sentBitmap;} else {bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);}if (radius < 1) {return (null);}int w = bitmap.getWidth();int h = bitmap.getHeight();int[] pix = new int[w * h];bitmap.getPixels(pix, 0, w, 0, 0, w, h);int wm = w - 1;int hm = h - 1;int wh = w * h;int div = radius + radius + 1;int r[] = new int[wh];int g[] = new int[wh];int b[] = new int[wh];int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;int vmin[] = new int[Math.max(w, h)];int divsum = (div + 1) >> 1;divsum *= divsum;int dv[] = new int[256 * divsum];for (i = 0; i < 256 * divsum; i++) {dv[i] = (i / divsum);}yw = yi = 0;int[][] stack = new int[div][3];int stackpointer;int stackstart;int[] sir;int rbs;int r1 = radius + 1;int routsum, goutsum, boutsum;int rinsum, ginsum, binsum;for (y = 0; y < h; y++) {rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;for (i = -radius; i <= radius; i++) {p = pix[yi + Math.min(wm, Math.max(i, 0))];sir = stack[i + radius];sir[0] = (p & 0xff0000) >> 16;sir[1] = (p & 0x00ff00) >> 8;sir[2] = (p & 0x0000ff);rbs = r1 - Math.abs(i);rsum += sir[0] * rbs;gsum += sir[1] * rbs;bsum += sir[2] * rbs;if (i > 0) {rinsum += sir[0];ginsum += sir[1];binsum += sir[2];} else {routsum += sir[0];goutsum += sir[1];boutsum += sir[2];}}stackpointer = radius;for (x = 0; x < w; x++) {r[yi] = dv[rsum];g[yi] = dv[gsum];b[yi] = dv[bsum];rsum -= routsum;gsum -= goutsum;bsum -= boutsum;stackstart = stackpointer - radius + div;sir = stack[stackstart % div];routsum -= sir[0];goutsum -= sir[1];boutsum -= sir[2];if (y == 0) {vmin[x] = Math.min(x + radius + 1, wm);}p = pix[yw + vmin[x]];sir[0] = (p & 0xff0000) >> 16;sir[1] = (p & 0x00ff00) >> 8;sir[2] = (p & 0x0000ff);rinsum += sir[0];ginsum += sir[1];binsum += sir[2];rsum += rinsum;gsum += ginsum;bsum += binsum;stackpointer = (stackpointer + 1) % div;sir = stack[(stackpointer) % div];routsum += sir[0];goutsum += sir[1];boutsum += sir[2];rinsum -= sir[0];ginsum -= sir[1];binsum -= sir[2];yi++;}yw += w;}for (x = 0; x < w; x++) {rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;yp = -radius * w;for (i = -radius; i <= radius; i++) {yi = Math.max(0, yp) + x;sir = stack[i + radius];sir[0] = r[yi];sir[1] = g[yi];sir[2] = b[yi];rbs = r1 - Math.abs(i);rsum += r[yi] * rbs;gsum += g[yi] * rbs;bsum += b[yi] * rbs;if (i > 0) {rinsum += sir[0];ginsum += sir[1];binsum += sir[2];} else {routsum += sir[0];goutsum += sir[1];boutsum += sir[2];}if (i < hm) {yp += w;}}yi = x;stackpointer = radius;for (y = 0; y < h; y++) {// Preserve alpha channel: ( 0xff000000 & pix[yi] )pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum];rsum -= routsum;gsum -= goutsum;bsum -= boutsum;stackstart = stackpointer - radius + div;sir = stack[stackstart % div];routsum -= sir[0];goutsum -= sir[1];boutsum -= sir[2];if (x == 0) {vmin[y] = Math.min(y + r1, hm) * w;}p = x + vmin[y];sir[0] = r[p];sir[1] = g[p];sir[2] = b[p];rinsum += sir[0];ginsum += sir[1];binsum += sir[2];rsum += rinsum;gsum += ginsum;bsum += binsum;stackpointer = (stackpointer + 1) % div;sir = stack[stackpointer];routsum += sir[0];goutsum += sir[1];boutsum += sir[2];rinsum -= sir[0];ginsum -= sir[1];binsum -= sir[2];yi += w;}}bitmap.setPixels(pix, 0, w, 0, 0, w, h);return (bitmap);}
}

ok了,效果就出来了。

转载于:https://my.oschina.net/u/2008084/blog/795520

Android 高斯模糊头像相关推荐

  1. android 头像高斯模糊,Android 高斯模糊头像

    本人图片加载用了Glide,模糊用了一个git上面的效果,叫Fglass,总体来说还可以,效果图如下: 下面开始我的代码了:(获取到图片路径,用Glide) Glide.with(mcontext). ...

  2. Android 圆形头像的两种实现方式

    Android 圆形头像的两种实现方式 前言 这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的. 圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式: ...

  3. Android高斯模糊、高斯平滑(Gaussian Blur)【2】

    Android高斯模糊.高斯平滑(Gaussian Blur)[2] Android上的高斯模糊效果实现,策略不唯一,在github上有一个开源的实现算法: https://github.com/pa ...

  4. Android圆形头像图Circle ImageView

    <Android圆形头像图Circle ImageView> 需要处理的原始图(pic): 使用CircleImageView处理后的图(作为头像): 现在很多的应用都有设置头像的功能,如 ...

  5. android设置本地图片,Android设置头像,手机拍照或从本地相册选取图片作为头像...

     [Android设置头像,手机拍照或从本地相册选取图片作为头像] 像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1,让用户通过选择本地相册之类的图片库中已 ...

  6. Android设置头像,手机拍照或从本地相冊选取图片作为头像

     [Android设置头像,手机拍照或从本地相冊选取图片作为头像] 像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1,让用户通过选择本地相冊之类的图片库中已 ...

  7. QML做类似Android圆形头像

    前言 在移动端应用中,用户头像一般都是圆形的, 在Android开发中github上有专门生成圆形图片的库可以使用,传入一张正常照片就可以返回圆形图片,并用户头像设置.那么在QML中也可以实现相同的效 ...

  8. android选择头像弹窗,Android App开发常用功能之用户头像选择-Go语言中文社区

    前言 现在的APP基本都有个人资料的填写,基本的都有头像的选择,支持拍照和从本地相册选择,剪切圆形头像的功能,现在用个小demo实现以下. 下面看一下效果图 上代码: 主界面代码 package co ...

  9. android 圆形头像,自定义圆形ImageView

    <!--头像--><RelativeLayoutandroid:id="@+id/ll_petInfo"android:layout_width="50 ...

最新文章

  1. 组策略 从入门到精通(十)通过组策略进行软件分发和卸载
  2. 1143 Lowest Common Ancestor(建树与不建两种思路)
  3. 如何创建圆角 UITextField 与内阴影
  4. TypeScript--es5中的类,继承,静态方法
  5. cgi备份还原和ghost有什么区别_手动GHOST还原重装系统详细教程
  6. 多元正态分布的后验采样(包含程序)
  7. unity捕捉全景图_DronePan:可捕捉飞机全景的应用程序
  8. python中index方法详解_详解python中的index函数用法
  9. linux安装操作系统以及配置ip地址
  10. abap调vb写的dll实现电子天平的读数(带控件版)
  11. python爬虫什么意思-python爬虫可以爬什么
  12. JDK 8.0 新特性——函数式接口和Lambda 表达式
  13. 疯狂Java讲义(十三)----第一部分
  14. MQL5 信号的优势
  15. CEC2018:动态多目标测试函数DF6~DF9的PS及PF(提供Matlab代码)
  16. 微信公众号开发详细笔记
  17. BUG合集 | 持续更新...
  18. 如何对接payjs的个人微信扫码支付接口
  19. 从阿里云下载centos的步骤
  20. 科普一下,什么是网站系统的性能,可用性,可伸缩性,可扩展性?

热门文章

  1. Windows10 MySQL8.0版本的压缩包安装方式
  2. 【每日新闻】1.7万元起!华为发布首款5G折叠屏手机!
  3. MacOS系统升级与MacOS13版本
  4. 全基因组组装,注释与评估软件
  5. MFC CListCtrl修改表头字体、字体颜色、背景颜色、字体垂直居中、表头高度
  6. 图像形态学处理(击中击不中变换 ) 终于搞懂了
  7. 语音信号处理之(二)基音周期估计(Pitch Detection)
  8. 如何将过长的链接放到excel里面
  9. Redis大批量插入数据
  10. SpringBoot服务监控之Actuate