Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android api實現高斯模糊,且兼容低版本

android api實現高斯模糊,且兼容低版本

編輯:關於Android編程

一、利用android api實現高斯模糊

關於高斯模糊網上已經有很多不錯的文章介紹了,在這裡就不重復了。

效果已經看到了,就來看看怎麼實現的吧。首先是實現高斯模糊的核心代碼
	public static Bitmap blurBitmap(Bitmap bitmap, Context context) {

		// 用需要創建高斯模糊bitmap創建一個空的bitmap
		Bitmap 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 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;
	}
然後是調用部分
	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 library 2、在libs目錄下分別建三個目錄:armeabi-v7a、mips、x86,然後將librsjni.so和libRSSupport.so分別放到對應的目錄下就可以了 :這些資源都是在sdk中包含,我的是在:sdkuild-toolsandroid-4.4.2 enderscript,你們可以找找你們自己的目錄 到這裡就可以完美的兼容4.2以下的版本了。

三、說明

1、因為公司一直還在用eclipse,所以這套解決方案也是在eclipse上面的,android studio應該比這個還簡單,具體可以參考:點擊打開鏈接 2、網上也有很多種方式來實現高斯模糊,我個人也嘗試了些,但是效果都沒有ScriptIntrinsicBlur,因為google的RenderScript具有很高效的圖形能力,有關RenderScript想深入了解的同學請自行google

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved