在工作中,遇到一个问题,要将用户的头像作为一个大背景,就是背景模糊化。

主要就是用到了下面这个类

public class BlurImageview {/** 水平方向模糊度 */private static float hRadius = 10;/** 竖直方向模糊度 */private static float vRadius = 10;/** 模糊迭代度 */private static int iterations = 10;/*** 图片高斯模糊处理 */public static Drawable BlurImages (Bitmap bmp, Context context) {int width = bmp.getWidth();int height = bmp.getHeight();int[] inPixels = new int[width * height];int[] outPixels = new int[width * height];Bitmap bitmap = Bitmap. createBitmap(width, height,Bitmap.Config. ARGB_8888);bmp.getPixels(inPixels, 0, width, 0, 0, width, height);for ( int i = 0; i < iterations; i++) {blur(inPixels, outPixels, width, height, hRadius);blur(outPixels, inPixels, height, width, vRadius);}blurFractional(inPixels, outPixels, width, height, hRadius);blurFractional(outPixels, inPixels, height, width, vRadius);bitmap.setPixels(inPixels, 0, width, 0, 0, width, height);Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);return drawable;}/*** 图片高斯模糊算法*/public static void blur(int[] in, int[] out, int width, int height,float radius) {int widthMinus1 = width - 1;int r = ( int) radius;int tableSize = 2 * r + 1;int divide[] = new int[256 * tableSize];for ( int i = 0; i < 256 * tableSize; i++)divide[i] = i / tableSize;int inIndex = 0;for ( int y = 0; y < height; y++) {int outIndex = y;int ta = 0, tr = 0, tg = 0, tb = 0;for ( int i = -r; i <= r; i++) {int rgb = in[inIndex + clamp(i, 0, width - 1)];ta += (rgb >> 24) & 0xff;tr += (rgb >> 16) & 0xff;tg += (rgb >> 8) & 0xff;tb += rgb & 0xff;}for ( int x = 0; x < width; x++) {out[outIndex] = (divide[ta] << 24) | (divide[tr] << 16)| (divide[tg] << 8) | divide[tb];int i1 = x + r + 1;if (i1 > widthMinus1)i1 = widthMinus1;int i2 = x - r;if (i2 < 0)i2 = 0;int rgb1 = in[inIndex + i1];int rgb2 = in[inIndex + i2];ta += ((rgb1 >> 24) & 0xff) - ((rgb2 >> 24) & 0xff);tr += ((rgb1 & 0xff0000) - (rgb2 & 0xff0000)) >> 16;tg += ((rgb1 & 0xff00) - (rgb2 & 0xff00)) >> 8;tb += (rgb1 & 0xff) - (rgb2 & 0xff);outIndex += height;}inIndex += width;}}/*** 图片高斯模糊算法 */public static void blurFractional( int[] in, int[] out, int width,int height, float radius) {radius -= ( int) radius;float f = 1.0f / (1 + 2 * radius);int inIndex = 0;for ( int y = 0; y < height; y++) {int outIndex = y;out[outIndex] = in[0];outIndex += height;for ( int x = 1; x < width - 1; x++) {int i = inIndex + x;int rgb1 = in[i - 1];int rgb2 = in[i];int rgb3 = in[i + 1];int a1 = (rgb1 >> 24) & 0xff;int r1 = (rgb1 >> 16) & 0xff;int g1 = (rgb1 >> 8) & 0xff;int b1 = rgb1 & 0xff;int a2 = (rgb2 >> 24) & 0xff;int r2 = (rgb2 >> 16) & 0xff;int g2 = (rgb2 >> 8) & 0xff;int b2 = rgb2 & 0xff;int a3 = (rgb3 >> 24) & 0xff;int r3 = (rgb3 >> 16) & 0xff;int g3 = (rgb3 >> 8) & 0xff;int b3 = rgb3 & 0xff;a1 = a2 + ( int) ((a1 + a3) * radius);r1 = r2 + ( int) ((r1 + r3) * radius);g1 = g2 + ( int) ((g1 + g3) * radius);b1 = b2 + ( int) ((b1 + b3) * radius);a1 *= f;r1 *= f;g1 *= f;b1 *= f;out[outIndex] = (a1 << 24) | (r1 << 16) | (g1 << 8) | b1;outIndex += height;}out[outIndex] = in[width - 1];inIndex += width;}}public static int clamp(int x, int a, int b) {return (x < a) ? a : (x > b) ? b : x;}

如果和调用呢?

  view. setBackgroundDrawable(BlurImageview. BlurImages(bitmap, MainActivity.this ));

