用过虾米音乐的都知道歌词界面的背景不是固定的,而是根据专辑图片动态生成的,一开始我的实现方式是将图片放大然后显示成背景,然后看起来就像是马赛克的界面,没有平滑的感觉,于是想到了将图片模糊化然后再设置成背景,就像下面这样的效果。

知道用模糊处理后,当然是先找现成的轮子了,了解了一下还真的有模糊处理的库文件,几个用的比较多的有Renderscript,FastBlur,从github上将代码下载下来后导入就出了错误,好像是需要用工具编译一下,可惜不会,就只有先放弃这种方式了,最后还是在stackoverflow上找到了模糊处理的代码,不是库文件,而是直接的一个方法,首先获取图片的Config,然后建立一个图片像素长宽乘积的数组,通过计算周边的平均rgb值来设置最终的像素。

/*** 模糊处理专辑图片 * @param sentBitmap* @param radius* @return*/public static Bitmap fastblur(Bitmap sentBitmap, int radius) {Bitmap 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]];
//原版是0xFF0000 0x00FF00 0x0000FF
//                sir[0] = (p & 0x660000) >> 16;
//                sir[1] = (p & 0x006600) >> 8;
//                sir[2] = (p & 0x000066);sir[0] = (p & 0xAA0000) >> 16;sir[1] = (p & 0x00AA00) >> 8;sir[2] = (p & 0x0000AA);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++) {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);}

中间有一段代码是与RGB为红绿蓝取与的运算,原版中是设置为OxFF0000,0x00FF00,0x0000FF,这样平均下来如果专辑颜色十分的白,最终的结果也会很白,会遮盖住进度条,按钮,所以将值 Ox660000,0x006600,0x000066,这样即使是白色的专辑显示的整体也是灰色,辨识度较高。其中两个参数一个是bitmap对象,一个是模糊程度,值越大越模糊。

Android仿虾米音乐播放器之专辑图片模糊处理相关推荐

  1. Android仿虾米音乐播放器之开篇介绍

    断断续续的写了好久,因为项目已经接近尾声了,所以要开源出来,一开始决定模仿虾米音乐是因为布局UI上比较喜欢,其中最困难的地方应该是多个播放页面的联动,通知,尾部栏,本地音乐选择栏,歌词页面,4个地方需 ...

  2. android 音乐播放器的状态栏通知,Android仿虾米音乐播放器之通知栏notification解析...

    通知栏notification是Android中一个很重要的组件,可以在顶部状态栏中存在,用户也可以通过此来操作应用,在Android中只有3.0以上的版本才加入了notification的按钮点击功 ...

  3. Android仿虾米音乐播放器之本地音乐获取

    Android系统为了一些常用的信息(如音乐.视频.图像.联系人等)内置了一系列的ContentProvider,所以我们可以通过这个来获取Anroid中本地音乐,首先得加入权限 <uses-p ...

  4. Android仿虾米音乐播放器之MediaPlayer使用

    MediaPlayer是Android中用来播放媒体文件的一个类,我们用其来播放音乐文件,先介绍用法. 首先MediaPlayer需要实例化对象,我们在onStratCommand中进行实例化. pr ...

  5. Android仿虾米音乐播放器之电话和耳机监听

    任何一个用户都不会希望在电话打来时,音乐依然在播放,这样或许用户马上就卸载了我们的app,另外当用户的耳机拨出时我们需要及时的停止音乐,因为拨出耳机这个动作可能不是用户主导的,或许是耳机的松动,或许是 ...

  6. Android仿虾米音乐播放器之service

    service就是后台服务,不同于activity在前台,虽然用户看不见,但是作用是很大的. 我们在service中先需要实例化mediaplayer对象,这个在上节中已经讲了,除此之外我们需要注册一 ...

  7. Android仿虾米音乐播放器之自定义进度条seekbar

    先上图吧,仿照写的进度条 很明显不是系统的自带的进度条,所以我们需要自定义来实现这个效果,先看看官方给的例子 <layer-list xmlns:android="http://sch ...

  8. android 音乐播放器专辑图片旋转,Android应用开发之简易、大气音乐播放器实现专辑倒影效果...

    今天要实现的功能是实现专辑倒影效果,这个功能已经属于图像处理方面的了,对图像处理我不怎么在行,等一下会介绍一个很实用的工具类,专门用来进行图像处理的.这个工具类不是我写的,我只是拿来用到自己的项目当中 ...

  9. android 音乐播放器专辑图片旋转,Android实现网易云音乐的旋转专辑View

    本文实例为大家分享了Android实现网易云音乐的旋转专辑View,供大家参考,具体内容如下 一.前言 最近做过 类似网易云音乐专辑唱片的效果,这里记录下开发思路,仅供参考.但需求不完全与网易云音乐一 ...

  10. 高仿QQ音乐之旋转专辑图片的实现—仿留声机效果

    前言:应个人毕业设计的需求,要做一款音乐播放器,其中一个页面效果就是仿照QQ音乐的播放界面做一个可旋转的圆形专辑图片,效果如下: 通过最终设计与实现,我们的效果如下: 这里要实现旋转的圆形图,我们首先 ...

最新文章

  1. SBB:无机肥对土壤中固氮菌丰度和群落结构的影响
  2. iOS开发之protocol和delegate
  3. XML转JSON的javascript代码
  4. Word 2007中隐藏段落和格式标记
  5. python的爬虫库_python做爬虫常用库
  6. Java 程序员必须掌握的 8 道数据结构面试题,你会几道
  7. spring 事物合并_Spring系列合并
  8. mysql 数据传输 定时,MySQL数据库定时备份的实现方法
  9. 性能测量工具类——TimeMeasureUtil TimeMeasureProxy
  10. websocket 业务提醒 .net_7年.NET 面试 Java 的尴尬历程
  11. WordPress登陆插件Erphplogin Pro QQ登陆/微博/微信登录/弹窗登录
  12. 【算法学习】【图像增强】基于拉普拉斯算子的图像锐化
  13. 2019年1月30日
  14. 谷歌浏览器无法登录账号
  15. 计算机组成原理期末复习
  16. Hexo 个人博客搭建完整版笔记
  17. AI从零开始之我们为什么要为了那个虚无缥缈的f而奋斗
  18. (zz)楚王何故好细腰
  19. Oracle11g创建、删除表空间语句
  20. 去中心化身份(DID)赛道——构建Web3的社交通行证

热门文章

  1. 微信授权+JS-SDK
  2. 安装Oracle 11g RAC R2 之Linux DNS 配置
  3. apiDoc之api接口文档生成
  4. 乌鲁木齐市建筑物矢量数据(Shp格式+带高度)
  5. 121道分布式面试题和答案
  6. 解决UE4官方文档C++API查询慢问题
  7. 无光驱软驱 DOS下 ISO镜像装系统全攻略
  8. 我们需要什么样的应急手册(佐岸)
  9. 宏基笔记本升级bios(2012-12-28-bd 写的日志迁移
  10. c执行cmd pdf2swf_PDF在线翻阅开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)【转】