Android 系統(tǒng)自帶的圖片模糊效果 RenderScript

前言

與目前市場上的其他移動平臺相比,基于 Java 語言的 Android 系統(tǒng)在執(zhí)行計算密集型(Computationally intensive)任務(wù)時是很慢的。為此,Android 系統(tǒng)提供了 RenderScript 這個框架,該框架可以充分利用設(shè)備的多核性能來高效的執(zhí)行計算算法。然而,早期的 RenderScript 僅支持 Android 4.3 及以上版本。不過幸運的是,后面 Google 又推出了 RenderScript 的兼容包,使其可以在 Android 2.2 及以上的系統(tǒng)中正常執(zhí)行。

集成 RenderSript Support Library

如果你還在使用 Eclipse + ADT 作為你的開發(fā)環(huán)境,那么要想集成 RenderScriprt Support Library 到你的工程還是比較麻煩的。所以在這里我先假定你的開發(fā)環(huán)境是 Android Studio,Eclipse 使用者則請另行查閱。

提到 Android Studio,那么自然而然的就會想到與它相綁定的一個自動化構(gòu)建工具 Gradle。沒錯,我們只需要在 module(如 app) 目錄下的 build.gradle 文件中添加如下兩行代碼即可,同時也不需要再申明其他任何的依賴。不過配置信息還是要根據(jù)你當(dāng)前使用的 Gradle 版本進行相應(yīng)修改:

Gradle version 0.14+

android {
    defaultConfig {
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }
}

Gradle version 0.13-

android {
    defaultConfig {
        renderscriptTargetApi 19
        renderscriptSuppoertMode true
    }
}

接下來只需同步一下工程我們就可以使用 RenderScript Support Library。這里需要注意的是,為了能使我們的工程運行在 Android 2.2及以上的設(shè)備,請正確選擇 android.support.v8.renderscript.* 包下的類。如果你不考慮兼容低版本,那直接使用 android.renderscript.* 就可以了。

使用 RenderScript Support Library 對我們的圖片進行模糊處理

完成上述的配置后,我們就可以使用 RenderSrcipt 來處理我們的圖片了。Talk is cheap,show me the code:

public class BlurBuilder {  
   private static final float BLUR_RADIUS = 7.5F;

    public static Bitmap blur(Context context, Bitmap inputBitmap) {

    Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

    RenderScript renderScript = RenderScript.create(context);
    ScriptIntrinsicBlur scriptIntrinsicBlur =
        ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
    Allocation tmpIn = Allocation.createFromBitmap(renderScript, inputBitmap);
    Allocation tmpOut = Allocation.createFromBitmap(renderScript, outputBitmap);
    scriptIntrinsicBlur.setRadius(BLUR_RADIUS);
    scriptIntrinsicBlur.setInput(tmpIn);
    scriptIntrinsicBlur.forEach(tmpOut);
    tmpOut.copyTo(outputBitmap);

    return outputBitmap;
  }
}

上面代碼就簡單實現(xiàn)了將一個 Bitmap 資源進行模糊處理,然后我們就可以調(diào)用了:

ImageView ivPhoto = (ImageView) findViewById(R.id.iv_photo);
    BitmapDrawable bitmapDrawable =
        (BitmapDrawable) ContextCompat.getDrawable(getApplicationContext(), R.mipmap.ic_launcher);
    ivPhoto.setImageDrawable(new BitmapDrawable(getResources(),
        BlurBuilder.blur(getApplicationContext(), bitmapDrawable.getBitmap())));

最終效果如下:


參考文獻

  1. How to Use the Renderscript Support Library with Gradle-Based Android Projects
  2. How to Blur Images Efficiently with Android's RenderScript
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,176評論 25 708
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,890評論 2 45
  • 主管線格言# 主管線格言: 你不知道的東西可能不會傷到你,但你記不得的東西肯定會。(咨詢的奧秘 第113頁) 這是...
    HackerFollower閱讀 265評論 0 0
  • 獲取一個代碼倉庫 本地倉庫的遠程地址管理 為當(dāng)前分支設(shè)置對應(yīng)的遠程跟蹤分支 分支的操作 修改文件之后本地提交 獲取...
    zhaok閱讀 341評論 0 0
  • 桃李芬芳天,兩袖清風(fēng)挽。粉筆一支書年華,三尺堂臺卷。 傳道授業(yè)心,解惑迷津散。一片虔誠情懷舊,信仰初衷伴。
    Delia常青藤閱讀 1,806評論 7 16

友情鏈接更多精彩內(nèi)容