对图片做高斯模糊

一. 简介

对图片做高斯模糊,有非常多的方法

高斯模糊的计算量很大,为减少计算时间,有两种优化途径:

1.使用render script,并对高斯算法做优化

2.使用jni,在c层对图片做处理

后者的优点是兼容android 1.x,前者只能在android 2.2以上版本才能运行

对我们来说,使用render script就好了

注意:模糊半径,根据原图尺寸设置,一般设置为原图尺寸的15%-30%效果比较好,例如

原图大小 540*960px                                               radius = 50px                                         radius = 100px

原图大小 200*200px                                   radius = 20px                                 radius = 40px                            radius = 60px

二. 类介绍

即使是使用render script,做高斯模糊的方法也有很多种,

在此,推荐两种方法:

1.使用google原生代码中的高斯模糊类ScriptIntrinsicBlur,radius 范围为 1-25px

2.使用 kikoso 整理的stack 高斯算法,radius 范围为 1-254px

我对这两种方法都做了封装,方便大家调用,一共提供了三个类,

RSGaussianBlur(使用google原生代码中的高斯模糊类ScriptIntrinsicBlur)

RSStackBlur_kikoso(使用 kikoso 整理的stack 高斯算法)

这两个类都implement了IBlur 接口,

publicinterfaceIBlur {

/**

* 给定一个bitmap,以及模糊半径,对图片做模糊后返回一张模糊后的bitmap

* 一般来说,返回的bitmap与给定的bitmap不是同一个,你必须自己回收这个新的bitmap

* 因为render script限制,返回的bitmap宽度会是4的倍数,

* 例如,如果原图宽度为202px,返回的bitmap宽度为200px

*/

publicBitmap blur(intradius, Bitmapin);

/**

* 给定一个bitmap,以及模糊半径,对图片做模糊后返回一张模糊后的bitmap

* 一般来说,返回的bitmap与给定的bitmap不是同一个,你必须自己回收这个新的bitmap

*@paraminSampleSize 如果大于1,先压缩原图,然后做模糊,返回的新bitmap大小比原图小,

*                                       如果小于等于1,则忽略该参数

*            例如,inSampleSize 为 4,新建一个bitmap,宽高各为原图1/4,并将宽度调整为4的倍数,

*                       同时使用新的模糊半径 radius/4, 对新bitmap 做模糊后返回这个新bitmap

*  使用这个类有两个好处:

*  1. 反正是模糊图,先压缩再模糊,效果基本一样,但是时间消耗大量减少,建议 inSampleSize为4

*      例如,原图宽度小于1080px,inSampleSize为4,原图宽度到达1440px,取6或8

*  2. 对RSGaussianBlur类,可使用blur(100,in,  4);,从而突破了半径不能超过25px的限制

*/

publicBitmap blur(intradius, Bitmapin,intinSampleSize);

/**

* 使用完类后,必须调用该方法释放render script资源,

* 否则每次new一个新对象,有增加1个新的render script线程和占用一堆资源

* 至于返回的bitmap,由你自己管理,在此并没有去释放那个bitmap

*/

publicvoidrecycle();

/**

* 获取你上次调用 blur() 所花的时间

*/

publiclonggetTimeMs();

}

在模糊半径比较小的时候,你随便用哪个类都可以,

但是,如果模糊半径太大,你又不希望原图压缩太多的话,使用RSStackBlur_kikoso 更合适

例如,原图大小为1920*1080,模糊半径为100,使用这两个没什么区别

但是,1)如果原图为100*100,模糊半径为100,如果使用RSGaussianBlur,则必须设置inSampleSize参数为4,

即先将原图压缩为 24*25 的小图,然后做模糊,这将导致模糊出来的效果很差,因为压缩图太小,细节全没了

这种情况下必须用RSStackBlur_kikoso,设置inSampleSize参数为1,即不要压缩原图,反正它很小

三 类文件和用法

1.将下面压缩包中的几个文件copy到你的目录下

blur with renderscript v8.zip

并修改各个类的import为你的包名,

最后将stackblur_kikoso.rs文件中的

#pragmarsjava_package_name(com.monster.blur.algorithm)

修改为:

#pragmarsjava_package_name(你自己的包名)

2.在代码中调用即可

IBluriBlur=newRSGaussianBlur(this); 或IBluriBlur=newRSStackBlur_kikoso(this);

intradius= 60;

Bitmapin= ...;

intinSampleSize= 4;

iBlur.blur(radius,in,inSampleSize);// 在调用 iBlur.recycle()之前,可反复使用blur()函数

iBlur.recycle();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容