Android RenderScript 簡單高效實現(xiàn)圖片的高斯模糊效果

高斯模糊(Gaussian blur)和毛玻璃效果(亦稱磨砂效果)帐偎,近兩年在移動端的UI設(shè)計上越來越流行蔗牡,特別是iOS手機(jī)上出現(xiàn)的較多痘煤,iOS系統(tǒng)也提供了相應(yīng)的API幫助開發(fā)人員分分鐘實現(xiàn)這兩個效果拨与。而Android系統(tǒng)則經(jīng)歷了一個漫長的探索過程哩治,對圖片的處理秃踩,從Java算法到NDK方式實現(xiàn)等,各種摸索層出不窮业筏。

值得欣慰的是憔杨,Google終于在API 11中引入了RenderScript,一個強(qiáng)大的圖片處理框架蒜胖,幫助Android開發(fā)人員專注于圖片處理算法而不是API的調(diào)度工作消别。使用RenderScript進(jìn)行圖片處理,還需要了解RenderScript Intrinsics台谢,一些可以幫助RenderScript快速實現(xiàn)各種圖片處理的操作類寻狂。比如ScriptIntrinsicBlur,可以簡單高效地幫助我們實現(xiàn)高斯模糊效果:

public Bitmap blurBitmap(Bitmap bitmap){
        
    //Let's create an empty bitmap with the same size of the bitmap we want to blur
    Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
        
    //Instantiate a new Renderscript
    RenderScript rs = RenderScript.create(getApplicationContext());
        
    //Create an Intrinsic Blur Script using the Renderscript
    ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        
    //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps
    Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
    Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);
        
    //Set the radius of the blur: 0 < radius <= 25
    blurScript.setRadius(25.0f);
        
    //Perform the Renderscript
    blurScript.setInput(allIn);
    blurScript.forEach(allOut);
        
    //Copy the final bitmap created by the out Allocation to the outBitmap
    allOut.copyTo(outBitmap);
        
    //recycle the original bitmap
    bitmap.recycle();
        
    //After finishing everything, we destroy the Renderscript.
    rs.destroy();
        
    return outBitmap;   
        
}

通過設(shè)置模糊半徑(radius)的大小來控制圖片的清晰度朋沮,簡短的幾行代碼輕松實現(xiàn)圖片的高斯模糊處理蛇券,我們看一下radius等于最大值25時的圖片模糊效果:

原圖效果:


RenderScript-Blur-Before

高斯模糊:


RenderScript-Blur-After

注意:ScriptIntrinsicBlur的相關(guān)方法只支持API 17及以上版本的系統(tǒng),為了兼容舊版本,Google供了support.v8包纠亚,在使用RenderScript和Intrinsics類時塘慕,引入v8包中的相關(guān)類即可:

import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.RenderScript;
import android.support.v8.renderscript.ScriptIntrinsicBlur;

同時,在app/build.gradle文件的defaultConfig配置中菜枷,添加如下兩行內(nèi)容即可:

defaultConfig {
    ......
    renderscriptTargetApi 19
    renderscriptSupportModeEnabled  true
}

在設(shè)計上巧妙地運(yùn)用高斯模糊往往能達(dá)到出乎意料的體驗效果苍糠,比如大神daimajia就利用RenderScript和NineOldAndroids做了一個比較有創(chuàng)意的UI交互,開源庫為:AndroidViewHover啤誊,效果如下岳瞭,感興趣的同學(xué)可以一探究竟:

daimajia-AndroidViewHover.gif

關(guān)于Android平臺的圖片模糊處理,在GitHub上有一些較為優(yōu)秀的開源類庫蚊锹,筆者整理了一些瞳筏,推薦給大家學(xué)習(xí)使用:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牡昆,隨后出現(xiàn)的幾起案子姚炕,更是在濱河造成了極大的恐慌,老刑警劉巖丢烘,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柱宦,死亡現(xiàn)場離奇詭異,居然都是意外死亡播瞳,警方通過查閱死者的電腦和手機(jī)肠套,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門鸿捧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事鸡典√撞牛” “怎么了乎完?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵掰读,是天一觀的道長。 經(jīng)常有香客問我躺屁,道長肯夏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任犀暑,我火速辦了婚禮熄捍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘母怜。我一直安慰自己,他們只是感情好缚柏,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布苹熏。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轨域。 梳的紋絲不亂的頭發(fā)上袱耽,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音干发,去河邊找鬼朱巨。 笑死,一個胖子當(dāng)著我的面吹牛枉长,可吹牛的內(nèi)容都是我干的冀续。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼必峰,長吁一口氣:“原來是場噩夢啊……” “哼洪唐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吼蚁,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凭需,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肝匆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粒蜈,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年旗国,在試婚紗的時候發(fā)現(xiàn)自己被綠了枯怖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粗仓,死狀恐怖嫁怀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情借浊,我是刑警寧澤塘淑,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站蚂斤,受9級特大地震影響存捺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜曙蒸,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一捌治、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纽窟,春花似錦肖油、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽视搏。三九已至,卻和暖如春县袱,著一層夾襖步出監(jiān)牢的瞬間浑娜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工式散, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留筋遭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓暴拄,卻偏偏與公主長得像漓滔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子揍移,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容