標籤:高斯模糊 毛半透明效果 高斯模糊相容低版本 scriptintrinsicblur renderscript
一、利用android api實現高斯模糊關於高斯模糊網上已經有很多不錯的文章介紹了,在這裡就不重複了。先來看一個效果
效果已經看到了,就來看看怎麼實現的吧。首先是實現高斯模糊的核心代碼
<span style="white-space:pre"></span>public static Bitmap blurBitmap(Bitmap bitmap, Context context) {// 用需要建立高斯模糊bitmap建立一個空的bitmapBitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);// 初始化Renderscript,這個類提供了RenderScript context,在建立其他RS類之前必須要先建立這個類,他控制RenderScript的初始化,資源管理,釋放RenderScript rs = RenderScript.create(context);// 建立高斯模糊對象ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));// 建立Allocations,此類是將資料傳遞給RenderScript核心的主要方法,並制定一個支援型別儲存給定類型 Allocation allIn = Allocation.createFromBitmap(rs, bitmap);Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);// 設定模糊度blurScript.setRadius(25.f);// Perform the RenderscriptblurScript.setInput(allIn);blurScript.forEach(allOut);// Copy the final bitmap created by the out Allocation to the outBitmapallOut.copyTo(outBitmap);// recycle the original bitmapbitmap.recycle();// After finishing everything, we destroy the Renderscript.rs.destroy();return outBitmap;}然後是調用部分
<span style="white-space:pre"></span>public static Bitmap getBlurBitmap(View rootView, Context context) {try {if (rootView == null || context == null) {return null;}rootView.setDrawingCacheEnabled(true);Bitmap drawingCache = rootView.getDrawingCache();Bitmap bgBitmap = Bitmap.createBitmap(drawingCache);return BitmapUtil.blurBitmap(bgBitmap, context);} catch (Exception e) {e.printStackTrace();}return null;}這樣就可以就實現了高斯模糊效果,再將模糊效果顯示在介面上就可以了。二、相容低版本android有一個很麻煩的東西就是需要相容的版本很多,按照上面的方式實現了,在4.2及以上的版本就可以輕鬆出效果了,但是在低版本就會出異常:java.lang.NoClassDefFoundError: android.renderscript.ScriptIntrinsicBlur。導致這個問題就是因為這個api不能向下相容,現在我們就來解決這個問題。其實google早就提供了方案,我們只需要使用就好了。1、引入renderscript-v8.jar(將jar包放在libs目錄下,add to build path,一般只需要引入就可以)如果只加入了jar包,工程不會報錯,但是運行就會有問題:android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library:java.lang.UnsatisfiedLinkError: Couldn‘t load RSSupport: findLibrary returned null;從錯誤中可以看出就是沒有找到jni library2、在libs目錄下分別建三個目錄:armeabi-v7a、mips、x86,然後將librsjni.so和libRSSupport.so分別放到對應的目錄下就可以了
注:這些資源都是在sdk中包含,我的是在:sdk\build-tools\android-4.4.2\renderscript,你們可以找找你們自己的目錄到這裡就可以完美的相容4.2以下的版本了。三、說明1、因為公司一直還在用eclipse,所以這套解決方案也是在eclipse上面的,android studio應該比這個還簡單,具體可以參考:點擊開啟連結2、網上也有很多種方式來實現高斯模糊,我個人也嘗試了些,但是效果都沒有ScriptIntrinsicBlur,因為google的RenderScript具有很高效的圖形能力,有關RenderScript想深入瞭解的同學請自行google
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
android api實現高斯模糊,且相容低版本