View之背景虚化处理(头像作为背景模糊化处理)相关推荐

  1. python背景虚化

    python背景虚化 文章目录: 一.背景虚化知识导读 1.背景虚化的特点 2.虚化算法设计:[参考](http://www.php361.com/index.php?c=index&a=vi ...

  2. Android仿网易云音乐播放页面 背景虚化碟片效果

    1.效果图 仿网易云音乐播放页面,主要有4个关键点: 背景虚化.获取音乐的专辑封面,将此图片作为背景图,并进行模糊虚化处理 碟片合成.获取音乐的专辑封面,和黑色碟片图片进行合成 碟片旋转.音乐播放时, ...

  3. opencv在手机上实现照片背景虚化

    概述 使用androidstudio开发,在手机上实现照片背景虚化 详细 代码下载:http://www.demodashi.com/demo/10599.html 一.准备工作 1.需要下载安装an ...

  4. opencv图像处理之在手机上实现背景虚化

    1.高端数码相机都具有背景虚化功能.背景虚化就是使景深变浅,使焦点聚集在主题上.一般的相机最好的虚拟方法便是用微距拍摄,如果主景与背景相距比较远,由于光学透镜对非焦点处景物的不能清晰成像的特点,可以免 ...

  5. 怎么给图片背景虚化?试试这几种图片背景虚化方法

    将图片背景虚化处理可以使图片的主体更加突出,增强视觉效果,让人更加专注于主体内容.同时,背景虚化也可以起到模糊不必要细节的作用,使照片更加简洁明了.在摄影中,背景虚化也是一种常用的技巧,可以使画面更加 ...

  6. 一文掌握MobileNetV1和MobileNetV2(基于pytorch实现的人像背景虚化)

    目录 一.概述 二.MobileNetV1原理和实现 2.1 原理 2.1.1 深度卷积 2.1.2 逐像素卷积 2.2 Pytorch实现 三.MobileNetV2原理和实现 3.1 原理 3.1 ...

  7. 如何拍背景虚化的照片_如何拍摄背景虚化的照片

    一些背景虚化的照片,更能突出主题,如何拍摄这种背景虚化的照片?这需要涉及景深的概念.初学者对景深这个词可能很陌生,可能也有不少人完全没有听说过这个概念.但是如果你能理解景深的概念,并把它运用到自己的拍 ...

  8. OpenCV在Android上实现人脸背景虚化

    1. 背景 在手机拍照技术日新月异的今天,很多手机厂商都陆续上了双摄,并衍生出人像模式(背景虚化).虽然博主不是很懂双摄虚化的原理,但是看到一些样张之后,还是被深深吸引,觉得很漂亮,很有虚幻的感觉. ...

  9. uni-app日志(一)——将view做成正圆形的头像

    页面代码如下: <template><view class="content"><view class="content-userinfo& ...

最新文章

  1. centos7grub配置文件及排错
  2. BZOJ2055 80人环游世界
  3. VM 7 下ubuntu安装vmtools
  4. linux内核启动时报错ubi0 error: validate_ec_hdr: bad data offset 256, expected 128
  5. linux文件目录分析之/etc目录
  6. 【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组
  7. html5 渐变色矩形,使用HTML5画布元素的矩形渐变
  8. 桌面 NAS 是什么
  9. Java实现的日历(原创)
  10. 【论文写作】课程指导平台的开发中系统部分代码如何写
  11. 医院管理数据库课程设计
  12. 用友python模块_最新用友NC6.5文件上传漏洞
  13. ubuntu格式化磁盘并挂载
  14. treap【来自蒟蒻的整理】
  15. Jmeter(五)bayboy录制时弹窗“当前页面的脚本发生错误”解决办法
  16. C# 連接mysql,連接后顯示多個線程池
  17. Equalize the Array
  18. Segmentation Fault 错误原因总结及解决方法
  19. 诺基亚java模拟器exe,无需模拟器!骁龙810手机成功运行Win10:可开exe程序
  20. java 雷达图_POI生成原生Excel-雷达图

热门文章

  1. 营养学和计算机交叉,营养配餐系统综述
  2. html类选择器使用在什么场景,你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)...
  3. 【Tool】常用 GIT 命令参阅
  4. mysql存储表情、微信小程序存储表情
  5. 基于Labview的水位水温控制系统——虚拟仪器实验设计报告
  6. 垃圾邮件分类-朴素贝叶斯算法
  7. 【C++基础知识】常成员函数,常引用
  8. 计算机网络——VLAN间路由配置
  9. 如何维护一个1000 IP的免费代理池
  10. 解决pytorch当中RuntimeError: expected scalar type Double but found Float的问题